21 la::scalar min_x = 0, max_x = 1, step_x = 0.1;
22 bool major_ticks_x_show =
false;
23 bool minor_ticks_x_show =
false;
24 unsigned int minor_ticks_x_count = 4;
25 la::scalar min_y = 0, max_y = 1, step_y = 0.1;
26 bool major_ticks_y_show =
false;
27 bool minor_ticks_y_show =
false;
28 unsigned int minor_ticks_y_count = 4;
35 if (props.major_ticks_x_show) {
37 auto start = props.step_x * std::floor((props.min_x / props.step_x));
38 for (la::scalar X = start; X < props.max_x; X += props.step_x) {
39 auto pos_x = ((X - props.min_x) / (props.max_x - props.min_x));
41 x1 = $width.value_as_base_unit() * pos_x;
42 if (X >= props.min_x && X <= props.max_x) {
44 vg::line{}.x1(x1).y1(0).x2(x1).y2($height).stroke_width(2).stroke(
"#555555"_color)
48 if (props.minor_ticks_x_show) {
49 auto minor_step = props.step_x / (props.minor_ticks_x_count + 1);
50 for (la::scalar Y = minor_step; Y <= props.step_x - minor_step && (X + Y) < props.max_x;
52 pos_x = (((X + Y) - props.min_x) / (props.max_x - props.min_x));
54 x1 = $width.value_as_base_unit() * pos_x;
55 if ((X + Y) >= props.min_x && (X + Y) <= props.max_x) {
57 vg::line{}.x1(x1).y1(0).x2(x1).y2($height).stroke_width(1).stroke(
"#555555"_color)
64 if (props.major_ticks_y_show) {
66 auto start = props.step_y * std::floor((props.min_y / props.step_y));
67 for (la::scalar X = start; X < props.max_y; X += props.step_y) {
68 auto pos_y = ((X - props.min_y) / (props.max_y - props.min_y));
70 y1 = $height.value_as_base_unit() - $height.value_as_base_unit() * pos_y;
71 if (X >= props.min_y && X <= props.max_y) {
73 vg::line{}.x1(0).y1(y1).x2($width).y2(y1).stroke_width(2).stroke(
"#555555"_color)
77 if (props.minor_ticks_y_show) {
78 auto minor_step = props.step_y / (props.minor_ticks_y_count + 1);
79 for (la::scalar Y = minor_step; Y <= props.step_y - minor_step && (X + Y) < props.max_y;
81 pos_y = (((X + Y) - props.min_y) / (props.max_y - props.min_y));
83 y1 = $height.value_as_base_unit() - $height.value_as_base_unit() * pos_y;
84 if ((X + Y) >= props.min_y && (X + Y) <= props.max_y) {
86 vg::line{}.x1(0).y1(y1).x2($width).y2(y1).stroke_width(1).stroke(
"#555555"_color)
100 x_axis_ref_(&ref_->bottom_axis),
101 y_axis_ref_(&ref_->left_axis) {}
105 x_axis_ref_(&ref_->bottom_axis),
106 y_axis_ref_(&ref_->left_axis) {
118 major_ticks_show_ = show_ticks;
123 minor_ticks_show_ = show_ticks;
131 major_ticks_show_ = rhl.major_ticks_show_;
132 minor_ticks_show_ = rhl.minor_ticks_show_;
141 bool major_ticks_show_ =
false;
142 bool minor_ticks_show_ =
false;
154 friend typename C::event_handler_t;
166 x_axis_ref_ = &ref_->bottom_axis;
167 y_axis_ref_ = &ref_->left_axis;
171 template <
typename T1,
typename T2,
typename T3,
typename T4>
172 PlotGrid build_component(T1&& x, T2&& y, T3&& w, T4&& h)
const {
174 .min_x = x_axis_ref_->min_value_,
175 .max_x = x_axis_ref_->max_value_,
176 .step_x = x_axis_ref_->step_,
177 .major_ticks_x_show =
x_axis.major_ticks_show_,
178 .minor_ticks_x_show =
x_axis.minor_ticks_show_,
179 .minor_ticks_x_count = x_axis_ref_->minor_ticks_count_,
180 .min_y = y_axis_ref_->min_value_,
181 .max_y = y_axis_ref_->max_value_,
182 .step_y = y_axis_ref_->step_,
183 .major_ticks_y_show =
y_axis.major_ticks_show_,
184 .minor_ticks_y_show =
y_axis.minor_ticks_show_,
185 .minor_ticks_y_count = y_axis_ref_->minor_ticks_count_,
187 pa.x(std::forward<T1>(x)).y(std::forward<T2>(y)).width(std::forward<T3>(w)).height(std::forward<T4>(h));