Files
Renderive/YSGraphic_Core/plottable/Spectrum.h
T
2026-07-23 18:11:07 +08:00

117 lines
3.9 KiB
C++

#pragma once
#include "Hover_Info.h"
#include "Spectrum.h"
namespace YSG {
class Frequent_Axis;
struct Spectrum_Private;
class LIB_DECL Spectrum : public Renderable, public Hover_Info_Render_Able<Spectrum> {
public:
Spectrum_Private* d();
Render_Data* create_render_data() override;
Render_State* create_render_state() override;
Input_Data* create_input_data() override;
protected:
Spectrum();
friend struct Spectrum_Private;
friend struct Spectrum_Render_State;
friend struct Spectrum_Input_Data;
public:
PROP(Frequent_Axis*, frequent_axis)
PROP(Axis*, power_axis);
PROP(int, frequent_point_size);
PROP(Range, frequent_range);
PROP(double, middle_sweep_frequent);
PROP(Range, sweep_frequent_range);
PROP(bool, use_max_line);
PROP(bool, use_min_line);
PROP(bool, use_max_marker);
PROP(bool, use_min_marker);
PROP(bool, use_sweep_frequent_rect);
PROP(QBrush, max_brush);
PROP(QBrush, cur_brush);
PROP(QBrush, min_brush);
PROP(QPen, max_pen);
PROP(QPen, cur_pen);
PROP(QPen, min_pen);
PROP(QPen, select_marker_pen);
PROP(QPen, marker_pen);
PROP(QPen, middle_frequent_pen);
PROP(QBrush, sweep_rect_brush);
void give_data(const QVector<double>& lineData);
double get_power(double frequent, bool& ok, SRC = SRC::Edit);
void add_custom_marker(double frequent);
void add_custom_line_marker(double frequent);
void remove_custom_marker(double frequent);
void remove_current_marker(SRC = SRC::Edit);
void clear_all_custom_marker(SRC = SRC::Edit);
int select_line_marker_size(SRC = SRC::Edit);
int cur_select_marker_index(SRC = SRC::Edit);
void set_selected_line_marker(int markerIndex);
void select_next(SRC = SRC::Edit);
void un_select_marker(SRC = SRC::Edit);
void select_previous(SRC = SRC::Edit);
double get_mark_frequent(int markIndex, SRC = SRC::Edit);
void set_marker_frequent(int markerIndex, double frequent);
void set_current_marker_frequent(double frequent);
struct Builder;
};
struct Spectrum_PROP {
Frequent_Axis* frequent_axis{};
Axis* power_axis{};
int frequent_point_size{};
Range frequent_range{};
double middle_sweep_frequent = 50;
Range sweep_frequent_range{40, 60};
bool use_max_line = false;
bool use_min_line = false;
bool use_max_marker = false;
bool use_min_marker = false;
bool use_sweep_frequent_rect = false;
QBrush max_brush;
QBrush cur_brush;
QBrush min_brush;
QPen max_pen = QPen(Qt::red);
QPen cur_pen = QPen(Qt::green);
QPen min_pen = QPen(Qt::white);
QPen select_marker_pen = QPen(Qt::darkBlue, 2);
QPen marker_pen = QPen(Qt::red);
QPen middle_frequent_pen = QPen(Qt::red);
QBrush sweep_rect_brush = QBrush(QColor(255, 255, 0, 100));
Spectrum_PROP() {
max_brush = QBrush(QColor(), Qt::NoBrush);
cur_brush = QBrush(QColor(), Qt::NoBrush);
min_brush = QBrush(QColor(), Qt::NoBrush);
}
};
struct LIB_DECL Spectrum::Builder : Spectrum_PROP{
PROP_B(Frequent_Axis *, frequent_axis)
PROP_B(Axis *, power_axis);
PROP_B(int, frequent_point_size);
PROP_B(Range, frequent_range);
PROP_B(double, middle_sweep_frequent);
PROP_B(Range, sweep_frequent_range);
PROP_B(bool, use_max_line);
PROP_B(bool, use_min_line);
PROP_B(bool, use_max_marker);
PROP_B(bool, use_min_marker);
PROP_B(bool, use_sweep_frequent_rect);
PROP_B(QBrush, max_brush);
PROP_B(QBrush, cur_brush);
PROP_B(QBrush, min_brush);
PROP_B(QPen, max_pen);
PROP_B(QPen, cur_pen);
PROP_B(QPen, min_pen);
PROP_B(QPen, select_marker_pen);
PROP_B(QPen, marker_pen);
PROP_B(QPen, middle_frequent_pen);
PROP_B(QBrush, sweep_rect_brush);
SETTER(QString, layerName, "plottable")
Builder(Frequent_Axis * frequent_axis, Axis * axis);
Spectrum * build();
protected:
Plot * plot{};
};
}