implot icon indicating copy to clipboard operation
implot copied to clipboard

`SetupAxisLimitsConstraints()`'s strange behavior?

Open Razakhel opened this issue 1 year ago • 1 comments

I'm having trouble figuring out the behavior of SetupAxisLimitsConstraints(). As I understood, which may well be entirely wrong, calling SetupAxisLimitsConstraints(...) was roughly equivalent to calling SetupAxisLimits(..., ImPlotCond_Always). However, this does not seem to be the case, at least for the very first frame: using SetupAxisLimits() with the _Always condition is instantly taken into account, while the *Constraints() version needs another frame to work as expected.

const double maxValCount = 4.0;

if (ImPlot::BeginPlot("Overlay", ImVec2(-1, -1), ImPlotFlags_NoMenus | ImPlotFlags_NoBoxSelect)) {
  ImPlot::SetupAxes("X", "Y");

  // Testing either of the following lines:
  ImPlot::SetupAxisLimits(ImAxis_X1, 0.0, maxValCount, ImPlotCond_Always);
  ImPlot::SetupAxisLimitsConstraints(ImAxis_X1, 0.0, maxValCount);

  ImPlot::SetupAxisLimits(ImAxis_Y1, 0.0, 100.0, ImPlotCond_Once);
  ImPlot::SetupMouseText(ImPlotLocation_NorthEast);

  // Plotting 50, 75, 25, 10 & 50 with lines
  // Plotting 15, 30, 0, 60 & 40 in shaded

  ImPlot::EndPlot();
}

With ImPlot::SetupAxisLimits(ImAxis_X1, 0.0, maxValCount, ImPlotCond_Always);, on the very first frame:

overlay3_base


With ImPlot::SetupAxisLimitsConstraints(ImAxis_X1, 0.0, maxValCount);, still on the very first frame:

overlay3_base

Rendering another frame, we get the expected result:

overlay32_base


While it's not critical, it was not something I expected. Is it a bug, or am I missing something?

Razakhel avatar Jan 11 '23 10:01 Razakhel