改结构
This commit is contained in:
+63
-70
@@ -179,20 +179,19 @@ void resize_axes(Size viewport, Axes*... axes) {
|
||||
|
||||
std::shared_ptr<Plot> make_spectrum_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto frequency = *frequency_axis_builder(canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {-110.0, 0.0}, canvas).build();
|
||||
auto spectrum = *Impl<Spectrum>::Builder(scene.get(), frequency.get(), vertical.get())
|
||||
.set(&Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.set(&Spectrum::Prop::max_hold_visible, true)
|
||||
.build();
|
||||
spectrum->mark_dirty<Prepare_Data_Tag>();
|
||||
spectrum->mark_dirty<Paint_Tag>();
|
||||
Impl<Spectrum>::Builder spectrum_builder(frequency.get(), vertical.get());
|
||||
spectrum_builder.set(&Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.set(&Spectrum::Prop::max_hold_visible, true);
|
||||
auto spectrum = *spectrum_builder.build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(spectrum.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = spectrum.get(), frequency = frequency.get(), vertical = vertical.get()](const Plot_Event& event) {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, frequency, vertical);
|
||||
std::array<double, 256> samples{};
|
||||
@@ -238,18 +237,17 @@ std::shared_ptr<Plot> make_spectrum_plot(asio::any_io_executor executor) {
|
||||
|
||||
std::shared_ptr<Plot> make_frequency_trace_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto time = *time_axis_builder(
|
||||
Axis_Orientation::horizontal, {64.0, 370.0}, 620.0, canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {-1.2, 1.2}, canvas).build();
|
||||
auto trace = *Impl<Frequency_Trace>::Builder(scene.get(), time.get(), vertical.get()).build();
|
||||
trace->mark_dirty<Prepare_Data_Tag>();
|
||||
trace->mark_dirty<Paint_Tag>();
|
||||
auto trace = *Impl<Frequency_Trace>::Builder(time.get(), vertical.get()).build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(trace.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = trace.get(), time = time.get(), vertical = vertical.get(), tick = std::uint64_t{}](const Plot_Event& event) mutable {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, time, vertical);
|
||||
raw->append_sample(tick++, std::sin(event.time_milliseconds * 0.0025) * 0.8
|
||||
@@ -268,19 +266,18 @@ std::shared_ptr<Plot> make_frequency_trace_plot(asio::any_io_executor executor)
|
||||
|
||||
std::shared_ptr<Plot> make_sweep_spectrum_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto frequency = *frequency_axis_builder(canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {-110.0, 0.0}, canvas).build();
|
||||
auto sweep = *Impl<Sweep_Spectrum>::Builder(scene.get(), frequency.get(), vertical.get())
|
||||
.set(&Sweep_Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.build();
|
||||
sweep->mark_dirty<Prepare_Data_Tag>();
|
||||
sweep->mark_dirty<Paint_Tag>();
|
||||
Impl<Sweep_Spectrum>::Builder sweep_builder(frequency.get(), vertical.get());
|
||||
sweep_builder.set(&Sweep_Spectrum::Prop::frequency_range, Axis_Range{0.0, 100.0});
|
||||
auto sweep = *sweep_builder.build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(sweep.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = sweep.get(), frequency = frequency.get(), vertical = vertical.get()](const Plot_Event& event) {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, frequency, vertical);
|
||||
std::array<double, 64> values{};
|
||||
@@ -308,21 +305,20 @@ std::shared_ptr<Plot> make_sweep_spectrum_plot(asio::any_io_executor executor) {
|
||||
|
||||
std::shared_ptr<Plot> make_afterglow_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto frequency = *frequency_axis_builder(canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {-110.0, 0.0}, canvas).build();
|
||||
auto afterglow = *Impl<Afterglow>::Builder(scene.get(), frequency.get(), vertical.get())
|
||||
.set(&Afterglow::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
Impl<Afterglow>::Builder afterglow_builder(frequency.get(), vertical.get());
|
||||
afterglow_builder.set(&Afterglow::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.set(&Afterglow::Prop::power_range, Axis_Range{-110.0, 0.0})
|
||||
.set(&Afterglow::Prop::power_point_size, 96)
|
||||
.build();
|
||||
afterglow->mark_dirty<Prepare_Data_Tag>();
|
||||
afterglow->mark_dirty<Paint_Tag>();
|
||||
.set(&Afterglow::Prop::power_point_size, 96);
|
||||
auto afterglow = *afterglow_builder.build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(afterglow.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = afterglow.get(), frequency = frequency.get(), vertical = vertical.get()](const Plot_Event& event) {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, frequency, vertical);
|
||||
std::array<double, 192> values{};
|
||||
@@ -352,20 +348,19 @@ std::shared_ptr<Plot> make_afterglow_plot(asio::any_io_executor executor) {
|
||||
|
||||
std::shared_ptr<Plot> make_waterfall_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto frequency = *frequency_axis_builder(canvas).build();
|
||||
auto time = *time_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, canvas).build();
|
||||
auto waterfall = *Impl<Waterfall>::Builder(scene.get(), frequency.get(), time.get())
|
||||
.set(&Waterfall::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.set(&Waterfall::Prop::power_range, Axis_Range{-110.0, 0.0})
|
||||
.build();
|
||||
waterfall->mark_dirty<Prepare_Data_Tag>();
|
||||
waterfall->mark_dirty<Paint_Tag>();
|
||||
Impl<Waterfall>::Builder waterfall_builder(frequency.get(), time.get());
|
||||
waterfall_builder.set(&Waterfall::Prop::frequency_range, Axis_Range{0.0, 100.0})
|
||||
.set(&Waterfall::Prop::power_range, Axis_Range{-110.0, 0.0});
|
||||
auto waterfall = *waterfall_builder.build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(waterfall.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = waterfall.get(), frequency = frequency.get(), time = time.get(), tick = std::uint64_t{}](const Plot_Event& event) mutable {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, frequency, time);
|
||||
std::array<double, 192> values{};
|
||||
@@ -398,21 +393,20 @@ std::shared_ptr<Plot> make_waterfall_plot(asio::any_io_executor executor) {
|
||||
|
||||
std::shared_ptr<Plot> make_constellation_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto horizontal = *numeric_axis_builder(
|
||||
Axis_Orientation::horizontal, {64.0, 370.0}, 620.0, {-1.2, 1.2}, canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {-1.2, 1.2}, canvas).build();
|
||||
auto constellation = *Impl<Constellation_Diagram>::Builder(scene.get(), horizontal.get(), vertical.get())
|
||||
.set(&Constellation_Diagram::Prop::i_range, Axis_Range{-1.2, 1.2})
|
||||
.set(&Constellation_Diagram::Prop::q_range, Axis_Range{-1.2, 1.2})
|
||||
.build();
|
||||
constellation->mark_dirty<Prepare_Data_Tag>();
|
||||
constellation->mark_dirty<Paint_Tag>();
|
||||
Impl<Constellation_Diagram>::Builder constellation_builder(horizontal.get(), vertical.get());
|
||||
constellation_builder.set(&Constellation_Diagram::Prop::i_range, Axis_Range{-1.2, 1.2})
|
||||
.set(&Constellation_Diagram::Prop::q_range, Axis_Range{-1.2, 1.2});
|
||||
auto constellation = *constellation_builder.build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(constellation.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [raw = constellation.get(), horizontal = horizontal.get(), vertical = vertical.get()](const Plot_Event& event) {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, horizontal, vertical);
|
||||
const double phase = event.time_milliseconds * 0.003;
|
||||
@@ -435,18 +429,17 @@ std::shared_ptr<Plot> make_constellation_plot(asio::any_io_executor executor) {
|
||||
|
||||
std::shared_ptr<Plot> make_selection_overlay_plot(asio::any_io_executor executor) {
|
||||
constexpr Size canvas{720, 420};
|
||||
auto scene = *Scene_2D::Builder{}
|
||||
.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true)
|
||||
.build();
|
||||
auto horizontal = *numeric_axis_builder(
|
||||
Axis_Orientation::horizontal, {64.0, 370.0}, 620.0, {0.0, 100.0}, canvas).build();
|
||||
auto vertical = *numeric_axis_builder(
|
||||
Axis_Orientation::vertical, {64.0, 370.0}, -320.0, {0.0, 100.0}, canvas).build();
|
||||
auto selection = *Impl<Selection_Rectangle_Overlay>::Builder(scene.get(), horizontal.get(), vertical.get()).build();
|
||||
selection->mark_dirty<Prepare_Data_Tag>();
|
||||
selection->mark_dirty<Paint_Tag>();
|
||||
auto selection = *Impl<Selection_Rectangle_Overlay>::Builder(horizontal.get(), vertical.get()).build();
|
||||
Scene_2D::Builder scene_builder;
|
||||
scene_builder.set(&Render_Scene_2D::Prop::viewport, canvas)
|
||||
.set(&Render_Scene_2D::Prop::background, Color{7, 13, 24, 255})
|
||||
.set(&Render_Scene_2D::Prop::view_active, true);
|
||||
scene_builder.add_renderable(selection.get());
|
||||
auto scene = *scene_builder.build();
|
||||
auto update = [horizontal = horizontal.get(), vertical = vertical.get()](const Plot_Event& event) {
|
||||
resize_axes({static_cast<int>(event.width), static_cast<int>(event.height)}, horizontal, vertical);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user