92 lines
3.1 KiB
C++
92 lines
3.1 KiB
C++
#pragma once
|
|
#include "../architecture/Renderable.h"
|
|
#include "../Axis/Abs_Axis.h"
|
|
#include "../base/Style.h"
|
|
#include <cstdint>
|
|
namespace renderive {
|
|
struct Grid_Private;
|
|
/// @brief 网格线生成方式。
|
|
enum class Grid_Line_Mode : std::uint8_t {
|
|
/// @brief 使用坐标轴刻度生成网格。
|
|
Axis_Tick,
|
|
/// @brief 使用固定分段数生成网格。
|
|
Range_Division
|
|
};
|
|
/// @brief 网格构造属性。
|
|
struct Grid_Prop {
|
|
std::weak_ptr<Abs_Axis> domain_axis{};
|
|
std::weak_ptr<Abs_Axis> value_axis{};
|
|
bool domain_grid = true;
|
|
bool value_grid = true;
|
|
bool sub_grid = false;
|
|
Grid_Line_Mode line_mode = Grid_Line_Mode::Axis_Tick;
|
|
Range domain_range{};
|
|
Range value_range{};
|
|
int domain_divisions = 4;
|
|
int value_divisions = 4;
|
|
Pen domain_pen = Pen{Color{255, 255, 255, 40}};
|
|
Pen value_pen = Pen{Color{255, 255, 255, 40}};
|
|
Pen sub_pen = Pen{Color{255, 255, 255, 20}};
|
|
};
|
|
/// @brief 在两个坐标轴之间绘制网格线的图元。
|
|
class LIB_DECL Grid : public Renderable {
|
|
public:
|
|
/// @brief 绑定 X 轴。
|
|
PROP(std::shared_ptr<Abs_Axis>, domain_axis)
|
|
/// @brief 绑定 Y 轴。
|
|
PROP(std::shared_ptr<Abs_Axis>, value_axis)
|
|
/// @brief 是否绘制 X 轴方向网格。
|
|
PROP(bool, domain_grid)
|
|
/// @brief 是否绘制 Y 轴方向网格。
|
|
PROP(bool, value_grid)
|
|
/// @brief 是否绘制子网格。
|
|
PROP(bool, sub_grid)
|
|
/// @brief 网格线生成方式。
|
|
PROP(Grid_Line_Mode, line_mode)
|
|
/// @brief X 轴网格范围;为空时使用轴当前范围。
|
|
PROP(Range, domain_range)
|
|
/// @brief Y 轴网格范围;为空时使用轴当前范围。
|
|
PROP(Range, value_range)
|
|
/// @brief Range_Division 模式下 X 方向分段数。
|
|
PROP(int, domain_divisions)
|
|
/// @brief Range_Division 模式下 Y 方向分段数。
|
|
PROP(int, value_divisions)
|
|
/// @brief X 方向主网格画笔。
|
|
PROP(Pen, domain_pen)
|
|
/// @brief Y 方向主网格画笔。
|
|
PROP(Pen, value_pen)
|
|
/// @brief 子网格画笔。
|
|
PROP(Pen, sub_pen)
|
|
struct Builder;
|
|
/// @brief 创建网格图元。
|
|
Grid();
|
|
private:
|
|
Grid_Private* d();
|
|
Render_Object_Owner create_render_data() override;
|
|
Render_Object_Owner create_render_state() override;
|
|
Render_Object_Owner create_input_data() override;
|
|
};
|
|
/// @brief 网格构造器。
|
|
struct LIB_DECL Grid::Builder : Grid_Prop {
|
|
PROP_B(std::shared_ptr<Renderable>, parent)
|
|
PROP_B(std::shared_ptr<Abs_Axis>, domain_axis)
|
|
PROP_B(std::shared_ptr<Abs_Axis>, value_axis)
|
|
PROP_B(bool, domain_grid)
|
|
PROP_B(bool, value_grid)
|
|
PROP_B(bool, sub_grid)
|
|
PROP_B(Grid_Line_Mode, line_mode)
|
|
PROP_B(Range, domain_range)
|
|
PROP_B(Range, value_range)
|
|
PROP_B(int, domain_divisions)
|
|
PROP_B(int, value_divisions)
|
|
PROP_B(Pen, domain_pen)
|
|
PROP_B(Pen, value_pen)
|
|
PROP_B(Pen, sub_pen)
|
|
/// @brief 创建网格构造器。
|
|
Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Abs_Axis> domain_axis, std::shared_ptr<Abs_Axis> value_axis);
|
|
/// @brief 构建并返回网格对象。
|
|
std::shared_ptr<Grid> build();
|
|
std::shared_ptr<Renderable> parent{};
|
|
};
|
|
} // namespace renderive
|