修改一些

This commit is contained in:
2026-08-18 10:50:14 +08:00
parent 4581b3fc05
commit 182fa2232a
26 changed files with 695 additions and 126 deletions
+8 -1
View File
@@ -1,7 +1,10 @@
#include "Web_Plot_Session.h"
#include "Pixel_Frame.h"
#include "render_2D/scene/Render_Scene_2D.h"
#include <renderive/error/Error_Policy.hpp>
#include <memory>
#include <stdexcept>
#include <type_traits>
namespace renderive::web {
@@ -12,10 +15,14 @@ struct Web_Plot_Session::Impl {
Impl() { rebuild(); }
void rebuild() {
scene = Render_Scene_2D::Builder(
auto built_scene = Render_Scene_2D::Builder(
std::make_shared<Low_Latency_Render_Scene_2D_Strategy>())
.set<&Render_Scene_2D::Properties::viewport>(viewport)
.build();
if (!built_scene)
::renderive::error::unexpected<std::logic_error>(
"web plot scene topology validation failed");
scene = std::move(*built_scene);
scene->activate_view();
}
std::optional<Web_Response> handle(const Web_Event& event) {
+34 -15
View File
@@ -15,6 +15,8 @@
#include "render_2D/plottable/Waterfall.h"
#include "render_2D/scene/Render_Scene_2D.h"
#include <renderive/error/Error_Policy.hpp>
#include <algorithm>
#include <chrono>
#include <cmath>
@@ -22,6 +24,7 @@
#include <memory>
#include <numbers>
#include <span>
#include <stdexcept>
#include <string>
#include <vector>
@@ -225,11 +228,11 @@ public:
private:
void rebuild(Gallery_Frame_Mode mode) {
scene_ = Render_Scene_2D::Builder(make_strategy(mode))
auto scene_builder = Render_Scene_2D::Builder(make_strategy(mode));
scene_builder
.set<&Render_Scene_2D::Properties::viewport>(viewport_)
.set<&Render_Scene_2D::Properties::background>(Color{3, 8, 14, 255})
.build();
const auto root = scene_->root_renderable();
.set<&Render_Scene_2D::Properties::background>(Color{3, 8, 14, 255});
const auto root = scene_builder.root_renderable();
const bool numeric_domain =
case_id_ == "sweep_spectrum" || case_id_ == "constellation";
const bool time_domain = case_id_ == "frequency_trace";
@@ -244,7 +247,6 @@ private:
? Orientation::Horizontal
: Orientation::Vertical;
time_axis_ = Time_Axis::Builder{}
.set_object_name("Time Axis")
.set<&Time_Axis::Properties::orientation>(orientation)
.set<&Time_Axis::Properties::visible_count>(80)
.set<&Time_Axis::Properties::x>(left)
@@ -257,11 +259,12 @@ private:
.set<&Time_Axis::Properties::color>(Color{69, 221, 190, 255})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Time Axis")
.build();
scene_builder.add_renderable(time_axis_);
}
if (!time_domain && !numeric_domain) {
frequency_axis_ = Frequency_Axis::Builder{}
.set_object_name("Frequency Axis")
.set<&Frequency_Axis::Properties::orientation>(Orientation::Horizontal)
.set<&Frequency_Axis::Properties::coordinates>(Range{88'000'000.0, 108'000'000.0})
.set<&Frequency_Axis::Properties::x>(left)
@@ -272,10 +275,11 @@ private:
.set<&Frequency_Axis::Properties::drag>(true)
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Frequency Axis")
.build();
scene_builder.add_renderable(frequency_axis_);
} else if (numeric_domain) {
domain_axis_ = Axis::Builder{}
.set_object_name("Domain Axis")
.set<&Axis::Properties::orientation>(Orientation::Horizontal)
.set<&Axis::Properties::coordinates>(
case_id_ == "constellation" ? Range{-1.25, 1.25} : Range{0.0, 300.0})
@@ -287,11 +291,12 @@ private:
.set<&Axis::Properties::drag>(true)
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Domain Axis")
.build();
scene_builder.add_renderable(domain_axis_);
}
if (case_id_ != "waterfall") {
value_axis_ = Axis::Builder{}
.set_object_name("Value Axis")
.set<&Axis::Properties::orientation>(Orientation::Vertical)
.set<&Axis::Properties::coordinates>(
case_id_ == "constellation"
@@ -303,11 +308,12 @@ private:
.set<&Axis::Properties::color>(Color{118, 145, 184, 255})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Value Axis")
.build();
scene_builder.add_renderable(value_axis_);
}
if (case_id_ == "spectrum" || case_id_ == "selection_overlay") {
spectrum_ = Spectrum::Builder(frequency_axis_, value_axis_)
.set_object_name("Spectrum")
.set<&Spectrum::Properties::frequency_range>(Range{88'000'000.0, 108'000'000.0})
.set<&Spectrum::Properties::frequency_point_size>(512)
.set<&Spectrum::Properties::center_frequency>(98'000'000.0)
@@ -317,28 +323,31 @@ private:
.set<&Spectrum::Properties::min_pen>(Pen{Color{122, 162, 255, 255}, 1.2})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Spectrum")
.build();
scene_builder.add_renderable(spectrum_);
if (case_id_ == "selection_overlay") {
selection_ = Selection_Rectangle_Overlay::Builder(frequency_axis_, value_axis_)
.set_object_name("Selection Overlay")
.set<&Selection_Rectangle_Overlay::Properties::selection_brush>(
Brush{Color{23, 59, 102, 90}, Brush_Style::Solid})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Selection Overlay")
.build();
scene_builder.add_renderable(selection_);
}
} else if (case_id_ == "waterfall") {
waterfall_ = Waterfall::Builder(frequency_axis_, time_axis_)
.set_object_name("Waterfall")
.set<&Waterfall::Properties::frequency_range>(Range{88'000'000.0, 108'000'000.0})
.set<&Waterfall::Properties::power_range>(Range{-120.0, -20.0})
.set<&Waterfall::Properties::frequency_bin_count>(256)
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Waterfall")
.build();
scene_builder.add_renderable(waterfall_);
} else if (case_id_ == "afterglow") {
afterglow_ = Afterglow::Builder(frequency_axis_, value_axis_)
.set_object_name("Afterglow")
.set<&Afterglow::Properties::frequency_range>(Range{88'000'000.0, 108'000'000.0})
.set<&Afterglow::Properties::power_range>(Range{-120.0, -20.0})
.set<&Afterglow::Properties::frequency_point_size>(192)
@@ -346,34 +355,44 @@ private:
.set<&Afterglow::Properties::attenuation_rate>(0.18)
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Afterglow")
.build();
scene_builder.add_renderable(afterglow_);
} else if (case_id_ == "sweep_spectrum") {
sweep_ = Sweep_Spectrum::Builder(domain_axis_, value_axis_)
.set_object_name("Sweep Spectrum")
.set<&Sweep_Spectrum::Properties::frequency_range>(Range{0.0, 300.0})
.set<&Sweep_Spectrum::Properties::bins_per_block>(static_cast<int>(sweep_bins_per_block))
.set<&Sweep_Spectrum::Properties::block_count>(static_cast<int>(sweep_block_count))
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Sweep Spectrum")
.build();
scene_builder.add_renderable(sweep_);
} else if (case_id_ == "frequency_trace") {
trace_ = Frequency_Trace::Builder(time_axis_, value_axis_)
.set_object_name("Frequency Trace")
.set<&Frequency_Trace::Properties::pen>(Pen{Color{53, 230, 178, 255}, 2.0})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Frequency Trace")
.build();
scene_builder.add_renderable(trace_);
} else if (case_id_ == "constellation") {
constellation_ = Constellation_Diagram::Builder(domain_axis_, value_axis_)
.set_object_name("Constellation Diagram")
.set<&Constellation_Diagram::Properties::i_range>(Range{-1.25, 1.25})
.set<&Constellation_Diagram::Properties::q_range>(Range{-1.25, 1.25})
.set<&Constellation_Diagram::Properties::point_color>(Color{73, 230, 195, 255})
.set<&Constellation_Diagram::Properties::anchor_color>(Color{255, 209, 102, 255})
.set_paint_rely({root})
.set_render_rely({root})
.set_object_name("Constellation Diagram")
.build();
scene_builder.add_renderable(constellation_);
}
auto built_scene = scene_builder.build();
if (!built_scene)
::renderive::error::unexpected<std::logic_error>(
"gallery 2D scene topology validation failed");
scene_ = std::move(*built_scene);
scene_->activate_view();
}
void update_samples() {
+8 -1
View File
@@ -5,10 +5,13 @@
#include "../common/Pixel_Frame.h"
#include "render_3D/Render_Scene_3D.h"
#include <renderive/error/Error_Policy.hpp>
#include <algorithm>
#include <chrono>
#include <limits>
#include <memory>
#include <stdexcept>
#include <string>
#include <vector>
@@ -211,10 +214,14 @@ private:
visual_ = Point_Visual::Builder(std::move(points))
.set_object_name(case_id_ + " Points")
.build();
scene_ = Render_Scene_3D::Builder(visual_, make_strategy(mode))
auto built_scene = Render_Scene_3D::Builder(visual_, make_strategy(mode))
.set<&Render_Scene_3D::Properties::viewport>(extent_)
.set<&Render_Scene_3D::Properties::visual_family>(visual_family(case_id_))
.build();
if (!built_scene)
::renderive::error::unexpected<std::logic_error>(
"gallery 3D scene topology validation failed");
scene_ = std::move(*built_scene);
}
std::string case_id_;