73 lines
2.3 KiB
C++
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
|