Files
Renderive/Core/plottable/Frequency_Trace.h
T
2026-08-02 03:43:39 +08:00

48 lines
1.7 KiB
C++

#pragma once
#include "../Axis/Axis.h"
#include "../base/Color.h"
#include "../base/Style.h"
#include "../base/Time_Of_Day.h"
#include "global.h"
namespace renderive {
class Time_Axis;
struct Frequency_Trace_Private;
/// @brief 音频频率随时间变化的折线图元。
class LIB_DECL Frequency_Trace : public Renderable {
public:
/// @brief 创建音频频率图元。
Frequency_Trace();
/// @brief 写入指定 tick 对应的音频频率值。
void append_sample(int tick, double data);
/// @brief 写入指定时间对应的音频频率值。
void append_sample(Time_Of_Day time, double data);
/// @brief 绑定时间轴。
PROP(std::shared_ptr<Time_Axis>, time_axis)
/// @brief 绑定数值轴。
PROP(std::shared_ptr<Axis>, value_axis)
/// @brief 曲线颜色。
struct Builder;
private:
Frequency_Trace_Private* d();
Render_Object_Owner create_render_data() override;
Render_Object_Owner create_render_state() override;
Render_Object_Owner create_input_data() override;
};
struct Frequency_Trace_Prop {
std::weak_ptr<Time_Axis> time_axis;
std::weak_ptr<Axis> value_axis{};
Pen pen{.color = Color::yellow(), .width = 1.0};
};
struct LIB_DECL Frequency_Trace::Builder : Frequency_Trace_Prop {
PROP_B(std::shared_ptr<Time_Axis>, time_axis)
PROP_B(std::shared_ptr<Axis>, value_axis)
PROP_B(Color, color)
/// 创建音频频率构造器。
Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Time_Axis> time_axis, std::shared_ptr<Axis> value_axis);
/// 构建并返回音频频率对象。
std::shared_ptr<Frequency_Trace> build();
std::shared_ptr<Renderable> parent{};
Color color = Color::yellow();
};
} // namespace renderive