Files
Renderive/YSGraphic_Core/plottable/Afterglow.h
T
2026-07-24 10:54:44 +08:00

73 lines
2.3 KiB
C++

#pragma once
#include "global.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();
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);
};
} // namespace YSG