mirror of
https://github.com/gwm17/implot.git
synced 2025-04-22 16:28:51 -04:00
Update implot_demo.cpp
This commit is contained in:
parent
3ba6dfa204
commit
6e860842e1
223
implot_demo.cpp
223
implot_demo.cpp
|
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user