90 lines
3.0 KiB
C++
90 lines
3.0 KiB
C++
#pragma once
|
|
#include "../Renderable.h"
|
|
namespace YSG {
|
|
// const double delta = event->angleDelta().y();
|
|
// double wheelSteps = delta / 120.0;
|
|
// double factor = qPow(0.8, wheelSteps);
|
|
struct AbsAxis_Prop {
|
|
int x{};
|
|
int y{};
|
|
Qt::Orientation orientation = Qt::Horizontal;
|
|
int tick_length = 10;
|
|
int sub_tick_length = 5;
|
|
double coord_start = 0;
|
|
double coord_length = 20;
|
|
QColor color = Qt::white;
|
|
QChar format_char = 'f';
|
|
QLocale locale;
|
|
QString unit_text = "";
|
|
QFont unit_text_font;
|
|
QPen unit_text_pen = QPen(Qt::white);
|
|
QBrush unit_text_background_brush = QBrush(Qt::black);
|
|
int rotate = 0; // 不旋转
|
|
};
|
|
struct Abs_Axis_Private;
|
|
class LIB_DECL Abs_Axis : public Renderable {
|
|
public:
|
|
Abs_Axis_Private* d();
|
|
Render_Data* create_render_data() override;
|
|
Render_State* create_render_state() override;
|
|
Input_Data* create_input_data() override;
|
|
protected:
|
|
Abs_Axis();
|
|
friend struct Abs_Axis_Private;
|
|
friend struct Abs_Axis_Render_State;
|
|
friend struct Abs_Axis_Input_Data;
|
|
public:
|
|
PROP(int, x)
|
|
PROP(int, y)
|
|
PROP(Qt::Orientation, orientation)
|
|
PROP(size_t, pixel_size)
|
|
PROP(int, tick_length)
|
|
PROP(int, sub_tick_length)
|
|
PROP(QColor, color)
|
|
PROP(QChar, format_char)
|
|
PROP(QLocale, locale)
|
|
PROP(QString, unit_text)
|
|
PROP(QFont, unit_text_font)
|
|
PROP(QPen, unit_text_pen)
|
|
PROP(QBrush, unit_text_background_brush)
|
|
PROP(int, rotate) // 不旋转
|
|
[[nodiscard]] virtual double pixel_to_coord(double pixel, SRC src);
|
|
[[nodiscard]] virtual double coord_to_pixel(double coord, SRC src);
|
|
[[nodiscard]] virtual double get_tick_step(const Range& range);
|
|
[[nodiscard]] virtual int get_sub_tick_count(double tickStep);
|
|
virtual QString get_tick_label(double tick, SRC);
|
|
virtual QVector<double> create_tick_vector(double tickStep, const Range& range);
|
|
virtual QVector<double> create_sub_tick_vector(int subTickCount, const QVector<double>& ticks, const Range& range);
|
|
virtual QVector<QString> create_label_vector(const QVector<double>& ticks, SRC);
|
|
double start_coord(SRC = SRC::Edit);
|
|
double end_coord(SRC = SRC::Edit);
|
|
Range coord_range(SRC = SRC::Edit);
|
|
int get_pixel_point_size(Range range, SRC = SRC::Edit);
|
|
int get_pixel_point_size(SRC = SRC::Edit);
|
|
template <typename That>
|
|
struct BuilderT;
|
|
};
|
|
template <typename That>
|
|
struct Abs_Axis::BuilderT : protected AbsAxis_Prop {
|
|
PROP_BT(int, x)
|
|
PROP_BT(int, y)
|
|
PROP_BT(Qt::Orientation, orientation)
|
|
PROP_BT(size_t, pixel_size)
|
|
PROP_BT(int, tick_length)
|
|
PROP_BT(int, sub_tick_length)
|
|
PROP_BT(QColor, color)
|
|
PROP_BT(QChar, format_char)
|
|
PROP_BT(QLocale, locale)
|
|
PROP_BT(QString, unit_text)
|
|
PROP_BT(QFont, unit_text_font)
|
|
PROP_BT(QPen, unit_text_pen)
|
|
PROP_BT(QBrush, unit_text_background_brush)
|
|
PROP_BT(int, rotate) // 不旋转
|
|
SETTER_T(QString, layerName, "axis")
|
|
protected:
|
|
Plot* plot{};
|
|
size_t pixel_size{};
|
|
void set(Abs_Axis* ret);
|
|
};
|
|
}
|