Files
Renderive/Core/plottable/Constellation_Diagram.h
T
2026-08-02 12:15:48 +08:00

83 lines
2.8 KiB
C++

#pragma once
#include "../base/Color.h"
#include "../base/Geometry.h"
#include "global.h"
namespace renderive {
/// @brief 星座图调制类型。
/// @brief PSK constellation phase-state count.
enum class Constellation_Diagram_Type : std::uint8_t {
/// @brief 8PSK 星座图。
/// @brief 4PSK constellation, commonly also called QPSK.
Psk4 = 4,
/// @brief 8PSK constellation.
Psk8 = 8,
/// @brief 16PSK constellation.
Psk16 = 16
};
struct Constellation_Diagram_Private;
class Grid;
/// @brief I/Q 星座图元。
class LIB_DECL Constellation_Diagram : public Renderable {
public:
/// @brief 创建 I/Q 星座图元。
Constellation_Diagram();
/// @brief 写入一个 I/Q 点。
void append_point(PointF pos);
/// @brief 绑定 I 轴。
PROP(std::shared_ptr<Axis>, i_axis)
/// @brief 绑定 Q 轴。
PROP(std::shared_ptr<Axis>, q_axis)
/// @brief I 轴星座范围。
PROP(Range, i_range)
/// @brief Q 轴星座范围。
PROP(Range, q_range)
/// @brief 输入点颜色。
PROP(Color, point_color)
/// @brief 锚点颜色。
PROP(Color, anchor_color)
/// @brief 输入点保留时间。
PROP(int, point_lifetime_ms)
/// @brief 星座调制类型。
PROP(Constellation_Diagram_Type, type)
/// @brief PSK constellation phase offset in radians.
PROP(double, phase_offset_radians)
/// @brief 设置坐标轴到星座图中心范围。
void fit_square_to_axes();
struct Builder;
private:
Constellation_Diagram_Private* d();
Render_Object_Owner create_render_data() override;
Render_Object_Owner create_render_state() override;
Render_Object_Owner create_input_data() override;
};
struct Constellation_Diagram_Prop {
std::weak_ptr<Axis> i_axis{};
std::weak_ptr<Axis> q_axis{};
Range i_range{0, 100};
Range q_range{0, 100};
Color point_color = Color::red();
Color anchor_color = Color::yellow();
int point_lifetime_ms = 1000;
Constellation_Diagram_Type type = Constellation_Diagram_Type::Psk8;
double phase_offset_radians = 0.0;
};
/// @brief 星座图构造器。
struct LIB_DECL Constellation_Diagram::Builder : Constellation_Diagram_Prop {
PROP_B(std::shared_ptr<Renderable>, parent)
PROP_B(std::shared_ptr<Axis>, i_axis)
PROP_B(std::shared_ptr<Axis>, q_axis)
PROP_B(Range, i_range)
PROP_B(Range, q_range)
PROP_B(Color, point_color)
PROP_B(Color, anchor_color)
PROP_B(int, point_lifetime_ms)
PROP_B(Constellation_Diagram_Type, type)
PROP_B(double, phase_offset_radians)
/// 创建星座图构造器。
Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Axis> i_axis, std::shared_ptr<Axis> q_axis);
/// 构建并返回星座图对象。
std::shared_ptr<Constellation_Diagram> build();
std::shared_ptr<Renderable> parent{};
};
} // namespace renderive