1
0
Fork 0
mirror of https://github.com/gwm17/implot.git synced 2024-10-09 23:57:26 -04:00

Update implot_demo.cpp

This commit is contained in:
ozlb 2020-04-30 15:00:08 +02:00 committed by GitHub
parent 3ba6dfa204
commit 6e860842e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -41,6 +41,12 @@ struct ScrollingData {
Offset = (Offset + 1) % MaxSize; Offset = (Offset + 1) % MaxSize;
} }
} }
void Erase() {
if (Data.size() > 0) {
Data.clear();
Offset = 0;
}
}
}; };
struct RollingData { struct RollingData {
@ -55,14 +61,23 @@ struct RollingData {
} }
}; };
// Put big data here
struct DemoData {
DemoData() {
}
};
} }
namespace ImGui { namespace ImGui {
void ShowImPlotDemoWindow(bool* p_open) { void ShowImPlotDemoWindow(bool* p_open) {
ImVec2 main_viewport_pos = ImGui::GetMainViewport()->Pos; static DemoData data;
ImGui::SetNextWindowPos(ImVec2(main_viewport_pos.x + 650, main_viewport_pos.y + 20), ImGuiCond_FirstUseEver);
//ImVec2 main_viewport_pos = ImGui::GetMainViewport()->Pos;
//ImGui::SetNextWindowPos(ImVec2(main_viewport_pos.x + 650, main_viewport_pos.y + 20), ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver);
ImGui::Begin("ImPlot Demo", p_open); ImGui::Begin("ImPlot Demo", p_open);
ImGui::Text("ImPlot says hello. (0.1 WIP)"); ImGui::Text("ImPlot says hello. (0.1 WIP)");
@ -385,57 +400,39 @@ void ShowImPlotDemoWindow(bool* p_open) {
} }
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
if (ImGui::CollapsingHeader("Drag and Drop")) { if (ImGui::CollapsingHeader("Drag and Drop")) {
srand(10000000 * ImGui::GetTime());
static bool paused = false; static bool paused = false;
static bool init = true; static bool init = true;
#define K_PLOT_ANALOG_CH_COUNT 4 static ScrollingData data[10];
#define K_PLOT_DIGITAL_CH_COUNT 8 static bool show[10];
static ScrollingData dataAnalog[K_PLOT_ANALOG_CH_COUNT];
static ScrollingData dataDigital[K_PLOT_DIGITAL_CH_COUNT];
static bool showAnalog[K_PLOT_ANALOG_CH_COUNT];
static bool showDigital[K_PLOT_DIGITAL_CH_COUNT];
if (init) { if (init) {
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) { for (int i = 0; i < 10; ++i) {
showAnalog[i] = false; show[i] = false;
dataAnalog[i].AddPoint(0, 0.25f + 0.5f * (float)rand() / float(RAND_MAX));
}
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i) {
showDigital[i] = false;
dataDigital[i].AddPoint(0, false);
} }
init = false; init = false;
} }
ImGui::BulletText("Drag data items from the left column onto the plot."); ImGui::BulletText("Drag data items from the left column onto the plot.");
static int bitHeight = 7;
ImGui::SetNextItemWidth(100);
ImGui::DragInt("Customize Bit Hieght", &bitHeight, 0.2, 5, 50);
ImGui::BeginGroup(); ImGui::BeginGroup();
if (ImGui::Button("Clear", {100, 0})) { if (ImGui::Button("Clear", {100, 0})) {
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) for (int i = 0; i < 10; ++i) {
showAnalog[i] = false; show[i] = false;
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i) data[i].Data.shrink(0);
showDigital[i] = false; data[i].Offset = 0;
}
} }
if (ImGui::Button(paused ? "Resume" : "Pause", {100,0})) if (ImGui::Button(paused ? "Resume" : "Pause", {100,0}))
paused = !paused; paused = !paused;
ImGui::Separator(); ImGui::Separator();
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) { for (int i = 0; i < 10; ++i) {
char label[32]; char label[8];
sprintf(label, "analog_data_%d", i); sprintf(label, "data_%d", i);
ImGui::Selectable(label, false, 0, {100, 0}); ImGui::Selectable(label, false, 0, {100, 0});
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) { if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) {
ImGui::SetDragDropPayload("DND_ANALOG_PLOT", &i, sizeof(int)); ImGui::SetDragDropPayload("DND_PLOT", &i, sizeof(int));
ImGui::TextUnformatted(label);
ImGui::EndDragDropSource();
}
}
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i) {
char label[32];
sprintf(label, "digital_data_%d", i);
ImGui::Selectable(label, false, 0, {100, 0});
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) {
ImGui::SetDragDropPayload("DND_DIGITAL_PLOT", &i, sizeof(int));
ImGui::TextUnformatted(label); ImGui::TextUnformatted(label);
ImGui::EndDragDropSource(); ImGui::EndDragDropSource();
} }
@ -445,14 +442,138 @@ void ShowImPlotDemoWindow(bool* p_open) {
static float t = 0; static float t = 0;
if (!paused) { if (!paused) {
t += ImGui::GetIO().DeltaTime; t += ImGui::GetIO().DeltaTime;
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) { for (int i = 0; i < 10; ++i) {
dataAnalog[i].AddPoint(t, dataAnalog[i].Data.back().y + (0.005f + 0.0002f * (float)rand() / float(RAND_MAX)) * (-1 + 2 * (float)rand() / float(RAND_MAX))); if (show[i])
data[i].AddPoint(t, data[i].Data.empty() ?
0.25f + 0.5f * (float)rand() / float(RAND_MAX) :
data[i].Data.back().y + (0.005f + 0.0002f * (float)rand() / float(RAND_MAX)) * (-1 + 2 * (float)rand() / float(RAND_MAX)));
} }
}
ImGui::SetNextPlotRangeX(t - 10, t, paused ? ImGuiCond_Once : ImGuiCond_Always);
if (ImGui::BeginPlot("##DND", NULL, NULL, ImVec2(-1,300), ImPlotFlags_Default)) {
for (int i = 0; i < 10; ++i) {
if (show[i]) {
char label[8];
sprintf(label, "data_%d", i);
ImGui::Plot(label, &data[i].Data[0].x, &data[i].Data[0].y, data[i].Data.size(), data[i].Offset, 2 * sizeof(float));
}
}
ImGui::EndPlot();
}
if (ImGui::BeginDragDropTarget()) {
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_PLOT")) {
int i = *(int*)payload->Data;
show[i] = true;
}
ImGui::EndDragDropTarget();
}
}
if (ImGui::CollapsingHeader("Digital")) {
static int bitHeight = 7;
ImGui::SetNextItemWidth(100);
ImGui::DragInt("Bit Hieght", &bitHeight, 0.2, 5, 50);
/// Set the X axis range of the next plot. Call right before BeginPlot(). If ImGuiCond_Always is used, the axis will be locked.
//void SetNextPlotRangeX(float x_min, float x_max, ImGuiCond cond = ImGuiCond_Once);
static bool paused = false;
#define K_PLOT_DIGITAL_CH_COUNT 8
#define K_PLOT_ANALOG_CH_COUNT 4
static ScrollingData dataDigital[K_PLOT_DIGITAL_CH_COUNT];
static ScrollingData dataAnalog[K_PLOT_ANALOG_CH_COUNT];
static bool showDigital[K_PLOT_DIGITAL_CH_COUNT];
static bool showAnalog[K_PLOT_ANALOG_CH_COUNT];
ImGui::BulletText("Drag data items from the left column onto the plot.");
ImGui::BeginGroup();
if (ImGui::Button("Clear", {100, 0})) {
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i)
showDigital[i] = false;
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i)
showAnalog[i] = false;
}
if (ImGui::Button(paused ? "Resume" : "Pause", {100,0}))
paused = !paused;
ImGui::Separator();
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i) {
char label[32];
sprintf(label, "digital_data_%d", i);
ImGui::Checkbox(label, &showDigital[i]);
//ImGui::Selectable(label, false, 0, {100, 0});
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) {
ImGui::SetDragDropPayload("DND_DIGITAL_PLOT", &i, sizeof(int));
ImGui::TextUnformatted(label);
ImGui::EndDragDropSource();
}
}
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) {
char label[32];
sprintf(label, "analog_data_%d", i);
ImGui::Checkbox(label, &showAnalog[i]);
//ImGui::Selectable(label, false, 0, {100, 0});
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) {
ImGui::SetDragDropPayload("DND_ANALOG_PLOT", &i, sizeof(int));
ImGui::TextUnformatted(label);
ImGui::EndDragDropSource();
}
}
ImGui::EndGroup();
ImGui::SameLine();
static float t = 0;
if (true) {
t += ImGui::GetIO().DeltaTime;
//purge inactive signals
for (int i = 0; i < K_PLOT_DIGITAL_CH_COUNT; ++i) {
if (!showDigital[i])
dataDigital[i].Erase();
}
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) {
if (!showAnalog[i])
dataAnalog[i].Erase();
}
//digital signal values
int i = 0; int i = 0;
dataDigital[i++].AddPoint(t, sin(t) > 0.45); if (showDigital[i])
dataDigital[i++].AddPoint(t, sin(t) < 0.45); dataDigital[i].AddPoint(t, sin(t) > 0.45);
dataDigital[i++].AddPoint(t, sin(t) > 0.83); i++;
dataDigital[i++].AddPoint(t, sin(t) < 0.17); if (showDigital[i])
dataDigital[i].AddPoint(t, sin(t) < 0.45);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, sin(t) > 0.83);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, sin(t) < 0.17);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, cos(t) > 0.45);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, cos(t) < 0.45);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, cos(t) > 0.83);
i++;
if (showDigital[i])
dataDigital[i].AddPoint(t, cos(t) < 0.17);
//Analog signal values
i = 0;
if (showAnalog[i])
dataAnalog[i].AddPoint(t, sin(t));
i++;
if (showAnalog[i])
dataAnalog[i].AddPoint(t, cos(t));
i++;
if (showAnalog[i])
dataAnalog[i].AddPoint(t, sin(t) * cos(t));
i++;
if (showAnalog[i])
dataAnalog[i].AddPoint(t, sin(t) - cos(t));
i++;
} }
ImGui::SetNextPlotRangeX(t - 10.0f, t, paused ? ImGuiCond_Once : ImGuiCond_Always); ImGui::SetNextPlotRangeX(t - 10.0f, t, paused ? ImGuiCond_Once : ImGuiCond_Always);
if (ImGui::BeginPlot("##DND", NULL, NULL, ImVec2(-1,300), ImPlotFlags_Default)) { if (ImGui::BeginPlot("##DND", NULL, NULL, ImVec2(-1,300), ImPlotFlags_Default)) {
@ -468,25 +589,25 @@ void ShowImPlotDemoWindow(bool* p_open) {
for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) { for (int i = 0; i < K_PLOT_ANALOG_CH_COUNT; ++i) {
if (showAnalog[i]) { if (showAnalog[i]) {
char label[32]; char label[32];
sprintf(label, "digital_data_%d", i); sprintf(label, "analog_data_%d", i);
if (dataAnalog[i].Data.size() > 0)
ImGui::Plot(label, &dataAnalog[i].Data[0].x, &dataAnalog[i].Data[0].y, dataAnalog[i].Data.size(), dataAnalog[i].Offset, 2 * sizeof(float)); ImGui::Plot(label, &dataAnalog[i].Data[0].x, &dataAnalog[i].Data[0].y, dataAnalog[i].Data.size(), dataAnalog[i].Offset, 2 * sizeof(float));
} }
} }
ImGui::EndPlot(); ImGui::EndPlot();
} }
if (ImGui::BeginDragDropTarget()) { if (ImGui::BeginDragDropTarget()) {
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_ANALOG_PLOT")) { if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DIGITAL_PLOT")) {
int i = *(int*)payload->Data;
showAnalog[i] = true;
}
else if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DIGITAL_PLOT")) {
int i = *(int*)payload->Data; int i = *(int*)payload->Data;
showDigital[i] = true; showDigital[i] = true;
} }
else if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_ANALOG_PLOT")) {
int i = *(int*)payload->Data;
showAnalog[i] = true;
}
ImGui::EndDragDropTarget(); ImGui::EndDragDropTarget();
} }
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
if (ImGui::CollapsingHeader("Custom Styles")) { if (ImGui::CollapsingHeader("Custom Styles")) {
static ImVec4 my_palette[3] = { static ImVec4 my_palette[3] = {
@ -519,6 +640,10 @@ void ShowImPlotDemoWindow(bool* p_open) {
ImGui::RestorePlotPalette(); ImGui::RestorePlotPalette();
} }
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
// if (ImGui::CollapsingHeader("Benchmark")) {
// }
//-------------------------------------------------------------------------
ImGui::End(); ImGui::End();
} }