Skip to content

Commit

Permalink
feat: add settings for downsampling
Browse files Browse the repository at this point in the history
enable/disable, set max samples, max sample type (total/per dataset)
  • Loading branch information
vtx22 committed Mar 4, 2025
1 parent 7786409 commit 45e49fa
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 30 deletions.
15 changes: 13 additions & 2 deletions src/PlottingWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,20 @@ void PlottingWindow::update_content()
case sparq_plot_t::LINE:
{
uint8_t i = 0;

uint32_t max_samples = std::stoi(_config_handler.ini["downsampling"]["max_samples"]);

if (_config_handler.ini["downsampling"]["max_samples_type"] == "Total" && datasets.size() != 0)
{
max_samples = max_samples / datasets.size();
}

for (auto &ds : datasets)
{
std::string name = (ds.name[0] == 0) ? std::to_string(ds.id) : std::string(ds.name);
ImPlot::SetNextLineStyle(ds.color, 3);

auto [x_values, y_values] = get_xy_downsampled(ds, 50000, ImPlot::GetPlotLimits().X.Min, ImPlot::GetPlotLimits().X.Max);
auto [x_values, y_values] = get_xy_downsampled(ds, max_samples, ImPlot::GetPlotLimits().X.Min, ImPlot::GetPlotLimits().X.Max);

if (ds.display_square)
{
Expand Down Expand Up @@ -96,8 +104,11 @@ std::pair<std::vector<double> &, std::vector<double> &> PlottingWindow::get_xy_d
{
auto &d = dataset;

bool downsampling_enabled;
std::istringstream(_config_handler.ini["downsampling"]["enabled"]) >> std::boolalpha >> downsampling_enabled;

// No downsampling possible
if (d.samples.empty() || d.samples.size() < max_samples)
if (d.samples.empty() || d.samples.size() < max_samples || !downsampling_enabled)
{
return {d.samples, d.y_values};
}
Expand Down
66 changes: 66 additions & 0 deletions src/SettingsWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,70 @@ SettingsWindow::SettingsWindow(DataHandler *data_handler) : Window(ICON_FA_GEAR

void SettingsWindow::update_content()
{
bool settings_changed = false;

ImGui::SeparatorText("Downsampling");

bool downsampling_enabled;
std::istringstream(_config_handler.ini["downsampling"]["enabled"]) >> std::boolalpha >> downsampling_enabled;
if (ImGui::Checkbox("Enabled", &downsampling_enabled))
{
_config_handler.ini["downsampling"]["enabled"] = downsampling_enabled ? "true" : "false";
settings_changed = true;
}

ImGui::Text("Max Samples:");
ImGui::SameLine();

int max_samples = std::stoi(_config_handler.ini["downsampling"]["max_samples"]);

float spacing_right = 7.f * ImGui::GetFontSize();
ImGui::SetNextItemWidth(-spacing_right);

if (ImGui::InputInt("##MaxSamples", &max_samples, 0, 0))
{
if (max_samples < 10)
{
max_samples = 10;
}

_config_handler.ini["downsampling"]["max_samples"] = std::to_string(max_samples);
settings_changed = true;
}

ImGui::SameLine();

ImGui::SetNextItemWidth(spacing_right);

const char *max_samples_types[2] = {"Total", "Per Dataset"};
int max_samples_type = std::stoi(_config_handler.ini["downsampling"]["max_samples_type"]);
int prev_max_samples_type = max_samples_type;
if (ImGui::BeginCombo("##X View", max_samples_types[max_samples_type]))
{
for (uint8_t n = 0; n < 2; n++)
{
bool is_selected = (max_samples_type == n);

if (ImGui::Selectable(max_samples_types[n], is_selected))
{
max_samples_type = n;
}
if (is_selected)
{
ImGui::SetItemDefaultFocus();
}
}
ImGui::EndCombo();
}

if (max_samples_type != prev_max_samples_type)
{
_config_handler.ini["downsampling"]["max_samples_type"] = std::to_string(max_samples_type);
settings_changed = true;
}

if (settings_changed)
{
_config_handler.write_config();
}
}
3 changes: 2 additions & 1 deletion src/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ vsync = true
[downsampling]
enabled = true
mode = 1
max_sample = 50000
max_samples = 100000
max_samples_type = 0
56 changes: 29 additions & 27 deletions src/imgui.ini
Original file line number Diff line number Diff line change
Expand Up @@ -10,43 +10,43 @@ Collapsed=0

[Window][ Plot]
Pos=0,0
Size=1920,728
Size=1920,733
Collapsed=0
DockId=0x00000002,0

[Window][ Connection]
Pos=0,730
Size=327,287
Pos=0,735
Size=433,282
Collapsed=0
DockId=0x00000001,0

[Window][ Measure]
Pos=631,730
Size=1289,287
Pos=777,735
Size=702,282
Collapsed=0
DockId=0x00000007,2
DockId=0x00000005,2

[Window][ Statistics]
Pos=0,730
Size=327,287
Pos=0,735
Size=433,282
Collapsed=0
DockId=0x00000001,1

[Window][ View]
Pos=631,730
Size=1289,287
Pos=777,735
Size=702,282
Collapsed=0
DockId=0x00000007,1
DockId=0x00000005,1

[Window][ Data]
Pos=631,730
Size=1289,287
Pos=777,735
Size=702,282
Collapsed=0
DockId=0x00000007,0
DockId=0x00000005,0

[Window][ Console]
Pos=329,730
Size=300,287
Pos=435,735
Size=340,282
Collapsed=0
DockId=0x00000004,0

Expand All @@ -60,8 +60,8 @@ Size=228,67
Collapsed=0

[Window][##TOAST1]
Pos=1672,853
Size=228,67
Pos=1667,853
Size=233,67
Collapsed=0

[Window][##TOAST2]
Expand All @@ -85,17 +85,19 @@ Size=228,67
Collapsed=0

[Window][ Settings]
Pos=631,730
Size=1289,287
Pos=1481,735
Size=439,282
Collapsed=0
DockId=0x00000007,3
DockId=0x00000008,0

[Docking][Data]
DockSpace ID=0x8B93E3BD Window=0xA787BDB4 Pos=0,23 Size=1920,1017 Split=Y Selected=0xDFD7E85F
DockNode ID=0x00000002 Parent=0x8B93E3BD SizeRef=1920,728 CentralNode=1 Selected=0xDFD7E85F
DockNode ID=0x00000003 Parent=0x8B93E3BD SizeRef=1920,287 Split=X Selected=0x7D325C27
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=629,228 Split=X Selected=0x04EEE1F1
DockNode ID=0x00000001 Parent=0x00000006 SizeRef=327,287 Selected=0x0BBF55E4
DockNode ID=0x00000004 Parent=0x00000006 SizeRef=300,287 Selected=0x04EEE1F1
DockNode ID=0x00000007 Parent=0x00000003 SizeRef=1289,228 Selected=0xD0DC71F6
DockNode ID=0x00000002 Parent=0x8B93E3BD SizeRef=1920,733 CentralNode=1 Selected=0xDFD7E85F
DockNode ID=0x00000003 Parent=0x8B93E3BD SizeRef=1920,282 Split=X Selected=0x7D325C27
DockNode ID=0x00000006 Parent=0x00000003 SizeRef=775,228 Split=X Selected=0x04EEE1F1
DockNode ID=0x00000001 Parent=0x00000006 SizeRef=433,287 Selected=0x0BBF55E4
DockNode ID=0x00000004 Parent=0x00000006 SizeRef=340,287 Selected=0x04EEE1F1
DockNode ID=0x00000007 Parent=0x00000003 SizeRef=1143,228 Split=X Selected=0x34FA1C55
DockNode ID=0x00000005 Parent=0x00000007 SizeRef=702,282 Selected=0xE22138B5
DockNode ID=0x00000008 Parent=0x00000007 SizeRef=439,282 Selected=0xD0DC71F6

0 comments on commit 45e49fa

Please sign in to comment.