结构优化

This commit is contained in:
2026-07-30 18:09:03 +08:00
parent a8b2d1202b
commit 78f42f892e
7 changed files with 123 additions and 110 deletions
-7
View File
@@ -1,10 +1,3 @@
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/Doxygen/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/Graphviz/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/LLVM/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/Cppcheck/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/lizard/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/cloc_tokei/export.cmake)
include(${CMAKE_SOURCE_DIR}/third_party/build_infra/CodeMetrics/export.cmake)
set(module_dir "${CMAKE_CURRENT_LIST_DIR}/module")
set(dir "${module_dir}/radio")
file(GLOB_RECURSE srcs "${dir}/*.c" "${dir}/*.cpp" "${dir}/*.h" "${dir}/*.hpp" "${dir}/*.qrc")
+2 -4
View File
@@ -58,10 +58,9 @@ void push_radio_data(Radio_Widget* rw) {
rw->water_fall->give_data(QTime::currentTime(), make_random_data(rw->water_fall->power_range(), rw->water_fall->frequency_point_size(), renderive::Memory_Domain::Waterfall));
}
{
int tick = rw->time_power->time_axis()->give_data(QTime::currentTime());
renderive::Range r = rw->time_power->value_axis()->coord_range();
renderive::Range nr = {r.center() - r.length() / 4, r.center() + r.length() / 4};
rw->time_power->give_data(tick, make_random_value(nr));
rw->time_power->give_data(QTime::currentTime(), make_random_value(nr));
}
{
auto r = rw->audio_spectrogram_plot->power_axis()->coord_range();
@@ -84,8 +83,7 @@ void push_radio_data_perf(Radio_Widget* rw) {
rw->water_fall->give_data(QTime::currentTime(), make_random_data({0, 160}, 1024, renderive::Memory_Domain::Waterfall));
}
{
int tick = rw->time_power->time_axis()->give_data(QTime::currentTime());
rw->time_power->give_data(tick, make_random_value({-6000, 6000}));
rw->time_power->give_data(QTime::currentTime(), make_random_value({-6000, 6000}));
}
{
rw->audio_spectrogram_plot->give_data(make_random_data({-6000, 6000}, 512, renderive::Memory_Domain::Spectrum));
+2 -4
View File
@@ -120,8 +120,7 @@ void Back_End::call_back_data_func(int channel, void *pData, int i_length)
auto mw = Main_Widget::instance();
auto rw = mw->radio_widget;
auto iw = mw->intermediate_frequency_widget;
int tick = rw->water_fall->time_axis()->give_data(QTime::currentTime());
rw->water_fall->give_data(tick, data); // 中频瀑布图
rw->water_fall->give_data(QTime::currentTime(), data); // 中频瀑布图
rw->spectrogram_line->give_data(data); // 中频频谱图
iw->afterglow->give_data(data); // 余晖图
@@ -159,8 +158,7 @@ void Back_End::call_back_data_func(int channel, void *pData, int i_length)
//std::cout << "audio == " << rbuf[256] << std::endl;
int tick = radio->time_power->time_axis()->give_data(QTime::currentTime());
radio->time_power->give_data(tick, rbuf[256]);
radio->time_power->give_data(QTime::currentTime(), rbuf[256]);
// 保存音频流
@@ -15,7 +15,7 @@
static renderive::Range frequent_range = {-12000, 12000};
static double max = 160;
QWidget* Intermediate_Frequency_Widget::create_spectrogram_power_plot() {
class Spectrum_Plot : public renderive::Plot {
class Spectrum_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -23,18 +23,21 @@ QWidget* Intermediate_Frequency_Widget::create_spectrogram_power_plot() {
std::shared_ptr<renderive::Spectrum> sp{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
object_name = "Spectrum_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto frequency_axis_cache = create_renderable_node(get_root_renderable(), "Frequency_Axis_Cache");
auto power_axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, Qt::Horizontal)
.set_tick_length(-10)
.set_coord_range(frequent_range)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
y_axis = renderive::Axis::Builder(power_axis_cache, Qt::Vertical)
.set_coord_range({160, 0})
.set_unit_text("功率")
.build();
@@ -79,7 +82,7 @@ QWidget* Intermediate_Frequency_Widget::create_spectrogram_power_plot() {
return w;
}
QWidget* Intermediate_Frequency_Widget::create_Afterglow_Plot() {
class Afterglow_Plot : public renderive::Plot {
class Afterglow_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -87,18 +90,21 @@ QWidget* Intermediate_Frequency_Widget::create_Afterglow_Plot() {
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
object_name = "Afterglow_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto frequency_axis_cache = create_renderable_node(get_root_renderable(), "Frequency_Axis_Cache");
auto power_axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, Qt::Horizontal)
.set_coord_range(frequent_range)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_use_drag(true)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
y_axis = renderive::Axis::Builder(power_axis_cache, Qt::Vertical)
.set_coord_range({160, 0})
.set_use_drag(true)
.build();
+94 -80
View File
@@ -1,4 +1,4 @@
#include "RadioWidget.h"
#include "RadioWidget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <vector>
@@ -22,16 +22,15 @@ static bool radio_show_performance_overlay() {
int value = qEnvironmentVariableIntValue("RADIO_SHOW_PERFORMANCE_OVERLAY", &ok);
return ok ? value != 0 : false;
}
static void configure_radio_plot_perf(renderive::Plot* plot) {
static void configure_radio_plot_perf(renderive::Latency_Eager_Plot* plot) {
if (!radio_mock_perf_mode())
return;
plot->set_max_render_fps(1000);
plot->set_render_schedule_mode(renderive::Plot_Render_Schedule_Mode::Feedback);
if (radio_show_performance_overlay())
plot->set_use_performance_shower(true);
}
QWidget* Radio_Widget::create_spectrogram_power_plot() {
class Spectrum_Plot : public renderive::Plot {
class Spectrum_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -39,20 +38,25 @@ QWidget* Radio_Widget::create_spectrogram_power_plot() {
std::shared_ptr<renderive::Spectrum> sp{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
configure_radio_plot_perf(this);
object_name = "Spectrum_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
// auto frequency_axis_cache = create_renderable_node(get_root_renderable(), "Frequency_Axis_Cache");
// auto power_axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
// frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
// power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
auto axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_coord_range(frequent_range)
.set_tick_length(-10)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
.set_coord_range({max, 0})
.set_unit_text("功率")
.build();
x_axis = renderive::Frequency_Axis::Builder(axis_cache, Qt::Horizontal)
.set_coord_range(frequent_range)
.set_tick_length(-10)
.build();
y_axis = renderive::Axis::Builder(axis_cache, Qt::Vertical)
.set_coord_range({max, 0})
.set_unit_text("功率")
.build();
sp = renderive::Spectrum::Builder(data, x_axis, y_axis)
.set_frequency_range(frequent_range)
.set_frequency_point_size(1024)
@@ -72,10 +76,10 @@ QWidget* Radio_Widget::create_spectrogram_power_plot() {
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = concat_widgets(
bw(cw(sp.get(), -1), "频谱图"),
bw(cw(x_axis.get()), "频率x轴"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(msr.get()), "多选框"));
bw(cw(sp.get(), -1), "频谱图"),
bw(cw(x_axis.get()), "频率x轴"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(msr.get()), "多选框"));
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
@@ -96,7 +100,7 @@ QWidget* Radio_Widget::create_spectrogram_power_plot() {
return w;
}
QWidget* Radio_Widget::create_water_fall_plot() {
class Water_Fall_Plot : public renderive::Plot {
class Water_Fall_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Time_Axis> y_axis{};
@@ -104,25 +108,28 @@ QWidget* Radio_Widget::create_water_fall_plot() {
std::shared_ptr<renderive::Waterfall> wf{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
configure_radio_plot_perf(this);
object_name = "Water_Fall_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto stream_cache = create_renderable_node(get_root_renderable(), "Waterfall_Stream_Cache");
auto data = create_renderable_node(stream_cache, "Data_Renderable");
auto time_axis = create_renderable_node(stream_cache, "Time_Axis_Renderable");
auto frequency_axis_cache = create_renderable_node(get_root_renderable(), "Frequency_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_coord_range(frequent_range)
.build();
y_axis = renderive::Time_Axis::Builder(axis, Qt::Vertical)
.set_time_point_size(100)
.build();
stream_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.set_coord_range(frequent_range)
.build();
y_axis = renderive::Time_Axis::Builder(time_axis, Qt::Vertical)
.set_time_point_size(100)
.build();
wf = renderive::Waterfall::Builder(data, x_axis, y_axis)
.set_frequency_range(frequent_range)
.set_frequency_point_size(1024)
.set_power_range({0, max})
// .set_time_point_size(100)
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
if (use_Performance_shower) set_use_performance_shower(true);
@@ -139,10 +146,10 @@ QWidget* Radio_Widget::create_water_fall_plot() {
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = concat_widgets(
bw(cw(wf.get(), -1), "瀑布图"),
bw(cw(x_axis.get()), "频率轴"),
bw(cw(y_axis.get()), "时间轴"),
bw(cw(msr.get()), "多选框"));
bw(cw(wf.get(), -1), "瀑布图"),
bw(cw(x_axis.get()), "频率轴"),
bw(cw(y_axis.get()), "时间轴"),
bw(cw(msr.get()), "多选框"));
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
@@ -154,7 +161,7 @@ QWidget* Radio_Widget::create_water_fall_plot() {
return w;
}
QWidget* Radio_Widget::create_audio_spectrogram_plot() {
class Spectrum_Plot : public renderive::Plot {
class Spectrum_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Frequency_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -162,20 +169,23 @@ QWidget* Radio_Widget::create_audio_spectrogram_plot() {
std::shared_ptr<renderive::Spectrum> sp{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
configure_radio_plot_perf(this);
object_name = "Spectrum_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto frequency_axis_cache = create_renderable_node(get_root_renderable(), "Frequency_Axis_Cache");
auto power_axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Frequency_Axis::Builder(axis, Qt::Horizontal)
.set_coord_range({-12000, 12000})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
.set_coord_range({12000, -12000})
.set_unit_text("功率").build();
frequency_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Frequency_Axis::Builder(frequency_axis_cache, Qt::Horizontal)
.set_coord_range({-12000, 12000})
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(power_axis_cache, Qt::Vertical)
.set_coord_range({12000, -12000})
.set_unit_text("功率").build();
sp = renderive::Spectrum::Builder(data, x_axis, y_axis)
.set_frequency_range({-12000, 12000})
.set_frequency_point_size(512)
@@ -195,10 +205,10 @@ QWidget* Radio_Widget::create_audio_spectrogram_plot() {
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = concat_widgets(
bw(cw(sp.get(), -1), "频谱图"),
bw(cw(x_axis.get()), "频率x轴"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(msr.get()), "多选框"));
bw(cw(sp.get(), -1), "频谱图"),
bw(cw(x_axis.get()), "频率x轴"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(msr.get()), "多选框"));
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
@@ -210,7 +220,7 @@ QWidget* Radio_Widget::create_audio_spectrogram_plot() {
return w;
}
QWidget* Radio_Widget::create_time_power_plot() {
class Audio_Plot : public renderive::Plot {
class Audio_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Time_Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -218,19 +228,23 @@ QWidget* Radio_Widget::create_time_power_plot() {
std::shared_ptr<renderive::Multi_Select_Rect> msr{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
configure_radio_plot_perf(this);
object_name = "Audio_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto stream_cache = create_renderable_node(get_root_renderable(), "Audio_Stream_Cache");
auto data = create_renderable_node(stream_cache, "Data_Renderable");
auto time_axis = create_renderable_node(stream_cache, "Time_Axis_Renderable");
auto power_axis_cache = create_renderable_node(get_root_renderable(), "Power_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Time_Axis::Builder(axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
.set_coord_range({12000, -12000})
.build();
stream_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
power_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Time_Axis::Builder(time_axis, Qt::Horizontal)
.set_tick_length(-10)
.set_sub_tick_length(-5)
.build();
y_axis = renderive::Axis::Builder(power_axis_cache, Qt::Vertical)
.set_coord_range({12000, -12000})
.build();
audio = renderive::Audio_Frequency::Builder(data, x_axis, y_axis)
.build();
msr = renderive::Multi_Select_Rect::Builder(overlay, x_axis, y_axis).build();
@@ -249,10 +263,10 @@ QWidget* Radio_Widget::create_time_power_plot() {
void contextMenuEvent(QContextMenuEvent* event) override {
if (!menu) {
auto ws = concat_widgets(
bw(cw(audio.get(), -1), "音频图"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(x_axis.get()), "时间轴"),
bw(cw(msr.get()), "多选框"));
bw(cw(audio.get(), -1), "音频图"),
bw(cw(y_axis.get()), "功率y轴"),
bw(cw(x_axis.get()), "时间轴"),
bw(cw(msr.get()), "多选框"));
menu = create_menu(this, ws);
}
menu->exec(event->globalPos());
@@ -284,22 +298,22 @@ Radio_Widget::Radio_Widget(QWidget* parent) : Base_Widget(parent) {
}
QColor orange(255, 165, 0);
progress_bar1 = new Progress_Bar({
Tick("S", Qt::black),
{"3", Qt::black},
{"6", Qt::black},
{"9", Qt::black},
{"20", Qt::black},
{"40", orange},
{"60", orange},
{"100", orange},
{"+160", Qt::red},
}, this);
Tick("S", Qt::black),
{"3", Qt::black},
{"6", Qt::black},
{"9", Qt::black},
{"20", Qt::black},
{"40", orange},
{"60", orange},
{"100", orange},
{"+160", Qt::red},
}, this);
progress_bar2 = new Progress_Bar({
{"1", Qt::black},
{"2", Qt::yellow},
{"3", Qt::red},
{">5", Qt::red},
}, this);
{"1", Qt::black},
{"2", Qt::yellow},
{"3", Qt::red},
{">5", Qt::red},
}, this);
progress_bar1->tick_space_w = 2.0f;
auto main = create_vbox_layout({}, this);
main->addStretch(1);
@@ -11,7 +11,7 @@
#include "../menu/BaseWidgetMenu.h"
#include "Renderive/base/Tool.h"
QWidget* Sweep_Frequency_Widget::create_spectrogram_power_plot() {
class Sweep_Frequent_Plot : public renderive::Plot {
class Sweep_Frequent_Plot : public renderive::Latency_Eager_Plot {
public:
std::shared_ptr<renderive::Axis> x_axis{};
std::shared_ptr<renderive::Axis> y_axis{};
@@ -19,15 +19,18 @@ QWidget* Sweep_Frequency_Widget::create_spectrogram_power_plot() {
std::shared_ptr<renderive::Sweep_Frequency> sf{};
QMenu* menu{};
void init() override {
Plot::init();
Latency_Eager_Plot::init();
object_name = "Axis_Test_Plot";
auto data = create_renderable_node(get_root_renderable(), "Data_Renderable");
auto axis = create_renderable_node(get_root_renderable(), "Axis_Renderable");
auto x_axis_cache = create_renderable_node(get_root_renderable(), "X_Axis_Cache");
auto y_axis_cache = create_renderable_node(get_root_renderable(), "Y_Axis_Cache");
auto overlay = create_renderable_node(get_root_renderable(), "Overlay_Renderable");
x_axis = renderive::Axis::Builder(axis, Qt::Horizontal)
x_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
y_axis_cache->set_cache_mode(renderive::Renderable_Cache_Mode::Local_Pixel);
x_axis = renderive::Axis::Builder(x_axis_cache, Qt::Horizontal)
.set_coord_range({0, 100})
.set_tick_length(-10).build();
y_axis = renderive::Axis::Builder(axis, Qt::Vertical)
y_axis = renderive::Axis::Builder(y_axis_cache, Qt::Vertical)
.set_coord_range({100, 0})
.set_tick_length(-10).build();
sf = renderive::Sweep_Frequency::Builder(data, x_axis, y_axis)
+1
View File
@@ -6,6 +6,7 @@
#include "./BackEnd/MainWidget.h"
#include "Application.h"
#include "Renderive/architecture/export.h"
#include "Renderive/plot/Plot.h"
int main(int argc, char* argv[]) {
Application app(argc, argv);
Application::setAttribute(Qt::AA_UseHighDpiPixmaps);