改造一些

This commit is contained in:
2026-08-12 00:06:44 +08:00
parent aca480d988
commit abd1b595c7
57 changed files with 883 additions and 732 deletions
+101 -56
View File
@@ -23,6 +23,19 @@
#include <vector>
namespace renderive::web {
namespace {
template <class Update>
void update_axis_state(const std::shared_ptr<Abs_Axis>& axis, Update&& update) {
if (const auto numeric = std::dynamic_pointer_cast<Axis>(axis)) {
numeric->update([&](Axis_Properties& state) {
std::forward<Update>(update)(static_cast<Axis_Base_Properties&>(state));
});
} else if (const auto time = std::dynamic_pointer_cast<Time_Axis>(axis)) {
time->update([&](auto& state) {
std::forward<Update>(update)(static_cast<Axis_Base_Properties&>(state));
});
}
}
double number_value(const Gallery_State& state, std::string_view id) {
return std::get<double>(gallery_property_value(state, id));
}
@@ -379,15 +392,23 @@ public:
return plot_.view_active() ? "Plot view 已激活" : "Plot view 已停用;可再次执行恢复";
}
if (request.id == "axis_set_start") {
if (numeric_domain_axis_)
numeric_domain_axis_->set_coord_start(number_value(state_, "coord_origin"));
return "已通过 Axis::set_coord_start 应用当前起点";
if (numeric_domain_axis_) {
const Range range = numeric_domain_axis_->get<&Axis_Properties::coordinates>();
const double origin = number_value(state_, "coord_origin");
numeric_domain_axis_->set<&Axis_Properties::coordinates>(
Range{origin, origin + range.length()});
}
return "轴起点已写入 Axis_Properties 状态";
}
if (request.id == "axis_set_length") {
if (numeric_domain_axis_)
numeric_domain_axis_->set_coord_length(number_value(state_, "coord_target") -
number_value(state_, "coord_origin"));
return "已通过 Axis::set_coord_length 应用当前跨度";
if (numeric_domain_axis_) {
const Range range = numeric_domain_axis_->get<&Axis_Properties::coordinates>();
const double length = number_value(state_, "coord_target") -
number_value(state_, "coord_origin");
numeric_domain_axis_->set<&Axis_Properties::coordinates>(
Range{range.origin, range.origin + length});
}
return "轴跨度已写入 Axis_Properties 状态";
}
if (request.id == "axis_probe")
return "坐标映射、刻度步长、次刻度数与标签结果已刷新到遥测区";
@@ -700,18 +721,20 @@ public:
telemetry["performance_overlay_lines"] = snapshot->lines.size();
}
if (numeric_domain_axis_) {
const Range range = numeric_domain_axis_->coord_range();
const Axis_Transform transform = numeric_domain_axis_->transform();
const Range range = transform.coordinate_range;
const double center = range.center();
telemetry["axis"] = {
{"origin", range.origin}, {"target", range.target},
{"start_coord", numeric_domain_axis_->start_coord()},
{"end_coord", numeric_domain_axis_->end_coord()},
{"center_pixel", numeric_domain_axis_->coord_to_pixel(center)},
{"start_coord", range.origin},
{"end_coord", range.target},
{"center_pixel", transform.coord_to_pixel(center)},
{
"center_roundtrip", numeric_domain_axis_->pixel_to_coord(
numeric_domain_axis_->coord_to_pixel(center))
"center_roundtrip", transform.pixel_to_coord(
transform.coord_to_pixel(center))
},
{"pixel_samples", numeric_domain_axis_->pixel_sample_count()},
{"pixel_samples", static_cast<int>(transform.pixel_length) +
(transform.pixel_length > 0.0 ? 1 : 0)},
{"tick_step", numeric_domain_axis_->tick_step(range)},
{
"sub_tick_count", numeric_domain_axis_->sub_tick_count(
@@ -784,7 +807,9 @@ public:
}
if (case_id_ == "axis_lab") {
telemetry["axis_lab"] = {
{"domain_axis_pixel_samples", numeric_domain_axis_ ? numeric_domain_axis_->pixel_sample_count() : 0},
{"domain_axis_pixel_samples", numeric_domain_axis_
? static_cast<int>(numeric_domain_axis_->transform().pixel_length) + 1
: 0},
{"time_axis_point_count", time_axis_ ? time_axis_->time_point_count() : 0}
};
}
@@ -830,7 +855,9 @@ public:
else
telemetry["data_shape"] = {
{"input_points", 0},
{"rendered_elements", numeric_domain_axis_ ? numeric_domain_axis_->pixel_sample_count() : 0},
{"rendered_elements", numeric_domain_axis_
? static_cast<int>(numeric_domain_axis_->transform().pixel_length) + 1
: 0},
{"unit", "axis samples"}
};
return telemetry.dump();
@@ -1231,66 +1258,84 @@ private:
const int y_offset = integer_value(state_, "axis_y_offset");
const double length_rate = number_value(state_, "axis_length_percent") / 100.0;
if (const auto horizontal = horizontal_axis()) {
horizontal->set_x(left + x_offset);
horizontal->set_y(top + height + y_offset);
horizontal->set_pixel_length(static_cast<std::size_t>(
std::max(1, static_cast<int>(std::lround(width * length_rate)))));
update_axis_state(horizontal, [&](Axis_Base_Properties& axis) {
axis.x = left + x_offset;
axis.y = top + height + y_offset;
axis.pixel_length = static_cast<std::size_t>(
std::max(1, static_cast<int>(std::lround(width * length_rate))));
});
}
if (const auto vertical = vertical_axis()) {
vertical->set_x(left + x_offset);
vertical->set_y(top + y_offset);
vertical->set_pixel_length(static_cast<std::size_t>(
std::max(1, static_cast<int>(std::lround(height * length_rate)))));
update_axis_state(vertical, [&](Axis_Base_Properties& axis) {
axis.x = left + x_offset;
axis.y = top + y_offset;
axis.pixel_length = static_cast<std::size_t>(
std::max(1, static_cast<int>(std::lround(height * length_rate))));
});
}
if (case_id_ == "axis_lab" && time_axis_) {
time_axis_->set_x(left);
time_axis_->set_y(26);
time_axis_->set_pixel_length(static_cast<std::size_t>(width));
time_axis_->update([&](auto& axis) {
axis.x = left;
axis.y = 26;
axis.pixel_length = static_cast<std::size_t>(width);
});
}
}
void apply_axis_style(const std::shared_ptr<Abs_Axis>& axis) {
if (!axis)
return;
axis->set_tick_length(integer_value(state_, "tick_length"));
axis->set_sub_tick_length(integer_value(state_, "sub_tick_length"));
axis->set_color(color_from_hex(string_value(state_, "axis_color")));
axis->set_locale({string_value(state_, "decimal_separator").front()});
axis->set_unit_text(string_value(state_, "unit_text"));
axis->set_unit_text_font({
number_value(state_, "unit_font_size"),
integer_value(state_, "unit_font_weight"),
bool_value(state_, "unit_font_italic")
update_axis_state(axis, [&](Axis_Base_Properties& value) {
value.tick_length = integer_value(state_, "tick_length");
value.sub_tick_length = integer_value(state_, "sub_tick_length");
value.color = color_from_hex(string_value(state_, "axis_color"));
value.locale = {string_value(state_, "decimal_separator").front()};
value.unit_text = string_value(state_, "unit_text");
value.unit_text_font = {
number_value(state_, "unit_font_size"),
integer_value(state_, "unit_font_weight"),
bool_value(state_, "unit_font_italic")
};
value.unit_text_pen = {color_from_hex(string_value(state_, "unit_pen_color"))};
value.unit_text_background_brush = {
color_from_hex(string_value(state_, "unit_background_color")),
Brush_Style::Solid
};
value.label_rotation_degrees = integer_value(state_, "label_rotation");
});
axis->set_unit_text_pen({color_from_hex(string_value(state_, "unit_pen_color"))});
axis->set_unit_text_background_brush(
{color_from_hex(string_value(state_, "unit_background_color")), Brush_Style::Solid});
axis->set_label_rotation_degrees(integer_value(state_, "label_rotation"));
}
void apply_axes() {
const bool horizontal = string_value(state_, "axis_orientation") == "Horizontal";
if (const auto main = horizontal_axis())
main->set_orientation(horizontal ? Orientation::Horizontal : Orientation::Vertical);
update_axis_state(main, [horizontal](Axis_Base_Properties& axis) {
axis.orientation = horizontal ? Orientation::Horizontal : Orientation::Vertical;
});
if (const auto other = vertical_axis())
other->set_orientation(horizontal ? Orientation::Vertical : Orientation::Horizontal);
update_axis_state(other, [horizontal](Axis_Base_Properties& axis) {
axis.orientation = horizontal ? Orientation::Vertical : Orientation::Horizontal;
});
apply_axis_style(horizontal_axis());
apply_axis_style(vertical_axis());
if (case_id_ == "axis_lab")
apply_axis_style(time_axis_);
if (numeric_domain_axis_) {
numeric_domain_axis_->set_coord_range({
number_value(state_, "coord_origin"),
number_value(state_, "coord_target")
numeric_domain_axis_->update([&](Axis_Properties& axis) {
axis.coordinates = {
number_value(state_, "coord_origin"),
number_value(state_, "coord_target")
};
axis.precision = std::clamp(integer_value(state_, "label_precision"), 0, 12);
axis.wheel = bool_value(state_, "use_wheel");
axis.drag = bool_value(state_, "use_drag");
});
numeric_domain_axis_->set_label_precision(integer_value(state_, "label_precision"));
numeric_domain_axis_->set_use_wheel(bool_value(state_, "use_wheel"));
numeric_domain_axis_->set_use_drag(bool_value(state_, "use_drag"));
}
if (time_axis_) {
time_axis_->set_visible_time_point_count(integer_value(state_, "time_visible_count"));
time_axis_->set_tick_label_spacing_px(integer_value(state_, "time_label_spacing"));
time_axis_->set_time_format(string_value(state_, "time_format"));
time_axis_->set_font({number_value(state_, "time_font_size"), 500, false});
time_axis_->set_newest_at_axis_start(bool_value(state_, "time_newest_at_start"));
time_axis_->update([&](auto& axis) {
axis.visible_count = std::max(2, integer_value(state_, "time_visible_count"));
axis.tick_label_spacing_px = std::max(0, integer_value(state_, "time_label_spacing"));
axis.format = string_value(state_, "time_format");
axis.unit_text_font = {number_value(state_, "time_font_size"), 500, false};
axis.newest_at_start = bool_value(state_, "time_newest_at_start");
});
}
apply_layout();
}
@@ -1415,7 +1460,7 @@ private:
sweep_->set<&Sweep_Spectrum::Properties::interpolation_mode>(line_mode(string_value(state_, "line_interpolation")));
}
if (trace_ && value_axis_)
value_axis_->set_coord_range({
value_axis_->set<&Axis_Properties::coordinates>(Range{
number_value(state_, "trace_value_min"),
number_value(state_, "trace_value_max")
});
@@ -1426,12 +1471,12 @@ private:
constellation_->set<&Constellation_Diagram::Properties::anchor_color>(color_from_hex(string_value(state_, "anchor_color")));
constellation_->set<&Constellation_Diagram::Properties::point_lifetime_ms>(integer_value(state_, "point_lifetime_ms"));
if (numeric_domain_axis_)
numeric_domain_axis_->set_coord_range({
numeric_domain_axis_->set<&Axis_Properties::coordinates>(Range{
number_value(state_, "i_origin"),
number_value(state_, "i_target")
});
if (value_axis_)
value_axis_->set_coord_range({
value_axis_->set<&Axis_Properties::coordinates>(Range{
number_value(state_, "q_origin"),
number_value(state_, "q_target")
});
+27 -27
View File
@@ -137,36 +137,36 @@ inline auto low_latency_fields() {
inline auto axis_fields() {
using T = Gallery_Axis_Properties;
return std::tuple{
select_property<&T::axis_orientation>("axis_orientation", "主轴方向", "Abs_Axis::set_orientation"),
number_property<&T::axis_x_offset>("axis_x_offset", "X 偏移", "Abs_Axis::set_x"),
number_property<&T::axis_y_offset>("axis_y_offset", "Y 偏移", "Abs_Axis::set_y"),
number_property<&T::axis_length_percent>("axis_length_percent", "轴长百分比", "Abs_Axis::set_pixel_length"),
number_property<&T::tick_length>("tick_length", "主刻度长度", "Abs_Axis::set_tick_length"),
number_property<&T::sub_tick_length>("sub_tick_length", "次刻度长度", "Abs_Axis::set_sub_tick_length"),
color_property<&T::axis_color>("axis_color", "轴颜色", "Abs_Axis::set_color"),
select_property<&T::decimal_separator>("decimal_separator", "小数点", "Abs_Axis::set_locale"),
text_property<&T::unit_text>("unit_text", "单位文本", "Abs_Axis::set_unit_text"),
number_property<&T::unit_font_size>("unit_font_size", "单位字号", "Abs_Axis::set_unit_text_font"),
number_property<&T::unit_font_weight>("unit_font_weight", "单位字重", "Abs_Axis::set_unit_text_font"),
boolean_property<&T::unit_font_italic>("unit_font_italic", "单位斜体", "Abs_Axis::set_unit_text_font"),
color_property<&T::unit_pen_color>("unit_pen_color", "单位文字颜色", "Abs_Axis::set_unit_text_pen"),
color_property<&T::unit_background_color>("unit_background_color", "单位背景颜色", "Abs_Axis::set_unit_text_background_brush"),
number_property<&T::label_rotation>("label_rotation", "标签旋转角度", "Abs_Axis::set_label_rotation_degrees"),
number_property<&T::coord_origin>("coord_origin", "坐标起点", "Axis::set_coord_range"),
number_property<&T::coord_target>("coord_target", "坐标终点", "Axis::set_coord_range"),
number_property<&T::label_precision>("label_precision", "标签精度", "Axis::set_label_precision"),
boolean_property<&T::use_wheel>("use_wheel", "启用滚轮缩放", "Axis::set_use_wheel"),
boolean_property<&T::use_drag>("use_drag", "启用拖拽平移", "Axis::set_use_drag")
select_property<&T::axis_orientation>("axis_orientation", "主轴方向", "Axis::set<&Axis_Base_Properties::orientation>"),
number_property<&T::axis_x_offset>("axis_x_offset", "X 偏移", "Axis::set<&Axis_Base_Properties::x>"),
number_property<&T::axis_y_offset>("axis_y_offset", "Y 偏移", "Axis::set<&Axis_Base_Properties::y>"),
number_property<&T::axis_length_percent>("axis_length_percent", "轴长百分比", "Axis::set<&Axis_Base_Properties::pixel_length>"),
number_property<&T::tick_length>("tick_length", "主刻度长度", "Axis::set<&Axis_Base_Properties::tick_length>"),
number_property<&T::sub_tick_length>("sub_tick_length", "次刻度长度", "Axis::set<&Axis_Base_Properties::sub_tick_length>"),
color_property<&T::axis_color>("axis_color", "轴颜色", "Axis::set<&Axis_Base_Properties::color>"),
select_property<&T::decimal_separator>("decimal_separator", "小数点", "Axis::set<&Axis_Base_Properties::locale>"),
text_property<&T::unit_text>("unit_text", "单位文本", "Axis::set<&Axis_Base_Properties::unit_text>"),
number_property<&T::unit_font_size>("unit_font_size", "单位字号", "Axis::set<&Axis_Base_Properties::unit_text_font>"),
number_property<&T::unit_font_weight>("unit_font_weight", "单位字重", "Axis::set<&Axis_Base_Properties::unit_text_font>"),
boolean_property<&T::unit_font_italic>("unit_font_italic", "单位斜体", "Axis::set<&Axis_Base_Properties::unit_text_font>"),
color_property<&T::unit_pen_color>("unit_pen_color", "单位文字颜色", "Axis::set<&Axis_Base_Properties::unit_text_pen>"),
color_property<&T::unit_background_color>("unit_background_color", "单位背景颜色", "Axis::set<&Axis_Base_Properties::unit_text_background_brush>"),
number_property<&T::label_rotation>("label_rotation", "标签旋转角度", "Axis::set<&Axis_Base_Properties::label_rotation_degrees>"),
number_property<&T::coord_origin>("coord_origin", "坐标起点", "Axis::set<&Axis_Properties::coordinates>"),
number_property<&T::coord_target>("coord_target", "坐标终点", "Axis::set<&Axis_Properties::coordinates>"),
number_property<&T::label_precision>("label_precision", "标签精度", "Axis::set<&Axis_Properties::precision>"),
boolean_property<&T::use_wheel>("use_wheel", "启用滚轮缩放", "Axis::set<&Axis_Properties::wheel>"),
boolean_property<&T::use_drag>("use_drag", "启用拖拽平移", "Axis::set<&Axis_Properties::drag>")
};
}
inline auto time_axis_fields() {
using T = Gallery_Time_Axis_Properties;
return std::tuple{
number_property<&T::time_visible_count>("time_visible_count", "可见时间点", "Time_Axis::set_visible_time_point_count"),
number_property<&T::time_label_spacing>("time_label_spacing", "时间标签间距", "Time_Axis::set_tick_label_spacing_px"),
text_property<&T::time_format>("time_format", "时间格式", "Time_Axis::set_time_format"),
number_property<&T::time_font_size>("time_font_size", "时间字体", "Time_Axis::set_font"),
boolean_property<&T::time_newest_at_start>("time_newest_at_start", "最新数据位于轴起点", "Time_Axis::set_newest_at_axis_start")
number_property<&T::time_visible_count>("time_visible_count", "可见时间点", "Time_Axis::set<&Time_Axis_Properties::visible_count>"),
number_property<&T::time_label_spacing>("time_label_spacing", "时间标签间距", "Time_Axis::set<&Time_Axis_Properties::tick_label_spacing_px>"),
text_property<&T::time_format>("time_format", "时间格式", "Time_Axis::set<&Time_Axis_Properties::format>"),
number_property<&T::time_font_size>("time_font_size", "时间字体", "Time_Axis::set<&Axis_Base_Properties::unit_text_font>"),
boolean_property<&T::time_newest_at_start>("time_newest_at_start", "最新数据位于轴起点", "Time_Axis::set<&Time_Axis_Properties::newest_at_start>")
};
}
inline auto hover_fields() {
@@ -288,8 +288,8 @@ struct Property_Fields<Gallery_Frequency_Trace_Properties> {
return std::tuple_cat(common_fields(), axis_fields(), time_axis_fields(), std::tuple{
color_property<&T::trace_pen>("trace_pen", "轨迹颜色", "Frequency_Trace::set<&Properties::pen>"),
number_property<&T::trace_pen_width>("trace_pen_width", "轨迹宽度", "Frequency_Trace::set<&Properties::pen>"),
number_property<&T::trace_value_min>("trace_value_min", "数值下限", "Axis::set_coord_range"),
number_property<&T::trace_value_max>("trace_value_max", "数值上限", "Axis::set_coord_range")
number_property<&T::trace_value_min>("trace_value_min", "数值下限", "Axis::set<&Axis_Properties::coordinates>"),
number_property<&T::trace_value_max>("trace_value_max", "数值上限", "Axis::set<&Axis_Properties::coordinates>")
});
}
};
+3 -3
View File
@@ -90,8 +90,8 @@ std::vector<Action_Definition> actions(std::string_view case_id,
action("reset", "恢复本图默认值", "Gallery_Scene::rebuild", "会话"),
action("rebuild_renderable", "移除并重建控件", "Plot_Core::remove_renderable / Builder::build", "会话"),
action("toggle_view", "切换 View 生命周期", "Plot_Core::activate_view / deactivate_view", "会话"),
action("axis_set_start", "通过 set_coord_start 应用起点", "Axis::set_coord_start", "Axis"),
action("axis_set_length", "通过 set_coord_length 应用跨度", "Axis::set_coord_length", "Axis"),
action("axis_set_start", "写入坐标范围起点", "Axis::set<&Axis_Properties::coordinates>", "Axis"),
action("axis_set_length", "写入坐标范围跨度", "Axis::set<&Axis_Properties::coordinates>", "Axis"),
action("axis_probe", "读取坐标映射与刻度", "coord_to_pixel / pixel_to_coord / tick_step / sub_tick_count / tick_label", "Axis")
};
if (frame_mode == Gallery_Frame_Mode::Manual) {
@@ -126,7 +126,7 @@ std::vector<Action_Definition> actions(std::string_view case_id,
}
if (case_id == "axis_lab") {
result.push_back(action("append_time", "追加时间点", "Time_Axis::append_time / tick_to_time", "Time_Axis"));
result.push_back(action("read_data_shape", "读取轴采样点状态", "Abs_Axis::pixel_sample_count / Time_Axis::time_point_count", "观察者"));
result.push_back(action("read_data_shape", "读取轴采样点状态", "Abs_Axis::transform / Time_Axis::time_point_count", "观察者"));
} else if (case_id == "spectrum" || case_id == "selection_overlay") {
result.push_back(action("push_samples", "推送一帧样本", "Spectrum::update_samples", "Spectrum"));
result.push_back(action("power_at", "查询指定频率功率", "Spectrum::power_at", "Spectrum", {}, "number", "频率", 98e6));
+25 -17
View File
@@ -160,18 +160,26 @@ struct Web_Plot_Session::Impl {
const int spectrum_height = std::max(1, available_height * 43 / 100);
const int waterfall_y = top + spectrum_height + gap;
const int waterfall_height = std::max(1, viewport.height - waterfall_y - bottom);
spectrum_frequency_axis->set_x(left);
spectrum_frequency_axis->set_y(top + spectrum_height);
spectrum_frequency_axis->set_pixel_length(static_cast<std::size_t>(content_width));
spectrum_power_axis->set_x(left);
spectrum_power_axis->set_y(top);
spectrum_power_axis->set_pixel_length(static_cast<std::size_t>(spectrum_height));
waterfall_frequency_axis->set_x(left);
waterfall_frequency_axis->set_y(waterfall_y + waterfall_height);
waterfall_frequency_axis->set_pixel_length(static_cast<std::size_t>(content_width));
waterfall_time_axis->set_x(left);
waterfall_time_axis->set_y(waterfall_y);
waterfall_time_axis->set_pixel_length(static_cast<std::size_t>(waterfall_height));
spectrum_frequency_axis->update([&](Axis_Properties& state) {
state.x = left;
state.y = top + spectrum_height;
state.pixel_length = static_cast<std::size_t>(content_width);
});
spectrum_power_axis->update([&](Axis_Properties& state) {
state.x = left;
state.y = top;
state.pixel_length = static_cast<std::size_t>(spectrum_height);
});
waterfall_frequency_axis->update([&](Axis_Properties& state) {
state.x = left;
state.y = waterfall_y + waterfall_height;
state.pixel_length = static_cast<std::size_t>(content_width);
});
waterfall_time_axis->update([&](auto& state) {
state.x = left;
state.y = waterfall_y;
state.pixel_length = static_cast<std::size_t>(waterfall_height);
});
}
void update_model() {
constexpr int sample_count = 768;
@@ -214,10 +222,10 @@ struct Web_Plot_Session::Impl {
}
void set_center_frequency(double megahertz) {
const double center = megahertz * 1'000'000.0;
const double bandwidth = spectrum_frequency_axis->coord_range().size();
const double bandwidth = spectrum_frequency_axis->get<&Axis_Properties::coordinates>().size();
const Range range{center - bandwidth * 0.5, center + bandwidth * 0.5};
spectrum_frequency_axis->set_coord_range(range);
waterfall_frequency_axis->set_coord_range(range);
spectrum_frequency_axis->set<&Axis_Properties::coordinates>(range);
waterfall_frequency_axis->set<&Axis_Properties::coordinates>(range);
spectrum->set<&Spectrum::Properties::frequency_range>(range);
spectrum->set<&Spectrum::Properties::center_frequency>(center);
spectrum->set<&Spectrum::Properties::sweep_frequency_range>(Range{
@@ -230,8 +238,8 @@ struct Web_Plot_Session::Impl {
const double center = spectrum->get<&Spectrum::Properties::center_frequency>();
const double bandwidth = kilohertz * 1000.0;
const Range range{center - bandwidth * 0.5, center + bandwidth * 0.5};
spectrum_frequency_axis->set_coord_range(range);
waterfall_frequency_axis->set_coord_range(range);
spectrum_frequency_axis->set<&Axis_Properties::coordinates>(range);
waterfall_frequency_axis->set<&Axis_Properties::coordinates>(range);
spectrum->set<&Spectrum::Properties::frequency_range>(range);
spectrum->set<&Spectrum::Properties::sweep_frequency_range>(Range{
center - bandwidth * 0.125,
+4 -4
View File
@@ -269,10 +269,10 @@ TEST(RenderiveWebGallery, BackendMenuMapsRetainedControlApis) {
"Plot_Core::set_background_color", "Plot_Core::set_max_render_fps",
"Plot_Core::activate_view", "Plot_Core::remove_renderable",
"Renderable::set_visible", "Renderable::set_cache_mode", "Renderable::set_object_name",
"Abs_Axis::set_x", "Abs_Axis::set_y", "Abs_Axis::set_orientation",
"Abs_Axis::set_pixel_length", "Abs_Axis::set_locale", "Abs_Axis::set_unit_text_font",
"Axis::set_coord_range", "Axis::set_coord_start", "Axis::set_coord_length",
"Axis::set_use_wheel", "Axis::set_use_drag", "Time_Axis::set_time_format",
"Axis::set<&Axis_Base_Properties::x>", "Axis::set<&Axis_Base_Properties::y>", "Axis::set<&Axis_Base_Properties::orientation>",
"Axis::set<&Axis_Base_Properties::pixel_length>", "Axis::set<&Axis_Base_Properties::locale>", "Axis::set<&Axis_Base_Properties::unit_text_font>",
"Axis::set<&Axis_Properties::coordinates>", "Axis::set<&Axis_Properties::precision>", "Axis::set<&Axis_Properties::wheel>",
"Axis::set<&Axis_Properties::drag>", "Time_Axis::set<&Time_Axis_Properties::visible_count>", "Time_Axis::set<&Time_Axis_Properties::format>",
"Time_Axis::append_time", "Spectrum::set<&Properties::frequency_point_size>",
"Spectrum::set<&Properties::interpolation_mode>", "Spectrum::set<&Properties::current_pen>", "Spectrum::set<&Properties::max_brush>",
"Spectrum::update_samples", "Spectrum::power_at", "Spectrum::add_custom_marker",