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

72 lines
2.2 KiB
C++

#pragma once
#include "../Renderable.h"
#include "../Axis/Frequent_Axis.h"
namespace YSG {
class Frequent_Axis;
class Afterglow_Plot;
struct Afterglow_Private;
class LIB_DECL Afterglow : public Renderable {
public:
Afterglow_Private* d();
Render_Data* create_render_data() override;
Render_State* create_render_state() override;
Input_Data* create_input_data() override;
protected:
Afterglow();
friend struct Afterglow_Private;
friend struct Afterglow_Render_State;
friend struct Afterglow_Input_Data;
public:
PROP(Frequent_Axis*, frequent_axis)
PROP(Axis*, power_axis)
PROP(Range, frequent_range)
PROP(Range, power_range)
PROP(int, frequent_point_size)
PROP(int, power_point_size)
PROP(int, buffer_size)
PROP(bool, interpolate)
PROP(double, attenuation_rate)
PROP(int, init_strong_value)
void give_data(const QVector<double>& powerRangeData);
template <typename That>
struct BuilderT;
struct Builder;
};
struct Afterglow_Prop {
Frequent_Axis* frequent_axis{};
Axis* power_axis{};
Range frequent_range{0, 10};
Range power_range{0, 10};
int frequent_point_size{};
int power_point_size{};
int buffer_size{};
bool interpolate = true; //线性插值
double attenuation_rate = 0.2; //衰减率 衰减率为 1.0代表 不使用衰减
int init_strong_value = 100; //初始强度
};
template <typename That>
struct Afterglow::BuilderT {
PROP_BT(Frequent_Axis*, frequent_axis)
PROP_BT(Axis*, power_axis)
PROP_BT(Range, frequent_range)
PROP_BT(Range, power_range)
PROP_BT(int, frequent_point_size)
PROP_BT(int, power_point_size)
PROP_BT(int, buffer_size)
PROP_BT(bool, interpolate)
PROP_BT(double, attenuation_rate)
PROP_BT(int, init_strong_value)
SETTER_T(QString, layerName, "plottable")
void init(Frequent_Axis* frequent_axis, Axis* power_axis);
void set(Afterglow* t);
protected:
Plot* plot{};
};
struct LIB_DECL Afterglow::Builder : Afterglow::BuilderT<Afterglow::Builder>, Afterglow_Prop{
Afterglow * build();
Builder(Frequent_Axis * frequent_axis, Axis * power_axis);
};
}