修复若干bug

This commit is contained in:
2026-08-02 12:02:47 +08:00
parent 3d027967b9
commit 64da97b7c7
9 changed files with 60 additions and 74 deletions
+23 -23
View File
@@ -4,69 +4,69 @@
#include "../base/Memory.h"
#include "Constellation_Diagram_p.h"
namespace renderive {
RENDERIVE_DEFINE_RENDERABLE_BINDING(Constellation_Diagram, Constellation_Diagram_Private, Planisphere_Render_State, Planisphere_Input_Data, "Planisphere")
RENDERIVE_DEFINE_RENDERABLE_BINDING(Constellation_Diagram, Constellation_Diagram_Private, Constellation_Diagram_State, Constellation_Diagram_Input_Data, "Planisphere")
std::shared_ptr<Axis> Constellation_Diagram::i_axis() {
return d()->edit_state_value(&Planisphere_Render_State::i_axis).lock();
return d()->edit_state_value(&Constellation_Diagram_State::i_axis).lock();
}
void Constellation_Diagram::set_i_axis(std::shared_ptr<Axis> value) {
d()->set_state_value(&Planisphere_Render_State::i_axis, std::weak_ptr<Axis>(value));
d()->set_state_value(&Constellation_Diagram_State::i_axis, std::weak_ptr<Axis>(value));
}
std::shared_ptr<Axis> Constellation_Diagram::q_axis() {
return d()->edit_state_value(&Planisphere_Render_State::q_axis).lock();
return d()->edit_state_value(&Constellation_Diagram_State::q_axis).lock();
}
void Constellation_Diagram::set_q_axis(std::shared_ptr<Axis> value) {
d()->set_state_value(&Planisphere_Render_State::q_axis, std::weak_ptr<Axis>(value));
d()->set_state_value(&Constellation_Diagram_State::q_axis, std::weak_ptr<Axis>(value));
}
Range Constellation_Diagram::i_range() {
return d()->edit_state_value(&Planisphere_Render_State::i_range);
return d()->edit_state_value(&Constellation_Diagram_State::i_range);
}
void Constellation_Diagram::set_i_range(Range value) {
if (value.length() == 0.0)
return;
d()->set_state_value(&Planisphere_Render_State::i_range, std::move(value));
d()->set_state_value(&Constellation_Diagram_State::i_range, std::move(value));
}
Range Constellation_Diagram::q_range() {
return d()->edit_state_value(&Planisphere_Render_State::q_range);
return d()->edit_state_value(&Constellation_Diagram_State::q_range);
}
void Constellation_Diagram::set_q_range(Range value) {
if (value.length() == 0.0)
return;
d()->set_state_value(&Planisphere_Render_State::q_range, std::move(value));
d()->set_state_value(&Constellation_Diagram_State::q_range, std::move(value));
}
Color Constellation_Diagram::point_color() {
return d()->edit_state_value(&Planisphere_Render_State::point_color);
return d()->edit_state_value(&Constellation_Diagram_State::point_color);
}
void Constellation_Diagram::set_point_color(Color value) {
d()->set_state_value(&Planisphere_Render_State::point_color, std::move(value));
d()->set_state_value(&Constellation_Diagram_State::point_color, std::move(value));
}
Color Constellation_Diagram::anchor_color() {
return d()->edit_state_value(&Planisphere_Render_State::anchor_color);
return d()->edit_state_value(&Constellation_Diagram_State::anchor_color);
}
void Constellation_Diagram::set_anchor_color(Color value) {
d()->set_state_value(&Planisphere_Render_State::anchor_color, std::move(value));
d()->set_state_value(&Constellation_Diagram_State::anchor_color, std::move(value));
}
int Constellation_Diagram::point_lifetime_ms() {
return d()->edit_state_value(&Planisphere_Render_State::point_lifetime_ms);
return d()->edit_state_value(&Constellation_Diagram_State::point_lifetime_ms);
}
void Constellation_Diagram::set_point_lifetime_ms(int value) {
d()->set_state_value(&Planisphere_Render_State::point_lifetime_ms, std::max(1, value));
d()->set_state_value(&Constellation_Diagram_State::point_lifetime_ms, std::max(1, value));
}
Constellation_Diagram_Type Constellation_Diagram::type() {
return d()->edit_state_value(&Planisphere_Render_State::type);
return d()->edit_state_value(&Constellation_Diagram_State::type);
}
void Constellation_Diagram::set_type(Constellation_Diagram_Type value) {
d()->set_state_value(&Planisphere_Render_State::type, value);
d()->set_state_value(&Constellation_Diagram_State::type, value);
}
double Constellation_Diagram::phase_offset_radians() {
return d()->edit_state_value(&Planisphere_Render_State::phase_offset_radians);
return d()->edit_state_value(&Constellation_Diagram_State::phase_offset_radians);
}
void Constellation_Diagram::set_phase_offset_radians(double value) {
d()->set_state_value(&Planisphere_Render_State::phase_offset_radians, value);
d()->set_state_value(&Constellation_Diagram_State::phase_offset_radians, value);
}
void Constellation_Diagram::append_point(PointF pos) {
if (!ok())
return;
Render_Input_Lease<Constellation_Diagram_Private, Planisphere_Input_Data> input(d());
Render_Input_Lease<Constellation_Diagram_Private, Constellation_Diagram_Input_Data> input(d());
input->push(pos);
}
Constellation_Diagram::Builder::Builder(std::shared_ptr<Renderable> parent, std::shared_ptr<Axis> i_axis, std::shared_ptr<Axis> q_axis) {
@@ -84,7 +84,7 @@ std::shared_ptr<Constellation_Diagram> Constellation_Diagram::Builder::build() {
auto ret = renderive::make_shared<Constellation_Diagram>();
ret->init(parent);
Constellation_Diagram_Private* pd = ret->d();
Planisphere_Render_State* sc = reinterpret_cast<Planisphere_Render_State*>(pd->state(State_Edit));
Constellation_Diagram_State* sc = reinterpret_cast<Constellation_Diagram_State*>(pd->state(State_Edit));
PROP_R(std::weak_ptr<Axis>, i_axis)
PROP_R(std::weak_ptr<Axis>, q_axis)
PROP_R(Range, i_range)
@@ -92,7 +92,7 @@ std::shared_ptr<Constellation_Diagram> Constellation_Diagram::Builder::build() {
PROP_R(Color, point_color)
PROP_R(Color, anchor_color)
PROP_R(int, point_lifetime_ms)
PROP_R(Planisphere_Type, type)
PROP_R(Constellation_Diagram_Type, type)
PROP_R(double, phase_offset_radians)
if (sc->i_range.length() == 0.0)
sc->i_range = {0.0, 1.0};
@@ -102,7 +102,7 @@ std::shared_ptr<Constellation_Diagram> Constellation_Diagram::Builder::build() {
return ret;
}
void Constellation_Diagram::fit_square_to_axes() {
Planisphere_Render_State* s = reinterpret_cast<Planisphere_Render_State*>(d()->state(State_Edit));
Constellation_Diagram_State* s = reinterpret_cast<Constellation_Diagram_State*>(d()->state(State_Edit));
auto i_axis = s->i_axis.lock();
auto q_axis = s->q_axis.lock();
if (!i_axis || !q_axis)