| 758 | constexpr float TICK_FILL_Y = 1.0f; |
| 759 | |
| 760 | void Locator_Default(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data) { |
| 761 | if (range.Min == range.Max) |
| 762 | return; |
| 763 | const int nMinor = 10; |
| 764 | const int nMajor = ImMax(2, (int)IM_ROUND(pixels / (vertical ? 300.0f : 400.0f))); |
| 765 | const double nice_range = NiceNum(range.Size() * 0.99, false); |
| 766 | const double interval = NiceNum(nice_range / (nMajor - 1), true); |
| 767 | const double graphmin = floor(range.Min / interval) * interval; |
| 768 | const double graphmax = ceil(range.Max / interval) * interval; |
| 769 | bool first_major_set = false; |
| 770 | int first_major_idx = 0; |
| 771 | const int idx0 = ticker.TickCount(); // ticker may have user custom ticks |
| 772 | ImVec2 total_size(0,0); |
| 773 | for (double major = graphmin; major < graphmax + 0.5 * interval; major += interval) { |
| 774 | // is this zero? combat zero formatting issues |
| 775 | if (major-interval < 0 && major+interval > 0) |
| 776 | major = 0; |
| 777 | if (range.Contains(major)) { |
| 778 | if (!first_major_set) { |
| 779 | first_major_idx = ticker.TickCount(); |
| 780 | first_major_set = true; |
| 781 | } |
| 782 | total_size += ticker.AddTick(major, true, 0, true, formatter, formatter_data).LabelSize; |
| 783 | } |
| 784 | for (int i = 1; i < nMinor; ++i) { |
| 785 | double minor = major + i * interval / nMinor; |
| 786 | if (range.Contains(minor)) { |
| 787 | total_size += ticker.AddTick(minor, false, 0, true, formatter, formatter_data).LabelSize; |
| 788 | } |
| 789 | } |
| 790 | } |
| 791 | // prune if necessary |
| 792 | if ((!vertical && total_size.x > pixels*TICK_FILL_X) || (vertical && total_size.y > pixels*TICK_FILL_Y)) { |
| 793 | for (int i = first_major_idx-1; i >= idx0; i -= 2) |
| 794 | ticker.Ticks[i].ShowLabel = false; |
| 795 | for (int i = first_major_idx+1; i < ticker.TickCount(); i += 2) |
| 796 | ticker.Ticks[i].ShowLabel = false; |
| 797 | } |
| 798 | } |
| 799 | |
| 800 | bool CalcLogarithmicExponents(const ImPlotRange& range, float pix, bool vertical, int& exp_min, int& exp_max, int& exp_step) { |
| 801 | if (range.Min * range.Max > 0) { |