dear-imgui-raw-implot (empty) → 1.0.0
raw patch · 60 files changed
+28565/−0 lines, 60 filesdep +basedep +dear-imgui-rawdep +unliftio-core
Dependencies added: base, dear-imgui-raw, unliftio-core
Files
- CHANGELOG.md +14/−0
- LICENSE +26/−0
- README.md +22/−0
- cbits/DearImGuiCtors.cpp +64/−0
- cbits/DearImGuiWrappers.cpp +1183/−0
- cbits/DearImGuiWrappers.h +329/−0
- cbits/dcimgui_implot.cpp +2086/−0
- cbits/dcimgui_implot.h +1599/−0
- cbits/implot/implot.cpp +5931/−0
- cbits/implot/implot.h +1408/−0
- cbits/implot/implot_internal.h +1722/−0
- cbits/implot/implot_items.cpp +3527/−0
- cbits/implot_shim.cpp +269/−0
- cbits/implot_shim.h +281/−0
- dear-imgui-raw-implot.cabal +108/−0
- src/DearImGui/ImPlot/Context.hs +12/−0
- src/DearImGui/Raw/ImPlot.hsc +7579/−0
- src/DearImGui/Raw/ImPlot/Context.hsc +14/−0
- src/DearImGui/Raw/ImPlot/Enums/AxisFlags.hsc +116/−0
- src/DearImGui/Raw/ImPlot/Enums/BarGroupsFlags.hsc +34/−0
- src/DearImGui/Raw/ImPlot/Enums/BarsFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/Bin.hsc +39/−0
- src/DearImGui/Raw/ImPlot/Enums/BubblesFlags.hsc +24/−0
- src/DearImGui/Raw/ImPlot/Enums/Col.hsc +103/−0
- src/DearImGui/Raw/ImPlot/Enums/Colormap.hsc +99/−0
- src/DearImGui/Raw/ImPlot/Enums/ColormapScaleFlags.hsc +39/−0
- src/DearImGui/Raw/ImPlot/Enums/Cond.hsc +34/−0
- src/DearImGui/Raw/ImPlot/Enums/DigitalFlags.hsc +24/−0
- src/DearImGui/Raw/ImPlot/Enums/DragToolFlags.hsc +44/−0
- src/DearImGui/Raw/ImPlot/Enums/DummyFlags.hsc +24/−0
- src/DearImGui/Raw/ImPlot/Enums/ErrorBarsFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/Flags.hsc +73/−0
- src/DearImGui/Raw/ImPlot/Enums/HeatmapFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/HistogramFlags.hsc +49/−0
- src/DearImGui/Raw/ImPlot/Enums/ImAxis.hsc +56/−0
- src/DearImGui/Raw/ImPlot/Enums/ImageFlags.hsc +24/−0
- src/DearImGui/Raw/ImPlot/Enums/InfLinesFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/ItemFlags.hsc +33/−0
- src/DearImGui/Raw/ImPlot/Enums/LegendFlags.hsc +64/−0
- src/DearImGui/Raw/ImPlot/Enums/LineFlags.hsc +49/−0
- src/DearImGui/Raw/ImPlot/Enums/Location.hsc +64/−0
- src/DearImGui/Raw/ImPlot/Enums/Marker.hsc +94/−0
- src/DearImGui/Raw/ImPlot/Enums/MouseTextFlags.hsc +39/−0
- src/DearImGui/Raw/ImPlot/Enums/PieChartFlags.hsc +44/−0
- src/DearImGui/Raw/ImPlot/Enums/PolygonFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/Prop.hsc +104/−0
- src/DearImGui/Raw/ImPlot/Enums/Scale.hsc +39/−0
- src/DearImGui/Raw/ImPlot/Enums/ScatterFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/ShadedFlags.hsc +24/−0
- src/DearImGui/Raw/ImPlot/Enums/StairsFlags.hsc +34/−0
- src/DearImGui/Raw/ImPlot/Enums/StemsFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/Enums/StyleVar.hsc +123/−0
- src/DearImGui/Raw/ImPlot/Enums/SubplotFlags.hsc +79/−0
- src/DearImGui/Raw/ImPlot/Enums/TextFlags.hsc +29/−0
- src/DearImGui/Raw/ImPlot/InputMap.hsc +106/−0
- src/DearImGui/Raw/ImPlot/Point.hsc +55/−0
- src/DearImGui/Raw/ImPlot/Range.hsc +81/−0
- src/DearImGui/Raw/ImPlot/Rect.hsc +85/−0
- src/DearImGui/Raw/ImPlot/Spec.hsc +135/−0
- src/DearImGui/Raw/ImPlot/Style.hsc +125/−0
+ CHANGELOG.md view
@@ -0,0 +1,14 @@+# Changelog for `dear-imgui-raw-implot`++All notable changes to this package will be documented in this file.++The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),+and this project adheres to the+[Haskell Package Versioning Policy](https://pvp.haskell.org/).++## 1.0.0 - 2026-10-21++Initial release.++- Generated with dear_bindings `v0.26` against Dear ImGui `v1.93.0-docking`.+- Bundles implot at commit `851cdbd` (`v1.0-10-g851cdbd`).
+ LICENSE view
@@ -0,0 +1,26 @@+Copyright 2026 IC Rainbow++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice, this+ list of conditions and the following disclaimer.++2. Redistributions in binary form must reproduce the above copyright notice,+ this list of conditions and the following disclaimer in the documentation+ and/or other materials provided with the distribution.++3. Neither the name of the copyright holder nor the names of its contributors+ may be used to endorse or promote products derived from this software+ without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README.md view
@@ -0,0 +1,22 @@+# dear-imgui-raw-implot++Raw FFI bindings to [implot], GPU-accelerated plotting for Dear ImGui.++```haskell+{-# LANGUAGE BlockArguments #-}++import DearImGui.Raw.ImPlot qualified as ImPlot+import DearImGui.Raw.ImPlot.Spec qualified as Spec+import Foreign.C.String (withCString)+import Foreign.Marshal.Array (withArrayLen)+import Foreign.Storable (peek)++plotSine :: IO ()+plotSine =+ withCString "sin" \label ->+ withArrayLen [sin (x / 10) | x <- [0 .. 99]] \count values ->+ Spec.withDefault \spec ->+ ImPlot.plotLine_F32 label values (fromIntegral count) 1 0 =<< peek spec+```++[implot]: https://github.com/epezent/implot
+ cbits/DearImGuiCtors.cpp view
@@ -0,0 +1,64 @@+// Generated by dear-bindings-ffi. Do not edit.+#include <new>+#include "implot.h"++extern "C" void ImPlotInputMap_Init_wrap(void* p) {+ using T = ::ImPlotInputMap;+ new (p) T();+}++extern "C" void ImPlotInputMap_Destroy_wrap(void* p) {+ using T = ::ImPlotInputMap;+ static_cast<T*>(p)->~T();+}++extern "C" void ImPlotPoint_Init_wrap(void* p) {+ using T = ::ImPlotPoint;+ new (p) T();+}++extern "C" void ImPlotPoint_Destroy_wrap(void* p) {+ using T = ::ImPlotPoint;+ static_cast<T*>(p)->~T();+}++extern "C" void ImPlotRange_Init_wrap(void* p) {+ using T = ::ImPlotRange;+ new (p) T();+}++extern "C" void ImPlotRange_Destroy_wrap(void* p) {+ using T = ::ImPlotRange;+ static_cast<T*>(p)->~T();+}++extern "C" void ImPlotRect_Init_wrap(void* p) {+ using T = ::ImPlotRect;+ new (p) T();+}++extern "C" void ImPlotRect_Destroy_wrap(void* p) {+ using T = ::ImPlotRect;+ static_cast<T*>(p)->~T();+}++extern "C" void ImPlotSpec_Init_wrap(void* p) {+ using T = ::ImPlotSpec;+ new (p) T();+}++extern "C" void ImPlotSpec_Destroy_wrap(void* p) {+ using T = ::ImPlotSpec;+ static_cast<T*>(p)->~T();+}++extern "C" void ImPlotStyle_Init_wrap(void* p) {+ using T = ::ImPlotStyle;+ new (p) T();+}++extern "C" void ImPlotStyle_Destroy_wrap(void* p) {+ using T = ::ImPlotStyle;+ static_cast<T*>(p)->~T();+}+
+ cbits/DearImGuiWrappers.cpp view
@@ -0,0 +1,1183 @@+// Generated by dear-bindings-ffi. Do not edit.+#include "DearImGuiWrappers.h"++extern "C" void ImPlotAnnotation_wrap(double x, double y, ImVec4 const* col, ImVec2 const* pix_offset, bool clamp, bool round) {+ ImPlotAnnotation(x, y, *col, *pix_offset, clamp, round);+}++extern "C" void ImPlotAnnotationStrUnformatted_wrap(double x, double y, ImVec4 const* col, ImVec2 const* pix_offset, bool clamp, const char* text) {+ ImPlotAnnotationStrUnformatted(x, y, *col, *pix_offset, clamp, text);+}++extern "C" bool ImPlotBeginPlot_wrap(const char* title_id, ImVec2 const* size, ImPlotFlags flags) {+ return ImPlotBeginPlot(title_id, *size, flags);+}++extern "C" bool ImPlotBeginSubplots_wrap(const char* title_id, int rows, int cols, ImVec2 const* size, ImPlotSubplotFlags flags, float* row_ratios, float* col_ratios) {+ return ImPlotBeginSubplots(title_id, rows, cols, *size, flags, row_ratios, col_ratios);+}++extern "C" bool ImPlotColormapButton_wrap(const char* label, ImVec2 const* size, ImPlotColormap cmap) {+ return ImPlotColormapButton(label, *size, cmap);+}++extern "C" void ImPlotColormapScale_wrap(const char* label, double scale_min, double scale_max, ImVec2 const* size, const char* format, ImPlotColormapScaleFlags flags, ImPlotColormap cmap) {+ ImPlotColormapScale(label, scale_min, scale_max, *size, format, flags, cmap);+}++extern "C" bool ImPlotDragLineX_wrap(int id, double* x, ImVec4 const* col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ return ImPlotDragLineX(id, x, *col, thickness, flags, out_clicked, out_hovered, out_held);+}++extern "C" bool ImPlotDragLineY_wrap(int id, double* y, ImVec4 const* col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ return ImPlotDragLineY(id, y, *col, thickness, flags, out_clicked, out_hovered, out_held);+}++extern "C" bool ImPlotDragPoint_wrap(int id, double* x, double* y, ImVec4 const* col, float size, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ return ImPlotDragPoint(id, x, y, *col, size, flags, out_clicked, out_hovered, out_held);+}++extern "C" bool ImPlotDragRect_wrap(int id, double* x1, double* y1, double* x2, double* y2, ImVec4 const* col, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ return ImPlotDragRect(id, x1, y1, x2, y2, *col, flags, out_clicked, out_hovered, out_held);+}++extern "C" void ImPlotGetColormapColor_wrap(int idx, ImPlotColormap cmap, ImVec4* _out) {+ *_out = ImPlotGetColormapColor(idx, cmap);+}++extern "C" void ImPlotGetLastItemColor_wrap(ImVec4* _out) {+ *_out = ImPlotGetLastItemColor();+}++extern "C" void ImPlotGetPlotPos_wrap(ImVec2* _out) {+ *_out = ImPlotGetPlotPos();+}++extern "C" void ImPlotGetPlotSize_wrap(ImVec2* _out) {+ *_out = ImPlotGetPlotSize();+}++extern "C" void ImPlotItemIcon_wrap(ImVec4 const* col) {+ ImPlotItemIcon(*col);+}++extern "C" void ImPlotNextColormapColor_wrap(ImVec4* _out) {+ *_out = ImPlotNextColormapColor();+}++extern "C" void ImPlotPlotBarGroups_F32_wrap(const char*const* label_ids, const float* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_F32(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_F64_wrap(const char*const* label_ids, const double* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_F64(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_S16_wrap(const char*const* label_ids, const ImS16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_S16(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_S32_wrap(const char*const* label_ids, const ImS32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_S32(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_S64_wrap(const char*const* label_ids, const ImS64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_S64(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_S8_wrap(const char*const* label_ids, const ImS8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_S8(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_U16_wrap(const char*const* label_ids, const ImU16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_U16(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_U32_wrap(const char*const* label_ids, const ImU32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_U32(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_U64_wrap(const char*const* label_ids, const ImU64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_U64(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarGroups_U8_wrap(const char*const* label_ids, const ImU8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBarGroups_U8(label_ids, values, item_count, group_count, group_size, shift, *spec);+}++extern "C" void ImPlotPlotBarsG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBarsG(label_id, getter, data, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_F32_wrap(const char* label_id, const float* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_F32(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_F64_wrap(const char* label_id, const double* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_F64(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_S16_wrap(const char* label_id, const ImS16* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_S16(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_S32_wrap(const char* label_id, const ImS32* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_S32(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_S64_wrap(const char* label_id, const ImS64* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_S64(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_S8_wrap(const char* label_id, const ImS8* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_S8(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_U16_wrap(const char* label_id, const ImU16* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_U16(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_U32_wrap(const char* label_id, const ImU32* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_U32(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_U64_wrap(const char* label_id, const ImU64* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_U64(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_U8_wrap(const char* label_id, const ImU8* values, int count, double bar_size, double shift, ImPlotSpec const* spec) {+ ImPlotPlotBars_U8(label_id, values, count, bar_size, shift, *spec);+}++extern "C" void ImPlotPlotBars_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_F32(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_F64(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_S16(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_S32(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_S64(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_S8(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_U16(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_U32(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_U64(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBars_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, ImPlotSpec const* spec) {+ ImPlotPlotBars_xy_U8(label_id, xs, ys, count, bar_size, *spec);+}++extern "C" void ImPlotPlotBubbles_F32_wrap(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_F32(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_F64_wrap(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_F64(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_S16_wrap(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_S16(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_S32_wrap(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_S32(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_S64_wrap(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_S64(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_S8_wrap(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_S8(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_U16_wrap(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_U16(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_U32_wrap(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_U32(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_U64_wrap(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_U64(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_U8_wrap(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_U8(label_id, values, szs, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_F32(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_F64(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_S16(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_S32(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_S64(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_S8(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_U16(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_U32(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_U64(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotBubbles_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, ImPlotSpec const* spec) {+ ImPlotPlotBubbles_xy_U8(label_id, xs, ys, szs, count, *spec);+}++extern "C" void ImPlotPlotDigitalG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigitalG(label_id, getter, data, count, *spec);+}++extern "C" void ImPlotPlotDigital_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_F32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_F64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_S16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_S32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_S64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_S8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_U16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_U32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_U64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDigital_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotDigital_U8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotDummy_wrap(const char* label_id, ImPlotSpec const* spec) {+ ImPlotPlotDummy(label_id, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_F32(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_F64(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_S16(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_S32(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_S64(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_S8(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_U16(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_U32(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_U64(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xye_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xye_U8(label_id, xs, ys, err, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_F32(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_F64(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_S16(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_S32(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_S64(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_S8(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_U16(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_U32(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_U64(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotErrorBars_xynp_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, ImPlotSpec const* spec) {+ ImPlotPlotErrorBars_xynp_U8(label_id, xs, ys, neg, pos, count, *spec);+}++extern "C" void ImPlotPlotHeatmap_F32_wrap(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_F32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_F64_wrap(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_F64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_S16_wrap(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_S16(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_S32_wrap(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_S32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_S64_wrap(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_S64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_S8_wrap(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_S8(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_U16_wrap(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_U16(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_U32_wrap(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_U32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_U64_wrap(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_U64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" void ImPlotPlotHeatmap_U8_wrap(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec) {+ ImPlotPlotHeatmap_U8(label_id, values, rows, cols, scale_min, scale_max, label_fmt, *bounds_min, *bounds_max, *spec);+}++extern "C" double ImPlotPlotHistogram2D_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_F32(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_F64(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_S16(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_S32(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_S64(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_S8(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_U16(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_U32(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_U64(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram2D_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram2D_U8(label_id, xs, ys, count, x_bins, y_bins, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_F32_wrap(const char* label_id, const float* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_F32(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_F64_wrap(const char* label_id, const double* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_F64(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_S16_wrap(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_S16(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_S32_wrap(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_S32(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_S64_wrap(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_S64(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_S8_wrap(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_S8(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_U16_wrap(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_U16(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_U32_wrap(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_U32(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_U64_wrap(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_U64(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" double ImPlotPlotHistogram_U8_wrap(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec) {+ return ImPlotPlotHistogram_U8(label_id, values, count, bins, bar_scale, *range, *spec);+}++extern "C" void ImPlotPlotImage_wrap(const char* label_id, ImTextureRef const* tex_ref, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImVec2 const* uv0, ImVec2 const* uv1, ImVec4 const* tint_col, ImPlotSpec const* spec) {+ ImPlotPlotImage(label_id, *tex_ref, *bounds_min, *bounds_max, *uv0, *uv1, *tint_col, *spec);+}++extern "C" void ImPlotPlotInfLines_F32_wrap(const char* label_id, const float* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_F32(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_F64_wrap(const char* label_id, const double* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_F64(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_S16_wrap(const char* label_id, const ImS16* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_S16(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_S32_wrap(const char* label_id, const ImS32* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_S32(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_S64_wrap(const char* label_id, const ImS64* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_S64(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_S8_wrap(const char* label_id, const ImS8* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_S8(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_U16_wrap(const char* label_id, const ImU16* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_U16(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_U32_wrap(const char* label_id, const ImU32* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_U32(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_U64_wrap(const char* label_id, const ImU64* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_U64(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotInfLines_U8_wrap(const char* label_id, const ImU8* values, int count, ImPlotSpec const* spec) {+ ImPlotPlotInfLines_U8(label_id, values, count, *spec);+}++extern "C" void ImPlotPlotLineG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec) {+ ImPlotPlotLineG(label_id, getter, data, count, *spec);+}++extern "C" void ImPlotPlotLine_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_F32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_F64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_S16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_S32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_S64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_S8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_U16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_U32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_U64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotLine_U8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotLine_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_F32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_F64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_S16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_S32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_S64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_S8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_U16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_U32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_U64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotLine_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotLine_xy_U8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPieChart_F32_wrap(const char*const* label_ids, const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_F32(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_F64_wrap(const char*const* label_ids, const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_F64(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_S16_wrap(const char*const* label_ids, const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_S16(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_S32_wrap(const char*const* label_ids, const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_S32(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_S64_wrap(const char*const* label_ids, const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_S64(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_S8_wrap(const char*const* label_ids, const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_S8(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_U16_wrap(const char*const* label_ids, const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_U16(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_U32_wrap(const char*const* label_ids, const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_U32(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_U64_wrap(const char*const* label_ids, const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_U64(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_U8_wrap(const char*const* label_ids, const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_U8(label_ids, values, count, x, y, radius, label_fmt, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_F32_wrap(const char*const* label_ids, const float* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_F32(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_F64_wrap(const char*const* label_ids, const double* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_F64(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_S16_wrap(const char*const* label_ids, const ImS16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_S16(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_S32_wrap(const char*const* label_ids, const ImS32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_S32(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_S64_wrap(const char*const* label_ids, const ImS64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_S64(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_S8_wrap(const char*const* label_ids, const ImS8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_S8(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_U16_wrap(const char*const* label_ids, const ImU16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_U16(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_U32_wrap(const char*const* label_ids, const ImU32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_U32(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_U64_wrap(const char*const* label_ids, const ImU64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_U64(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPieChart_fmt_U8_wrap(const char*const* label_ids, const ImU8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec) {+ ImPlotPlotPieChart_fmt_U8(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, *spec);+}++extern "C" void ImPlotPlotPolygon_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_F32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_F64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_S16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_S32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_S64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_S8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_U16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_U32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_U64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotPolygon_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotPolygon_U8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatterG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatterG(label_id, getter, data, count, *spec);+}++extern "C" void ImPlotPlotScatter_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_F32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_F64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_S16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_S32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_S64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_S8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_U16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_U32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_U64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotScatter_U8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotScatter_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_F32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_F64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_S16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_S32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_S64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_S8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_U16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_U32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_U64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotScatter_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotScatter_xy_U8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotShadedG_wrap(const char* label_id, ImPlotGetter getter1, void* data1, ImPlotGetter getter2, void* data2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShadedG(label_id, getter1, data1, getter2, data2, count, *spec);+}++extern "C" void ImPlotPlotShaded_F32_wrap(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_F32(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_F64_wrap(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_F64(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_S16_wrap(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_S16(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_S32_wrap(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_S32(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_S64_wrap(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_S64(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_S8_wrap(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_S8(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_U16_wrap(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_U16(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_U32_wrap(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_U32(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_U64_wrap(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_U64(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_U8_wrap(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotShaded_U8(label_id, values, count, yref, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotShaded_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_F32(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_F64(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_S16(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_S32(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_S64(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_S8(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_U16(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_U32(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_U64(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xy_U8(label_id, xs, ys, count, yref, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_F32_wrap(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_F32(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_F64_wrap(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_F64(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_S16(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_S32(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_S64(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_S8(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_U16(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_U32(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_U64(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotShaded_xyy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, ImPlotSpec const* spec) {+ ImPlotPlotShaded_xyy_U8(label_id, xs, ys1, ys2, count, *spec);+}++extern "C" void ImPlotPlotStairsG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairsG(label_id, getter, data, count, *spec);+}++extern "C" void ImPlotPlotStairs_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_F32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_F64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_S16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_S32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_S64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_S8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_U16(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_U32(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_U64(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec) {+ ImPlotPlotStairs_U8(label_id, values, count, xscale, xstart, *spec);+}++extern "C" void ImPlotPlotStairs_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_F32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_F64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_S16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_S32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_S64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_S8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_U16(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_U32(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_U64(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStairs_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec) {+ ImPlotPlotStairs_xy_U8(label_id, xs, ys, count, *spec);+}++extern "C" void ImPlotPlotStems_F32_wrap(const char* label_id, const float* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_F32(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_F64_wrap(const char* label_id, const double* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_F64(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_S16_wrap(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_S16(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_S32_wrap(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_S32(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_S64_wrap(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_S64(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_S8_wrap(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_S8(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_U16_wrap(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_U16(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_U32_wrap(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_U32(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_U64_wrap(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_U64(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_U8_wrap(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, ImPlotSpec const* spec) {+ ImPlotPlotStems_U8(label_id, values, count, ref, scale, start, *spec);+}++extern "C" void ImPlotPlotStems_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_F32(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_F64(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_S16(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_S32(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_S64(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_S8(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_U16(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_U32(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_U64(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotStems_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, ImPlotSpec const* spec) {+ ImPlotPlotStems_xy_U8(label_id, xs, ys, count, ref, *spec);+}++extern "C" void ImPlotPlotText_wrap(const char* text, double x, double y, ImVec2 const* pix_offset, ImPlotSpec const* spec) {+ ImPlotPlotText(text, x, y, *pix_offset, *spec);+}++extern "C" void ImPlotPlotToPixels_wrap(ImPlotPoint const* plt, ImAxis x_axis, ImAxis y_axis, ImVec2* _out) {+ *_out = ImPlotPlotToPixels(*plt, x_axis, y_axis);+}++extern "C" void ImPlotPlotToPixelsDouble_wrap(double x, double y, ImAxis x_axis, ImAxis y_axis, ImVec2* _out) {+ *_out = ImPlotPlotToPixelsDouble(x, y, x_axis, y_axis);+}++extern "C" void ImPlotPushStyleColorImVec4_wrap(ImPlotCol idx, ImVec4 const* col) {+ ImPlotPushStyleColorImVec4(idx, *col);+}++extern "C" void ImPlotPushStyleVarImVec2_wrap(ImPlotStyleVar idx, ImVec2 const* val) {+ ImPlotPushStyleVarImVec2(idx, *val);+}++extern "C" void ImPlotSampleColormap_wrap(float t, ImPlotColormap cmap, ImVec4* _out) {+ *_out = ImPlotSampleColormap(t, cmap);+}++extern "C" void ImPlotTagX_wrap(double x, ImVec4 const* col, bool round) {+ ImPlotTagX(x, *col, round);+}++extern "C" void ImPlotTagXStrUnformatted_wrap(double x, ImVec4 const* col, const char* text) {+ ImPlotTagXStrUnformatted(x, *col, text);+}++extern "C" void ImPlotTagY_wrap(double y, ImVec4 const* col, bool round) {+ ImPlotTagY(y, *col, round);+}++extern "C" void ImPlotTagYStrUnformatted_wrap(double y, ImVec4 const* col, const char* text) {+ ImPlotTagYStrUnformatted(y, *col, text);+}++extern "C" bool ImPlotRect_Contains_wrap(const ImPlotRect* self, ImPlotPoint const* p) {+ return ImPlotRect_Contains(self, *p);+}+
+ cbits/DearImGuiWrappers.h view
@@ -0,0 +1,329 @@+// Generated by dear-bindings-ffi. Do not edit.+#ifndef DEAR_IMGUI_WRAPPERS_H+#define DEAR_IMGUI_WRAPPERS_H++#include "dcimgui_implot.h"++#ifdef __cplusplus+extern "C" {+#endif++void ImPlotAnnotation_wrap(double x, double y, ImVec4 const* col, ImVec2 const* pix_offset, bool clamp, bool round);+void ImPlotAnnotationStrUnformatted_wrap(double x, double y, ImVec4 const* col, ImVec2 const* pix_offset, bool clamp, const char* text);+bool ImPlotBeginPlot_wrap(const char* title_id, ImVec2 const* size, ImPlotFlags flags);+bool ImPlotBeginSubplots_wrap(const char* title_id, int rows, int cols, ImVec2 const* size, ImPlotSubplotFlags flags, float* row_ratios, float* col_ratios);+bool ImPlotColormapButton_wrap(const char* label, ImVec2 const* size, ImPlotColormap cmap);+void ImPlotColormapScale_wrap(const char* label, double scale_min, double scale_max, ImVec2 const* size, const char* format, ImPlotColormapScaleFlags flags, ImPlotColormap cmap);+bool ImPlotDragLineX_wrap(int id, double* x, ImVec4 const* col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held);+bool ImPlotDragLineY_wrap(int id, double* y, ImVec4 const* col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held);+bool ImPlotDragPoint_wrap(int id, double* x, double* y, ImVec4 const* col, float size, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held);+bool ImPlotDragRect_wrap(int id, double* x1, double* y1, double* x2, double* y2, ImVec4 const* col, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held);+void ImPlotGetColormapColor_wrap(int idx, ImPlotColormap cmap, ImVec4* _out);+void ImPlotGetLastItemColor_wrap(ImVec4* _out);+void ImPlotGetPlotPos_wrap(ImVec2* _out);+void ImPlotGetPlotSize_wrap(ImVec2* _out);+void ImPlotItemIcon_wrap(ImVec4 const* col);+void ImPlotNextColormapColor_wrap(ImVec4* _out);+void ImPlotPlotBarGroups_F32_wrap(const char*const* label_ids, const float* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_F64_wrap(const char*const* label_ids, const double* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_S16_wrap(const char*const* label_ids, const ImS16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_S32_wrap(const char*const* label_ids, const ImS32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_S64_wrap(const char*const* label_ids, const ImS64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_S8_wrap(const char*const* label_ids, const ImS8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_U16_wrap(const char*const* label_ids, const ImU16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_U32_wrap(const char*const* label_ids, const ImU32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_U64_wrap(const char*const* label_ids, const ImU64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarGroups_U8_wrap(const char*const* label_ids, const ImU8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBarsG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_F32_wrap(const char* label_id, const float* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_F64_wrap(const char* label_id, const double* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_S16_wrap(const char* label_id, const ImS16* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_S32_wrap(const char* label_id, const ImS32* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_S64_wrap(const char* label_id, const ImS64* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_S8_wrap(const char* label_id, const ImS8* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_U16_wrap(const char* label_id, const ImU16* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_U32_wrap(const char* label_id, const ImU32* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_U64_wrap(const char* label_id, const ImU64* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_U8_wrap(const char* label_id, const ImU8* values, int count, double bar_size, double shift, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBars_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, ImPlotSpec const* spec);+void ImPlotPlotBubbles_F32_wrap(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_F64_wrap(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_S16_wrap(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_S32_wrap(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_S64_wrap(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_S8_wrap(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_U16_wrap(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_U32_wrap(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_U64_wrap(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_U8_wrap(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotBubbles_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, ImPlotSpec const* spec);+void ImPlotPlotDigitalG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDigital_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotDummy_wrap(const char* label_id, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xye_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_F32_wrap(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_F64_wrap(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotErrorBars_xynp_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_F32_wrap(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_F64_wrap(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_S16_wrap(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_S32_wrap(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_S64_wrap(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_S8_wrap(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_U16_wrap(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_U32_wrap(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_U64_wrap(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+void ImPlotPlotHeatmap_U8_wrap(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram2D_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, ImPlotRect const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_F32_wrap(const char* label_id, const float* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_F64_wrap(const char* label_id, const double* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_S16_wrap(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_S32_wrap(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_S64_wrap(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_S8_wrap(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_U16_wrap(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_U32_wrap(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_U64_wrap(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+double ImPlotPlotHistogram_U8_wrap(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, ImPlotRange const* range, ImPlotSpec const* spec);+void ImPlotPlotImage_wrap(const char* label_id, ImTextureRef const* tex_ref, ImPlotPoint const* bounds_min, ImPlotPoint const* bounds_max, ImVec2 const* uv0, ImVec2 const* uv1, ImVec4 const* tint_col, ImPlotSpec const* spec);+void ImPlotPlotInfLines_F32_wrap(const char* label_id, const float* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_F64_wrap(const char* label_id, const double* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_S16_wrap(const char* label_id, const ImS16* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_S32_wrap(const char* label_id, const ImS32* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_S64_wrap(const char* label_id, const ImS64* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_S8_wrap(const char* label_id, const ImS8* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_U16_wrap(const char* label_id, const ImU16* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_U32_wrap(const char* label_id, const ImU32* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_U64_wrap(const char* label_id, const ImU64* values, int count, ImPlotSpec const* spec);+void ImPlotPlotInfLines_U8_wrap(const char* label_id, const ImU8* values, int count, ImPlotSpec const* spec);+void ImPlotPlotLineG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotLine_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPieChart_F32_wrap(const char*const* label_ids, const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_F64_wrap(const char*const* label_ids, const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_S16_wrap(const char*const* label_ids, const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_S32_wrap(const char*const* label_ids, const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_S64_wrap(const char*const* label_ids, const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_S8_wrap(const char*const* label_ids, const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_U16_wrap(const char*const* label_ids, const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_U32_wrap(const char*const* label_ids, const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_U64_wrap(const char*const* label_ids, const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_U8_wrap(const char*const* label_ids, const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_F32_wrap(const char*const* label_ids, const float* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_F64_wrap(const char*const* label_ids, const double* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_S16_wrap(const char*const* label_ids, const ImS16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_S32_wrap(const char*const* label_ids, const ImS32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_S64_wrap(const char*const* label_ids, const ImS64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_S8_wrap(const char*const* label_ids, const ImS8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_U16_wrap(const char*const* label_ids, const ImU16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_U32_wrap(const char*const* label_ids, const ImU32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_U64_wrap(const char*const* label_ids, const ImU64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPieChart_fmt_U8_wrap(const char*const* label_ids, const ImU8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec const* spec);+void ImPlotPlotPolygon_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotPolygon_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatterG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotScatter_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotShadedG_wrap(const char* label_id, ImPlotGetter getter1, void* data1, ImPlotGetter getter2, void* data2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_F32_wrap(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_F64_wrap(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_S16_wrap(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_S32_wrap(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_S64_wrap(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_S8_wrap(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_U16_wrap(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_U32_wrap(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_U64_wrap(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_U8_wrap(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_F32_wrap(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_F64_wrap(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotShaded_xyy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, ImPlotSpec const* spec);+void ImPlotPlotStairsG_wrap(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_F32_wrap(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_F64_wrap(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_S16_wrap(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_S32_wrap(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_S64_wrap(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_S8_wrap(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_U16_wrap(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_U32_wrap(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_U64_wrap(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_U8_wrap(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStairs_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec const* spec);+void ImPlotPlotStems_F32_wrap(const char* label_id, const float* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_F64_wrap(const char* label_id, const double* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_S16_wrap(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_S32_wrap(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_S64_wrap(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_S8_wrap(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_U16_wrap(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_U32_wrap(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_U64_wrap(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_U8_wrap(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_F32_wrap(const char* label_id, const float* xs, const float* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_F64_wrap(const char* label_id, const double* xs, const double* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_S16_wrap(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_S32_wrap(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_S64_wrap(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_S8_wrap(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_U16_wrap(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_U32_wrap(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_U64_wrap(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotStems_xy_U8_wrap(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, ImPlotSpec const* spec);+void ImPlotPlotText_wrap(const char* text, double x, double y, ImVec2 const* pix_offset, ImPlotSpec const* spec);+void ImPlotPlotToPixels_wrap(ImPlotPoint const* plt, ImAxis x_axis, ImAxis y_axis, ImVec2* _out);+void ImPlotPlotToPixelsDouble_wrap(double x, double y, ImAxis x_axis, ImAxis y_axis, ImVec2* _out);+void ImPlotPushStyleColorImVec4_wrap(ImPlotCol idx, ImVec4 const* col);+void ImPlotPushStyleVarImVec2_wrap(ImPlotStyleVar idx, ImVec2 const* val);+void ImPlotSampleColormap_wrap(float t, ImPlotColormap cmap, ImVec4* _out);+void ImPlotTagX_wrap(double x, ImVec4 const* col, bool round);+void ImPlotTagXStrUnformatted_wrap(double x, ImVec4 const* col, const char* text);+void ImPlotTagY_wrap(double y, ImVec4 const* col, bool round);+void ImPlotTagYStrUnformatted_wrap(double y, ImVec4 const* col, const char* text);+bool ImPlotRect_Contains_wrap(const ImPlotRect* self, ImPlotPoint const* p);+void ImPlotInputMap_Init_wrap(void* p);+void ImPlotInputMap_Destroy_wrap(void* p);++void ImPlotPoint_Init_wrap(void* p);+void ImPlotPoint_Destroy_wrap(void* p);++void ImPlotRange_Init_wrap(void* p);+void ImPlotRange_Destroy_wrap(void* p);++void ImPlotRect_Init_wrap(void* p);+void ImPlotRect_Destroy_wrap(void* p);++void ImPlotSpec_Init_wrap(void* p);+void ImPlotSpec_Destroy_wrap(void* p);++void ImPlotStyle_Init_wrap(void* p);+void ImPlotStyle_Destroy_wrap(void* p);+++#ifdef __cplusplus+}+#endif++#endif
+ cbits/dcimgui_implot.cpp view
@@ -0,0 +1,2086 @@+// THIS FILE HAS BEEN AUTO-GENERATED BY THE 'DEAR BINDINGS' GENERATOR.+// **DO NOT EDIT DIRECTLY**+// https://github.com/dearimgui/dear_bindings++#include "imgui.h"+#include "implot.h"+// implot_shim.h declares the monomorphized PlotXxx_<Type>(...) entries+// that dcimgui_implot.cpp's emitted wrappers call into; the upstream+// implot.h doesn't see them because the shim is a generated overlay.+#include "implot_shim.h"++// Glue file consumed by dear_bindings at implot-binding generation+// time. The cimgui namespace wraps the C-shape header so the+// generator can emit type aliases without colliding with the C+++// API; pulling dcimgui.h into the same namespace promotes ImVec2+// and friends from forward-declared (the dcimgui_implot.h default) to+// fully defined, which dcimgui_implot.cpp needs for its by-value+// argument/return shims.+#define DEAR_BINDINGS_INTERNAL_GLUE_CODE+namespace cimgui+{+#include "dcimgui.h"+#include "dcimgui_implot.h"+}+#undef DEAR_BINDINGS_INTERNAL_GLUE_CODE+// By-value struct conversions++static inline cimgui::ImVec2 ConvertFromCPP_ImVec2(const ::ImVec2& src)+{+ cimgui::ImVec2 dest;+ dest.x = src.x;+ dest.y = src.y;+ return dest;+}++static inline ::ImVec2 ConvertToCPP_ImVec2(const cimgui::ImVec2& src)+{+ ::ImVec2 dest;+ dest.x = src.x;+ dest.y = src.y;+ return dest;+}++static inline cimgui::ImVec4 ConvertFromCPP_ImVec4(const ::ImVec4& src)+{+ cimgui::ImVec4 dest;+ dest.x = src.x;+ dest.y = src.y;+ dest.z = src.z;+ dest.w = src.w;+ return dest;+}++static inline ::ImVec4 ConvertToCPP_ImVec4(const cimgui::ImVec4& src)+{+ ::ImVec4 dest;+ dest.x = src.x;+ dest.y = src.y;+ dest.z = src.z;+ dest.w = src.w;+ return dest;+}++static inline cimgui::ImTextureRef ConvertFromCPP_ImTextureRef(const ::ImTextureRef& src)+{+ cimgui::ImTextureRef dest;+ dest._TexData = reinterpret_cast<cimgui::ImTextureData*>(src._TexData);+ dest._TexID = src._TexID;+ return dest;+}++static inline ::ImTextureRef ConvertToCPP_ImTextureRef(const cimgui::ImTextureRef& src)+{+ ::ImTextureRef dest;+ dest._TexData = reinterpret_cast<::ImTextureData*>(src._TexData);+ dest._TexID = src._TexID;+ return dest;+}++static inline cimgui::ImColor ConvertFromCPP_ImColor(const ::ImColor& src)+{+ cimgui::ImColor dest;+ dest.Value.x = src.Value.x;+ dest.Value.y = src.Value.y;+ dest.Value.z = src.Value.z;+ dest.Value.w = src.Value.w;+ return dest;+}++static inline ::ImColor ConvertToCPP_ImColor(const cimgui::ImColor& src)+{+ ::ImColor dest;+ dest.Value.x = src.Value.x;+ dest.Value.y = src.Value.y;+ dest.Value.z = src.Value.z;+ dest.Value.w = src.Value.w;+ return dest;+}++// Function stubs++#ifndef IMGUI_DISABLE++CIMGUI_API bool cimgui::ImPlotRange_Contains(const cimgui::ImPlotRange* self, double value)+{+ return reinterpret_cast<const ::ImPlotRange*>(self)->Contains(value);+}++CIMGUI_API double cimgui::ImPlotRange_Size(const cimgui::ImPlotRange* self)+{+ return reinterpret_cast<const ::ImPlotRange*>(self)->Size();+}++CIMGUI_API double cimgui::ImPlotRange_Clamp(const cimgui::ImPlotRange* self, double value)+{+ return reinterpret_cast<const ::ImPlotRange*>(self)->Clamp(value);+}++CIMGUI_API bool cimgui::ImPlotRect_Contains(const cimgui::ImPlotRect* self, cimgui::ImPlotPoint p)+{+ return reinterpret_cast<const ::ImPlotRect*>(self)->Contains(reinterpret_cast<const ::ImPlotPoint&>(p));+}++CIMGUI_API bool cimgui::ImPlotRect_ContainsDouble(const cimgui::ImPlotRect* self, double x, double y)+{+ return reinterpret_cast<const ::ImPlotRect*>(self)->Contains(x, y);+}++CIMGUI_API cimgui::ImPlotContext* cimgui::ImPlotCreateContext(void)+{+ return reinterpret_cast<::cimgui::ImPlotContext*>(::ImPlot::CreateContext());+}++CIMGUI_API void cimgui::ImPlotDestroyContext(cimgui::ImPlotContext* ctx)+{+ ::ImPlot::DestroyContext(reinterpret_cast<::ImPlotContext*>(ctx));+}++CIMGUI_API cimgui::ImPlotContext* cimgui::ImPlotGetCurrentContext(void)+{+ return reinterpret_cast<::cimgui::ImPlotContext*>(::ImPlot::GetCurrentContext());+}++CIMGUI_API void cimgui::ImPlotSetCurrentContext(cimgui::ImPlotContext* ctx)+{+ ::ImPlot::SetCurrentContext(reinterpret_cast<::ImPlotContext*>(ctx));+}++CIMGUI_API void cimgui::ImPlotSetImGuiContext(cimgui::ImGuiContext* ctx)+{+ ::ImPlot::SetImGuiContext(reinterpret_cast<::ImGuiContext*>(ctx));+}++CIMGUI_API bool cimgui::ImPlotBeginPlot(const char* title_id, cimgui::ImVec2 size, ImPlotFlags flags)+{+ return ::ImPlot::BeginPlot(title_id, ConvertToCPP_ImVec2(size), flags);+}++CIMGUI_API void cimgui::ImPlotEndPlot(void)+{+ ::ImPlot::EndPlot();+}++CIMGUI_API bool cimgui::ImPlotBeginSubplots(const char* title_id, int rows, int cols, cimgui::ImVec2 size, ImPlotSubplotFlags flags, float* row_ratios, float* col_ratios)+{+ return ::ImPlot::BeginSubplots(title_id, rows, cols, ConvertToCPP_ImVec2(size), flags, row_ratios, col_ratios);+}++CIMGUI_API void cimgui::ImPlotEndSubplots(void)+{+ ::ImPlot::EndSubplots();+}++CIMGUI_API void cimgui::ImPlotSetupAxis(ImAxis axis, const char* label, ImPlotAxisFlags flags)+{+ ::ImPlot::SetupAxis(axis, label, flags);+}++CIMGUI_API void cimgui::ImPlotSetupAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond)+{+ ::ImPlot::SetupAxisLimits(axis, v_min, v_max, cond);+}++CIMGUI_API void cimgui::ImPlotSetupAxisLinks(ImAxis axis, double* link_min, double* link_max)+{+ ::ImPlot::SetupAxisLinks(axis, link_min, link_max);+}++CIMGUI_API void cimgui::ImPlotSetupAxisFormat(ImAxis axis, const char* fmt)+{+ ::ImPlot::SetupAxisFormat(axis, fmt);+}++CIMGUI_API void cimgui::ImPlotSetupAxisFormatImPlotFormatter(ImAxis axis, cimgui::ImPlotFormatter formatter, void* data)+{+ ::ImPlot::SetupAxisFormat(axis, reinterpret_cast<::ImPlotFormatter>(formatter), data);+}++CIMGUI_API void cimgui::ImPlotSetupAxisTicks(ImAxis axis, const double* values, int n_ticks, const char*const labels[], bool keep_default)+{+ ::ImPlot::SetupAxisTicks(axis, values, n_ticks, labels, keep_default);+}++CIMGUI_API void cimgui::ImPlotSetupAxisTicksDouble(ImAxis axis, double v_min, double v_max, int n_ticks, const char*const labels[], bool keep_default)+{+ ::ImPlot::SetupAxisTicks(axis, v_min, v_max, n_ticks, labels, keep_default);+}++CIMGUI_API void cimgui::ImPlotSetupAxisScale(ImAxis axis, ImPlotScale scale)+{+ ::ImPlot::SetupAxisScale(axis, scale);+}++CIMGUI_API void cimgui::ImPlotSetupAxisScaleImPlotTransform(ImAxis axis, cimgui::ImPlotTransform forward, cimgui::ImPlotTransform inverse, void* data)+{+ ::ImPlot::SetupAxisScale(axis, reinterpret_cast<::ImPlotTransform>(forward), reinterpret_cast<::ImPlotTransform>(inverse), data);+}++CIMGUI_API void cimgui::ImPlotSetupAxisLimitsConstraints(ImAxis axis, double v_min, double v_max)+{+ ::ImPlot::SetupAxisLimitsConstraints(axis, v_min, v_max);+}++CIMGUI_API void cimgui::ImPlotSetupAxisZoomConstraints(ImAxis axis, double z_min, double z_max)+{+ ::ImPlot::SetupAxisZoomConstraints(axis, z_min, z_max);+}++CIMGUI_API void cimgui::ImPlotSetupAxes(const char* x_label, const char* y_label, ImPlotAxisFlags x_flags, ImPlotAxisFlags y_flags)+{+ ::ImPlot::SetupAxes(x_label, y_label, x_flags, y_flags);+}++CIMGUI_API void cimgui::ImPlotSetupAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond)+{+ ::ImPlot::SetupAxesLimits(x_min, x_max, y_min, y_max, cond);+}++CIMGUI_API void cimgui::ImPlotSetupLegend(ImPlotLocation location, ImPlotLegendFlags flags)+{+ ::ImPlot::SetupLegend(location, flags);+}++CIMGUI_API void cimgui::ImPlotSetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flags)+{+ ::ImPlot::SetupMouseText(location, flags);+}++CIMGUI_API void cimgui::ImPlotSetupFinish(void)+{+ ::ImPlot::SetupFinish();+}++CIMGUI_API void cimgui::ImPlotSetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond)+{+ ::ImPlot::SetNextAxisLimits(axis, v_min, v_max, cond);+}++CIMGUI_API void cimgui::ImPlotSetNextAxisLinks(ImAxis axis, double* link_min, double* link_max)+{+ ::ImPlot::SetNextAxisLinks(axis, link_min, link_max);+}++CIMGUI_API void cimgui::ImPlotSetNextAxisToFit(ImAxis axis)+{+ ::ImPlot::SetNextAxisToFit(axis);+}++CIMGUI_API void cimgui::ImPlotSetNextAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond)+{+ ::ImPlot::SetNextAxesLimits(x_min, x_max, y_min, y_max, cond);+}++CIMGUI_API void cimgui::ImPlotSetNextAxesToFit(void)+{+ ::ImPlot::SetNextAxesToFit();+}++CIMGUI_API void cimgui::ImPlotPlotLineG(const char* label_id, cimgui::ImPlotGetter getter, void* data, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLineG(label_id, reinterpret_cast<::ImPlotGetter>(getter), data, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatterG(const char* label_id, cimgui::ImPlotGetter getter, void* data, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatterG(label_id, reinterpret_cast<::ImPlotGetter>(getter), data, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairsG(const char* label_id, cimgui::ImPlotGetter getter, void* data, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairsG(label_id, reinterpret_cast<::ImPlotGetter>(getter), data, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShadedG(const char* label_id, cimgui::ImPlotGetter getter1, void* data1, cimgui::ImPlotGetter getter2, void* data2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShadedG(label_id, reinterpret_cast<::ImPlotGetter>(getter1), data1, reinterpret_cast<::ImPlotGetter>(getter2), data2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarsG(const char* label_id, cimgui::ImPlotGetter getter, void* data, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarsG(label_id, reinterpret_cast<::ImPlotGetter>(getter), data, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigitalG(const char* label_id, cimgui::ImPlotGetter getter, void* data, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigitalG(label_id, reinterpret_cast<::ImPlotGetter>(getter), data, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++#ifdef IMGUI_HAS_TEXTURES++CIMGUI_API void cimgui::ImPlotPlotImage(const char* label_id, cimgui::ImTextureRef tex_ref, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImVec2 uv0, cimgui::ImVec2 uv1, cimgui::ImVec4 tint_col, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotImage(label_id, ConvertToCPP_ImTextureRef(tex_ref), reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), ConvertToCPP_ImVec2(uv0), ConvertToCPP_ImVec2(uv1), ConvertToCPP_ImVec4(tint_col), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++#endif // #ifdef IMGUI_HAS_TEXTURES++#ifndef IMGUI_HAS_TEXTURES++CIMGUI_API void cimgui::ImPlotPlotImage(const char* label_id, ImTextureID tex_ref, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImVec2 uv0, cimgui::ImVec2 uv1, cimgui::ImVec4 tint_col, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotImage(label_id, tex_ref, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), ConvertToCPP_ImVec2(uv0), ConvertToCPP_ImVec2(uv1), ConvertToCPP_ImVec4(tint_col), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++#endif // #ifndef IMGUI_HAS_TEXTURES++CIMGUI_API void cimgui::ImPlotPlotText(const char* text, double x, double y, cimgui::ImVec2 pix_offset, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotText(text, x, y, ConvertToCPP_ImVec2(pix_offset), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDummy(const char* label_id, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDummy(label_id, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API bool cimgui::ImPlotDragPoint(int id, double* x, double* y, cimgui::ImVec4 col, float size, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held)+{+ return ::ImPlot::DragPoint(id, x, y, ConvertToCPP_ImVec4(col), size, flags, out_clicked, out_hovered, out_held);+}++CIMGUI_API bool cimgui::ImPlotDragLineX(int id, double* x, cimgui::ImVec4 col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held)+{+ return ::ImPlot::DragLineX(id, x, ConvertToCPP_ImVec4(col), thickness, flags, out_clicked, out_hovered, out_held);+}++CIMGUI_API bool cimgui::ImPlotDragLineY(int id, double* y, cimgui::ImVec4 col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held)+{+ return ::ImPlot::DragLineY(id, y, ConvertToCPP_ImVec4(col), thickness, flags, out_clicked, out_hovered, out_held);+}++CIMGUI_API bool cimgui::ImPlotDragRect(int id, double* x1, double* y1, double* x2, double* y2, cimgui::ImVec4 col, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held)+{+ return ::ImPlot::DragRect(id, x1, y1, x2, y2, ConvertToCPP_ImVec4(col), flags, out_clicked, out_hovered, out_held);+}++CIMGUI_API void cimgui::ImPlotAnnotation(double x, double y, cimgui::ImVec4 col, cimgui::ImVec2 pix_offset, bool clamp, bool round)+{+ ::ImPlot::Annotation(x, y, ConvertToCPP_ImVec4(col), ConvertToCPP_ImVec2(pix_offset), clamp, round);+}++CIMGUI_API void cimgui::ImPlotAnnotationStr(double x, double y, cimgui::ImVec4 col, cimgui::ImVec2 pix_offset, bool clamp, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ ::ImPlot::AnnotationV(x, y, ConvertToCPP_ImVec4(col), ConvertToCPP_ImVec2(pix_offset), clamp, fmt, args);+ va_end(args);+}++CIMGUI_API void cimgui::ImPlotAnnotationStrUnformatted(double x, double y, cimgui::ImVec4 col, cimgui::ImVec2 pix_offset, bool clamp, const char* text)+{+ ::ImPlot::Annotation(x, y, ConvertToCPP_ImVec4(col), ConvertToCPP_ImVec2(pix_offset), clamp, "%s", text);+}++CIMGUI_API void cimgui::ImPlotAnnotationV(double x, double y, cimgui::ImVec4 col, cimgui::ImVec2 pix_offset, bool clamp, const char* fmt, va_list args)+{+ ::ImPlot::AnnotationV(x, y, ConvertToCPP_ImVec4(col), ConvertToCPP_ImVec2(pix_offset), clamp, fmt, args);+}++CIMGUI_API void cimgui::ImPlotTagX(double x, cimgui::ImVec4 col, bool round)+{+ ::ImPlot::TagX(x, ConvertToCPP_ImVec4(col), round);+}++CIMGUI_API void cimgui::ImPlotTagXStr(double x, cimgui::ImVec4 col, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ ::ImPlot::TagXV(x, ConvertToCPP_ImVec4(col), fmt, args);+ va_end(args);+}++CIMGUI_API void cimgui::ImPlotTagXStrUnformatted(double x, cimgui::ImVec4 col, const char* text)+{+ ::ImPlot::TagX(x, ConvertToCPP_ImVec4(col), "%s", text);+}++CIMGUI_API void cimgui::ImPlotTagXV(double x, cimgui::ImVec4 col, const char* fmt, va_list args)+{+ ::ImPlot::TagXV(x, ConvertToCPP_ImVec4(col), fmt, args);+}++CIMGUI_API void cimgui::ImPlotTagY(double y, cimgui::ImVec4 col, bool round)+{+ ::ImPlot::TagY(y, ConvertToCPP_ImVec4(col), round);+}++CIMGUI_API void cimgui::ImPlotTagYStr(double y, cimgui::ImVec4 col, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ ::ImPlot::TagYV(y, ConvertToCPP_ImVec4(col), fmt, args);+ va_end(args);+}++CIMGUI_API void cimgui::ImPlotTagYStrUnformatted(double y, cimgui::ImVec4 col, const char* text)+{+ ::ImPlot::TagY(y, ConvertToCPP_ImVec4(col), "%s", text);+}++CIMGUI_API void cimgui::ImPlotTagYV(double y, cimgui::ImVec4 col, const char* fmt, va_list args)+{+ ::ImPlot::TagYV(y, ConvertToCPP_ImVec4(col), fmt, args);+}++CIMGUI_API void cimgui::ImPlotSetAxis(ImAxis axis)+{+ ::ImPlot::SetAxis(axis);+}++CIMGUI_API void cimgui::ImPlotSetAxes(ImAxis x_axis, ImAxis y_axis)+{+ ::ImPlot::SetAxes(x_axis, y_axis);+}++CIMGUI_API cimgui::ImVec2 cimgui::ImPlotPlotToPixels(cimgui::ImPlotPoint plt, ImAxis x_axis, ImAxis y_axis)+{+ return ConvertFromCPP_ImVec2(::ImPlot::PlotToPixels(reinterpret_cast<const ::ImPlotPoint&>(plt), x_axis, y_axis));+}++CIMGUI_API cimgui::ImVec2 cimgui::ImPlotPlotToPixelsDouble(double x, double y, ImAxis x_axis, ImAxis y_axis)+{+ return ConvertFromCPP_ImVec2(::ImPlot::PlotToPixels(x, y, x_axis, y_axis));+}++CIMGUI_API cimgui::ImVec2 cimgui::ImPlotGetPlotPos(void)+{+ return ConvertFromCPP_ImVec2(::ImPlot::GetPlotPos());+}++CIMGUI_API cimgui::ImVec2 cimgui::ImPlotGetPlotSize(void)+{+ return ConvertFromCPP_ImVec2(::ImPlot::GetPlotSize());+}++CIMGUI_API bool cimgui::ImPlotIsPlotHovered(void)+{+ return ::ImPlot::IsPlotHovered();+}++CIMGUI_API bool cimgui::ImPlotIsAxisHovered(ImAxis axis)+{+ return ::ImPlot::IsAxisHovered(axis);+}++CIMGUI_API bool cimgui::ImPlotIsSubplotsHovered(void)+{+ return ::ImPlot::IsSubplotsHovered();+}++CIMGUI_API bool cimgui::ImPlotIsPlotSelected(void)+{+ return ::ImPlot::IsPlotSelected();+}++CIMGUI_API void cimgui::ImPlotCancelPlotSelection(void)+{+ ::ImPlot::CancelPlotSelection();+}++CIMGUI_API void cimgui::ImPlotHideNextItem(bool hidden, ImPlotCond cond)+{+ ::ImPlot::HideNextItem(hidden, cond);+}++CIMGUI_API bool cimgui::ImPlotBeginAlignedPlots(const char* group_id, bool vertical)+{+ return ::ImPlot::BeginAlignedPlots(group_id, vertical);+}++CIMGUI_API void cimgui::ImPlotEndAlignedPlots(void)+{+ ::ImPlot::EndAlignedPlots();+}++CIMGUI_API bool cimgui::ImPlotBeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_button)+{+ return ::ImPlot::BeginLegendPopup(label_id, mouse_button);+}++CIMGUI_API void cimgui::ImPlotEndLegendPopup(void)+{+ ::ImPlot::EndLegendPopup();+}++CIMGUI_API bool cimgui::ImPlotIsLegendEntryHovered(const char* label_id)+{+ return ::ImPlot::IsLegendEntryHovered(label_id);+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropTargetPlot(void)+{+ return ::ImPlot::BeginDragDropTargetPlot();+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropTargetAxis(ImAxis axis)+{+ return ::ImPlot::BeginDragDropTargetAxis(axis);+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropTargetLegend(void)+{+ return ::ImPlot::BeginDragDropTargetLegend();+}++CIMGUI_API void cimgui::ImPlotEndDragDropTarget(void)+{+ ::ImPlot::EndDragDropTarget();+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropSourcePlot(ImGuiDragDropFlags flags)+{+ return ::ImPlot::BeginDragDropSourcePlot(flags);+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropSourceAxis(ImAxis axis, ImGuiDragDropFlags flags)+{+ return ::ImPlot::BeginDragDropSourceAxis(axis, flags);+}++CIMGUI_API bool cimgui::ImPlotBeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags flags)+{+ return ::ImPlot::BeginDragDropSourceItem(label_id, flags);+}++CIMGUI_API void cimgui::ImPlotEndDragDropSource(void)+{+ ::ImPlot::EndDragDropSource();+}++CIMGUI_API cimgui::ImPlotStyle* cimgui::ImPlotGetStyle(void)+{+ return reinterpret_cast<::cimgui::ImPlotStyle*>(&::ImPlot::GetStyle());+}++CIMGUI_API void cimgui::ImPlotStyleColorsAuto(cimgui::ImPlotStyle* dst)+{+ ::ImPlot::StyleColorsAuto(reinterpret_cast<::ImPlotStyle*>(dst));+}++CIMGUI_API void cimgui::ImPlotStyleColorsClassic(cimgui::ImPlotStyle* dst)+{+ ::ImPlot::StyleColorsClassic(reinterpret_cast<::ImPlotStyle*>(dst));+}++CIMGUI_API void cimgui::ImPlotStyleColorsDark(cimgui::ImPlotStyle* dst)+{+ ::ImPlot::StyleColorsDark(reinterpret_cast<::ImPlotStyle*>(dst));+}++CIMGUI_API void cimgui::ImPlotStyleColorsLight(cimgui::ImPlotStyle* dst)+{+ ::ImPlot::StyleColorsLight(reinterpret_cast<::ImPlotStyle*>(dst));+}++CIMGUI_API void cimgui::ImPlotPushStyleColor(ImPlotCol idx, ImU32 col)+{+ ::ImPlot::PushStyleColor(idx, col);+}++CIMGUI_API void cimgui::ImPlotPushStyleColorImVec4(ImPlotCol idx, cimgui::ImVec4 col)+{+ ::ImPlot::PushStyleColor(idx, ConvertToCPP_ImVec4(col));+}++CIMGUI_API void cimgui::ImPlotPopStyleColor(int count)+{+ ::ImPlot::PopStyleColor(count);+}++CIMGUI_API void cimgui::ImPlotPushStyleVar(ImPlotStyleVar idx, float val)+{+ ::ImPlot::PushStyleVar(idx, val);+}++CIMGUI_API void cimgui::ImPlotPushStyleVarInt(ImPlotStyleVar idx, int val)+{+ ::ImPlot::PushStyleVar(idx, val);+}++CIMGUI_API void cimgui::ImPlotPushStyleVarImVec2(ImPlotStyleVar idx, cimgui::ImVec2 val)+{+ ::ImPlot::PushStyleVar(idx, ConvertToCPP_ImVec2(val));+}++CIMGUI_API void cimgui::ImPlotPopStyleVar(int count)+{+ ::ImPlot::PopStyleVar(count);+}++CIMGUI_API cimgui::ImVec4 cimgui::ImPlotGetLastItemColor(void)+{+ return ConvertFromCPP_ImVec4(::ImPlot::GetLastItemColor());+}++CIMGUI_API const char* cimgui::ImPlotGetStyleColorName(ImPlotCol idx)+{+ return ::ImPlot::GetStyleColorName(idx);+}++CIMGUI_API const char* cimgui::ImPlotGetMarkerName(ImPlotMarker idx)+{+ return ::ImPlot::GetMarkerName(idx);+}++CIMGUI_API ImPlotMarker cimgui::ImPlotNextMarker(void)+{+ return ::ImPlot::NextMarker();+}++CIMGUI_API ImPlotColormap cimgui::ImPlotAddColormap(const char* name, const cimgui::ImVec4* cols, int size, bool qual)+{+ return ::ImPlot::AddColormap(name, reinterpret_cast<const ::ImVec4*>(cols), size, qual);+}++CIMGUI_API ImPlotColormap cimgui::ImPlotAddColormapImU32Ptr(const char* name, const ImU32* cols, int size, bool qual)+{+ return ::ImPlot::AddColormap(name, cols, size, qual);+}++CIMGUI_API int cimgui::ImPlotGetColormapCount(void)+{+ return ::ImPlot::GetColormapCount();+}++CIMGUI_API const char* cimgui::ImPlotGetColormapName(ImPlotColormap cmap)+{+ return ::ImPlot::GetColormapName(cmap);+}++CIMGUI_API ImPlotColormap cimgui::ImPlotGetColormapIndex(const char* name)+{+ return ::ImPlot::GetColormapIndex(name);+}++CIMGUI_API void cimgui::ImPlotPushColormap(ImPlotColormap cmap)+{+ ::ImPlot::PushColormap(cmap);+}++CIMGUI_API void cimgui::ImPlotPushColormapStr(const char* name)+{+ ::ImPlot::PushColormap(name);+}++CIMGUI_API void cimgui::ImPlotPopColormap(int count)+{+ ::ImPlot::PopColormap(count);+}++CIMGUI_API cimgui::ImVec4 cimgui::ImPlotNextColormapColor(void)+{+ return ConvertFromCPP_ImVec4(::ImPlot::NextColormapColor());+}++CIMGUI_API int cimgui::ImPlotGetColormapSize(ImPlotColormap cmap)+{+ return ::ImPlot::GetColormapSize(cmap);+}++CIMGUI_API cimgui::ImVec4 cimgui::ImPlotGetColormapColor(int idx, ImPlotColormap cmap)+{+ return ConvertFromCPP_ImVec4(::ImPlot::GetColormapColor(idx, cmap));+}++CIMGUI_API cimgui::ImVec4 cimgui::ImPlotSampleColormap(float t, ImPlotColormap cmap)+{+ return ConvertFromCPP_ImVec4(::ImPlot::SampleColormap(t, cmap));+}++CIMGUI_API void cimgui::ImPlotColormapScale(const char* label, double scale_min, double scale_max, cimgui::ImVec2 size, const char* format, ImPlotColormapScaleFlags flags, ImPlotColormap cmap)+{+ ::ImPlot::ColormapScale(label, scale_min, scale_max, ConvertToCPP_ImVec2(size), format, flags, cmap);+}++CIMGUI_API bool cimgui::ImPlotColormapSlider(const char* label, float* t, cimgui::ImVec4* out, const char* format, ImPlotColormap cmap)+{+ return ::ImPlot::ColormapSlider(label, t, reinterpret_cast<::ImVec4*>(out), format, cmap);+}++CIMGUI_API bool cimgui::ImPlotColormapButton(const char* label, cimgui::ImVec2 size, ImPlotColormap cmap)+{+ return ::ImPlot::ColormapButton(label, ConvertToCPP_ImVec2(size), cmap);+}++CIMGUI_API void cimgui::ImPlotBustColorCache(const char* plot_title_id)+{+ ::ImPlot::BustColorCache(plot_title_id);+}++CIMGUI_API cimgui::ImPlotInputMap* cimgui::ImPlotGetInputMap(void)+{+ return reinterpret_cast<::cimgui::ImPlotInputMap*>(&::ImPlot::GetInputMap());+}++CIMGUI_API void cimgui::ImPlotMapInputDefault(cimgui::ImPlotInputMap* dst)+{+ ::ImPlot::MapInputDefault(reinterpret_cast<::ImPlotInputMap*>(dst));+}++CIMGUI_API void cimgui::ImPlotMapInputReverse(cimgui::ImPlotInputMap* dst)+{+ ::ImPlot::MapInputReverse(reinterpret_cast<::ImPlotInputMap*>(dst));+}++CIMGUI_API void cimgui::ImPlotItemIcon(cimgui::ImVec4 col)+{+ ::ImPlot::ItemIcon(ConvertToCPP_ImVec4(col));+}++CIMGUI_API void cimgui::ImPlotItemIconImU32(ImU32 col)+{+ ::ImPlot::ItemIcon(col);+}++CIMGUI_API void cimgui::ImPlotColormapIcon(ImPlotColormap cmap)+{+ ::ImPlot::ColormapIcon(cmap);+}++CIMGUI_API cimgui::ImDrawList* cimgui::ImPlotGetPlotDrawList(void)+{+ return reinterpret_cast<::cimgui::ImDrawList*>(::ImPlot::GetPlotDrawList());+}++CIMGUI_API void cimgui::ImPlotPushPlotClipRect(float expand)+{+ ::ImPlot::PushPlotClipRect(expand);+}++CIMGUI_API void cimgui::ImPlotPopPlotClipRect(void)+{+ ::ImPlot::PopPlotClipRect();+}++CIMGUI_API bool cimgui::ImPlotShowStyleSelector(const char* label)+{+ return ::ImPlot::ShowStyleSelector(label);+}++CIMGUI_API bool cimgui::ImPlotShowColormapSelector(const char* label)+{+ return ::ImPlot::ShowColormapSelector(label);+}++CIMGUI_API bool cimgui::ImPlotShowInputMapSelector(const char* label)+{+ return ::ImPlot::ShowInputMapSelector(label);+}++CIMGUI_API void cimgui::ImPlotShowStyleEditor(cimgui::ImPlotStyle* ref)+{+ ::ImPlot::ShowStyleEditor(reinterpret_cast<::ImPlotStyle*>(ref));+}++CIMGUI_API void cimgui::ImPlotShowUserGuide(void)+{+ ::ImPlot::ShowUserGuide();+}++CIMGUI_API void cimgui::ImPlotShowMetricsWindow(bool* p_popen)+{+ ::ImPlot::ShowMetricsWindow(p_popen);+}++#endif // #ifndef IMGUI_DISABLE++CIMGUI_API void cimgui::ImPlotPlotLine_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_S8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_U8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_S16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_U16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_S32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_U32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_S64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_U64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_F32(const char* label_id, const float* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_F32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_F64(const char* label_id, const double* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_F64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_S8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_U8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_S16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_U16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_S32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_U32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_S64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_U64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_F32(const char* label_id, const float* xs, const float* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_F32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotLine_xy_F64(const char* label_id, const double* xs, const double* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotLine_xy_F64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_S8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_U8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_S16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_U16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_S32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_U32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_S64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_U64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_F32(const char* label_id, const float* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_F32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_F64(const char* label_id, const double* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_F64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_S8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_U8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_S16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_U16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_S32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_U32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_S64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_U64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_F32(const char* label_id, const float* xs, const float* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_F32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotScatter_xy_F64(const char* label_id, const double* xs, const double* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotScatter_xy_F64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_S8(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_S8(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_U8(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_U8(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_S16(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_S16(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_U16(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_U16(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_S32(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_S32(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_U32(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_U32(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_S64(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_S64(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_U64(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_U64(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_F32(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_F32(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_F64(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_F64(label_id, values, szs, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_S8(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_U8(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_S16(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_U16(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_S32(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_U32(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_S64(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_U64(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_F32(const char* label_id, const float* xs, const float* ys, const float* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_F32(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBubbles_xy_F64(const char* label_id, const double* xs, const double* ys, const double* szs, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBubbles_xy_F64(label_id, xs, ys, szs, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_S8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_U8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_S16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_U16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_S32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_U32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_S64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_U64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_F32(const char* label_id, const float* xs, const float* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_F32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPolygon_F64(const char* label_id, const double* xs, const double* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPolygon_F64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_S8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_U8(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_S16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_U16(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_S32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_U32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_S64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_U64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_F32(const char* label_id, const float* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_F32(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_F64(const char* label_id, const double* values, int count, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_F64(label_id, values, count, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_S8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_U8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_S16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_U16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_S32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_U32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_S64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_U64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_F32(const char* label_id, const float* xs, const float* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_F32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStairs_xy_F64(const char* label_id, const double* xs, const double* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStairs_xy_F64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_S8(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_S8(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_U8(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_U8(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_S16(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_S16(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_U16(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_U16(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_S32(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_S32(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_U32(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_U32(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_S64(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_S64(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_U64(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_U64(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_F32(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_F32(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_F64(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_F64(label_id, values, count, yref, xscale, xstart, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_S8(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_U8(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_S16(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_U16(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_S32(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_U32(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_S64(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_U64(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_F32(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double yref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xy_F64(label_id, xs, ys, count, yref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_S8(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_S8(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_U8(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_U8(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_S16(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_S16(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_U16(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_U16(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_S32(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_S32(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_U32(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_U32(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_S64(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_S64(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_U64(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_U64(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_F32(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_F32(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotShaded_xyy_F64(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotShaded_xyy_F64(label_id, xs, ys1, ys2, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_S8(const char* label_id, const ImS8* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_S8(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_U8(const char* label_id, const ImU8* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_U8(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_S16(const char* label_id, const ImS16* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_S16(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_U16(const char* label_id, const ImU16* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_U16(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_S32(const char* label_id, const ImS32* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_S32(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_U32(const char* label_id, const ImU32* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_U32(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_S64(const char* label_id, const ImS64* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_S64(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_U64(const char* label_id, const ImU64* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_U64(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_F32(const char* label_id, const float* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_F32(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_F64(const char* label_id, const double* values, int count, double bar_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_F64(label_id, values, count, bar_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_S8(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_U8(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_S16(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_U16(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_S32(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_U32(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_S64(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_U64(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_F32(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBars_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double bar_size, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBars_xy_F64(label_id, xs, ys, count, bar_size, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_S8(const char*const label_ids[], const ImS8* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_S8(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_U8(const char*const label_ids[], const ImU8* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_U8(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_S16(const char*const label_ids[], const ImS16* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_S16(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_U16(const char*const label_ids[], const ImU16* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_U16(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_S32(const char*const label_ids[], const ImS32* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_S32(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_U32(const char*const label_ids[], const ImU32* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_U32(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_S64(const char*const label_ids[], const ImS64* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_S64(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_U64(const char*const label_ids[], const ImU64* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_U64(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_F32(const char*const label_ids[], const float* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_F32(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotBarGroups_F64(const char*const label_ids[], const double* values, int item_count, int group_count, double group_size, double shift, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotBarGroups_F64(label_ids, values, item_count, group_count, group_size, shift, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_S8(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_U8(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_S16(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_U16(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_S32(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_U32(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_S64(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_U64(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_F32(const char* label_id, const float* xs, const float* ys, const float* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_F32(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xye_F64(const char* label_id, const double* xs, const double* ys, const double* err, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xye_F64(label_id, xs, ys, err, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_S8(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_U8(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_S16(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_U16(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_S32(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_U32(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_S64(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_U64(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_F32(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_F32(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotErrorBars_xynp_F64(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotErrorBars_xynp_F64(label_id, xs, ys, neg, pos, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_S8(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_S8(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_U8(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_U8(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_S16(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_S16(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_U16(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_U16(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_S32(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_S32(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_U32(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_U32(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_S64(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_S64(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_U64(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_U64(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_F32(const char* label_id, const float* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_F32(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_F64(const char* label_id, const double* values, int count, double ref, double scale, double start, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_F64(label_id, values, count, ref, scale, start, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_S8(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_U8(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_S16(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_U16(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_S32(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_U32(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_S64(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_U64(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_F32(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotStems_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double ref, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotStems_xy_F64(label_id, xs, ys, count, ref, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_S8(const char* label_id, const ImS8* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_S8(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_U8(const char* label_id, const ImU8* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_U8(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_S16(const char* label_id, const ImS16* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_S16(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_U16(const char* label_id, const ImU16* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_U16(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_S32(const char* label_id, const ImS32* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_S32(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_U32(const char* label_id, const ImU32* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_U32(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_S64(const char* label_id, const ImS64* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_S64(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_U64(const char* label_id, const ImU64* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_U64(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_F32(const char* label_id, const float* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_F32(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotInfLines_F64(const char* label_id, const double* values, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotInfLines_F64(label_id, values, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_S8(const char*const label_ids[], const ImS8* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_S8(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_U8(const char*const label_ids[], const ImU8* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_U8(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_S16(const char*const label_ids[], const ImS16* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_S16(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_U16(const char*const label_ids[], const ImU16* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_U16(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_S32(const char*const label_ids[], const ImS32* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_S32(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_U32(const char*const label_ids[], const ImU32* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_U32(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_S64(const char*const label_ids[], const ImS64* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_S64(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_U64(const char*const label_ids[], const ImU64* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_U64(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_F32(const char*const label_ids[], const float* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_F32(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_fmt_F64(const char*const label_ids[], const double* values, int count, double x, double y, double radius, cimgui::ImPlotFormatter fmt, void* fmt_data, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_fmt_F64(label_ids, values, count, x, y, radius, reinterpret_cast<::ImPlotFormatter>(fmt), fmt_data, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_S8(const char*const label_ids[], const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_S8(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_U8(const char*const label_ids[], const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_U8(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_S16(const char*const label_ids[], const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_S16(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_U16(const char*const label_ids[], const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_U16(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_S32(const char*const label_ids[], const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_S32(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_U32(const char*const label_ids[], const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_U32(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_S64(const char*const label_ids[], const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_S64(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_U64(const char*const label_ids[], const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_U64(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_F32(const char*const label_ids[], const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_F32(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotPieChart_F64(const char*const label_ids[], const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotPieChart_F64(label_ids, values, count, x, y, radius, label_fmt, angle0, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_S8(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_S8(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_U8(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_U8(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_S16(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_S16(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_U16(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_U16(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_S32(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_S32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_U32(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_U32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_S64(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_S64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_U64(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_U64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_F32(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_F32(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotHeatmap_F64(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, cimgui::ImPlotPoint bounds_min, cimgui::ImPlotPoint bounds_max, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotHeatmap_F64(label_id, values, rows, cols, scale_min, scale_max, label_fmt, reinterpret_cast<const ::ImPlotPoint&>(bounds_min), reinterpret_cast<const ::ImPlotPoint&>(bounds_max), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_S8(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_S8(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_U8(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_U8(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_S16(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_S16(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_U16(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_U16(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_S32(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_S32(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_U32(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_U32(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_S64(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_S64(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_U64(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_U64(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_F32(const char* label_id, const float* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_F32(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram_F64(const char* label_id, const double* values, int count, int bins, double bar_scale, cimgui::ImPlotRange range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram_F64(label_id, values, count, bins, bar_scale, reinterpret_cast<const ::ImPlotRange&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_S8(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_U8(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_S16(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_U16(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_S32(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_U32(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_S64(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_U64(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_F32(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_F32(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API double cimgui::ImPlotPlotHistogram2D_F64(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, cimgui::ImPlotRect range, cimgui::ImPlotSpec spec)+{+ return ::ImPlot::PlotHistogram2D_F64(label_id, xs, ys, count, x_bins, y_bins, reinterpret_cast<const ::ImPlotRect&>(range), reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_S8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_U8(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_S16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_U16(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_S32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_U32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_S64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_U64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_F32(const char* label_id, const float* xs, const float* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_F32(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}++CIMGUI_API void cimgui::ImPlotPlotDigital_F64(const char* label_id, const double* xs, const double* ys, int count, cimgui::ImPlotSpec spec)+{+ ::ImPlot::PlotDigital_F64(label_id, xs, ys, count, reinterpret_cast<const ::ImPlotSpec&>(spec));+}
+ cbits/dcimgui_implot.h view
@@ -0,0 +1,1599 @@+// THIS FILE HAS BEEN AUTO-GENERATED BY THE 'DEAR BINDINGS' GENERATOR.+// **DO NOT EDIT DIRECTLY**+// https://github.com/dearimgui/dear_bindings++// MIT License+// Auto-generated forward declarations for C header+typedef struct ImPlotSpec_t ImPlotSpec;+typedef struct ImPlotPoint_t ImPlotPoint;+typedef struct ImPlotRange_t ImPlotRange;+typedef struct ImPlotRect_t ImPlotRect;+typedef struct ImPlotStyle_t ImPlotStyle;+typedef struct ImPlotInputMap_t ImPlotInputMap;+// ImDrawIdx: vertex index. [Compile-time configurable type]+// - To use 16-bit indices + allow large meshes: backend need to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset (recommended).+// - To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in your imconfig.h file.+#ifndef ImDrawIdx+typedef unsigned short ImDrawIdx; // Default: 16-bit (for maximum compatibility with renderer backends)+#endif // #ifndef ImDrawIdx++// Copyright (c) 2020-2024 Evan Pezent+// Copyright (c) 2025-2026 Breno Cunha Queiroz++// Permission is hereby granted, free of charge, to any person obtaining a copy+// of this software and associated documentation files (the "Software"), to deal+// in the Software without restriction, including without limitation the rights+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+// copies of the Software, and to permit persons to whom the Software is+// furnished to do so, subject to the following conditions:++// The above copyright notice and this permission notice shall be included in all+// copies or substantial portions of the Software.++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+// SOFTWARE.++// ImPlot v1.1 WIP++// Table of Contents:+//+// [SECTION] Macros and Defines+// [SECTION] Enums and Types+// [SECTION] Callbacks+// [SECTION] Contexts+// [SECTION] Begin/End Plot+// [SECTION] Begin/End Subplot+// [SECTION] Setup+// [SECTION] SetNext+// [SECTION] Plot Items+// [SECTION] Plot Tools+// [SECTION] Plot Utils+// [SECTION] Legend Utils+// [SECTION] Drag and Drop+// [SECTION] Styling+// [SECTION] Colormaps+// [SECTION] Input Mapping+// [SECTION] Miscellaneous+// [SECTION] Demo+// [SECTION] Obsolete API++#pragma once++#ifdef __cplusplus+extern "C"+{+#endif+#include "dcimgui.h"+#ifndef IMGUI_DISABLE+// [SECTION] Macros and Defines+//-----------------------------------------------------------------------------++// Define attributes of all API symbols declarations (e.g. for DLL under Windows)+// Using ImPlot via a shared library is not recommended, because we don't guarantee+// backward nor forward ABI compatibility and also function call overhead. If you+// do use ImPlot as a DLL, be sure to call SetImGuiContext (see Miscellaneous section).+#ifndef CIMGUI_API+#define CIMGUI_API+#endif // #ifndef CIMGUI_API+// ImPlot version string.+#define IMPLOT_VERSION "1.1 WIP"+// ImPlot version integer encoded as XYYZZ (X=major, YY=minor, ZZ=patch).+#define IMPLOT_VERSION_NUM 10100+// Macro for templated plotting functions; keeps header clean.+#define IMPLOT_TMP template <typename T> CIMGUI_API++// Indicates variable should deduced automatically.+// Special color used to indicate that a color should be deduced automatically.++//-----------------------------------------------------------------------------+// [SECTION] Enums and Types+//-----------------------------------------------------------------------------++// Forward declarations+typedef struct ImPlotContext_t ImPlotContext; // ImPlot context (opaque struct, see implot_internal.h)++// Enums/Flags+typedef int ImAxis; // -> enum ImAxis_+typedef int ImPlotProp; // -> enum ImPlotProp_+typedef int ImPlotFlags; // -> enum ImPlotFlags_+typedef int ImPlotAxisFlags; // -> enum ImPlotAxisFlags_+typedef int ImPlotSubplotFlags; // -> enum ImPlotSubplotFlags_+typedef int ImPlotLegendFlags; // -> enum ImPlotLegendFlags_+typedef int ImPlotMouseTextFlags; // -> enum ImPlotMouseTextFlags_+typedef int ImPlotDragToolFlags; // -> ImPlotDragToolFlags_+typedef int ImPlotColormapScaleFlags; // -> ImPlotColormapScaleFlags_++typedef int ImPlotItemFlags; // -> ImPlotItemFlags_+typedef int ImPlotLineFlags; // -> ImPlotLineFlags_+typedef int ImPlotScatterFlags; // -> ImPlotScatterFlags+typedef int ImPlotBubblesFlags; // -> ImPlotBubblesFlags+typedef int ImPlotPolygonFlags; // -> ImPlotPolygonFlags_+typedef int ImPlotStairsFlags; // -> ImPlotStairsFlags_+typedef int ImPlotShadedFlags; // -> ImPlotShadedFlags_+typedef int ImPlotBarsFlags; // -> ImPlotBarsFlags_+typedef int ImPlotBarGroupsFlags; // -> ImPlotBarGroupsFlags_+typedef int ImPlotErrorBarsFlags; // -> ImPlotErrorBarsFlags_+typedef int ImPlotStemsFlags; // -> ImPlotStemsFlags_+typedef int ImPlotInfLinesFlags; // -> ImPlotInfLinesFlags_+typedef int ImPlotPieChartFlags; // -> ImPlotPieChartFlags_+typedef int ImPlotHeatmapFlags; // -> ImPlotHeatmapFlags_+typedef int ImPlotHistogramFlags; // -> ImPlotHistogramFlags_+typedef int ImPlotDigitalFlags; // -> ImPlotDigitalFlags_+typedef int ImPlotImageFlags; // -> ImPlotImageFlags_+typedef int ImPlotTextFlags; // -> ImPlotTextFlags_+typedef int ImPlotDummyFlags; // -> ImPlotDummyFlags_++typedef int ImPlotCond; // -> enum ImPlotCond_+typedef int ImPlotCol; // -> enum ImPlotCol_+typedef int ImPlotStyleVar; // -> enum ImPlotStyleVar_+typedef int ImPlotScale; // -> enum ImPlotScale_+typedef int ImPlotMarker; // -> enum ImPlotMarker_+typedef int ImPlotColormap; // -> enum ImPlotColormap_+typedef int ImPlotLocation; // -> enum ImPlotLocation_+typedef int ImPlotBin; // -> enum ImPlotBin_++// Axis indices. The values assigned may change; NEVER hardcode these.+typedef enum+{+ // horizontal axes+ ImAxis_X1 = 0, // enabled by default+ ImAxis_X2, // disabled by default+ ImAxis_X3, // disabled by default+ // vertical axes+ ImAxis_Y1, // enabled by default+ ImAxis_Y2, // disabled by default+ ImAxis_Y3, // disabled by default+ // bookkeeping+ ImAxis_COUNT,+} ImAxis_;++// Plotting properties. These provide syntactic sugar for creating ImPlotSpecs from (ImPlotProp,value) pairs. See ImPlotSpec documentation.+typedef enum+{+ ImPlotProp_LineColor, // line color (applies to lines, bar edges); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImPlotProp_LineColors, // array of colors for each line; if nullptr, use LineColor for all lines+ ImPlotProp_LineWeight, // line weight in pixels (applies to lines, bar edges, marker edges)+ ImPlotProp_FillColor, // fill color (applies to shaded regions, bar faces); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImPlotProp_FillColors, // array of colors for each fill; if nullptr, use FillColor for all fills+ ImPlotProp_FillAlpha, // alpha multiplier (applies to FillColor, FillColors, MarkerFillColor, and MarkerFillColors)+ ImPlotProp_Marker, // marker type; specify ImPlotMarker_Auto to use the next unused marker+ ImPlotProp_MarkerSize, // size of markers (radius) *in pixels*+ ImPlotProp_MarkerSizes, // array of sizes for each marker; if nullptr, use MarkerSize for all markers+ ImPlotProp_MarkerLineColor, // marker edge color; IMPLOT_AUTO_COL will use LineColor+ ImPlotProp_MarkerLineColors, // array of colors for each marker edge; if nullptr, use MarkerLineColor for all markers+ ImPlotProp_MarkerFillColor, // marker face color; IMPLOT_AUTO_COL will use LineColor+ ImPlotProp_MarkerFillColors, // array of colors for each marker face; if nullptr, use MarkerFillColor for all markers+ ImPlotProp_Size, // size of error bar whiskers (width or height), and digital bars (height) *in pixels*+ ImPlotProp_Offset, // data index offset+ ImPlotProp_Stride, // data stride in bytes; IMPLOT_AUTO will result in sizeof(T) where T is the type passed to PlotX+ ImPlotProp_Flags, // optional item flags; can be composed from common ImPlotItemFlags and/or specialized ImPlotXFlags+} ImPlotProp_;++// Options for plots (see BeginPlot).+typedef enum+{+ ImPlotFlags_None = 0, // default+ ImPlotFlags_NoTitle = 1<<0, // the plot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MyPlot")+ ImPlotFlags_NoLegend = 1<<1, // the legend will not be displayed+ ImPlotFlags_NoMouseText = 1<<2, // the mouse position, in plot coordinates, will not be displayed inside of the plot+ ImPlotFlags_NoInputs = 1<<3, // the user will not be able to interact with the plot+ ImPlotFlags_NoMenus = 1<<4, // the user will not be able to open context menus+ ImPlotFlags_NoBoxSelect = 1<<5, // the user will not be able to box-select+ ImPlotFlags_NoFrame = 1<<6, // the ImGui frame will not be rendered+ ImPlotFlags_Equal = 1<<7, // x and y axes pairs will be constrained to have the same units/pixel+ ImPlotFlags_Crosshairs = 1<<8, // the default mouse cursor will be replaced with a crosshair when hovered+ ImPlotFlags_CanvasOnly = ImPlotFlags_NoTitle | ImPlotFlags_NoLegend | ImPlotFlags_NoMenus | ImPlotFlags_NoBoxSelect | ImPlotFlags_NoMouseText,+} ImPlotFlags_;++// Options for plot axes (see SetupAxis).+typedef enum+{+ ImPlotAxisFlags_None = 0, // default+ ImPlotAxisFlags_NoLabel = 1<<0, // the axis label will not be displayed (axis labels are also hidden if the supplied string name is nullptr)+ ImPlotAxisFlags_NoGridLines = 1<<1, // no grid lines will be displayed+ ImPlotAxisFlags_NoTickMarks = 1<<2, // no tick marks will be displayed+ ImPlotAxisFlags_NoTickLabels = 1<<3, // no text labels will be displayed+ ImPlotAxisFlags_NoInitialFit = 1<<4, // axis will not be initially fit to data extents on the first rendered frame+ ImPlotAxisFlags_NoMenus = 1<<5, // the user will not be able to open context menus with right-click+ ImPlotAxisFlags_NoSideSwitch = 1<<6, // the user will not be able to switch the axis side by dragging it+ ImPlotAxisFlags_NoHighlight = 1<<7, // the axis will not have its background highlighted when hovered or held+ ImPlotAxisFlags_Opposite = 1<<8, // axis ticks and labels will be rendered on the conventionally opposite side (i.e, right or top)+ ImPlotAxisFlags_Foreground = 1<<9, // grid lines will be displayed in the foreground (i.e. on top of data) instead of the background+ ImPlotAxisFlags_Invert = 1<<10, // the axis will be inverted+ ImPlotAxisFlags_AutoFit = 1<<11, // axis will be auto-fitting to data extents+ ImPlotAxisFlags_RangeFit = 1<<12, // axis will only fit points if the point is in the visible range of the **orthogonal** axis+ ImPlotAxisFlags_PanStretch = 1<<13, // panning in a locked or constrained state will cause the axis to stretch if possible+ ImPlotAxisFlags_LockMin = 1<<14, // the axis minimum value will be locked when panning/zooming+ ImPlotAxisFlags_LockMax = 1<<15, // the axis maximum value will be locked when panning/zooming+ ImPlotAxisFlags_Lock = ImPlotAxisFlags_LockMin | ImPlotAxisFlags_LockMax,+ ImPlotAxisFlags_NoDecorations = ImPlotAxisFlags_NoLabel | ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_NoTickMarks | ImPlotAxisFlags_NoTickLabels,+ ImPlotAxisFlags_AuxDefault = ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_Opposite,+} ImPlotAxisFlags_;++// Options for subplots (see BeginSubplot)+typedef enum+{+ ImPlotSubplotFlags_None = 0, // default+ ImPlotSubplotFlags_NoTitle = 1<<0, // the subplot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MySubplot")+ ImPlotSubplotFlags_NoLegend = 1<<1, // the legend will not be displayed (only applicable if ImPlotSubplotFlags_ShareItems is enabled)+ ImPlotSubplotFlags_NoMenus = 1<<2, // the user will not be able to open context menus with right-click+ ImPlotSubplotFlags_NoResize = 1<<3, // resize splitters between subplot cells will be not be provided+ ImPlotSubplotFlags_NoAlign = 1<<4, // subplot edges will not be aligned vertically or horizontally+ ImPlotSubplotFlags_ShareItems = 1<<5, // items across all subplots will be shared and rendered into a single legend entry+ ImPlotSubplotFlags_LinkRows = 1<<6, // link the y-axis limits of all plots in each row (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkCols = 1<<7, // link the x-axis limits of all plots in each column (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkAllX = 1<<8, // link the x-axis limits in every plot in the subplot (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkAllY = 1<<9, // link the y-axis limits in every plot in the subplot (does not apply to auxiliary axes)+ ImPlotSubplotFlags_ColMajor = 1<<10, // subplots are added in column major order instead of the default row major order+} ImPlotSubplotFlags_;++// Options for legends (see SetupLegend)+typedef enum+{+ ImPlotLegendFlags_None = 0, // default+ ImPlotLegendFlags_NoButtons = 1<<0, // legend icons will not function as hide/show buttons+ ImPlotLegendFlags_NoHighlightItem = 1<<1, // plot items will not be highlighted when their legend entry is hovered+ ImPlotLegendFlags_NoHighlightAxis = 1<<2, // axes will not be highlighted when legend entries are hovered (only relevant if x/y-axis count > 1)+ ImPlotLegendFlags_NoMenus = 1<<3, // the user will not be able to open context menus with right-click+ ImPlotLegendFlags_Outside = 1<<4, // legend will be rendered outside of the plot area+ ImPlotLegendFlags_Horizontal = 1<<5, // legend entries will be displayed horizontally+ ImPlotLegendFlags_Sort = 1<<6, // legend entries will be displayed in alphabetical order+ ImPlotLegendFlags_Reverse = 1<<7, // legend entries will be displayed in reverse order+} ImPlotLegendFlags_;++// Options for mouse hover text (see SetupMouseText)+typedef enum+{+ ImPlotMouseTextFlags_None = 0, // default+ ImPlotMouseTextFlags_NoAuxAxes = 1<<0, // only show the mouse position for primary axes+ ImPlotMouseTextFlags_NoFormat = 1<<1, // axes label formatters won't be used to render text+ ImPlotMouseTextFlags_ShowAlways = 1<<2, // always display mouse position even if plot not hovered+} ImPlotMouseTextFlags_;++// Options for DragPoint, DragLine, DragRect+typedef enum+{+ ImPlotDragToolFlags_None = 0, // default+ ImPlotDragToolFlags_NoCursors = 1<<0, // drag tools won't change cursor icons when hovered or held+ ImPlotDragToolFlags_NoFit = 1<<1, // the drag tool won't be considered for plot fits+ ImPlotDragToolFlags_NoInputs = 1<<2, // lock the tool from user inputs+ ImPlotDragToolFlags_Delayed = 1<<3, // tool rendering will be delayed one frame; useful when applying position-constraints+} ImPlotDragToolFlags_;++// Flags for ColormapScale+typedef enum+{+ ImPlotColormapScaleFlags_None = 0, // default+ ImPlotColormapScaleFlags_NoLabel = 1<<0, // the colormap axis label will not be displayed+ ImPlotColormapScaleFlags_Opposite = 1<<1, // render the colormap label and tick labels on the opposite side+ ImPlotColormapScaleFlags_Invert = 1<<2, // invert the colormap bar and axis scale (this only affects rendering; if you only want to reverse the scale mapping, make scale_min > scale_max)+} ImPlotColormapScaleFlags_;++// Flags for ANY PlotX function. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotItemFlags_None = 0,+ ImPlotItemFlags_NoLegend = 1<<0, // the item won't have a legend entry displayed+ ImPlotItemFlags_NoFit = 1<<1, // the item won't be considered for plot fits+} ImPlotItemFlags_;++// Flags for PlotLine. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotLineFlags_None = 0, // default+ ImPlotLineFlags_Segments = 1<<10, // a line segment will be rendered from every two consecutive points+ ImPlotLineFlags_Loop = 1<<11, // the last and first point will be connected to form a closed loop+ ImPlotLineFlags_SkipNaN = 1<<12, // NaNs values will be skipped instead of rendered as missing data+ ImPlotLineFlags_NoClip = 1<<13, // markers (if displayed) on the edge of a plot will not be clipped+ ImPlotLineFlags_Shaded = 1<<14, // a filled region between the line and horizontal origin will be rendered; use PlotShaded for more advanced cases+} ImPlotLineFlags_;++// Flags for PlotScatter. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotScatterFlags_None = 0, // default+ ImPlotScatterFlags_NoClip = 1<<10, // markers on the edge of a plot will not be clipped+} ImPlotScatterFlags_;++// Flags for PlotBubbles. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotBubblesFlags_None = 0, // default+} ImPlotBubblesFlags_;++// Flags for PlotPolygon. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotPolygonFlags_None = 0, // default (closed, convex polygon)+ ImPlotPolygonFlags_Concave = 1<<10, // use concave polygon filling (slower but supports concave shapes)+} ImPlotPolygonFlags_;++// Flags for PlotStairs. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotStairsFlags_None = 0, // default+ ImPlotStairsFlags_PreStep = 1<<10, // the y value is continued constantly to the left from every x position, i.e. the interval (x[i-1], x[i]] has the value y[i]+ ImPlotStairsFlags_Shaded = 1<<11, // a filled region between the stairs and horizontal origin will be rendered; use PlotShaded for more advanced cases+} ImPlotStairsFlags_;++// Flags for PlotShaded (placeholder). Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotShadedFlags_None = 0, // default+} ImPlotShadedFlags_;++// Flags for PlotBars. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotBarsFlags_None = 0, // default+ ImPlotBarsFlags_Horizontal = 1<<10, // bars will be rendered horizontally on the current y-axis+} ImPlotBarsFlags_;++// Flags for PlotBarGroups. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotBarGroupsFlags_None = 0, // default+ ImPlotBarGroupsFlags_Horizontal = 1<<10, // bar groups will be rendered horizontally on the current y-axis+ ImPlotBarGroupsFlags_Stacked = 1<<11, // items in a group will be stacked on top of each other+} ImPlotBarGroupsFlags_;++// Flags for PlotErrorBars. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotErrorBarsFlags_None = 0, // default+ ImPlotErrorBarsFlags_Horizontal = 1<<10, // error bars will be rendered horizontally on the current y-axis+} ImPlotErrorBarsFlags_;++// Flags for PlotStems. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotStemsFlags_None = 0, // default+ ImPlotStemsFlags_Horizontal = 1<<10, // stems will be rendered horizontally on the current y-axis+} ImPlotStemsFlags_;++// Flags for PlotInfLines. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotInfLinesFlags_None = 0, // default+ ImPlotInfLinesFlags_Horizontal = 1<<10, // lines will be rendered horizontally on the current y-axis+} ImPlotInfLinesFlags_;++// Flags for PlotPieChart. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotPieChartFlags_None = 0, // default+ ImPlotPieChartFlags_Normalize = 1<<10, // force normalization of pie chart values (i.e. always make a full circle if sum < 0)+ ImPlotPieChartFlags_IgnoreHidden = 1<<11, // ignore hidden slices when drawing the pie chart (as if they were not there)+ ImPlotPieChartFlags_Exploding = 1<<12, // explode legend-hovered slice+ ImPlotPieChartFlags_NoSliceBorder = 1<<13, // do not draw slice borders+} ImPlotPieChartFlags_;++// Flags for PlotHeatmap. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotHeatmapFlags_None = 0, // default+ ImPlotHeatmapFlags_ColMajor = 1<<10, // data will be read in column major order+} ImPlotHeatmapFlags_;++// Flags for PlotHistogram and PlotHistogram2D. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotHistogramFlags_None = 0, // default+ ImPlotHistogramFlags_Horizontal = 1<<10, // histogram bars will be rendered horizontally (not supported by PlotHistogram2D)+ ImPlotHistogramFlags_Cumulative = 1<<11, // each bin will contain its count plus the counts of all previous bins (not supported by PlotHistogram2D)+ ImPlotHistogramFlags_Density = 1<<12, // counts will be normalized, i.e. the PDF will be visualized, or the CDF will be visualized if Cumulative is also set+ ImPlotHistogramFlags_NoOutliers = 1<<13, // exclude values outside the specified histogram range from the count toward normalizing and cumulative counts+ ImPlotHistogramFlags_ColMajor = 1<<14, // data will be read in column major order (not supported by PlotHistogram)+} ImPlotHistogramFlags_;++// Flags for PlotDigital (placeholder). Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotDigitalFlags_None = 0, // default+} ImPlotDigitalFlags_;++// Flags for PlotImage (placeholder). Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotImageFlags_None = 0, // default+} ImPlotImageFlags_;++// Flags for PlotText. Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotTextFlags_None = 0, // default+ ImPlotTextFlags_Vertical = 1<<10, // text will be rendered vertically+} ImPlotTextFlags_;++// Flags for PlotDummy (placeholder). Used by setting ImPlotSpec::Flags.+typedef enum+{+ ImPlotDummyFlags_None = 0, // default+} ImPlotDummyFlags_;++// Represents a condition for SetupAxisLimits etc. (same as ImGuiCond, but we only support a subset of those enums)+typedef enum+{+ ImPlotCond_None = ImGuiCond_None, // No condition (always set the variable), same as _Always+ ImPlotCond_Always = ImGuiCond_Always, // No condition (always set the variable)+ ImPlotCond_Once = ImGuiCond_Once, // Set the variable once per runtime session (only the first call will succeed)+} ImPlotCond_;++// Plot styling colors.+typedef enum+{+ ImPlotCol_FrameBg, // plot frame background color (defaults to ImGuiCol_FrameBg)+ ImPlotCol_PlotBg, // plot area background color (defaults to ImGuiCol_WindowBg)+ ImPlotCol_PlotBorder, // plot area border color (defaults to ImGuiCol_Border)+ ImPlotCol_LegendBg, // legend background color (defaults to ImGuiCol_PopupBg)+ ImPlotCol_LegendBorder, // legend border color (defaults to ImPlotCol_PlotBorder)+ ImPlotCol_LegendText, // legend text color (defaults to ImPlotCol_InlayText)+ ImPlotCol_TitleText, // plot title text color (defaults to ImGuiCol_Text)+ ImPlotCol_InlayText, // color of text appearing inside of plots (defaults to ImGuiCol_Text)+ ImPlotCol_AxisText, // axis label and tick labels color (defaults to ImGuiCol_Text)+ ImPlotCol_AxisGrid, // axis grid color (defaults to 25% ImPlotCol_AxisText)+ ImPlotCol_AxisTick, // axis tick color (defaults to AxisGrid)+ ImPlotCol_AxisBg, // background color of axis hover region (defaults to transparent)+ ImPlotCol_AxisBgHovered, // axis hover color (defaults to ImGuiCol_ButtonHovered)+ ImPlotCol_AxisBgActive, // axis active color (defaults to ImGuiCol_ButtonActive)+ ImPlotCol_Selection, // box-selection color (defaults to yellow)+ ImPlotCol_Crosshairs, // crosshairs color (defaults to ImPlotCol_PlotBorder)+ ImPlotCol_COUNT,+} ImPlotCol_;++// Plot styling variables.+typedef enum+{+ ImPlotStyleVar_PlotDefaultSize, // ImVec2, default size used when ImVec2(0,0) is passed to BeginPlot+ ImPlotStyleVar_PlotMinSize, // ImVec2, minimum size plot frame can be when shrunk+ ImPlotStyleVar_PlotBorderSize, // float, thickness of border around plot area+ ImPlotStyleVar_MinorAlpha, // float, alpha multiplier applied to minor axis grid lines+ ImPlotStyleVar_MajorTickLen, // ImVec2, major tick lengths for X and Y axes+ ImPlotStyleVar_MinorTickLen, // ImVec2, minor tick lengths for X and Y axes+ ImPlotStyleVar_MajorTickSize, // ImVec2, line thickness of major ticks+ ImPlotStyleVar_MinorTickSize, // ImVec2, line thickness of minor ticks+ ImPlotStyleVar_MajorGridSize, // ImVec2, line thickness of major grid lines+ ImPlotStyleVar_MinorGridSize, // ImVec2, line thickness of minor grid lines+ ImPlotStyleVar_PlotPadding, // ImVec2, padding between widget frame and plot area, labels, or outside legends (i.e. main padding)+ ImPlotStyleVar_LabelPadding, // ImVec2, padding between axes labels, tick labels, and plot edge+ ImPlotStyleVar_LegendPadding, // ImVec2, legend padding from plot edges+ ImPlotStyleVar_LegendInnerPadding, // ImVec2, legend inner padding from legend edges+ ImPlotStyleVar_LegendSpacing, // ImVec2, spacing between legend entries+ ImPlotStyleVar_MousePosPadding, // ImVec2, padding between plot edge and interior info text+ ImPlotStyleVar_AnnotationPadding, // ImVec2, text padding around annotation labels+ ImPlotStyleVar_FitPadding, // ImVec2, additional fit padding as a percentage of the fit extents (e.g. ImVec2(0.1f,0.1f) adds 10% to the fit extents of X and Y)+ ImPlotStyleVar_DigitalPadding, // float, digital plot padding from bottom in pixels+ ImPlotStyleVar_DigitalSpacing, // float, digital plot spacing gap in pixels+ ImPlotStyleVar_COUNT,+} ImPlotStyleVar_;++// Axis scale+typedef enum+{+ ImPlotScale_Linear = 0, // default linear scale+ ImPlotScale_Time, // date/time scale+ ImPlotScale_Log10, // base 10 logarithmic scale+ ImPlotScale_SymLog, // symmetric log scale+} ImPlotScale_;++// Marker specifications.+typedef enum+{+ ImPlotMarker_None = -2, // no marker+ ImPlotMarker_Auto = -1, // automatic marker selection+ ImPlotMarker_Circle, // a circle marker (default)+ ImPlotMarker_Square, // a square maker+ ImPlotMarker_Diamond, // a diamond marker+ ImPlotMarker_Up, // an upward-pointing triangle marker+ ImPlotMarker_Down, // an downward-pointing triangle marker+ ImPlotMarker_Left, // an leftward-pointing triangle marker+ ImPlotMarker_Right, // an rightward-pointing triangle marker+ ImPlotMarker_Cross, // a cross marker (not fill-able)+ ImPlotMarker_Plus, // a plus marker (not fill-able)+ ImPlotMarker_Asterisk, // a asterisk marker (not fill-able)+ ImPlotMarker_Vertical, // a vertical line marker (not fill-able)+ ImPlotMarker_Horizontal, // a horizontal line marker (not fill-able)+ ImPlotMarker_COUNT,+} ImPlotMarker_;++// Built-in colormaps+typedef enum+{+ ImPlotColormap_Deep = 0, // a.k.a. seaborn deep (qual=true, n=10) (default)+ ImPlotColormap_Dark = 1, // a.k.a. matplotlib "Set1" (qual=true, n=9 )+ ImPlotColormap_Pastel = 2, // a.k.a. matplotlib "Pastel1" (qual=true, n=9 )+ ImPlotColormap_Paired = 3, // a.k.a. matplotlib "Paired" (qual=true, n=12)+ ImPlotColormap_Viridis = 4, // a.k.a. matplotlib "viridis" (qual=false, n=11)+ ImPlotColormap_Plasma = 5, // a.k.a. matplotlib "plasma" (qual=false, n=11)+ ImPlotColormap_Hot = 6, // a.k.a. matplotlib/MATLAB "hot" (qual=false, n=11)+ ImPlotColormap_Cool = 7, // a.k.a. matplotlib/MATLAB "cool" (qual=false, n=11)+ ImPlotColormap_Pink = 8, // a.k.a. matplotlib/MATLAB "pink" (qual=false, n=11)+ ImPlotColormap_Jet = 9, // a.k.a. MATLAB "jet" (qual=false, n=11)+ ImPlotColormap_Twilight = 10, // a.k.a. matplotlib "twilight" (qual=false, n=11)+ ImPlotColormap_RdBu = 11, // red/blue, Color Brewer (qual=false, n=11)+ ImPlotColormap_BrBG = 12, // brown/blue-green, Color Brewer (qual=false, n=11)+ ImPlotColormap_PiYG = 13, // pink/yellow-green, Color Brewer (qual=false, n=11)+ ImPlotColormap_Spectral = 14, // color spectrum, Color Brewer (qual=false, n=11)+ ImPlotColormap_Greys = 15, // white/black (qual=false, n=2 )+} ImPlotColormap_;++// Used to position items on a plot (e.g. legends, labels, etc.)+typedef enum+{+ ImPlotLocation_Center = 0, // center-center+ ImPlotLocation_North = 1<<0, // top-center+ ImPlotLocation_South = 1<<1, // bottom-center+ ImPlotLocation_West = 1<<2, // center-left+ ImPlotLocation_East = 1<<3, // center-right+ ImPlotLocation_NorthWest = ImPlotLocation_North | ImPlotLocation_West, // top-left+ ImPlotLocation_NorthEast = ImPlotLocation_North | ImPlotLocation_East, // top-right+ ImPlotLocation_SouthWest = ImPlotLocation_South | ImPlotLocation_West, // bottom-left+ ImPlotLocation_SouthEast = ImPlotLocation_South | ImPlotLocation_East, // bottom-right+} ImPlotLocation_;++// Enums for different automatic histogram binning methods (k = bin count or w = bin width)+typedef enum+{+ ImPlotBin_Sqrt = -1, // k = sqrt(n)+ ImPlotBin_Sturges = -2, // k = 1 + log2(n)+ ImPlotBin_Rice = -3, // k = 2 * cbrt(n)+ ImPlotBin_Scott = -4, // w = 3.49 * sigma / cbrt(n)+} ImPlotBin_;++// Plot item styling specification. Provide these to PlotX functions to override styling, specify+// offsetting or stride, or set optional flags. This struct can be used in the following ways:+//+// 1. By declaring and defining a struct instance:+//+// ImPlotSpec spec;+// spec.LineColor = ImVec4(1,0,0,1);+// spec.LineWeight = 2.0f;+// spec.Marker = ImPlotMarker_Circle;+// spec.Flags = ImPlotItemFlags_NoLegend | ImPlotLineFlags_Segments;+// ImPlot::PlotLine("MyLine", xs, ys, 100, spec);+//+// 2. Inline using (ImPlotProp,value) pairs (order does NOT matter):+//+// ImPlot::PlotLine("MyLine", xs, ys, 100, {+// ImPlotProp_LineColor, ImVec4(1,0,0,1),+// ImPlotProp_LineWeight, 2.0f,+// ImPlotProp_Marker, ImPlotMarker_Circle,+// ImPlotProp_Flags, ImPlotItemFlags_NoLegend | ImPlotLineFlags_Segments+// });+struct ImPlotSpec_t+{+ ImVec4 LineColor /* = IMPLOT_AUTO_COL */; // line color (applies to lines, bar edges); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImU32* LineColors /* = nullptr */; // array of colors for each line; if nullptr, use LineColor for all lines+ float LineWeight /* = 1.0f */; // line weight in pixels (applies to lines, bar edges, marker edges)+ ImVec4 FillColor /* = IMPLOT_AUTO_COL */; // fill color (applies to shaded regions, bar faces); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImU32* FillColors /* = nullptr */; // array of colors for each fill; if nullptr, use FillColor for all fills+ float FillAlpha /* = 1.0f */; // alpha multiplier (applies to FillColor, FillColors, MarkerFillColor, and MarkerFillColors)+ ImPlotMarker Marker /* = ImPlotMarker_None */; // marker type; specify ImPlotMarker_Auto to use the next unused marker+ float MarkerSize /* = 4 */; // size of markers (radius) *in pixels*+ float* MarkerSizes /* = nullptr */; // array of sizes for each marker; if nullptr, use MarkerSize for all markers+ ImVec4 MarkerLineColor /* = IMPLOT_AUTO_COL */; // marker edge color; IMPLOT_AUTO_COL will use LineColor+ ImU32* MarkerLineColors /* = nullptr */; // array of colors for each marker edge; if nullptr, use MarkerLineColor for all markers+ ImVec4 MarkerFillColor /* = IMPLOT_AUTO_COL */; // marker face color; IMPLOT_AUTO_COL will use LineColor+ ImU32* MarkerFillColors /* = nullptr */; // array of colors for each marker face; if nullptr, use MarkerFillColor for all markers+ float Size /* = 4 */; // size of error bar whiskers (width or height), and digital bars (height) *in pixels*+ int Offset /* = 0 */; // data index offset+ int Stride /* = IMPLOT_AUTO */; // data stride in bytes; IMPLOT_AUTO will result in sizeof(T) where T is the type passed to PlotX+ ImPlotItemFlags Flags /* = ImPlotItemFlags_None */; // optional item flags; can be composed from common ImPlotItemFlags and/or specialized ImPlotXFlags+};++// Double precision version of ImVec2 used by ImPlot. Extensible by end users.+IM_MSVC_RUNTIME_CHECKS_OFF+struct ImPlotPoint_t+{+ double x, y;+#ifdef IMPLOT_POINT_CLASS_EXTRA+ IMPLOT_POINT_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h+ // to convert back and forth between your math types and ImPlotPoint.+#endif // #ifdef IMPLOT_POINT_CLASS_EXTRA+};+IM_MSVC_RUNTIME_CHECKS_RESTORE++// Range defined by a min/max value.+struct ImPlotRange_t+{+ double Min, Max;+};+CIMGUI_API bool ImPlotRange_Contains(const ImPlotRange* self, double value);+CIMGUI_API double ImPlotRange_Size(const ImPlotRange* self);+CIMGUI_API double ImPlotRange_Clamp(const ImPlotRange* self, double value);++// Combination of two range limits for X and Y axes. Also an AABB defined by Min()/Max().+struct ImPlotRect_t+{+ ImPlotRange X, Y;+};+CIMGUI_API bool ImPlotRect_Contains(const ImPlotRect* self, ImPlotPoint p);+CIMGUI_API bool ImPlotRect_ContainsDouble(const ImPlotRect* self, double x, double y);++// Plot style structure+struct ImPlotStyle_t+{+ // plot styling+ ImVec2 PlotDefaultSize; // = 400,300 default size used when ImVec2(0,0) is passed to BeginPlot+ ImVec2 PlotMinSize; // = 200,150 minimum size plot frame can be when shrunk+ float PlotBorderSize; // = 1, line thickness of border around plot area+ float MinorAlpha; // = 0.25 alpha multiplier applied to minor axis grid lines+ ImVec2 MajorTickLen; // = 10,10 major tick lengths for X and Y axes+ ImVec2 MinorTickLen; // = 5,5 minor tick lengths for X and Y axes+ ImVec2 MajorTickSize; // = 1,1 line thickness of major ticks+ ImVec2 MinorTickSize; // = 1,1 line thickness of minor ticks+ ImVec2 MajorGridSize; // = 1,1 line thickness of major grid lines+ ImVec2 MinorGridSize; // = 1,1 line thickness of minor grid lines+ // plot padding+ ImVec2 PlotPadding; // = 10,10 padding between widget frame and plot area, labels, or outside legends (i.e. main padding)+ ImVec2 LabelPadding; // = 5,5 padding between axes labels, tick labels, and plot edge+ ImVec2 LegendPadding; // = 10,10 legend padding from plot edges+ ImVec2 LegendInnerPadding; // = 5,5 legend inner padding from legend edges+ ImVec2 LegendSpacing; // = 5,0 spacing between legend entries+ ImVec2 MousePosPadding; // = 10,10 padding between plot edge and interior mouse location text+ ImVec2 AnnotationPadding; // = 2,2 text padding around annotation labels+ ImVec2 FitPadding; // = 0,0 additional fit padding as a percentage of the fit extents (e.g. ImVec2(0.1f,0.1f) adds 10% to the fit extents of X and Y)+ float DigitalPadding; // = 20, digital plot padding from bottom in pixels+ float DigitalSpacing; // = 4, digital plot spacing gap in pixels+ // style colors+ ImVec4 Colors[ImPlotCol_COUNT]; // Array of styling colors. Indexable with ImPlotCol_ enums.+ // colormap+ ImPlotColormap Colormap; // The current colormap. Set this to either an ImPlotColormap_ enum or an index returned by AddColormap.+ // settings/flags+ bool UseLocalTime; // = false, axis labels will be formatted for your timezone when ImPlotAxisFlag_Time is enabled+ bool UseISO8601; // = false, dates will be formatted according to ISO 8601 where applicable (e.g. YYYY-MM-DD, YYYY-MM, --MM-DD, etc.)+ bool Use24HourClock; // = false, times will be formatted using a 24 hour clock+};++// Support for legacy versions++// Input mapping structure. Default values listed. See also MapInputDefault, MapInputReverse.+struct ImPlotInputMap_t+{+ ImGuiMouseButton Pan; // LMB enables panning when held,+ int PanMod; // none optional modifier that must be held for panning/fitting+ ImGuiMouseButton Fit; // LMB initiates fit when double clicked+ ImGuiMouseButton Select; // RMB begins box selection when pressed and confirms selection when released+ ImGuiMouseButton SelectCancel; // LMB cancels active box selection when pressed; cannot be same as Select+ int SelectMod; // none optional modifier that must be held for box selection+ int SelectHorzMod; // Alt expands active box selection horizontally to plot edge when held+ int SelectVertMod; // Shift expands active box selection vertically to plot edge when held+ ImGuiMouseButton Menu; // RMB opens context menus (if enabled) when clicked+ int OverrideMod; // Ctrl when held, all input is ignored; used to enable axis/plots as DND sources+ int ZoomMod; // none optional modifier that must be held for scroll wheel zooming+ float ZoomRate; // 0.1f zoom rate for scroll (e.g. 0.1f = 10% plot range every scroll click); make negative to invert+};++//-----------------------------------------------------------------------------+// [SECTION] Callbacks+//-----------------------------------------------------------------------------++// Callback signature for axis tick label formatter.+typedef int (*ImPlotFormatter)(double value, char* buff, int size, void* user_data);++// Callback signature for data getter.+typedef ImPlotPoint (*ImPlotGetter)(int idx, void* user_data);++// Callback signature for axis transform.+typedef double (*ImPlotTransform)(double value, void* user_data);++//-----------------------------------------------------------------------------+// [SECTION] Contexts+//-----------------------------------------------------------------------------++// Creates a new ImPlot context. Call this after ImGui::CreateContext.+CIMGUI_API ImPlotContext* ImPlotCreateContext(void);+// Destroys an ImPlot context. Call this before ImGui::DestroyContext. nullptr = destroy current context.+CIMGUI_API void ImPlotDestroyContext(ImPlotContext* ctx /* = nullptr */);+// Returns the current ImPlot context. nullptr if no context has ben set.+CIMGUI_API ImPlotContext* ImPlotGetCurrentContext(void);+// Sets the current ImPlot context.+CIMGUI_API void ImPlotSetCurrentContext(ImPlotContext* ctx);++// Sets the current **ImGui** context. This is ONLY necessary if you are compiling+// ImPlot as a DLL (not recommended) separate from your ImGui compilation. It+// sets the global variable GImGui, which is not shared across DLL boundaries.+// See GImGui documentation in imgui.cpp for more details.+CIMGUI_API void ImPlotSetImGuiContext(ImGuiContext* ctx);++//-----------------------------------------------------------------------------+// [SECTION] Begin/End Plot+//-----------------------------------------------------------------------------++// Starts a 2D plotting context. If this function returns true, EndPlot() MUST+// be called! You are encouraged to use the following convention:+//+// if (BeginPlot(...)) {+// PlotLine(...);+// ...+// EndPlot();+// }+//+// Important notes:+//+// - #title_id must be unique to the current ImGui ID scope. If you need to avoid ID+// collisions or don't want to display a title in the plot, use double hashes+// (e.g. "MyPlot##HiddenIdText" or "##NoTitle").+// - #size is the **frame** size of the plot widget, not the plot area. The default+// size of plots (i.e. when ImVec2(0,0)) can be modified in your ImPlotStyle.+CIMGUI_API bool ImPlotBeginPlot(const char* title_id, ImVec2 size /* = ImVec2(-1, 0) */, ImPlotFlags flags /* = 0 */);++// Only call EndPlot() if BeginPlot() returns true! Typically called at the end+// of an if statement conditioned on BeginPlot(). See example above.+CIMGUI_API void ImPlotEndPlot(void);++//-----------------------------------------------------------------------------+// [SECTION] Begin/End Subplots+//-----------------------------------------------------------------------------++// Starts a subdivided plotting context. If the function returns true,+// EndSubplots() MUST be called! Call BeginPlot/EndPlot AT MOST [rows*cols]+// times in between the beginning and end of the subplot context. Plots are+// added in row major order.+//+// Example:+//+// if (BeginSubplots("My Subplot",2,3,ImVec2(800,400)) {+// for (int i = 0; i < 6; ++i) {+// if (BeginPlot(...)) {+// ImPlot::PlotLine(...);+// ...+// EndPlot();+// }+// }+// EndSubplots();+// }+//+// Produces:+//+// [0] | [1] | [2]+// ----|-----|----+// [3] | [4] | [5]+//+// Important notes:+//+// - #title_id must be unique to the current ImGui ID scope. If you need to avoid ID+// collisions or don't want to display a title in the plot, use double hashes+// (e.g. "MySubplot##HiddenIdText" or "##NoTitle").+// - #rows and #cols must be greater than 0.+// - #size is the size of the entire grid of subplots, not the individual plots+// - #row_ratios and #col_ratios must have AT LEAST #rows and #cols elements,+// respectively. These are the sizes of the rows and columns expressed in ratios.+// If the user adjusts the dimensions, the arrays are updated with new ratios.+//+// Important notes regarding BeginPlot from inside of BeginSubplots:+//+// - The #title_id parameter of _BeginPlot_ (see above) does NOT have to be+// unique when called inside of a subplot context. Subplot IDs are hashed+// for your convenience so you don't have call PushID or generate unique title+// strings. Simply pass an empty string to BeginPlot unless you want to title+// each subplot.+// - The #size parameter of _BeginPlot_ (see above) is ignored when inside of a+// subplot context. The actual size of the subplot will be based on the+// #size value you pass to _BeginSubplots_ and #row/#col_ratios if provided.++CIMGUI_API bool ImPlotBeginSubplots(const char* title_id, int rows, int cols, ImVec2 size, ImPlotSubplotFlags flags /* = 0 */, float* row_ratios /* = nullptr */, float* col_ratios /* = nullptr */);++// Only call EndSubplots() if BeginSubplots() returns true! Typically called at the end+// of an if statement conditioned on BeginSubplots(). See example above.+CIMGUI_API void ImPlotEndSubplots(void);++//-----------------------------------------------------------------------------+// [SECTION] Setup+//-----------------------------------------------------------------------------++// The following API allows you to setup and customize various aspects of the+// current plot. The functions should be called immediately after BeginPlot+// and before any other API calls. Typical usage is as follows:++// if (BeginPlot(...)) { 1) begin a new plot+// SetupAxis(ImAxis_X1, "My X-Axis"); 2) make Setup calls+// SetupAxis(ImAxis_Y1, "My Y-Axis");+// SetupLegend(ImPlotLocation_North);+// ...+// SetupFinish(); 3) [optional] explicitly finish setup+// PlotLine(...); 4) plot items+// ...+// EndPlot(); 5) end the plot+// }+//+// Important notes:+//+// - Always call Setup code at the top of your BeginPlot conditional statement.+// - Setup is locked once you start plotting or explicitly call SetupFinish.+// Do NOT call Setup code after you begin plotting or after you make+// any non-Setup API calls (e.g. utils like PlotToPixels also lock Setup)+// - Calling SetupFinish is OPTIONAL, but probably good practice. If you do not+// call it yourself, then the first subsequent plotting or utility function will+// call it for you.++// Enables an axis or sets the label and/or flags for an existing axis. Leave #label = nullptr for no label.+CIMGUI_API void ImPlotSetupAxis(ImAxis axis, const char* label /* = nullptr */, ImPlotAxisFlags flags /* = 0 */);+// Sets an axis range limits. If ImPlotCond_Always is used, the axes limits will be locked. Inversion with v_min > v_max is not supported; use SetupAxisLimits instead.+CIMGUI_API void ImPlotSetupAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond /* = ImPlotCond_Once */);+// Links an axis range limits to external values. Set to nullptr for no linkage. The pointer data must remain valid until EndPlot.+CIMGUI_API void ImPlotSetupAxisLinks(ImAxis axis, double* link_min, double* link_max);+// Sets the format of numeric axis labels via formatter specifier (default="%g"). Formatted values will be double (i.e. use %f).+CIMGUI_API void ImPlotSetupAxisFormat(ImAxis axis, const char* fmt);+// Sets the format of numeric axis labels via formatter callback. Given #value, write a label into #buff. Optionally pass user data.+CIMGUI_API void ImPlotSetupAxisFormatImPlotFormatter(ImAxis axis, ImPlotFormatter formatter, void* data /* = nullptr */);+// Sets an axis' ticks and optionally the labels. To keep the default ticks, set #keep_default=true.+CIMGUI_API void ImPlotSetupAxisTicks(ImAxis axis, const double* values, int n_ticks, const char*const labels[] /* = nullptr */, bool keep_default /* = false */);+// Sets an axis' ticks and optionally the labels for the next plot. To keep the default ticks, set #keep_default=true.+CIMGUI_API void ImPlotSetupAxisTicksDouble(ImAxis axis, double v_min, double v_max, int n_ticks, const char*const labels[] /* = nullptr */, bool keep_default /* = false */);+// Sets an axis' scale using built-in options.+CIMGUI_API void ImPlotSetupAxisScale(ImAxis axis, ImPlotScale scale);+// Sets an axis' scale using user supplied forward and inverse transforms.+CIMGUI_API void ImPlotSetupAxisScaleImPlotTransform(ImAxis axis, ImPlotTransform forward, ImPlotTransform inverse, void* data /* = nullptr */);+// Sets an axis' limits constraints.+CIMGUI_API void ImPlotSetupAxisLimitsConstraints(ImAxis axis, double v_min, double v_max);+// Sets an axis' zoom constraints.+CIMGUI_API void ImPlotSetupAxisZoomConstraints(ImAxis axis, double z_min, double z_max);++// Sets the label and/or flags for primary X and Y axes (shorthand for two calls to SetupAxis).+CIMGUI_API void ImPlotSetupAxes(const char* x_label, const char* y_label, ImPlotAxisFlags x_flags /* = 0 */, ImPlotAxisFlags y_flags /* = 0 */);+// Sets the primary X and Y axes range limits. If ImPlotCond_Always is used, the axes limits will be locked (shorthand for two calls to SetupAxisLimits).+CIMGUI_API void ImPlotSetupAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond /* = ImPlotCond_Once */);++// Sets up the plot legend. This can also be called immediately after BeginSubplots when using ImPlotSubplotFlags_ShareItems.+CIMGUI_API void ImPlotSetupLegend(ImPlotLocation location, ImPlotLegendFlags flags /* = 0 */);+// Set the location of the current plot's mouse position text (default = South|East).+CIMGUI_API void ImPlotSetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flags /* = 0 */);++// Explicitly finalize plot setup. Once you call this, you cannot make anymore Setup calls for the current plot!+// Note that calling this function is OPTIONAL; it will be called by the first subsequent setup-locking API call.+CIMGUI_API void ImPlotSetupFinish(void);++//-----------------------------------------------------------------------------+// [SECTION] SetNext+//-----------------------------------------------------------------------------++// Though you should default to the `Setup` API above, there are some scenarios+// where (re)configuring a plot or axis before `BeginPlot` is needed (e.g. if+// using a preceding button or slider widget to change the plot limits). In+// this case, you can use the `SetNext` API below. While this is not as feature+// rich as the Setup API, most common needs are provided. These functions can be+// called anywhere except for inside of `Begin/EndPlot`. For example:++// if (ImGui::Button("Center Plot"))+// ImPlot::SetNextPlotLimits(-1,1,-1,1);+// if (ImPlot::BeginPlot(...)) {+// ...+// ImPlot::EndPlot();+// }+//+// Important notes:+//+// - You must still enable non-default axes with SetupAxis for these functions+// to work properly.++// Sets an upcoming axis range limits. If ImPlotCond_Always is used, the axes limits will be locked.+CIMGUI_API void ImPlotSetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond /* = ImPlotCond_Once */);+// Links an upcoming axis range limits to external values. Set to nullptr for no linkage. The pointer data must remain valid until EndPlot!+CIMGUI_API void ImPlotSetNextAxisLinks(ImAxis axis, double* link_min, double* link_max);+// Set an upcoming axis to auto fit to its data.+CIMGUI_API void ImPlotSetNextAxisToFit(ImAxis axis);++// Sets the upcoming primary X and Y axes range limits. If ImPlotCond_Always is used, the axes limits will be locked (shorthand for two calls to SetupAxisLimits).+CIMGUI_API void ImPlotSetNextAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond /* = ImPlotCond_Once */);+// Sets all upcoming axes to auto fit to their data.+CIMGUI_API void ImPlotSetNextAxesToFit(void);++//-----------------------------------------------------------------------------+// [SECTION] Plot Items+//-----------------------------------------------------------------------------++// The main plotting API is provided below. Call these functions between+// Begin/EndPlot and after any Setup API calls. Each plots data on the current+// x and y axes, which can be changed with `SetAxis/Axes`.+//+// The templated functions are explicitly instantiated in implot_items.cpp.+// They are not intended to be used generically with custom types. You will get+// a linker error if you try! All functions support the following scalar types:+//+// float, double, ImS8, ImU8, ImS16, ImU16, ImS32, ImU32, ImS64, ImU64+//+//+// If you need to plot custom or non-homogenous data you have a few options:+//+// 1. If your data is a simple struct/class (e.g. Vector2f), you can use striding in your ImPlotSpec.+// This is the most performant option if applicable.+//+// struct Vector2f { float X, Y; };+// ...+// Vector2f data[42];+// ImPlot::PlotLine("line", &data[0].x, &data[0].y, 42, {ImPlotProp_Stride, sizeof(Vector2f});+//+// 2. Write a custom getter C function or C++ lambda and pass it and optionally your data to+// an ImPlot function post-fixed with a G (e.g. PlotScatterG). This has a slight performance+// cost, but probably not enough to worry about unless your data is very large. Examples:+//+// ImPlotPoint MyDataGetter(int idx, void* data) {+// MyData* my_data = (MyData*)data;+// ImPlotPoint p;+// p.x = my_data->GetTime(idx);+// p.y = my_data->GetValue(idx);+// return p+// }+// ...+// auto my_lambda = [](int idx, void*) {+// double t = idx / 999.0;+// return ImPlotPoint(t, 0.5+0.5*std::sin(2*PI*10*t));+// };+// ...+// if (ImPlot::BeginPlot("MyPlot")) {+// MyData my_data;+// ImPlot::PlotScatterG("scatter", MyDataGetter, &my_data, my_data.Size());+// ImPlot::PlotLineG("line", my_lambda, nullptr, 1000);+// ImPlot::EndPlot();+// }+//+// NB: All types are converted to double before plotting. You may lose information+// if you try plotting extremely large 64-bit integral types. Proceed with caution!++// Plots a standard 2D line plot.+CIMGUI_API void ImPlotPlotLineG(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a standard 2D scatter plot. Default marker is ImPlotMarker_Circle.+CIMGUI_API void ImPlotPlotScatterG(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a bubble graph. #szs are the radius of each bubble in plot units.++// Plots a polygon. Points are specified in counter-clockwise order. If concave, make sure to set the Concave flag.++// Plots a a stairstep graph. The y value is continued constantly to the right from every x position, i.e. the interval [x[i], x[i+1]) has the value y[i]+CIMGUI_API void ImPlotPlotStairsG(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a shaded (filled) region between two lines, or a line and a horizontal reference. Set yref to +/-INFINITY for infinite fill extents.+CIMGUI_API void ImPlotPlotShadedG(const char* label_id, ImPlotGetter getter1, void* data1, ImPlotGetter getter2, void* data2, int count, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a bar graph. Vertical by default. #bar_size and #shift are in plot units.+CIMGUI_API void ImPlotPlotBarsG(const char* label_id, ImPlotGetter getter, void* data, int count, double bar_size, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a group of bars. #values is a row-major matrix with #item_count rows and #group_count cols. #label_ids should have #item_count elements.++// Plots vertical error bar. The label_id should be the same as the label_id of the associated line or bar plot.++// Plots stems. Vertical by default.++// Plots infinite vertical or horizontal lines (e.g. for references or asymptotes).++// Plots a pie chart. Center and radius are in plot units. #label_fmt can be set to nullptr for no labels.++// Plots a 2D heatmap chart. Values are expected to be in row-major order by default. Leave #scale_min and scale_max both at 0 for automatic color scaling, or set them to a predefined range. #label_fmt can be set to nullptr for no labels.++// Plots a horizontal histogram. #bins can be a positive integer or an ImPlotBin_ method. If #range is left unspecified, the min/max of #values will be used as the range.+// Otherwise, outlier values outside of the range are not binned. The largest bin count or density is returned.++// Plots two dimensional, bivariate histogram as a heatmap. #x_bins and #y_bins can be a positive integer or an ImPlotBin. If #range is left unspecified, the min/max of+// #xs an #ys will be used as the ranges. Otherwise, outlier values outside of range are not binned. The largest bin count or density is returned.++// Plots digital data. Digital plots do not respond to y drag or zoom, and are always referenced to the bottom of the plot.+CIMGUI_API void ImPlotPlotDigitalG(const char* label_id, ImPlotGetter getter, void* data, int count, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots an axis-aligned image. #bounds_min/bounds_max are in plot coordinates (y-up) and #uv0/uv1 are in texture coordinates (y-down).+#ifdef IMGUI_HAS_TEXTURES+CIMGUI_API void ImPlotPlotImage(const char* label_id, ImTextureRef tex_ref, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImVec2 uv0 /* = ImVec2(0, 0) */, ImVec2 uv1 /* = ImVec2(1, 1) */, ImVec4 tint_col /* = ImVec4(1, 1, 1, 1) */, ImPlotSpec spec /* = ImPlotSpec() */);+#else+CIMGUI_API void ImPlotPlotImage(const char* label_id, ImTextureID tex_ref, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImVec2 uv0 /* = ImVec2(0, 0) */, ImVec2 uv1 /* = ImVec2(1, 1) */, ImVec4 tint_col /* = ImVec4(1, 1, 1, 1) */, ImPlotSpec spec /* = ImPlotSpec() */);+#endif // #ifdef IMGUI_HAS_TEXTURES+// Plots a centered text label at point x,y with an optional pixel offset. Text color can be changed with ImPlot::PushStyleColor(ImPlotCol_InlayText, ...).+CIMGUI_API void ImPlotPlotText(const char* text, double x, double y, ImVec2 pix_offset /* = ImVec2(0, 0) */, ImPlotSpec spec /* = ImPlotSpec() */);++// Plots a dummy item (i.e. adds a legend entry colored by ImPlotCol_Line)+CIMGUI_API void ImPlotPlotDummy(const char* label_id, ImPlotSpec spec /* = ImPlotSpec() */);++//-----------------------------------------------------------------------------+// [SECTION] Plot Tools+//-----------------------------------------------------------------------------++// The following can be used to render interactive elements and/or annotations.+// Like the item plotting functions above, they apply to the current x and y+// axes, which can be changed with `SetAxis/SetAxes`. These functions return true+// when user interaction causes the provided coordinates to change. Additional+// user interactions can be retrieved through the optional output parameters.++// Shows a draggable point at x,y. #col defaults to ImGuiCol_Text.+CIMGUI_API bool ImPlotDragPoint(int id, double* x, double* y, ImVec4 col, float size /* = 4 */, ImPlotDragToolFlags flags /* = 0 */, bool* out_clicked /* = nullptr */, bool* out_hovered /* = nullptr */, bool* out_held /* = nullptr */);+// Shows a draggable vertical guide line at an x-value. #col defaults to ImGuiCol_Text.+CIMGUI_API bool ImPlotDragLineX(int id, double* x, ImVec4 col, float thickness /* = 1 */, ImPlotDragToolFlags flags /* = 0 */, bool* out_clicked /* = nullptr */, bool* out_hovered /* = nullptr */, bool* out_held /* = nullptr */);+// Shows a draggable horizontal guide line at a y-value. #col defaults to ImGuiCol_Text.+CIMGUI_API bool ImPlotDragLineY(int id, double* y, ImVec4 col, float thickness /* = 1 */, ImPlotDragToolFlags flags /* = 0 */, bool* out_clicked /* = nullptr */, bool* out_hovered /* = nullptr */, bool* out_held /* = nullptr */);+// Shows a draggable and resizeable rectangle.+CIMGUI_API bool ImPlotDragRect(int id, double* x1, double* y1, double* x2, double* y2, ImVec4 col, ImPlotDragToolFlags flags /* = 0 */, bool* out_clicked /* = nullptr */, bool* out_hovered /* = nullptr */, bool* out_held /* = nullptr */);++// Shows an annotation callout at a chosen point. Clamping keeps annotations in the plot area. Annotations are always rendered on top.+CIMGUI_API void ImPlotAnnotation(double x, double y, ImVec4 col, ImVec2 pix_offset, bool clamp, bool round /* = false */);+CIMGUI_API void ImPlotAnnotationStr(double x, double y, ImVec4 col, ImVec2 pix_offset, bool clamp, const char* fmt, ...) IM_FMTARGS(6);+CIMGUI_API void ImPlotAnnotationStrUnformatted(double x, double y, ImVec4 col, ImVec2 pix_offset, bool clamp, const char* text);+CIMGUI_API void ImPlotAnnotationV(double x, double y, ImVec4 col, ImVec2 pix_offset, bool clamp, const char* fmt, va_list args) IM_FMTLIST(6);++// Shows a x-axis tag at the specified coordinate value.+CIMGUI_API void ImPlotTagX(double x, ImVec4 col, bool round /* = false */);+CIMGUI_API void ImPlotTagXStr(double x, ImVec4 col, const char* fmt, ...) IM_FMTARGS(3);+CIMGUI_API void ImPlotTagXStrUnformatted(double x, ImVec4 col, const char* text);+CIMGUI_API void ImPlotTagXV(double x, ImVec4 col, const char* fmt, va_list args) IM_FMTLIST(3);++// Shows a y-axis tag at the specified coordinate value.+CIMGUI_API void ImPlotTagY(double y, ImVec4 col, bool round /* = false */);+CIMGUI_API void ImPlotTagYStr(double y, ImVec4 col, const char* fmt, ...) IM_FMTARGS(3);+CIMGUI_API void ImPlotTagYStrUnformatted(double y, ImVec4 col, const char* text);+CIMGUI_API void ImPlotTagYV(double y, ImVec4 col, const char* fmt, va_list args) IM_FMTLIST(3);++//-----------------------------------------------------------------------------+// [SECTION] Plot Utils+//-----------------------------------------------------------------------------++// Select which axis/axes will be used for subsequent plot elements.+CIMGUI_API void ImPlotSetAxis(ImAxis axis);+CIMGUI_API void ImPlotSetAxes(ImAxis x_axis, ImAxis y_axis);++// Convert pixels to a position in the current plot's coordinate system. Passing IMPLOT_AUTO uses the current axes.++// Convert a position in the current plot's coordinate system to pixels. Passing IMPLOT_AUTO uses the current axes.+CIMGUI_API ImVec2 ImPlotPlotToPixels(ImPlotPoint plt, ImAxis x_axis /* = IMPLOT_AUTO */, ImAxis y_axis /* = IMPLOT_AUTO */);+CIMGUI_API ImVec2 ImPlotPlotToPixelsDouble(double x, double y, ImAxis x_axis /* = IMPLOT_AUTO */, ImAxis y_axis /* = IMPLOT_AUTO */);++// Get the current Plot position (top-left) in pixels.+CIMGUI_API ImVec2 ImPlotGetPlotPos(void);+// Get the current Plot size in pixels.+CIMGUI_API ImVec2 ImPlotGetPlotSize(void);++// Returns the mouse position in x,y coordinates of the current plot. Passing IMPLOT_AUTO uses the current axes.+// Returns the current plot axis range.++// Returns true if the plot area in the current plot is hovered.+CIMGUI_API bool ImPlotIsPlotHovered(void);+// Returns true if the axis label area in the current plot is hovered.+CIMGUI_API bool ImPlotIsAxisHovered(ImAxis axis);+// Returns true if the bounding frame of a subplot is hovered.+CIMGUI_API bool ImPlotIsSubplotsHovered(void);++// Returns true if the current plot is being box selected.+CIMGUI_API bool ImPlotIsPlotSelected(void);+// Returns the current plot box selection bounds. Passing IMPLOT_AUTO uses the current axes.+// Cancels a the current plot box selection.+CIMGUI_API void ImPlotCancelPlotSelection(void);++// Hides or shows the next plot item (i.e. as if it were toggled from the legend).+// Use ImPlotCond_Always if you need to forcefully set this every frame.+CIMGUI_API void ImPlotHideNextItem(bool hidden /* = true */, ImPlotCond cond /* = ImPlotCond_Once */);++// Use the following around calls to Begin/EndPlot to align l/r/t/b padding.+// Consider using Begin/EndSubplots first. They are more feature rich and+// accomplish the same behaviour by default. The functions below offer lower+// level control of plot alignment.++// Align axis padding over multiple plots in a single row or column. #group_id must+// be unique. If this function returns true, EndAlignedPlots() must be called.+CIMGUI_API bool ImPlotBeginAlignedPlots(const char* group_id, bool vertical /* = true */);+// Only call EndAlignedPlots() if BeginAlignedPlots() returns true!+CIMGUI_API void ImPlotEndAlignedPlots(void);++//-----------------------------------------------------------------------------+// [SECTION] Legend Utils+//-----------------------------------------------------------------------------++// Begin a popup for a legend entry.+CIMGUI_API bool ImPlotBeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_button /* = 1 */);+// End a popup for a legend entry.+CIMGUI_API void ImPlotEndLegendPopup(void);+// Returns true if a plot item legend entry is hovered.+CIMGUI_API bool ImPlotIsLegendEntryHovered(const char* label_id);++//-----------------------------------------------------------------------------+// [SECTION] Drag and Drop+//-----------------------------------------------------------------------------++// Turns the current plot's plotting area into a drag and drop target. Don't forget to call EndDragDropTarget!+CIMGUI_API bool ImPlotBeginDragDropTargetPlot(void);+// Turns the current plot's X-axis into a drag and drop target. Don't forget to call EndDragDropTarget!+CIMGUI_API bool ImPlotBeginDragDropTargetAxis(ImAxis axis);+// Turns the current plot's legend into a drag and drop target. Don't forget to call EndDragDropTarget!+CIMGUI_API bool ImPlotBeginDragDropTargetLegend(void);+// Ends a drag and drop target (currently just an alias for ImGui::EndDragDropTarget).+CIMGUI_API void ImPlotEndDragDropTarget(void);++// NB: By default, plot and axes drag and drop *sources* require holding the Ctrl modifier to initiate the drag.+// You can change the modifier if desired. If ImGuiMod_None is provided, the axes will be locked from panning.++// Turns the current plot's plotting area into a drag and drop source. You must hold Ctrl. Don't forget to call EndDragDropSource!+CIMGUI_API bool ImPlotBeginDragDropSourcePlot(ImGuiDragDropFlags flags /* = 0 */);+// Turns the current plot's X-axis into a drag and drop source. You must hold Ctrl. Don't forget to call EndDragDropSource!+CIMGUI_API bool ImPlotBeginDragDropSourceAxis(ImAxis axis, ImGuiDragDropFlags flags /* = 0 */);+// Turns an item in the current plot's legend into drag and drop source. Don't forget to call EndDragDropSource!+CIMGUI_API bool ImPlotBeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags flags /* = 0 */);+// Ends a drag and drop source (currently just an alias for ImGui::EndDragDropSource).+CIMGUI_API void ImPlotEndDragDropSource(void);++//-----------------------------------------------------------------------------+// [SECTION] Styling+//-----------------------------------------------------------------------------++// Styling colors in ImPlot works similarly to styling colors in ImGui, but+// with one important difference. Like ImGui, all style colors are stored in an+// indexable array in ImPlotStyle. You can permanently modify these values through+// GetStyle().Colors, or temporarily modify them with Push/Pop functions below.+// However, by default all style colors in ImPlot default to a special color+// IMPLOT_AUTO_COL. IMPLOT_AUTO_COL tells ImPlot to set that color from color data+// in your **ImGuiStyle**. The ImGuiCol_ that these style colors default to are+// detailed above, and in general have been mapped to produce plots visually+// consistent with your current ImGui style. Of course, you are free to+// manually set these colors to whatever you like, and further can Push/Pop+// them around individual plots for plot-specific styling (e.g. coloring axes).++// Provides access to plot style structure for permanent modifications to colors, sizes, etc.+CIMGUI_API ImPlotStyle* ImPlotGetStyle(void);++// Style plot colors for current ImGui style (default).+CIMGUI_API void ImPlotStyleColorsAuto(ImPlotStyle* dst /* = nullptr */);+// Style plot colors for ImGui "Classic".+CIMGUI_API void ImPlotStyleColorsClassic(ImPlotStyle* dst /* = nullptr */);+// Style plot colors for ImGui "Dark".+CIMGUI_API void ImPlotStyleColorsDark(ImPlotStyle* dst /* = nullptr */);+// Style plot colors for ImGui "Light".+CIMGUI_API void ImPlotStyleColorsLight(ImPlotStyle* dst /* = nullptr */);++// Use PushStyleX to temporarily modify your ImPlotStyle. The modification+// will last until the matching call to PopStyleX. You MUST call a pop for+// every push, otherwise you will leak memory! This behaves just like ImGui.++// Temporarily modify a style color. Don't forget to call PopStyleColor!+CIMGUI_API void ImPlotPushStyleColor(ImPlotCol idx, ImU32 col);+CIMGUI_API void ImPlotPushStyleColorImVec4(ImPlotCol idx, ImVec4 col);+// Undo temporary style color modification(s). Undo multiple pushes at once by increasing count.+CIMGUI_API void ImPlotPopStyleColor(int count /* = 1 */);++// Temporarily modify a style variable of float type. Don't forget to call PopStyleVar!+CIMGUI_API void ImPlotPushStyleVar(ImPlotStyleVar idx, float val);+// Temporarily modify a style variable of int type. Don't forget to call PopStyleVar!+CIMGUI_API void ImPlotPushStyleVarInt(ImPlotStyleVar idx, int val);+// Temporarily modify a style variable of ImVec2 type. Don't forget to call PopStyleVar!+CIMGUI_API void ImPlotPushStyleVarImVec2(ImPlotStyleVar idx, ImVec2 val);+// Undo temporary style variable modification(s). Undo multiple pushes at once by increasing count.+CIMGUI_API void ImPlotPopStyleVar(int count /* = 1 */);++// Gets the last item primary color (i.e. its legend icon color)+CIMGUI_API ImVec4 ImPlotGetLastItemColor(void);++// Returns the null terminated string name for an ImPlotCol.+CIMGUI_API const char* ImPlotGetStyleColorName(ImPlotCol idx);+// Returns the null terminated string name for an ImPlotMarker.+CIMGUI_API const char* ImPlotGetMarkerName(ImPlotMarker idx);++// Returns the next marker and advances the marker for the current plot. You need to call this between Begin/EndPlot!+CIMGUI_API ImPlotMarker ImPlotNextMarker(void);++//-----------------------------------------------------------------------------+// [SECTION] Colormaps+//-----------------------------------------------------------------------------++// Item styling is based on colormaps when the relevant ImPlotCol_XXX is set to+// IMPLOT_AUTO_COL (default). Several built-in colormaps are available. You can+// add and then push/pop your own colormaps as well. To permanently set a colormap,+// modify the Colormap index member of your ImPlotStyle.++// Colormap data will be ignored and a custom color will be used if you have done one of the following:+// 1) Modified an item style color in your ImPlotStyle to anything other than IMPLOT_AUTO_COL.+// 2) Pushed an item style color using PushStyleColor().+// 3) Set the next item style with a SetNextXXXStyle function.++// Add a new colormap. The color data will be copied. The colormap can be used by pushing either the returned index or the+// string name with PushColormap. The colormap name must be unique and the size must be greater than 1. You will receive+// an assert otherwise! By default colormaps are considered to be qualitative (i.e. discrete). If you want to create a+// continuous colormap, set #qual=false. This will treat the colors you provide as keys, and ImPlot will build a linearly+// interpolated lookup table. The memory footprint of this table will be exactly ((size-1)*255+1)*4 bytes.+CIMGUI_API ImPlotColormap ImPlotAddColormap(const char* name, const ImVec4* cols, int size, bool qual /* = true */);+CIMGUI_API ImPlotColormap ImPlotAddColormapImU32Ptr(const char* name, const ImU32* cols, int size, bool qual /* = true */);++// Returns the number of available colormaps (i.e. the built-in + user-added count).+CIMGUI_API int ImPlotGetColormapCount(void);+// Returns a null terminated string name for a colormap given an index. Returns nullptr if index is invalid.+CIMGUI_API const char* ImPlotGetColormapName(ImPlotColormap cmap);+// Returns an index number for a colormap given a valid string name. Returns -1 if name is invalid.+CIMGUI_API ImPlotColormap ImPlotGetColormapIndex(const char* name);++// Temporarily switch to one of the built-in (i.e. ImPlotColormap_XXX) or user-added colormaps (i.e. a return value of AddColormap). Don't forget to call PopColormap!+CIMGUI_API void ImPlotPushColormap(ImPlotColormap cmap);+// Push a colormap by string name. Use built-in names such as "Default", "Deep", "Jet", etc. or a string you provided to AddColormap. Don't forget to call PopColormap!+CIMGUI_API void ImPlotPushColormapStr(const char* name);+// Undo temporary colormap modification(s). Undo multiple pushes at once by increasing count.+CIMGUI_API void ImPlotPopColormap(int count /* = 1 */);++// Returns the next color from the current colormap and advances the colormap for the current plot.+// Can also be used with no return value to skip colors if desired. You need to call this between Begin/EndPlot!+CIMGUI_API ImVec4 ImPlotNextColormapColor(void);++// Colormap utils. If cmap = IMPLOT_AUTO (default), the current colormap is assumed.+// Pass an explicit colormap index (built-in or user-added) to specify otherwise.++// Returns the size of a colormap.+CIMGUI_API int ImPlotGetColormapSize(ImPlotColormap cmap /* = IMPLOT_AUTO */);+// Returns a color from a colormap given an index >= 0 (modulo will be performed).+CIMGUI_API ImVec4 ImPlotGetColormapColor(int idx, ImPlotColormap cmap /* = IMPLOT_AUTO */);+// Sample a color from the current colormap given t between 0 and 1.+CIMGUI_API ImVec4 ImPlotSampleColormap(float t, ImPlotColormap cmap /* = IMPLOT_AUTO */);++// Shows a vertical color scale with linear spaced ticks using the specified color map. Use double hashes to hide label (e.g. "##NoLabel"). If scale_min > scale_max, the scale to color mapping will be reversed.+CIMGUI_API void ImPlotColormapScale(const char* label, double scale_min, double scale_max, ImVec2 size /* = ImVec2(0, 0) */, const char* format /* = "%g" */, ImPlotColormapScaleFlags flags /* = 0 */, ImPlotColormap cmap /* = IMPLOT_AUTO */);+// Shows a horizontal slider with a colormap gradient background. Optionally returns the color sampled at t in [0 1].+CIMGUI_API bool ImPlotColormapSlider(const char* label, float* t, ImVec4* out /* = nullptr */, const char* format /* = "" */, ImPlotColormap cmap /* = IMPLOT_AUTO */);+// Shows a button with a colormap gradient background.+CIMGUI_API bool ImPlotColormapButton(const char* label, ImVec2 size /* = ImVec2(0, 0) */, ImPlotColormap cmap /* = IMPLOT_AUTO */);++// When items in a plot sample their color from a colormap, the color is cached and does not change+// unless explicitly overridden. Therefore, if you change the colormap after the item has already been plotted,+// item colors will NOT update. If you need item colors to resample the new colormap, then use this+// function to bust the cached colors. If #plot_title_id is nullptr, then every item in EVERY existing plot+// will be cache busted. Otherwise only the plot specified by #plot_title_id will be busted. For the+// latter, this function must be called in the same ImGui ID scope that the plot is in. You should rarely if ever+// need this function, but it is available for applications that require runtime colormap swaps (e.g. Heatmaps demo).+CIMGUI_API void ImPlotBustColorCache(const char* plot_title_id /* = nullptr */);++//-----------------------------------------------------------------------------+// [SECTION] Input Mapping+//-----------------------------------------------------------------------------++// Provides access to input mapping structure for permanent modifications to controls for pan, select, etc.+CIMGUI_API ImPlotInputMap* ImPlotGetInputMap(void);++// Default input mapping: pan = LMB drag, box select = RMB drag, fit = LMB double click, context menu = RMB click, zoom = scroll.+CIMGUI_API void ImPlotMapInputDefault(ImPlotInputMap* dst /* = nullptr */);+// Reverse input mapping: pan = RMB drag, box select = LMB drag, fit = LMB double click, context menu = RMB click, zoom = scroll.+CIMGUI_API void ImPlotMapInputReverse(ImPlotInputMap* dst /* = nullptr */);++//-----------------------------------------------------------------------------+// [SECTION] Miscellaneous+//-----------------------------------------------------------------------------++// Render icons similar to those that appear in legends (nifty for data lists).+CIMGUI_API void ImPlotItemIcon(ImVec4 col);+CIMGUI_API void ImPlotItemIconImU32(ImU32 col);+CIMGUI_API void ImPlotColormapIcon(ImPlotColormap cmap);++// Get the plot draw list for custom rendering to the current plot area. Call between Begin/EndPlot.+CIMGUI_API ImDrawList* ImPlotGetPlotDrawList(void);+// Push clip rect for rendering to current plot area. The rect can be expanded or contracted by #expand pixels. Call between Begin/EndPlot.+CIMGUI_API void ImPlotPushPlotClipRect(float expand /* = 0 */);+// Pop plot clip rect. Call between Begin/EndPlot.+CIMGUI_API void ImPlotPopPlotClipRect(void);++// Shows ImPlot style selector dropdown menu.+CIMGUI_API bool ImPlotShowStyleSelector(const char* label);+// Shows ImPlot colormap selector dropdown menu.+CIMGUI_API bool ImPlotShowColormapSelector(const char* label);+// Shows ImPlot input map selector dropdown menu.+CIMGUI_API bool ImPlotShowInputMapSelector(const char* label);+// Shows ImPlot style editor block (not a window).+CIMGUI_API void ImPlotShowStyleEditor(ImPlotStyle* ref /* = nullptr */);+// Add basic help/info block for end users (not a window).+CIMGUI_API void ImPlotShowUserGuide(void);+// Shows ImPlot metrics/debug information window.+CIMGUI_API void ImPlotShowMetricsWindow(bool* p_popen /* = nullptr */);++//-----------------------------------------------------------------------------+// [SECTION] Demo+//-----------------------------------------------------------------------------++// Shows the ImPlot demo window (add implot_demo.cpp to your sources!)++//-----------------------------------------------------------------------------+// [SECTION] Obsolete API+//-----------------------------------------------------------------------------++// The following functions will be removed! Keep your copy of implot up to date!+// Occasionally set '#define IMPLOT_DISABLE_OBSOLETE_FUNCTIONS' to stay ahead.+// If you absolutely must use these functions and do not want to receive compiler+// warnings, set '#define IMPLOT_DISABLE_OBSOLETE_WARNINGS'.++#ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS+#ifndef IMPLOT_DISABLE_DEPRECATED_WARNINGS+#if __cplusplus>201402L+#define IMPLOT_DEPRECATED(method) [[deprecated]] method+#else+#if defined(__GNUC__)&&!defined(__INTEL_COMPILER)&&(__GNUC__>3 ||(__GNUC__ == 3 && __GNUC_MINOR__ >= 1))+#define IMPLOT_DEPRECATED(method) method __attribute__( ( deprecated ) )+#else+#if defined(_MSC_VER)+#define IMPLOT_DEPRECATED(method) __declspec(deprecated) method+#else+#define IMPLOT_DEPRECATED(method) method+#endif // #if defined(_MSC_VER)+#endif // #if defined(__GNUC__)&&!defined(__INTEL_COMPILER)&&(__GNUC__>3 ||(__GNUC__ == 3 && __GNUC_MINOR__ >= 1))+#endif // #if __cplusplus>201402L+#else+#define IMPLOT_DEPRECATED(method) method+#endif // #ifndef IMPLOT_DISABLE_DEPRECATED_WARNINGS++// OBSOLETED in v1.0 (from February 2026)+// IMGUI_API void SetNextLineStyle(const ImVec4& col = IMPLOT_AUTO_COL, float weight = IMPLOT_AUTO); // OBSOLETED IN v1.0 // Set ImPlotSpec.LineColor/LineWeight or construct ImPlotSpec with { ImPlotSpec_LineColor, color, ImPlotSpec_LineWeight, weight }.++// IMGUI_API void SetNextFillStyle(const ImVec4& col = IMPLOT_AUTO_COL, float alpha_mod = IMPLOT_AUTO);// OBSOLETED IN v1.0 // Set ImPlotSpec.FillColor/FillAlpha or construct ImPlotSpec with { ImPlotSpec_FillColor, color, ImPlotSpec_FillAlpha, alpha }.++// IMGUI_API void SetNextMarkerStyle(ImPlotMarker marker = IMPLOT_AUTO, float size = IMPLOT_AUTO, const ImVec4& fill = IMPLOT_AUTO_COL, float weight = IMPLOT_AUTO, const ImVec4& outline = IMPLOT_AUTO_COL); // OBSOLETED IN v1.0 // Set ImPlotSpec.Marker/MarkerSize/MarkerFillColor/LineWeight/MarkerLineColor or construct ImPlotSpec with { ImPlotSpec_Marker, marker, ImPlotSpec_MarkerSize, size, ImPlotSpec_MarkerFillColor, fill_color, ImPlotSpec_LineWeight, weight, ImPlotSpec_MarkerLineColor, outline }.++// IMGUI_API void SetNextErrorBarStyle(const ImVec4& col = IMPLOT_AUTO_COL, float size = IMPLOT_AUTO, float weight = IMPLOT_AUTO); // OBSOLETED IN v1.0 // Set ImPlotSpec.LineColor/Size/LineWeight or construct ImPlotSpec with { ImPlotSpec_LineColor, col, ImPlotSpec_Size, size, ImPlotSpec_LineWeight, weight }.+#endif// #ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS+#endif// #ifndef IMGUI_DISABLE+// THIS FILE HAS BEEN AUTO-GENERATED BY scripts/generate-implot-shim.py.+// **DO NOT EDIT DIRECTLY** -- regen via scripts/refresh-generated-in.sh.+//+// Monomorphized shim for implot's templated public API. Each+// IMPLOT_TMP-fronted PlotXxx<T> in upstream's implot.h becomes+// 10 concrete entry points here, one per scalar type that+// implot_items.cpp explicitly instantiates. Disambiguation infix:+// <Name>_<Tag> single-overload functions+// <Name>_xy_<Tag> (xs, ys) form+// <Name>_xyy_<Tag> (xs, ys1, ys2) form+// <Name>_xye_<Tag> (xs, ys, err) form+// <Name>_xynp_<Tag> (xs, ys, neg, pos) form+// PlotPieChart_fmt_<Tag> formatter-callback overload++CIMGUI_API void ImPlotPlotLine_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_F32(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_F64(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_F32(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotLine_xy_F64(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_F32(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_F64(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_F32(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotScatter_xy_F64(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_S8(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_U8(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_S16(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_U16(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_S32(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_U32(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_S64(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_U64(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_F32(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_F64(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_F32(const char* label_id, const float* xs, const float* ys, const float* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBubbles_xy_F64(const char* label_id, const double* xs, const double* ys, const double* szs, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_F32(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPolygon_F64(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_F32(const char* label_id, const float* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_F64(const char* label_id, const double* values, int count, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_F32(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStairs_xy_F64(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_S8(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_U8(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_S16(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_U16(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_S32(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_U32(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_S64(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_U64(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_F32(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_F64(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double yref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_S8(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_U8(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_S16(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_U16(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_S32(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_U32(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_S64(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_U64(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_F32(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotShaded_xyy_F64(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_S8(const char* label_id, const ImS8* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_U8(const char* label_id, const ImU8* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_S16(const char* label_id, const ImS16* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_U16(const char* label_id, const ImU16* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_S32(const char* label_id, const ImS32* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_U32(const char* label_id, const ImU32* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_S64(const char* label_id, const ImS64* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_U64(const char* label_id, const ImU64* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_F32(const char* label_id, const float* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_F64(const char* label_id, const double* values, int count, double bar_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBars_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double bar_size, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_S8(const char*const label_ids[], const ImS8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_U8(const char*const label_ids[], const ImU8* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_S16(const char*const label_ids[], const ImS16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_U16(const char*const label_ids[], const ImU16* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_S32(const char*const label_ids[], const ImS32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_U32(const char*const label_ids[], const ImU32* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_S64(const char*const label_ids[], const ImS64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_U64(const char*const label_ids[], const ImU64* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_F32(const char*const label_ids[], const float* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotBarGroups_F64(const char*const label_ids[], const double* values, int item_count, int group_count, double group_size, double shift, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_F32(const char* label_id, const float* xs, const float* ys, const float* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xye_F64(const char* label_id, const double* xs, const double* ys, const double* err, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_F32(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotErrorBars_xynp_F64(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_S8(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_U8(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_S16(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_U16(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_S32(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_U32(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_S64(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_U64(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_F32(const char* label_id, const float* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_F64(const char* label_id, const double* values, int count, double ref, double scale, double start, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotStems_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double ref, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_S8(const char* label_id, const ImS8* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_U8(const char* label_id, const ImU8* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_S16(const char* label_id, const ImS16* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_U16(const char* label_id, const ImU16* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_S32(const char* label_id, const ImS32* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_U32(const char* label_id, const ImU32* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_S64(const char* label_id, const ImS64* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_U64(const char* label_id, const ImU64* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_F32(const char* label_id, const float* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotInfLines_F64(const char* label_id, const double* values, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_S8(const char*const label_ids[], const ImS8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_U8(const char*const label_ids[], const ImU8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_S16(const char*const label_ids[], const ImS16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_U16(const char*const label_ids[], const ImU16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_S32(const char*const label_ids[], const ImS32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_U32(const char*const label_ids[], const ImU32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_S64(const char*const label_ids[], const ImS64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_U64(const char*const label_ids[], const ImU64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_F32(const char*const label_ids[], const float* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_fmt_F64(const char*const label_ids[], const double* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_S8(const char*const label_ids[], const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_U8(const char*const label_ids[], const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_S16(const char*const label_ids[], const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_U16(const char*const label_ids[], const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_S32(const char*const label_ids[], const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_U32(const char*const label_ids[], const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_S64(const char*const label_ids[], const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_U64(const char*const label_ids[], const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_F32(const char*const label_ids[], const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotPieChart_F64(const char*const label_ids[], const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_S8(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_U8(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_S16(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_U16(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_S32(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_U32(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_S64(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_U64(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_F32(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotHeatmap_F64(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, ImPlotPoint bounds_min, ImPlotPoint bounds_max, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_S8(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_U8(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_S16(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_U16(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_S32(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_U32(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_S64(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_U64(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_F32(const char* label_id, const float* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram_F64(const char* label_id, const double* values, int count, int bins, double bar_scale, ImPlotRange range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_F32(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API double ImPlotPlotHistogram2D_F64(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, ImPlotRect range, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_F32(const char* label_id, const float* xs, const float* ys, int count, ImPlotSpec spec);+CIMGUI_API void ImPlotPlotDigital_F64(const char* label_id, const double* xs, const double* ys, int count, ImPlotSpec spec);+#ifdef __cplusplus+} // End of extern "C" block+#endif
+ cbits/implot/implot.cpp view
@@ -0,0 +1,5931 @@+// MIT License++// Copyright (c) 2020-2024 Evan Pezent+// Copyright (c) 2025-2026 Breno Cunha Queiroz++// Permission is hereby granted, free of charge, to any person obtaining a copy+// of this software and associated documentation files (the "Software"), to deal+// in the Software without restriction, including without limitation the rights+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+// copies of the Software, and to permit persons to whom the Software is+// furnished to do so, subject to the following conditions:++// The above copyright notice and this permission notice shall be included in all+// copies or substantial portions of the Software.++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+// SOFTWARE.++// ImPlot v1.1 WIP++/*++API BREAKING CHANGES+====================+Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix.+Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code.+When you are not sure about a old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all implot files.+You can read releases logs https://github.com/epezent/implot/releases for more details.++- 2026/02/12 (1.0) - ImPlotSpec replaces the SetNextXXX style functions. The guide below shows show to migrate from SetNextXXX to ImPlotSpec.+ - `SetNextLineStyle` has been removed, styling should be set via ImPlotSpec.+ ```+ // Before+ ImPlot::SetNextLineStyle(line_color, line_weight);+ ImPlot::PlotLine("Line", xs, ys, count);++ // After+ ImPlotSpec spec;+ spec.LineColor = line_color;+ spec.LineWeight = line_weight;+ ImPlot::PlotLine("Line", xs, ys, count, spec);+ ```+ - `SetNextFillStyle` has been removed, styling should be set via ImPlotSpec.+ ```+ // Before+ ImPlot::SetNextFillStyle(fill_color, fill_alpha);+ ImPlot::PlotLine("Shaded", xs, ys, count, ImPlotLineFlags_Shaded);++ // After+ ImPlotSpec spec;+ spec.FillColor = fill_color;+ spec.FillAlpha = fill_alpha;+ spec.Flags = ImPlotLineFlags_Shaded;+ ImPlot::PlotTLine("Shaded", xs, ys, count, spec);+ ```+ - SetNextMarkerStyle has been removed, styling should be set via ImPlotSpec.+ ```+ // Before+ ImPlot::SetNextMarkerStyle(marker, marker_size, fill_color, line_weight, marker_outline_color);+ ImPlot::PlotScatter("Scatter", xs, ys, count);++ // After+ ImPlotSpec spec;+ spec.LineWeight = line_weight;+ spec.Marker = marker;+ spec.MarkerSize = marker_size;+ spec.MarkerLineColor = marker_outline_color;+ spec.MarkerFillColor = fill_color;+ ImPlot::PlotScatter("Scatter", xs, ys, count, spec);+ ```+ - SetNextErrorBarStyle has been removed, styling should be set via ImPlotSpec.+ ```+ // Before+ ImPlot::SetNextErrorBarStyle(color, size, weight);+ ImPlot::PlotErrorBars("ErrorBar", xs, ys, err, count);++ // After+ ImPlotSpec spec;+ spec.LineColor = color;+ spec.Size = size;+ spec.LineWeight = weight;+ ImPlot::PlotErrorBars("ErrorBar", xs, ys, err, count, spec);+ ```+ - Flags, Offset and Stride should also be set via ImPlotSpec now.+- 2023/10/02 (1.0) - ImPlotSpec was made the default and _only_ way of styling plot items. Therefore the following features were removed:+ - ImPlotCol_Line, ImPlotCol_Fill, ImPlotCol_MarkerOutline, ImPlotCol_MarkerFill, ImPlotCol_ErrorBar have been removed and thus are no longer supported by PushStyleColor.+ You can use a common ImPlotSpec instance across multiple PlotX calls to emulate PushStyleColor behavior.+ - ImPlotStyleVar_LineWeight, ImPlotStyleVar_Marker, ImPlotStyleVar_MarkerSize, ImPlotStyleVar_MarkerWeight, ImPlotStyleVar_FillAlpha, ImPlotStyleVar_ErrorBarSize, and ImPlotStyleVar_ErrorBarWeight+ have been removed and thus are no longer supported by PushStyleVar. You can use a common ImPlotSpec instance across multiple PlotX calls to emulate PushStyleVar behavior.+ - ImPlotStyle/ImPlotStyleVar_ DigitalBitGap was renamed to DigitalSpacing; DigitalBitHeight was removed (use ImPlotSpec::Size); DigitalPadding was added for padding from bottom.+ - PlotX offset, stride, and flags parameters are now incorporated into ImPlotSpec; specify these variables in the ImPlotSpec passed to PlotX.+- 2023/08/20 (0.17) - ImPlotFlags_NoChild was removed as child windows are no longer needed to capture scroll. You can safely remove this flag if you were using it.+- 2023/06/26 (0.15) - Various build fixes related to updates in Dear ImGui internals.+- 2022/11/25 (0.15) - Make PlotText honor ImPlotItemFlags_NoFit.+- 2022/06/19 (0.14) - The signature of ColormapScale has changed to accommodate a new ImPlotColormapScaleFlags parameter+- 2022/06/17 (0.14) - **IMPORTANT** All PlotX functions now take an ImPlotX_Flags `flags` parameter. Where applicable, it is located before the existing `offset` and `stride` parameters.+ If you were providing offset and stride values, you will need to update your function call to include a `flags` value. If you fail to do this, you will likely see+ unexpected results or crashes without a compiler warning since these three are all default args. We apologize for the inconvenience, but this was a necessary evil.+ - PlotBarsH has been removed; use PlotBars + ImPlotBarsFlags_Horizontal instead+ - PlotErrorBarsH has been removed; use PlotErrorBars + ImPlotErrorBarsFlags_Horizontal+ - PlotHistogram/PlotHistogram2D signatures changed; `cumulative`, `density`, and `outliers` options now specified via ImPlotHistogramFlags+ - PlotPieChart signature changed; `normalize` option now specified via ImPlotPieChartFlags+ - PlotText signature changes; `vertical` option now specified via `ImPlotTextFlags_Vertical`+ - `PlotVLines` and `PlotHLines` replaced with `PlotInfLines` (+ ImPlotInfLinesFlags_Horizontal )+ - arguments of ImPlotGetter have been reversed to be consistent with other API callbacks+ - SetupAxisScale + ImPlotScale have replaced ImPlotAxisFlags_LogScale and ImPlotAxisFlags_Time flags+ - ImPlotFormatters should now return an int indicating the size written+ - the signature of ImPlotGetter has been reversed so that void* user_data is the last argument and consistent with other callbacks+- 2021/10/19 (0.13) - MAJOR API OVERHAUL! See #168 and #272+ - TRIVIAL RENAME:+ - ImPlotLimits -> ImPlotRect+ - ImPlotYAxis_ -> ImAxis_+ - SetPlotYAxis -> SetAxis+ - BeginDragDropTarget -> BeginDragDropTargetPlot+ - BeginDragDropSource -> BeginDragDropSourcePlot+ - ImPlotFlags_NoMousePos -> ImPlotFlags_NoMouseText+ - SetNextPlotLimits -> SetNextAxesLimits+ - SetMouseTextLocation -> SetupMouseText+ - SIGNATURE MODIFIED:+ - PixelsToPlot/PlotToPixels -> added optional X-Axis arg+ - GetPlotMousePos -> added optional X-Axis arg+ - GetPlotLimits -> added optional X-Axis arg+ - GetPlotSelection -> added optional X-Axis arg+ - DragLineX/Y/DragPoint -> now takes int id; removed labels (render with Annotation/Tag instead)+ - REPLACED:+ - IsPlotXAxisHovered/IsPlotXYAxisHovered -> IsAxisHovered(ImAxis)+ - BeginDragDropTargetX/BeginDragDropTargetY -> BeginDragDropTargetAxis(ImAxis)+ - BeginDragDropSourceX/BeginDragDropSourceY -> BeginDragDropSourceAxis(ImAxis)+ - ImPlotCol_XAxis, ImPlotCol_YAxis1, etc. -> ImPlotCol_AxisText (push/pop this around SetupAxis to style individual axes)+ - ImPlotCol_XAxisGrid, ImPlotCol_Y1AxisGrid -> ImPlotCol_AxisGrid (push/pop this around SetupAxis to style individual axes)+ - SetNextPlotLimitsX/Y -> SetNextAxisLimits(ImAxis)+ - LinkNextPlotLimits -> SetNextAxisLinks(ImAxis)+ - FitNextPlotAxes -> SetNextAxisToFit(ImAxis)/SetNextAxesToFit+ - SetLegendLocation -> SetupLegend+ - ImPlotFlags_NoHighlight -> ImPlotLegendFlags_NoHighlight+ - ImPlotOrientation -> ImPlotLegendFlags_Horizontal+ - Annotate -> Annotation+ - REMOVED:+ - GetPlotQuery, SetPlotQuery, IsPlotQueried -> use DragRect+ - SetNextPlotTicksX, SetNextPlotTicksY -> use SetupAxisTicks+ - SetNextPlotFormatX, SetNextPlotFormatY -> use SetupAxisFormat+ - AnnotateClamped -> use Annotation(bool clamp = true)+ - OBSOLETED:+ - BeginPlot (original signature) -> use simplified signature + Setup API+- 2021/07/30 (0.12) - The offset argument of `PlotXG` functions was been removed. Implement offsetting in your getter callback instead.+- 2021/03/08 (0.9) - SetColormap and PushColormap(ImVec4*) were removed. Use AddColormap for custom colormap support. LerpColormap was changed to SampleColormap.+ ShowColormapScale was changed to ColormapScale and requires additional arguments.+- 2021/03/07 (0.9) - The signature of ShowColormapScale was modified to accept a ImVec2 size.+- 2021/02/28 (0.9) - BeginLegendDragDropSource was changed to BeginDragDropSourceItem with a number of other drag and drop improvements.+- 2021/01/18 (0.9) - The default behavior for opening context menus was change from double right-click to single right-click. ImPlotInputMap and related functions were moved+ to implot_internal.h due to its immaturity.+- 2020/10/16 (0.8) - ImPlotStyleVar_InfoPadding was changed to ImPlotStyleVar_MousePosPadding+- 2020/09/10 (0.8) - The single array versions of PlotLine, PlotScatter, PlotStems, and PlotShaded were given additional arguments for x-scale and x0.+- 2020/09/07 (0.8) - Plotting functions which accept a custom getter function pointer have been post-fixed with a G (e.g. PlotLineG)+- 2020/09/06 (0.7) - Several flags under ImPlotFlags and ImPlotAxisFlags were inverted (e.g. ImPlotFlags_Legend -> ImPlotFlags_NoLegend) so that the default flagset+ is simply 0. This more closely matches ImGui's style and makes it easier to enable non-default but commonly used flags (e.g. ImPlotAxisFlags_Time).+- 2020/08/28 (0.5) - ImPlotMarker_ can no longer be combined with bitwise OR, |. This features caused unnecessary slow-down, and almost no one used it.+- 2020/08/25 (0.5) - ImPlotAxisFlags_Scientific was removed. Logarithmic axes automatically uses scientific notation.+- 2020/08/17 (0.5) - PlotText was changed so that text is centered horizontally and vertically about the desired point.+- 2020/08/16 (0.5) - An ImPlotContext must be explicitly created and destroyed now with `CreateContext` and `DestroyContext`. Previously, the context was statically initialized in this source file.+- 2020/06/13 (0.4) - The flags `ImPlotAxisFlag_Adaptive` and `ImPlotFlags_Cull` were removed. Both are now done internally by default.+- 2020/06/03 (0.3) - The signature and behavior of PlotPieChart was changed so that data with sum less than 1 can optionally be normalized. The label format can now be specified as well.+- 2020/06/01 (0.3) - SetPalette was changed to `SetColormap` for consistency with other plotting libraries. `RestorePalette` was removed. Use `SetColormap(ImPlotColormap_Default)`.+- 2020/05/31 (0.3) - Plot functions taking custom ImVec2* getters were removed. Use the ImPlotPoint* getter versions instead.+- 2020/05/29 (0.3) - The signature of ImPlotLimits::Contains was changed to take two doubles instead of ImVec2+- 2020/05/16 (0.2) - All plotting functions were reverted to being prefixed with "Plot" to maintain a consistent VerbNoun style. `Plot` was split into `PlotLine`+ and `PlotScatter` (however, `PlotLine` can still be used to plot scatter points as `Plot` did before.). `Bar` is not `PlotBars`, to indicate+ that multiple bars will be plotted.+- 2020/05/13 (0.2) - `ImMarker` was change to `ImPlotMarker` and `ImAxisFlags` was changed to `ImPlotAxisFlags`.+- 2020/05/11 (0.2) - `ImPlotFlags_Selection` was changed to `ImPlotFlags_BoxSelect`+- 2020/05/11 (0.2) - The namespace ImGui:: was replaced with ImPlot::. As a result, the following additional changes were made:+ - Functions that were prefixed or decorated with the word "Plot" have been truncated. E.g., `ImGui::PlotBars` is now just `ImPlot::Bar`.+ It should be fairly obvious what was what.+ - Some functions have been given names that would have otherwise collided with the ImGui namespace. This has been done to maintain a consistent+ style with ImGui. E.g., 'ImGui::PushPlotStyleVar` is now 'ImPlot::PushStyleVar'.+- 2020/05/10 (0.2) - The following function/struct names were changes:+ - ImPlotRange -> ImPlotLimits+ - GetPlotRange() -> GetPlotLimits()+ - SetNextPlotRange -> SetNextPlotLimits+ - SetNextPlotRangeX -> SetNextPlotLimitsX+ - SetNextPlotRangeY -> SetNextPlotLimitsY+- 2020/05/10 (0.2) - Plot queries are pixel based by default. Query rects that maintain relative plot position have been removed. This was done to support multi-y-axis.++*/++#ifndef IMGUI_DEFINE_MATH_OPERATORS+#define IMGUI_DEFINE_MATH_OPERATORS+#endif+#include "implot.h"+#ifndef IMGUI_DISABLE+#include "implot_internal.h"++#include <stdlib.h>++// Support for pre-1.82 versions. Users on 1.82+ can use 0 (default) flags to mean "all corners" but in order to support older versions we are more explicit.+#if (IMGUI_VERSION_NUM < 18102) && !defined(ImDrawFlags_RoundCornersAll)+#define ImDrawFlags_RoundCornersAll ImDrawCornerFlags_All+#endif++// Support for pre-1.89.7 versions.+#if (IMGUI_VERSION_NUM < 18966)+#define ImGuiButtonFlags_AllowOverlap ImGuiButtonFlags_AllowItemOverlap+#endif++// Visual Studio warnings+#ifdef _MSC_VER+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen+#endif++// Clang/GCC warnings with -Weverything+#if defined(__clang__)+#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning: format string is not a string literal+#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated+#pragma clang diagnostic ignored "-Wenum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated+#elif defined(__GNUC__)+#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked+#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated+#endif++// Global plot context+#ifndef GImPlot+ImPlotContext* GImPlot = nullptr;+#endif++//-----------------------------------------------------------------------------+// Struct Implementations+//-----------------------------------------------------------------------------++ImPlotInputMap::ImPlotInputMap() {+ ImPlot::MapInputDefault(this);+}++ImPlotStyle::ImPlotStyle() {+ PlotDefaultSize = ImVec2(400,300);+ PlotMinSize = ImVec2(200,150);+ PlotBorderSize = 1;+ MinorAlpha = 0.25f;+ MajorTickLen = ImVec2(10,10);+ MinorTickLen = ImVec2(5,5);+ MajorTickSize = ImVec2(1,1);+ MinorTickSize = ImVec2(1,1);+ MajorGridSize = ImVec2(1,1);+ MinorGridSize = ImVec2(1,1);+ PlotPadding = ImVec2(10,10);+ LabelPadding = ImVec2(5,5);+ LegendPadding = ImVec2(10,10);+ LegendInnerPadding = ImVec2(5,5);+ LegendSpacing = ImVec2(5,0);+ MousePosPadding = ImVec2(10,10);+ AnnotationPadding = ImVec2(2,2);+ FitPadding = ImVec2(0,0);+ DigitalPadding = 20;+ DigitalSpacing = 4;+ + ImPlot::StyleColorsAuto(this);++ Colormap = ImPlotColormap_Deep;++ UseLocalTime = false;+ Use24HourClock = false;+ UseISO8601 = false;+}++//-----------------------------------------------------------------------------+// Style+//-----------------------------------------------------------------------------++namespace ImPlot {++const char* GetStyleColorName(ImPlotCol col) {+ static const char* col_names[ImPlotCol_COUNT] = {+ "FrameBg",+ "PlotBg",+ "PlotBorder",+ "LegendBg",+ "LegendBorder",+ "LegendText",+ "TitleText",+ "InlayText",+ "AxisText",+ "AxisGrid",+ "AxisTick",+ "AxisBg",+ "AxisBgHovered",+ "AxisBgActive",+ "Selection",+ "Crosshairs"+ };+ return col_names[col];+}++const char* GetMarkerName(ImPlotMarker marker) {+ switch (marker) {+ case ImPlotMarker_None: return "None";+ case ImPlotMarker_Auto: return "Auto";+ case ImPlotMarker_Circle: return "Circle";+ case ImPlotMarker_Square: return "Square";+ case ImPlotMarker_Diamond: return "Diamond";+ case ImPlotMarker_Up: return "Up";+ case ImPlotMarker_Down: return "Down";+ case ImPlotMarker_Left: return "Left";+ case ImPlotMarker_Right: return "Right";+ case ImPlotMarker_Cross: return "Cross";+ case ImPlotMarker_Plus: return "Plus";+ case ImPlotMarker_Asterisk: return "Asterisk";+ case ImPlotMarker_Vertical: return "Vertical";+ case ImPlotMarker_Horizontal: return "Horizontal";+ default: return "";+ }+}++ImVec4 GetAutoColor(ImPlotCol idx) {+ ImVec4 col(0,0,0,1);+ switch(idx) {+ case ImPlotCol_FrameBg: return ImGui::GetStyleColorVec4(ImGuiCol_FrameBg);+ case ImPlotCol_PlotBg: return ImGui::GetStyleColorVec4(ImGuiCol_WindowBg);+ case ImPlotCol_PlotBorder: return ImGui::GetStyleColorVec4(ImGuiCol_Border);+ case ImPlotCol_LegendBg: return ImGui::GetStyleColorVec4(ImGuiCol_PopupBg);+ case ImPlotCol_LegendBorder: return GetStyleColorVec4(ImPlotCol_PlotBorder);+ case ImPlotCol_LegendText: return GetStyleColorVec4(ImPlotCol_InlayText);+ case ImPlotCol_TitleText: return ImGui::GetStyleColorVec4(ImGuiCol_Text);+ case ImPlotCol_InlayText: return ImGui::GetStyleColorVec4(ImGuiCol_Text);+ case ImPlotCol_AxisText: return ImGui::GetStyleColorVec4(ImGuiCol_Text);+ case ImPlotCol_AxisGrid: return GetStyleColorVec4(ImPlotCol_AxisText) * ImVec4(1,1,1,0.25f);+ case ImPlotCol_AxisTick: return GetStyleColorVec4(ImPlotCol_AxisGrid);+ case ImPlotCol_AxisBg: return ImVec4(0,0,0,0);+ case ImPlotCol_AxisBgHovered: return ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered);+ case ImPlotCol_AxisBgActive: return ImGui::GetStyleColorVec4(ImGuiCol_ButtonActive);+ case ImPlotCol_Selection: return ImVec4(1,1,0,1);+ case ImPlotCol_Crosshairs: return GetStyleColorVec4(ImPlotCol_PlotBorder);+ default: return col;+ }+}++struct ImPlotStyleVarInfo {+ ImGuiDataType Type;+ ImU32 Count;+ ImU32 Offset;+ void* GetVarPtr(ImPlotStyle* style) const { return (void*)((unsigned char*)style + Offset); }+};++static const ImPlotStyleVarInfo GPlotStyleVarInfo[] =+{+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, PlotDefaultSize) }, // ImPlotStyleVar_PlotDefaultSize+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, PlotMinSize) }, // ImPlotStyleVar_PlotMinSize+ { ImGuiDataType_Float, 1, (ImU32)offsetof(ImPlotStyle, PlotBorderSize) }, // ImPlotStyleVar_PlotBorderSize+ { ImGuiDataType_Float, 1, (ImU32)offsetof(ImPlotStyle, MinorAlpha) }, // ImPlotStyleVar_MinorAlpha+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MajorTickLen) }, // ImPlotStyleVar_MajorTickLen+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MinorTickLen) }, // ImPlotStyleVar_MinorTickLen+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MajorTickSize) }, // ImPlotStyleVar_MajorTickSize+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MinorTickSize) }, // ImPlotStyleVar_MinorTickSize+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MajorGridSize) }, // ImPlotStyleVar_MajorGridSize+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MinorGridSize) }, // ImPlotStyleVar_MinorGridSize+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, PlotPadding) }, // ImPlotStyleVar_PlotPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, LabelPadding) }, // ImPlotStyleVar_LabelPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, LegendPadding) }, // ImPlotStyleVar_LegendPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, LegendInnerPadding) }, // ImPlotStyleVar_LegendInnerPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, LegendSpacing) }, // ImPlotStyleVar_LegendSpacing+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, MousePosPadding) }, // ImPlotStyleVar_MousePosPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, AnnotationPadding) }, // ImPlotStyleVar_AnnotationPadding+ { ImGuiDataType_Float, 2, (ImU32)offsetof(ImPlotStyle, FitPadding) }, // ImPlotStyleVar_FitPadding+ { ImGuiDataType_Float, 1, (ImU32)offsetof(ImPlotStyle, DigitalPadding) }, // ImPlotStyleVar_DigitalPadding+ { ImGuiDataType_Float, 1, (ImU32)offsetof(ImPlotStyle, DigitalSpacing) }, // ImPlotStyleVar_DigitalSpacing+};++static const ImPlotStyleVarInfo* GetPlotStyleVarInfo(ImPlotStyleVar idx) {+ IM_ASSERT(idx >= 0 && idx < ImPlotStyleVar_COUNT);+ IM_ASSERT(IM_ARRAYSIZE(GPlotStyleVarInfo) == ImPlotStyleVar_COUNT);+ return &GPlotStyleVarInfo[idx];+}++//-----------------------------------------------------------------------------+// Generic Helpers+//-----------------------------------------------------------------------------++void AddTextVertical(ImDrawList *DrawList, ImVec2 pos, ImU32 col, const char *text_begin, const char* text_end) {+ // the code below is based loosely on ImFont::RenderText+ if (!text_end)+ text_end = text_begin + strlen(text_begin);+ ImGuiContext& g = *GImGui;+#ifdef IMGUI_HAS_TEXTURES+ ImFontBaked* font = g.Font->GetFontBaked(g.FontSize);+ const float scale = g.FontSize / font->Size;+#else+ ImFont* font = g.Font;+ const float scale = g.FontSize / font->FontSize;+#endif+ // Align to be pixel perfect+ pos.x = ImFloor(pos.x);+ pos.y = ImFloor(pos.y);+ const char* s = text_begin;+ int chars_exp = (int)(text_end - s);+ int chars_rnd = 0;+ const int vtx_count_max = chars_exp * 4;+ const int idx_count_max = chars_exp * 6;+ DrawList->PrimReserve(idx_count_max, vtx_count_max);+ while (s < text_end) {+ unsigned int c = (unsigned int)*s;+ if (c < 0x80) {+ s += 1;+ }+ else {+ s += ImTextCharFromUtf8(&c, s, text_end);+ if (c == 0) // Malformed UTF-8?+ break;+ }+ const ImFontGlyph * glyph = font->FindGlyph((ImWchar)c);+ if (glyph == nullptr) {+ continue;+ }+ DrawList->PrimQuadUV(pos + ImVec2(glyph->Y0, -glyph->X0) * scale, pos + ImVec2(glyph->Y0, -glyph->X1) * scale,+ pos + ImVec2(glyph->Y1, -glyph->X1) * scale, pos + ImVec2(glyph->Y1, -glyph->X0) * scale,+ ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V0),+ ImVec2(glyph->U1, glyph->V1), ImVec2(glyph->U0, glyph->V1),+ col);+ pos.y -= glyph->AdvanceX * scale;+ chars_rnd++;+ }+ // Give back unused vertices+ int chars_skp = chars_exp-chars_rnd;+ DrawList->PrimUnreserve(chars_skp*6, chars_skp*4);+}++void AddTextCentered(ImDrawList* DrawList, ImVec2 top_center, ImU32 col, const char* text_begin, const char* text_end) {+ float txt_ht = ImGui::GetTextLineHeight();+ const char* title_end = ImGui::FindRenderedTextEnd(text_begin, text_end);+ ImVec2 text_size;+ float y = 0;+ while (const char* tmp = (const char*)memchr(text_begin, '\n', title_end-text_begin)) {+ text_size = ImGui::CalcTextSize(text_begin,tmp,true);+ DrawList->AddText(ImVec2(top_center.x - text_size.x * 0.5f, top_center.y+y),col,text_begin,tmp);+ text_begin = tmp + 1;+ y += txt_ht;+ }+ text_size = ImGui::CalcTextSize(text_begin,title_end,true);+ DrawList->AddText(ImVec2(top_center.x - text_size.x * 0.5f, top_center.y+y),col,text_begin,title_end);+}++double NiceNum(double x, bool round) {+ double f;+ double nf;+ int expv = (int)floor(ImLog10(x));+ f = x / ImPow(10.0, (double)expv);+ if (round)+ if (f < 1.5)+ nf = 1;+ else if (f < 3)+ nf = 2;+ else if (f < 7)+ nf = 5;+ else+ nf = 10;+ else if (f <= 1)+ nf = 1;+ else if (f <= 2)+ nf = 2;+ else if (f <= 5)+ nf = 5;+ else+ nf = 10;+ return nf * ImPow(10.0, expv);+}++//-----------------------------------------------------------------------------+// Context Utils+//-----------------------------------------------------------------------------++void SetImGuiContext(ImGuiContext* ctx) {+ ImGui::SetCurrentContext(ctx);+}++ImPlotContext* CreateContext() {+ ImPlotContext* ctx = IM_NEW(ImPlotContext)();+ Initialize(ctx);+ if (GImPlot == nullptr)+ SetCurrentContext(ctx);+ return ctx;+}++void DestroyContext(ImPlotContext* ctx) {+ if (ctx == nullptr)+ ctx = GImPlot;+ if (GImPlot == ctx)+ SetCurrentContext(nullptr);+ IM_DELETE(ctx);+}++ImPlotContext* GetCurrentContext() {+ return GImPlot;+}++void SetCurrentContext(ImPlotContext* ctx) {+ GImPlot = ctx;+}++#define IMPLOT_APPEND_CMAP(name, qual) ctx->ColormapData.Append(#name, name, sizeof(name)/sizeof(ImU32), qual)+#define IM_RGB(r,g,b) IM_COL32(r,g,b,255)++void Initialize(ImPlotContext* ctx) {+ ResetCtxForNextPlot(ctx);+ ResetCtxForNextAlignedPlots(ctx);+ ResetCtxForNextSubplot(ctx);++ const ImU32 Deep[] = {IM_RGB(76,114,176),IM_RGB(221,132,82),IM_RGB(85,168,104),IM_RGB(196,78,82),IM_RGB(129,114,179),IM_RGB(147,120,96),IM_RGB(218,139,195),IM_RGB(140,140,140),IM_RGB(204,185,116),IM_RGB(100,181,205)};+ const ImU32 Dark[] = {IM_RGB(228,26,28),IM_RGB(55,126,184),IM_RGB(77,175,74),IM_RGB(152,78,163),IM_RGB(255,127,0),IM_RGB(255,255,51),IM_RGB(166,86,40),IM_RGB(247,129,191),IM_RGB(153,153,153)};+ const ImU32 Pastel[] = {IM_RGB(251,180,174),IM_RGB(179,205,227),IM_RGB(204,235,197),IM_RGB(222,203,228),IM_RGB(254,217,166),IM_RGB(255,255,204),IM_RGB(229,216,189),IM_RGB(253,218,236),IM_RGB(242,242,242)};+ const ImU32 Paired[] = {IM_RGB(66,206,227),IM_RGB(31,120,180),IM_RGB(178,223,138),IM_RGB(51,160,44),IM_RGB(251,154,153),IM_RGB(227,26,28),IM_RGB(253,191,111),IM_RGB(255,127,0),IM_RGB(202,178,214),IM_RGB(106,61,154),IM_RGB(255,255,153),IM_RGB(177,89,40)};+ const ImU32 Viridis[] = {IM_RGB(68,1,84),IM_RGB(72,36,117),IM_RGB(65,68,135),IM_RGB(53,95,141),IM_RGB(42,120,142),IM_RGB(33,145,140),IM_RGB(34,168,132),IM_RGB(68,191,112),IM_RGB(122,209,81),IM_RGB(189,223,38),IM_RGB(253,231,37)};+ const ImU32 Plasma[] = {IM_RGB(13,8,135),IM_RGB(65,4,157),IM_RGB(106,0,168),IM_RGB(143,13,164),IM_RGB(177,42,144),IM_RGB(204,71,120),IM_RGB(225,100,98),IM_RGB(242,132,75),IM_RGB(252,166,54),IM_RGB(252,206,37),IM_RGB(240,249,33)};+ const ImU32 Hot[] = {IM_RGB(64,0,0),IM_RGB(128,0,0),IM_RGB(191,0,0),IM_RGB(255,0,0),IM_RGB(255,64,0),IM_RGB(255,128,0),IM_RGB(255,191,0),IM_RGB(255,255,0),IM_RGB(255,255,85),IM_RGB(255,255,170),IM_RGB(255,255,255)};+ const ImU32 Cool[] = {IM_RGB(0,255,255),IM_RGB(26,230,255),IM_RGB(51,204,255),IM_RGB(77,179,255),IM_RGB(102,153,255),IM_RGB(128,128,255),IM_RGB(153,102,255),IM_RGB(179,77,255),IM_RGB(204,51,255),IM_RGB(230,26,255),IM_RGB(255,0,255)};+ const ImU32 Pink[] = {IM_RGB(74,0,0),IM_RGB(123,66,66),IM_RGB(158,93,93),IM_RGB(186,114,114),IM_RGB(198,151,132),IM_RGB(208,180,147),IM_RGB(218,206,161),IM_RGB(228,228,174),IM_RGB(237,237,205),IM_RGB(246,246,231),IM_RGB(255,255,255)};+ const ImU32 Jet[] = {IM_RGB(0,0,170),IM_RGB(0,0,255),IM_RGB(0,85,255),IM_RGB(0,170,255),IM_RGB(0,255,255),IM_RGB(85,255,170),IM_RGB(170,255,85),IM_RGB(255,255,0),IM_RGB(255,170,0),IM_RGB(255,85,0),IM_RGB(255,0,0)};+ const ImU32 Twilight[] = {IM_RGB(226,217,226),IM_RGB(166,191,202),IM_RGB(109,144,192),IM_RGB(95,88,176),IM_RGB(83,30,124),IM_RGB(47,20,54),IM_RGB(100,25,75),IM_RGB(159,60,80),IM_RGB(192,117,94),IM_RGB(208,179,158),IM_RGB(226,217,226)};+ const ImU32 RdBu[] = {IM_RGB(103,0,31),IM_RGB(178,24,43),IM_RGB(214,96,77),IM_RGB(244,165,130),IM_RGB(253,219,199),IM_RGB(247,247,247),IM_RGB(209,229,240),IM_RGB(146,197,222),IM_RGB(67,147,195),IM_RGB(33,102,172),IM_RGB(5,48,97)};+ const ImU32 BrBG[] = {IM_RGB(84,48,5),IM_RGB(140,81,10),IM_RGB(191,129,45),IM_RGB(223,194,125),IM_RGB(246,232,195),IM_RGB(245,245,245),IM_RGB(199,234,229),IM_RGB(128,205,193),IM_RGB(53,151,143),IM_RGB(1,102,94),IM_RGB(0,60,48)};+ const ImU32 PiYG[] = {IM_RGB(142,1,82),IM_RGB(197,27,125),IM_RGB(222,119,174),IM_RGB(241,182,218),IM_RGB(253,224,239),IM_RGB(247,247,247),IM_RGB(230,245,208),IM_RGB(184,225,134),IM_RGB(127,188,65),IM_RGB(77,146,33),IM_RGB(39,100,25)};+ const ImU32 Spectral[] = {IM_RGB(158,1,66),IM_RGB(213,62,79),IM_RGB(244,109,67),IM_RGB(253,174,97),IM_RGB(254,224,139),IM_RGB(255,255,191),IM_RGB(230,245,152),IM_RGB(171,221,164),IM_RGB(102,194,165),IM_RGB(50,136,189),IM_RGB(94,79,162)};+ const ImU32 Greys[] = {IM_COL32_WHITE, IM_COL32_BLACK};++ IMPLOT_APPEND_CMAP(Deep, true);+ IMPLOT_APPEND_CMAP(Dark, true);+ IMPLOT_APPEND_CMAP(Pastel, true);+ IMPLOT_APPEND_CMAP(Paired, true);+ IMPLOT_APPEND_CMAP(Viridis, false);+ IMPLOT_APPEND_CMAP(Plasma, false);+ IMPLOT_APPEND_CMAP(Hot, false);+ IMPLOT_APPEND_CMAP(Cool, false);+ IMPLOT_APPEND_CMAP(Pink, false);+ IMPLOT_APPEND_CMAP(Jet, false);+ IMPLOT_APPEND_CMAP(Twilight, false);+ IMPLOT_APPEND_CMAP(RdBu, false);+ IMPLOT_APPEND_CMAP(BrBG, false);+ IMPLOT_APPEND_CMAP(PiYG, false);+ IMPLOT_APPEND_CMAP(Spectral, false);+ IMPLOT_APPEND_CMAP(Greys, false);+}++void ResetCtxForNextPlot(ImPlotContext* ctx) {+ // reset the next plot/item data+ ctx->NextPlotData.Reset();+ ctx->NextItemData.Reset();+ // reset labels+ ctx->Annotations.Reset();+ ctx->Tags.Reset();+ // reset extents/fit+ ctx->OpenContextThisFrame = false;+ // reset digital plot items count+ ctx->DigitalPlotItemCnt = 0;+ ctx->DigitalPlotOffset = 0;+ // nullify plot+ ctx->CurrentPlot = nullptr;+ ctx->CurrentItem = nullptr;+ ctx->PreviousItem = nullptr;+}++void ResetCtxForNextAlignedPlots(ImPlotContext* ctx) {+ ctx->CurrentAlignmentH = nullptr;+ ctx->CurrentAlignmentV = nullptr;+}++void ResetCtxForNextSubplot(ImPlotContext* ctx) {+ ctx->CurrentSubplot = nullptr;+ ctx->CurrentAlignmentH = nullptr;+ ctx->CurrentAlignmentV = nullptr;+}++//-----------------------------------------------------------------------------+// Plot Utils+//-----------------------------------------------------------------------------++ImPlotPlot* GetPlot(const char* title) {+ ImGuiWindow* Window = GImGui->CurrentWindow;+ const ImGuiID ID = Window->GetID(title);+ return GImPlot->Plots.GetByKey(ID);+}++ImPlotPlot* GetCurrentPlot() {+ return GImPlot->CurrentPlot;+}++void BustPlotCache() {+ ImPlotContext& gp = *GImPlot;+ gp.Plots.Clear();+ gp.Subplots.Clear();+}++//-----------------------------------------------------------------------------+// Legend Utils+//-----------------------------------------------------------------------------++ImVec2 GetLocationPos(const ImRect& outer_rect, const ImVec2& inner_size, ImPlotLocation loc, const ImVec2& pad) {+ ImVec2 pos;+ if (ImHasFlag(loc, ImPlotLocation_West) && !ImHasFlag(loc, ImPlotLocation_East))+ pos.x = outer_rect.Min.x + pad.x;+ else if (!ImHasFlag(loc, ImPlotLocation_West) && ImHasFlag(loc, ImPlotLocation_East))+ pos.x = outer_rect.Max.x - pad.x - inner_size.x;+ else+ pos.x = outer_rect.GetCenter().x - inner_size.x * 0.5f;+ // legend reference point y+ if (ImHasFlag(loc, ImPlotLocation_North) && !ImHasFlag(loc, ImPlotLocation_South))+ pos.y = outer_rect.Min.y + pad.y;+ else if (!ImHasFlag(loc, ImPlotLocation_North) && ImHasFlag(loc, ImPlotLocation_South))+ pos.y = outer_rect.Max.y - pad.y - inner_size.y;+ else+ pos.y = outer_rect.GetCenter().y - inner_size.y * 0.5f;+ pos.x = IM_ROUND(pos.x);+ pos.y = IM_ROUND(pos.y);+ return pos;+}++ImVec2 CalcLegendSize(ImPlotItemGroup& items, const ImVec2& pad, const ImVec2& spacing, bool vertical) {+ // vars+ const int nItems = items.GetLegendCount();+ const float txt_ht = ImGui::GetTextLineHeight();+ const float icon_size = txt_ht;+ // get label max width+ float max_label_width = 0;+ float sum_label_width = 0;+ for (int i = 0; i < nItems; ++i) {+ const char* label = items.GetLegendLabel(i);+ const float label_width = ImGui::CalcTextSize(label, nullptr, true).x;+ max_label_width = label_width > max_label_width ? label_width : max_label_width;+ sum_label_width += label_width;+ }+ // calc legend size+ const ImVec2 legend_size = vertical ?+ ImVec2(pad.x * 2 + icon_size + max_label_width, pad.y * 2 + nItems * txt_ht + (nItems - 1) * spacing.y) :+ ImVec2(pad.x * 2 + icon_size * nItems + sum_label_width + (nItems - 1) * spacing.x, pad.y * 2 + txt_ht);+ return legend_size;+}++bool ClampLegendRect(ImRect& legend_rect, const ImRect& outer_rect, const ImVec2& pad) {+ bool clamped = false;+ ImRect outer_rect_pad(outer_rect.Min + pad, outer_rect.Max - pad);+ if (legend_rect.Min.x < outer_rect_pad.Min.x) {+ legend_rect.Min.x = outer_rect_pad.Min.x;+ clamped = true;+ }+ if (legend_rect.Min.y < outer_rect_pad.Min.y) {+ legend_rect.Min.y = outer_rect_pad.Min.y;+ clamped = true;+ }+ if (legend_rect.Max.x > outer_rect_pad.Max.x) {+ legend_rect.Max.x = outer_rect_pad.Max.x;+ clamped = true;+ }+ if (legend_rect.Max.y > outer_rect_pad.Max.y) {+ legend_rect.Max.y = outer_rect_pad.Max.y;+ clamped = true;+ }+ return clamped;+}++int LegendSortingComp(const void* _a, const void* _b) {+ ImPlotItemGroup* items = GImPlot->SortItems;+ const int a = *(const int*)_a;+ const int b = *(const int*)_b;+ const char* label_a = items->GetLegendLabel(a);+ const char* label_b = items->GetLegendLabel(b);+ return strcmp(label_a,label_b);+}++bool ShowLegendEntries(ImPlotItemGroup& items, const ImRect& legend_bb, bool hovered, const ImVec2& pad, const ImVec2& spacing, bool vertical, ImDrawList& DrawList) {+ // vars+ const float txt_ht = ImGui::GetTextLineHeight();+ const float icon_size = txt_ht;+ const float icon_shrink = 2;+ ImU32 col_txt = GetStyleColorU32(ImPlotCol_LegendText);+ ImU32 col_txt_dis = ImAlphaU32(col_txt, 0.25f);+ // render each legend item+ float sum_label_width = 0;+ bool any_item_hovered = false;++ const int num_items = items.GetLegendCount();+ if (num_items < 1)+ return hovered;+ // build render order+ ImPlotContext& gp = *GImPlot;+ ImVector<int>& indices = gp.TempInt1;+ indices.resize(num_items);+ for (int i = 0; i < num_items; ++i)+ indices[i] = i;+ if (ImHasFlag(items.Legend.Flags, ImPlotLegendFlags_Sort) && num_items > 1) {+ gp.SortItems = &items;+ qsort(indices.Data, num_items, sizeof(int), LegendSortingComp);+ }+ // render+ for (int i = 0; i < num_items; ++i) {+ const int idx = ImHasFlag(items.Legend.Flags, ImPlotLegendFlags_Reverse) ? indices[num_items - 1 - i] : indices[i];+ ImPlotItem* item = items.GetLegendItem(idx);+ const char* label = items.GetLegendLabel(idx);+ const float label_width = ImGui::CalcTextSize(label, nullptr, true).x;+ const ImVec2 top_left = vertical ?+ legend_bb.Min + pad + ImVec2(0, i * (txt_ht + spacing.y)) :+ legend_bb.Min + pad + ImVec2(i * (icon_size + spacing.x) + sum_label_width, 0);+ sum_label_width += label_width;+ ImRect icon_bb;+ icon_bb.Min = top_left + ImVec2(icon_shrink,icon_shrink);+ icon_bb.Max = top_left + ImVec2(icon_size - icon_shrink, icon_size - icon_shrink);+ ImRect label_bb;+ label_bb.Min = top_left;+ label_bb.Max = top_left + ImVec2(label_width + icon_size, icon_size);+ ImU32 col_txt_hl;+ ImU32 col_item = ImAlphaU32(item->Color,1);++ ImRect button_bb(icon_bb.Min, label_bb.Max);++ ImGui::KeepAliveID(item->ID);++ bool item_hov = false;+ bool item_hld = false;+ bool item_clk = ImHasFlag(items.Legend.Flags, ImPlotLegendFlags_NoButtons)+ ? false+ : ImGui::ButtonBehavior(button_bb, item->ID, &item_hov, &item_hld);++ if (item_clk)+ item->Show = !item->Show;+++ const bool can_hover = (item_hov)+ && (!ImHasFlag(items.Legend.Flags, ImPlotLegendFlags_NoHighlightItem)+ || !ImHasFlag(items.Legend.Flags, ImPlotLegendFlags_NoHighlightAxis));++ if (can_hover) {+ item->LegendHoverRect.Min = icon_bb.Min;+ item->LegendHoverRect.Max = label_bb.Max;+ item->LegendHovered = true;+ col_txt_hl = ImMixU32(col_txt, col_item, 64);+ any_item_hovered = true;+ }+ else {+ col_txt_hl = ImGui::GetColorU32(col_txt);+ }+ ImU32 col_icon;+ if (item_hld)+ col_icon = item->Show ? ImAlphaU32(col_item,0.5f) : ImGui::GetColorU32(ImGuiCol_TextDisabled, 0.5f);+ else if (item_hov)+ col_icon = item->Show ? ImAlphaU32(col_item,0.75f) : ImGui::GetColorU32(ImGuiCol_TextDisabled, 0.75f);+ else+ col_icon = item->Show ? col_item : col_txt_dis;++ DrawList.AddRectFilled(icon_bb.Min, icon_bb.Max, col_icon);+ const char* text_display_end = ImGui::FindRenderedTextEnd(label, nullptr);+ if (label != text_display_end)+ DrawList.AddText(top_left + ImVec2(icon_size, 0), item->Show ? col_txt_hl : col_txt_dis, label, text_display_end);+ }+ return hovered && !any_item_hovered;+}++//-----------------------------------------------------------------------------+// Locators+//-----------------------------------------------------------------------------++constexpr float TICK_FILL_X = 0.8f;+constexpr float TICK_FILL_Y = 1.0f;++void Locator_Default(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data) {+ if (range.Min == range.Max)+ return;+ const int nMinor = 10;+ const int nMajor = ImMax(2, (int)IM_ROUND(pixels / (vertical ? 300.0f : 400.0f)));+ const double nice_range = NiceNum(range.Size() * 0.99, false);+ const double interval = NiceNum(nice_range / (nMajor - 1), true);+ const double graphmin = floor(range.Min / interval) * interval;+ const double graphmax = ceil(range.Max / interval) * interval;+ bool first_major_set = false;+ int first_major_idx = 0;+ const int idx0 = ticker.TickCount(); // ticker may have user custom ticks+ ImVec2 total_size(0,0);+ for (double major = graphmin; major < graphmax + 0.5 * interval; major += interval) {+ // is this zero? combat zero formatting issues+ if (major-interval < 0 && major+interval > 0)+ major = 0;+ if (range.Contains(major)) {+ if (!first_major_set) {+ first_major_idx = ticker.TickCount();+ first_major_set = true;+ }+ total_size += ticker.AddTick(major, true, 0, true, formatter, formatter_data).LabelSize;+ }+ for (int i = 1; i < nMinor; ++i) {+ double minor = major + i * interval / nMinor;+ if (range.Contains(minor)) {+ total_size += ticker.AddTick(minor, false, 0, true, formatter, formatter_data).LabelSize;+ }+ }+ }+ // prune if necessary+ if ((!vertical && total_size.x > pixels*TICK_FILL_X) || (vertical && total_size.y > pixels*TICK_FILL_Y)) {+ for (int i = first_major_idx-1; i >= idx0; i -= 2)+ ticker.Ticks[i].ShowLabel = false;+ for (int i = first_major_idx+1; i < ticker.TickCount(); i += 2)+ ticker.Ticks[i].ShowLabel = false;+ }+}++bool CalcLogarithmicExponents(const ImPlotRange& range, float pix, bool vertical, int& exp_min, int& exp_max, int& exp_step) {+ if (range.Min * range.Max > 0) {+ const int nMajor = vertical ? ImMax(2, (int)IM_ROUND(pix * 0.02f)) : ImMax(2, (int)IM_ROUND(pix * 0.01f)); // TODO: magic numbers+ double log_min = ImLog10(ImAbs(range.Min));+ double log_max = ImLog10(ImAbs(range.Max));+ double log_a = ImMin(log_min,log_max);+ double log_b = ImMax(log_min,log_max);+ exp_step = ImMax(1,(int)(log_b - log_a) / nMajor);+ exp_min = (int)log_a;+ exp_max = (int)log_b;+ if (exp_step != 1) {+ while(exp_step % 3 != 0) exp_step++; // make step size multiple of three+ while(exp_min % exp_step != 0) exp_min--; // decrease exp_min until exp_min + N * exp_step will be 0+ }+ return true;+ }+ return false;+}++void AddTicksLogarithmic(const ImPlotRange& range, int exp_min, int exp_max, int exp_step, ImPlotTicker& ticker, ImPlotFormatter formatter, void* data) {+ const double sign = ImSign(range.Max);+ for (int e = exp_min - exp_step; e < (exp_max + exp_step); e += exp_step) {+ double major1 = sign*ImPow(10, (double)(e));+ double major2 = sign*ImPow(10, (double)(e + 1));+ double interval = (major2 - major1) / 9;+ if (major1 >= (range.Min - DBL_EPSILON) && major1 <= (range.Max + DBL_EPSILON))+ ticker.AddTick(major1, true, 0, true, formatter, data);+ for (int j = 0; j < exp_step; ++j) {+ major1 = sign*ImPow(10, (double)(e+j));+ major2 = sign*ImPow(10, (double)(e+j+1));+ interval = (major2 - major1) / 9;+ for (int i = 1; i < (9 + (int)(j < (exp_step - 1))); ++i) {+ double minor = major1 + i * interval;+ if (minor >= (range.Min - DBL_EPSILON) && minor <= (range.Max + DBL_EPSILON))+ ticker.AddTick(minor, false, 0, false, formatter, data);+ }+ }+ }+}++void Locator_Log10(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data) {+ int exp_min, exp_max, exp_step;+ if (CalcLogarithmicExponents(range, pixels, vertical, exp_min, exp_max, exp_step))+ AddTicksLogarithmic(range, exp_min, exp_max, exp_step, ticker, formatter, formatter_data);+}++float CalcSymLogPixel(double plt, const ImPlotRange& range, float pixels) {+ double scaleToPixels = pixels / range.Size();+ double scaleMin = TransformForward_SymLog(range.Min,nullptr);+ double scaleMax = TransformForward_SymLog(range.Max,nullptr);+ double s = TransformForward_SymLog(plt, nullptr);+ double t = (s - scaleMin) / (scaleMax - scaleMin);+ plt = range.Min + range.Size() * t;++ return (float)(0 + scaleToPixels * (plt - range.Min));+}++void Locator_SymLog(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data) {+ if (range.Min >= -1 && range.Max <= 1) {+ Locator_Default(ticker, range, pixels, vertical, formatter, formatter_data);+ }+ else if (range.Min * range.Max < 0) { // cross zero+ const float pix_min = 0;+ const float pix_max = pixels;+ const float pix_p1 = CalcSymLogPixel(1, range, pixels);+ const float pix_n1 = CalcSymLogPixel(-1, range, pixels);+ int exp_min_p, exp_max_p, exp_step_p;+ int exp_min_n, exp_max_n, exp_step_n;+ CalcLogarithmicExponents(ImPlotRange(1,range.Max), ImAbs(pix_max-pix_p1),vertical,exp_min_p,exp_max_p,exp_step_p);+ CalcLogarithmicExponents(ImPlotRange(range.Min,-1),ImAbs(pix_n1-pix_min),vertical,exp_min_n,exp_max_n,exp_step_n);+ int exp_step = ImMax(exp_step_n, exp_step_p);+ ticker.AddTick(0,true,0,true,formatter,formatter_data);+ AddTicksLogarithmic(ImPlotRange(1,range.Max), exp_min_p,exp_max_p,exp_step,ticker,formatter,formatter_data);+ AddTicksLogarithmic(ImPlotRange(range.Min,-1),exp_min_n,exp_max_n,exp_step,ticker,formatter,formatter_data);+ }+ else {+ Locator_Log10(ticker, range, pixels, vertical, formatter, formatter_data);+ }+}++void AddTicksCustom(const double* values, const char* const labels[], int n, ImPlotTicker& ticker, ImPlotFormatter formatter, void* data) {+ for (int i = 0; i < n; ++i) {+ if (labels != nullptr)+ ticker.AddTick(values[i], false, 0, true, labels[i]);+ else+ ticker.AddTick(values[i], false, 0, true, formatter, data);+ }+}++//-----------------------------------------------------------------------------+// Time Ticks and Utils+//-----------------------------------------------------------------------------++// this may not be thread safe?+constexpr double TimeUnitSpans[ImPlotTimeUnit_COUNT] = {+ 0.000001,+ 0.001,+ 1,+ 60,+ 3600,+ 86400,+ 2629800,+ 31557600+};++inline ImPlotTimeUnit GetUnitForRange(double range) {+ constexpr double cutoffs[ImPlotTimeUnit_COUNT] = {0.001, 1, 60, 3600, 86400, 2629800, 31557600, IMPLOT_MAX_TIME};+ for (int i = 0; i < ImPlotTimeUnit_COUNT; ++i) {+ if (range <= cutoffs[i])+ return (ImPlotTimeUnit)i;+ }+ return ImPlotTimeUnit_Yr;+}++inline int LowerBoundStep(int max_divs, const int* divs, const int* step, int size) {+ if (max_divs < divs[0])+ return 0;+ for (int i = 1; i < size; ++i) {+ if (max_divs < divs[i])+ return step[i-1];+ }+ return step[size-1];+}++inline int GetTimeStep(int max_divs, ImPlotTimeUnit unit) {+ if (unit == ImPlotTimeUnit_Ms || unit == ImPlotTimeUnit_Us) {+ constexpr int step[] = {500,250,200,100,50,25,20,10,5,2,1};+ constexpr int divs[] = {2,4,5,10,20,40,50,100,200,500,1000};+ return LowerBoundStep(max_divs, divs, step, 11);+ }+ if (unit == ImPlotTimeUnit_S || unit == ImPlotTimeUnit_Min) {+ constexpr int step[] = {30,15,10,5,1};+ constexpr int divs[] = {2,4,6,12,60};+ return LowerBoundStep(max_divs, divs, step, 5);+ }+ else if (unit == ImPlotTimeUnit_Hr) {+ constexpr int step[] = {12,6,3,2,1};+ constexpr int divs[] = {2,4,8,12,24};+ return LowerBoundStep(max_divs, divs, step, 5);+ }+ else if (unit == ImPlotTimeUnit_Day) {+ constexpr int step[] = {14,7,2,1};+ constexpr int divs[] = {2,4,14,28};+ return LowerBoundStep(max_divs, divs, step, 4);+ }+ else if (unit == ImPlotTimeUnit_Mo) {+ constexpr int step[] = {6,3,2,1};+ constexpr int divs[] = {2,4,6,12};+ return LowerBoundStep(max_divs, divs, step, 4);+ }+ return 0;+}++ImPlotTime MkGmtTime(struct tm *ptm) {+ ImPlotTime t;+#ifdef _WIN32+ t.S = _mkgmtime(ptm);+#else+ t.S = timegm(ptm);+#endif+ if (t.S < 0)+ t.S = 0;+ return t;+}++tm* GetGmtTime(const ImPlotTime& t, tm* ptm)+{+#ifdef _WIN32+ if (gmtime_s(ptm, &t.S) == 0)+ return ptm;+ else+ return nullptr;+#else+ return gmtime_r(&t.S, ptm);+#endif+}++ImPlotTime MkLocTime(struct tm *ptm) {+ ImPlotTime t;+ t.S = mktime(ptm);+ if (t.S < 0)+ t.S = 0;+ return t;+}++tm* GetLocTime(const ImPlotTime& t, tm* ptm) {+#ifdef _WIN32+ if (localtime_s(ptm, &t.S) == 0)+ return ptm;+ else+ return nullptr;+#else+ return localtime_r(&t.S, ptm);+#endif+}++ImPlotTime MakeTime(int year, int month, int day, int hour, int min, int sec, int us) {+ tm& Tm = GImPlot->Tm;++ int yr = year - 1900;+ if (yr < 0)+ yr = 0;++ sec = sec + us / 1000000;+ us = us % 1000000;++ Tm.tm_sec = sec;+ Tm.tm_min = min;+ Tm.tm_hour = hour;+ Tm.tm_mday = day;+ Tm.tm_mon = month;+ Tm.tm_year = yr;++ ImPlotTime t = MkTime(&Tm);++ t.Us = us;+ return t;+}++int GetYear(const ImPlotTime& t) {+ tm& Tm = GImPlot->Tm;+ GetTime(t, &Tm);+ return Tm.tm_year + 1900;+}++int GetMonth(const ImPlotTime& t) {+ tm& Tm = GImPlot->Tm;+ ImPlot::GetTime(t, &Tm);+ return Tm.tm_mon;+}++ImPlotTime AddTime(const ImPlotTime& t, ImPlotTimeUnit unit, int count) {+ tm& Tm = GImPlot->Tm;+ ImPlotTime t_out = t;+ switch(unit) {+ case ImPlotTimeUnit_Us: t_out.Us += count; break;+ case ImPlotTimeUnit_Ms: t_out.Us += count * 1000; break;+ case ImPlotTimeUnit_S: t_out.S += count; break;+ case ImPlotTimeUnit_Min: t_out.S += count * 60; break;+ case ImPlotTimeUnit_Hr: t_out.S += count * 3600; break;+ case ImPlotTimeUnit_Day: t_out.S += count * 86400; break;+ case ImPlotTimeUnit_Mo: for (int i = 0; i < abs(count); ++i) {+ GetTime(t_out, &Tm);+ if (count > 0)+ t_out.S += 86400 * GetDaysInMonth(Tm.tm_year + 1900, Tm.tm_mon);+ else if (count < 0)+ t_out.S -= 86400 * GetDaysInMonth(Tm.tm_year + 1900 - (Tm.tm_mon == 0 ? 1 : 0), Tm.tm_mon == 0 ? 11 : Tm.tm_mon - 1); // NOT WORKING+ }+ break;+ case ImPlotTimeUnit_Yr: for (int i = 0; i < abs(count); ++i) {+ if (count > 0)+ t_out.S += 86400 * (365 + (int)IsLeapYear(GetYear(t_out)));+ else if (count < 0)+ t_out.S -= 86400 * (365 + (int)IsLeapYear(GetYear(t_out) - 1));+ // this is incorrect if leap year and we are past Feb 28+ }+ break;+ default: break;+ }+ t_out.RollOver();+ return t_out;+}++ImPlotTime FloorTime(const ImPlotTime& t, ImPlotTimeUnit unit) {+ ImPlotContext& gp = *GImPlot;+ GetTime(t, &gp.Tm);+ switch (unit) {+ case ImPlotTimeUnit_S: return ImPlotTime(t.S, 0);+ case ImPlotTimeUnit_Ms: return ImPlotTime(t.S, (t.Us / 1000) * 1000);+ case ImPlotTimeUnit_Us: return t;+ case ImPlotTimeUnit_Yr: gp.Tm.tm_mon = 0; // fall-through+ case ImPlotTimeUnit_Mo: gp.Tm.tm_mday = 1; // fall-through+ case ImPlotTimeUnit_Day: gp.Tm.tm_hour = 0; // fall-through+ case ImPlotTimeUnit_Hr: gp.Tm.tm_min = 0; // fall-through+ case ImPlotTimeUnit_Min: gp.Tm.tm_sec = 0; break;+ default: return t;+ }+ return MkTime(&gp.Tm);+}++ImPlotTime CeilTime(const ImPlotTime& t, ImPlotTimeUnit unit) {+ return AddTime(FloorTime(t, unit), unit, 1);+}++ImPlotTime RoundTime(const ImPlotTime& t, ImPlotTimeUnit unit) {+ ImPlotTime t1 = FloorTime(t, unit);+ ImPlotTime t2 = AddTime(t1,unit,1);+ if (t1.S == t2.S)+ return t.Us - t1.Us < t2.Us - t.Us ? t1 : t2;+ return t.S - t1.S < t2.S - t.S ? t1 : t2;+}++ImPlotTime CombineDateTime(const ImPlotTime& date_part, const ImPlotTime& tod_part) {+ ImPlotContext& gp = *GImPlot;+ tm& Tm = gp.Tm;+ GetTime(date_part, &gp.Tm);+ int y = Tm.tm_year;+ int m = Tm.tm_mon;+ int d = Tm.tm_mday;+ GetTime(tod_part, &gp.Tm);+ Tm.tm_year = y;+ Tm.tm_mon = m;+ Tm.tm_mday = d;+ ImPlotTime t = MkTime(&Tm);+ t.Us = tod_part.Us;+ return t;+}++// TODO: allow users to define these+static const char* MONTH_NAMES[] = {"January","February","March","April","May","June","July","August","September","October","November","December"};+static const char* WD_ABRVS[] = {"Su","Mo","Tu","We","Th","Fr","Sa"};+static const char* MONTH_ABRVS[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};++int FormatTime(const ImPlotTime& t, char* buffer, int size, ImPlotTimeFmt fmt, bool use_24_hr_clk) {+ tm& Tm = GImPlot->Tm;+ GetTime(t, &Tm);+ const int us = t.Us % 1000;+ const int ms = t.Us / 1000;+ const int sec = Tm.tm_sec;+ const int min = Tm.tm_min;+ if (use_24_hr_clk) {+ const int hr = Tm.tm_hour;+ switch(fmt) {+ case ImPlotTimeFmt_Us: return ImFormatString(buffer, size, ".%03d %03d", ms, us);+ case ImPlotTimeFmt_SUs: return ImFormatString(buffer, size, ":%02d.%03d %03d", sec, ms, us);+ case ImPlotTimeFmt_SMs: return ImFormatString(buffer, size, ":%02d.%03d", sec, ms);+ case ImPlotTimeFmt_S: return ImFormatString(buffer, size, ":%02d", sec);+ case ImPlotTimeFmt_MinSMs: return ImFormatString(buffer, size, ":%02d:%02d.%03d", min, sec, ms);+ case ImPlotTimeFmt_HrMinSMs: return ImFormatString(buffer, size, "%02d:%02d:%02d.%03d", hr, min, sec, ms);+ case ImPlotTimeFmt_HrMinS: return ImFormatString(buffer, size, "%02d:%02d:%02d", hr, min, sec);+ case ImPlotTimeFmt_HrMin: return ImFormatString(buffer, size, "%02d:%02d", hr, min);+ case ImPlotTimeFmt_Hr: return ImFormatString(buffer, size, "%02d:00", hr);+ default: return 0;+ }+ }+ else {+ const char* ap = Tm.tm_hour < 12 ? "am" : "pm";+ const int hr = (Tm.tm_hour == 0 || Tm.tm_hour == 12) ? 12 : Tm.tm_hour % 12;+ switch(fmt) {+ case ImPlotTimeFmt_Us: return ImFormatString(buffer, size, ".%03d %03d", ms, us);+ case ImPlotTimeFmt_SUs: return ImFormatString(buffer, size, ":%02d.%03d %03d", sec, ms, us);+ case ImPlotTimeFmt_SMs: return ImFormatString(buffer, size, ":%02d.%03d", sec, ms);+ case ImPlotTimeFmt_S: return ImFormatString(buffer, size, ":%02d", sec);+ case ImPlotTimeFmt_MinSMs: return ImFormatString(buffer, size, ":%02d:%02d.%03d", min, sec, ms);+ case ImPlotTimeFmt_HrMinSMs: return ImFormatString(buffer, size, "%d:%02d:%02d.%03d%s", hr, min, sec, ms, ap);+ case ImPlotTimeFmt_HrMinS: return ImFormatString(buffer, size, "%d:%02d:%02d%s", hr, min, sec, ap);+ case ImPlotTimeFmt_HrMin: return ImFormatString(buffer, size, "%d:%02d%s", hr, min, ap);+ case ImPlotTimeFmt_Hr: return ImFormatString(buffer, size, "%d%s", hr, ap);+ default: return 0;+ }+ }+}++int FormatDate(const ImPlotTime& t, char* buffer, int size, ImPlotDateFmt fmt, bool use_iso_8601) {+ tm& Tm = GImPlot->Tm;+ GetTime(t, &Tm);+ const int day = Tm.tm_mday;+ const int mon = Tm.tm_mon + 1;+ const int year = Tm.tm_year + 1900;+ const int yr = year % 100;+ if (use_iso_8601) {+ switch (fmt) {+ case ImPlotDateFmt_DayMo: return ImFormatString(buffer, size, "--%02d-%02d", mon, day);+ case ImPlotDateFmt_DayMoYr: return ImFormatString(buffer, size, "%d-%02d-%02d", year, mon, day);+ case ImPlotDateFmt_MoYr: return ImFormatString(buffer, size, "%d-%02d", year, mon);+ case ImPlotDateFmt_Mo: return ImFormatString(buffer, size, "--%02d", mon);+ case ImPlotDateFmt_Yr: return ImFormatString(buffer, size, "%d", year);+ default: return 0;+ }+ }+ else {+ switch (fmt) {+ case ImPlotDateFmt_DayMo: return ImFormatString(buffer, size, "%d/%d", mon, day);+ case ImPlotDateFmt_DayMoYr: return ImFormatString(buffer, size, "%d/%d/%02d", mon, day, yr);+ case ImPlotDateFmt_MoYr: return ImFormatString(buffer, size, "%s %d", MONTH_ABRVS[Tm.tm_mon], year);+ case ImPlotDateFmt_Mo: return ImFormatString(buffer, size, "%s", MONTH_ABRVS[Tm.tm_mon]);+ case ImPlotDateFmt_Yr: return ImFormatString(buffer, size, "%d", year);+ default: return 0;+ }+ }+ }++int FormatDateTime(const ImPlotTime& t, char* buffer, int size, ImPlotDateTimeSpec fmt) {+ int written = 0;+ if (fmt.Date != ImPlotDateFmt_None)+ written += FormatDate(t, buffer, size, fmt.Date, fmt.UseISO8601);+ if (fmt.Time != ImPlotTimeFmt_None) {+ if (fmt.Date != ImPlotDateFmt_None)+ buffer[written++] = ' ';+ written += FormatTime(t, &buffer[written], size - written, fmt.Time, fmt.Use24HourClock);+ }+ return written;+}++inline float GetDateTimeWidth(ImPlotDateTimeSpec fmt) {+ static const ImPlotTime t_max_width = MakeTime(2888, 12, 22, 12, 58, 58, 888888); // best guess at time that maximizes pixel width+ char buffer[32];+ FormatDateTime(t_max_width, buffer, 32, fmt);+ return ImGui::CalcTextSize(buffer).x;+}++inline bool TimeLabelSame(const char* l1, const char* l2) {+ size_t len1 = strlen(l1);+ size_t len2 = strlen(l2);+ size_t n = len1 < len2 ? len1 : len2;+ return strcmp(l1 + len1 - n, l2 + len2 - n) == 0;+}++static const ImPlotDateTimeSpec TimeFormatLevel0[ImPlotTimeUnit_COUNT] = {+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_Us),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_SMs),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_S),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_Hr),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMo, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Mo, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Yr, ImPlotTimeFmt_None)+};++static const ImPlotDateTimeSpec TimeFormatLevel1[ImPlotTimeUnit_COUNT] = {+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMinS),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Yr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Yr, ImPlotTimeFmt_None)+};++static const ImPlotDateTimeSpec TimeFormatLevel1First[ImPlotTimeUnit_COUNT] = {+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_HrMinS),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_HrMinS),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Yr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_Yr, ImPlotTimeFmt_None)+};++static const ImPlotDateTimeSpec TimeFormatMouseCursor[ImPlotTimeUnit_COUNT] = {+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_Us),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_SUs),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_SMs),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMinS),+ ImPlotDateTimeSpec(ImPlotDateFmt_None, ImPlotTimeFmt_HrMin),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMo, ImPlotTimeFmt_Hr),+ ImPlotDateTimeSpec(ImPlotDateFmt_DayMoYr, ImPlotTimeFmt_None),+ ImPlotDateTimeSpec(ImPlotDateFmt_MoYr, ImPlotTimeFmt_None)+};++inline ImPlotDateTimeSpec GetDateTimeFmt(const ImPlotDateTimeSpec* ctx, ImPlotTimeUnit idx) {+ ImPlotStyle& style = GetStyle();+ ImPlotDateTimeSpec fmt = ctx[idx];+ fmt.UseISO8601 = style.UseISO8601;+ fmt.Use24HourClock = style.Use24HourClock;+ return fmt;+}++void Locator_Time(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data) {+ IM_ASSERT_USER_ERROR(vertical == false, "Cannot locate Time ticks on vertical axis!");+ (void)vertical;+ // get units for level 0 and level 1 labels+ const ImPlotTimeUnit unit0 = GetUnitForRange(range.Size() / (pixels / 100)); // level = 0 (top)+ const ImPlotTimeUnit unit1 = ImClamp(unit0 + 1, 0, ImPlotTimeUnit_COUNT-1); // level = 1 (bottom)+ // get time format specs+ const ImPlotDateTimeSpec fmt0 = GetDateTimeFmt(TimeFormatLevel0, unit0);+ const ImPlotDateTimeSpec fmt1 = GetDateTimeFmt(TimeFormatLevel1, unit1);+ const ImPlotDateTimeSpec fmtf = GetDateTimeFmt(TimeFormatLevel1First, unit1);+ // min max times+ const ImPlotTime t_min = ImPlotTime::FromDouble(range.Min);+ const ImPlotTime t_max = ImPlotTime::FromDouble(range.Max);+ // maximum allowable density of labels+ const float max_density = 0.5f;+ // book keeping+ int last_major_offset = -1;+ // formatter data+ Formatter_Time_Data ftd;+ ftd.UserFormatter = formatter;+ ftd.UserFormatterData = formatter_data;+ if (unit0 != ImPlotTimeUnit_Yr) {+ // pixels per major (level 1) division+ const float pix_per_major_div = pixels / (float)(range.Size() / TimeUnitSpans[unit1]);+ // nominal pixels taken up by labels+ const float fmt0_width = GetDateTimeWidth(fmt0);+ const float fmt1_width = GetDateTimeWidth(fmt1);+ const float fmtf_width = GetDateTimeWidth(fmtf);+ // the maximum number of minor (level 0) labels that can fit between major (level 1) divisions+ const int minor_per_major = (int)(max_density * pix_per_major_div / fmt0_width);+ // the minor step size (level 0)+ const int step = GetTimeStep(minor_per_major, unit0);+ // generate ticks+ ImPlotTime t1 = FloorTime(ImPlotTime::FromDouble(range.Min), unit1);+ while (t1 < t_max) {+ // get next major+ const ImPlotTime t2 = AddTime(t1, unit1, 1);+ // add major tick+ if (t1 >= t_min && t1 <= t_max) {+ // minor level 0 tick+ ftd.Time = t1; ftd.Spec = fmt0;+ ticker.AddTick(t1.ToDouble(), true, 0, true, Formatter_Time, &ftd);+ // major level 1 tick+ ftd.Time = t1; ftd.Spec = last_major_offset < 0 ? fmtf : fmt1;+ ImPlotTick& tick_maj = ticker.AddTick(t1.ToDouble(), true, 1, true, Formatter_Time, &ftd);+ const char* this_major = ticker.GetText(tick_maj);+ if (last_major_offset >= 0 && TimeLabelSame(ticker.TextBuffer.Buf.Data + last_major_offset, this_major))+ tick_maj.ShowLabel = false;+ last_major_offset = tick_maj.TextOffset;+ }+ // add minor ticks up until next major+ if (minor_per_major > 1 && (t_min <= t2 && t1 <= t_max)) {+ ImPlotTime t12 = AddTime(t1, unit0, step);+ while (t12 < t2) {+ float px_to_t2 = (float)((t2 - t12).ToDouble()/range.Size()) * pixels;+ if (t12 >= t_min && t12 <= t_max) {+ ftd.Time = t12; ftd.Spec = fmt0;+ ticker.AddTick(t12.ToDouble(), false, 0, px_to_t2 >= fmt0_width, Formatter_Time, &ftd);+ if (last_major_offset < 0 && px_to_t2 >= fmt0_width && px_to_t2 >= (fmt1_width + fmtf_width) / 2) {+ ftd.Time = t12; ftd.Spec = fmtf;+ ImPlotTick& tick_maj = ticker.AddTick(t12.ToDouble(), true, 1, true, Formatter_Time, &ftd);+ last_major_offset = tick_maj.TextOffset;+ }+ }+ t12 = AddTime(t12, unit0, step);+ }+ }+ t1 = t2;+ }+ }+ else {+ const ImPlotDateTimeSpec fmty = GetDateTimeFmt(TimeFormatLevel0, ImPlotTimeUnit_Yr);+ const float label_width = GetDateTimeWidth(fmty);+ const int max_labels = (int)(max_density * pixels / label_width);+ const int year_min = GetYear(t_min);+ const int year_max = GetYear(CeilTime(t_max, ImPlotTimeUnit_Yr));+ const double nice_range = NiceNum((year_max - year_min)*0.99,false);+ const double interval = NiceNum(nice_range / (max_labels - 1), true);+ const int graphmin = (int)(floor(year_min / interval) * interval);+ const int graphmax = (int)(ceil(year_max / interval) * interval);+ const int step = (int)interval <= 0 ? 1 : (int)interval;++ for (int y = graphmin; y < graphmax; y += step) {+ ImPlotTime t = MakeTime(y);+ if (t >= t_min && t <= t_max) {+ ftd.Time = t; ftd.Spec = fmty;+ ticker.AddTick(t.ToDouble(), true, 0, true, Formatter_Time, &ftd);+ }+ }+ }+}++//-----------------------------------------------------------------------------+// Context Menu+//-----------------------------------------------------------------------------++template <typename F>+bool DragFloat(const char*, F*, float, F, F) {+ return false;+}++template <>+bool DragFloat<double>(const char* label, double* v, float v_speed, double v_min, double v_max) {+ return ImGui::DragScalar(label, ImGuiDataType_Double, v, v_speed, &v_min, &v_max, "%.3g", 1);+}++template <>+bool DragFloat<float>(const char* label, float* v, float v_speed, float v_min, float v_max) {+ return ImGui::DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, "%.3g", 1);+}++inline void BeginDisabledControls(bool cond) {+ if (cond) {+ ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);+ ImGui::PushStyleVar(ImGuiStyleVar_Alpha, ImGui::GetStyle().Alpha * 0.25f);+ }+}++inline void EndDisabledControls(bool cond) {+ if (cond) {+ ImGui::PopItemFlag();+ ImGui::PopStyleVar();+ }+}++void ShowAxisContextMenu(ImPlotAxis& axis, ImPlotAxis* equal_axis, bool /*time_allowed*/) {++ ImGui::PushItemWidth(75);+ bool always_locked = axis.IsRangeLocked() || axis.IsAutoFitting();+ bool label = axis.HasLabel();+ bool grid = axis.HasGridLines();+ bool ticks = axis.HasTickMarks();+ bool labels = axis.HasTickLabels();+ double drag_speed = (axis.Range.Size() <= DBL_EPSILON) ? DBL_EPSILON * 1.0e+13 : 0.01 * axis.Range.Size(); // recover from almost equal axis limits.++ if (axis.Scale == ImPlotScale_Time) {+ ImPlotTime tmin = ImPlotTime::FromDouble(axis.Range.Min);+ ImPlotTime tmax = ImPlotTime::FromDouble(axis.Range.Max);++ BeginDisabledControls(always_locked);+ ImGui::CheckboxFlags("##LockMin", (unsigned int*)&axis.Flags, ImPlotAxisFlags_LockMin);+ EndDisabledControls(always_locked);+ ImGui::SameLine();+ BeginDisabledControls(axis.IsLockedMin() || always_locked);+ if (ImGui::BeginMenu("Min Time")) {+ if (ShowTimePicker("mintime", &tmin)) {+ if (tmin >= tmax)+ tmax = AddTime(tmin, ImPlotTimeUnit_S, 1);+ axis.SetRange(tmin.ToDouble(),tmax.ToDouble());+ }+ ImGui::Separator();+ if (ShowDatePicker("mindate",&axis.PickerLevel,&axis.PickerTimeMin,&tmin,&tmax)) {+ tmin = CombineDateTime(axis.PickerTimeMin, tmin);+ if (tmin >= tmax)+ tmax = AddTime(tmin, ImPlotTimeUnit_S, 1);+ axis.SetRange(tmin.ToDouble(), tmax.ToDouble());+ }+ ImGui::EndMenu();+ }+ EndDisabledControls(axis.IsLockedMin() || always_locked);++ BeginDisabledControls(always_locked);+ ImGui::CheckboxFlags("##LockMax", (unsigned int*)&axis.Flags, ImPlotAxisFlags_LockMax);+ EndDisabledControls(always_locked);+ ImGui::SameLine();+ BeginDisabledControls(axis.IsLockedMax() || always_locked);+ if (ImGui::BeginMenu("Max Time")) {+ if (ShowTimePicker("maxtime", &tmax)) {+ if (tmax <= tmin)+ tmin = AddTime(tmax, ImPlotTimeUnit_S, -1);+ axis.SetRange(tmin.ToDouble(),tmax.ToDouble());+ }+ ImGui::Separator();+ if (ShowDatePicker("maxdate",&axis.PickerLevel,&axis.PickerTimeMax,&tmin,&tmax)) {+ tmax = CombineDateTime(axis.PickerTimeMax, tmax);+ if (tmax <= tmin)+ tmin = AddTime(tmax, ImPlotTimeUnit_S, -1);+ axis.SetRange(tmin.ToDouble(), tmax.ToDouble());+ }+ ImGui::EndMenu();+ }+ EndDisabledControls(axis.IsLockedMax() || always_locked);+ }+ else {+ BeginDisabledControls(always_locked);+ ImGui::CheckboxFlags("##LockMin", (unsigned int*)&axis.Flags, ImPlotAxisFlags_LockMin);+ EndDisabledControls(always_locked);+ ImGui::SameLine();+ BeginDisabledControls(axis.IsLockedMin() || always_locked);+ double temp_min = axis.Range.Min;+ if (DragFloat("Min", &temp_min, (float)drag_speed, -HUGE_VAL, axis.Range.Max - DBL_EPSILON)) {+ axis.SetMin(temp_min,true);+ if (equal_axis != nullptr)+ equal_axis->SetAspect(axis.GetAspect());+ }+ EndDisabledControls(axis.IsLockedMin() || always_locked);++ BeginDisabledControls(always_locked);+ ImGui::CheckboxFlags("##LockMax", (unsigned int*)&axis.Flags, ImPlotAxisFlags_LockMax);+ EndDisabledControls(always_locked);+ ImGui::SameLine();+ BeginDisabledControls(axis.IsLockedMax() || always_locked);+ double temp_max = axis.Range.Max;+ if (DragFloat("Max", &temp_max, (float)drag_speed, axis.Range.Min + DBL_EPSILON, HUGE_VAL)) {+ axis.SetMax(temp_max,true);+ if (equal_axis != nullptr)+ equal_axis->SetAspect(axis.GetAspect());+ }+ EndDisabledControls(axis.IsLockedMax() || always_locked);+ }++ ImGui::Separator();++ ImGui::CheckboxFlags("Auto-Fit",(unsigned int*)&axis.Flags, ImPlotAxisFlags_AutoFit);+ // TODO+ // BeginDisabledControls(axis.IsTime() && time_allowed);+ // ImGui::CheckboxFlags("Log Scale",(unsigned int*)&axis.Flags, ImPlotAxisFlags_LogScale);+ // EndDisabledControls(axis.IsTime() && time_allowed);+ // if (time_allowed) {+ // BeginDisabledControls(axis.IsLog() || axis.IsSymLog());+ // ImGui::CheckboxFlags("Time",(unsigned int*)&axis.Flags, ImPlotAxisFlags_Time);+ // EndDisabledControls(axis.IsLog() || axis.IsSymLog());+ // }+ ImGui::Separator();+ ImGui::CheckboxFlags("Invert",(unsigned int*)&axis.Flags, ImPlotAxisFlags_Invert);+ ImGui::CheckboxFlags("Opposite",(unsigned int*)&axis.Flags, ImPlotAxisFlags_Opposite);+ ImGui::Separator();+ BeginDisabledControls(axis.LabelOffset == -1);+ if (ImGui::Checkbox("Label", &label))+ ImFlipFlag(axis.Flags, ImPlotAxisFlags_NoLabel);+ EndDisabledControls(axis.LabelOffset == -1);+ if (ImGui::Checkbox("Grid Lines", &grid))+ ImFlipFlag(axis.Flags, ImPlotAxisFlags_NoGridLines);+ if (ImGui::Checkbox("Tick Marks", &ticks))+ ImFlipFlag(axis.Flags, ImPlotAxisFlags_NoTickMarks);+ if (ImGui::Checkbox("Tick Labels", &labels))+ ImFlipFlag(axis.Flags, ImPlotAxisFlags_NoTickLabels);++}++bool ShowLegendContextMenu(ImPlotLegend& legend, bool visible) {+ const float s = ImGui::GetFrameHeight();+ bool ret = false;+ if (ImGui::Checkbox("Show",&visible))+ ret = true;+ if (legend.CanGoInside)+ ImGui::CheckboxFlags("Outside",(unsigned int*)&legend.Flags, ImPlotLegendFlags_Outside);+ if (ImGui::RadioButton("H", ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal)))+ legend.Flags |= ImPlotLegendFlags_Horizontal;+ ImGui::SameLine();+ if (ImGui::RadioButton("V", !ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal)))+ legend.Flags &= ~ImPlotLegendFlags_Horizontal;+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2,2));+ if (ImGui::Button("NW",ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_NorthWest; } ImGui::SameLine();+ if (ImGui::Button("N", ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_North; } ImGui::SameLine();+ if (ImGui::Button("NE",ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_NorthEast; }+ if (ImGui::Button("W", ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_West; } ImGui::SameLine();+ if (ImGui::InvisibleButton("C", ImVec2(1.5f*s,s))) { } ImGui::SameLine();+ if (ImGui::Button("E", ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_East; }+ if (ImGui::Button("SW",ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_SouthWest; } ImGui::SameLine();+ if (ImGui::Button("S", ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_South; } ImGui::SameLine();+ if (ImGui::Button("SE",ImVec2(1.5f*s,s))) { legend.Location = ImPlotLocation_SouthEast; }+ ImGui::PopStyleVar();+ return ret;+}++void ShowSubplotsContextMenu(ImPlotSubplot& subplot) {+ if ((ImGui::BeginMenu("Linking"))) {+ if (ImGui::MenuItem("Link Rows",nullptr,ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkRows)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_LinkRows);+ if (ImGui::MenuItem("Link Cols",nullptr,ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkCols)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_LinkCols);+ if (ImGui::MenuItem("Link All X",nullptr,ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllX)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllX);+ if (ImGui::MenuItem("Link All Y",nullptr,ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllY)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllY);+ ImGui::EndMenu();+ }+ if ((ImGui::BeginMenu("Settings"))) {+ BeginDisabledControls(!subplot.HasTitle);+ if (ImGui::MenuItem("Title",nullptr,subplot.HasTitle && !ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoTitle)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_NoTitle);+ EndDisabledControls(!subplot.HasTitle);+ if (ImGui::MenuItem("Resizable",nullptr,!ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoResize)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_NoResize);+ if (ImGui::MenuItem("Align",nullptr,!ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoAlign)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_NoAlign);+ if (ImGui::MenuItem("Share Items",nullptr,ImHasFlag(subplot.Flags, ImPlotSubplotFlags_ShareItems)))+ ImFlipFlag(subplot.Flags, ImPlotSubplotFlags_ShareItems);+ ImGui::EndMenu();+ }+}++void ShowPlotContextMenu(ImPlotPlot& plot) {+ ImPlotContext& gp = *GImPlot;+ const bool owns_legend = gp.CurrentItems == &plot.Items;+ const bool equal = ImHasFlag(plot.Flags, ImPlotFlags_Equal);++ char buf[16] = {};++ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (!x_axis.Enabled || !x_axis.HasMenus())+ continue;+ ImGui::PushID(i);+ ImFormatString(buf, sizeof(buf) - 1, i == 0 ? "X-Axis" : "X-Axis %d", i + 1);+ if (ImGui::BeginMenu(x_axis.HasLabel() ? plot.GetAxisLabel(x_axis) : buf)) {+ ShowAxisContextMenu(x_axis, equal ? x_axis.OrthoAxis : nullptr, false);+ ImGui::EndMenu();+ }+ ImGui::PopID();+ }++ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (!y_axis.Enabled || !y_axis.HasMenus())+ continue;+ ImGui::PushID(i);+ ImFormatString(buf, sizeof(buf) - 1, i == 0 ? "Y-Axis" : "Y-Axis %d", i + 1);+ if (ImGui::BeginMenu(y_axis.HasLabel() ? plot.GetAxisLabel(y_axis) : buf)) {+ ShowAxisContextMenu(y_axis, equal ? y_axis.OrthoAxis : nullptr, false);+ ImGui::EndMenu();+ }+ ImGui::PopID();+ }++ ImGui::Separator();+ if (!ImHasFlag(gp.CurrentItems->Legend.Flags, ImPlotLegendFlags_NoMenus)) {+ if ((ImGui::BeginMenu("Legend"))) {+ if (owns_legend) {+ if (ShowLegendContextMenu(plot.Items.Legend, !ImHasFlag(plot.Flags, ImPlotFlags_NoLegend)))+ ImFlipFlag(plot.Flags, ImPlotFlags_NoLegend);+ }+ else if (gp.CurrentSubplot != nullptr) {+ if (ShowLegendContextMenu(gp.CurrentSubplot->Items.Legend, !ImHasFlag(gp.CurrentSubplot->Flags, ImPlotSubplotFlags_NoLegend)))+ ImFlipFlag(gp.CurrentSubplot->Flags, ImPlotSubplotFlags_NoLegend);+ }+ ImGui::EndMenu();+ }+ }+ if ((ImGui::BeginMenu("Settings"))) {+ if (ImGui::MenuItem("Equal", nullptr, ImHasFlag(plot.Flags, ImPlotFlags_Equal)))+ ImFlipFlag(plot.Flags, ImPlotFlags_Equal);+ if (ImGui::MenuItem("Box Select",nullptr,!ImHasFlag(plot.Flags, ImPlotFlags_NoBoxSelect)))+ ImFlipFlag(plot.Flags, ImPlotFlags_NoBoxSelect);+ BeginDisabledControls(plot.TitleOffset == -1);+ if (ImGui::MenuItem("Title",nullptr,plot.HasTitle()))+ ImFlipFlag(plot.Flags, ImPlotFlags_NoTitle);+ EndDisabledControls(plot.TitleOffset == -1);+ if (ImGui::MenuItem("Mouse Position",nullptr,!ImHasFlag(plot.Flags, ImPlotFlags_NoMouseText)))+ ImFlipFlag(plot.Flags, ImPlotFlags_NoMouseText);+ if (ImGui::MenuItem("Crosshairs",nullptr,ImHasFlag(plot.Flags, ImPlotFlags_Crosshairs)))+ ImFlipFlag(plot.Flags, ImPlotFlags_Crosshairs);+ ImGui::EndMenu();+ }+ if (gp.CurrentSubplot != nullptr && !ImHasFlag(gp.CurrentSubplot->Flags, ImPlotSubplotFlags_NoMenus)) {+ ImGui::Separator();+ if ((ImGui::BeginMenu("Subplots"))) {+ ShowSubplotsContextMenu(*gp.CurrentSubplot);+ ImGui::EndMenu();+ }+ }+}++//-----------------------------------------------------------------------------+// Axis Utils+//-----------------------------------------------------------------------------++static inline int AxisPrecision(const ImPlotAxis& axis) {+ const double range = axis.Ticker.TickCount() > 1 ? (axis.Ticker.Ticks[1].PlotPos - axis.Ticker.Ticks[0].PlotPos) : axis.Range.Size();+ return Precision(range);+}++static inline double RoundAxisValue(const ImPlotAxis& axis, double value) {+ return RoundTo(value, AxisPrecision(axis));+}++void LabelAxisValue(const ImPlotAxis& axis, double value, char* buff, int size, bool round) {+ ImPlotContext& gp = *GImPlot;+ // TODO: We shouldn't explicitly check that the axis is Time here. Ideally,+ // Formatter_Time would handle the formatting for us, but the code below+ // needs additional arguments which are not currently available in ImPlotFormatter+ if (axis.Locator == Locator_Time) {+ ImPlotTimeUnit unit = axis.Vertical+ ? GetUnitForRange(axis.Range.Size() / (gp.CurrentPlot->PlotRect.GetHeight() / 100)) // TODO: magic value!+ : GetUnitForRange(axis.Range.Size() / (gp.CurrentPlot->PlotRect.GetWidth() / 100)); // TODO: magic value!+ FormatDateTime(ImPlotTime::FromDouble(value), buff, size, GetDateTimeFmt(TimeFormatMouseCursor, unit));+ }+ else {+ if (round)+ value = RoundAxisValue(axis, value);+ axis.Formatter(value, buff, size, axis.FormatterData);+ }+}++void UpdateAxisColors(ImPlotAxis& axis) {+ const ImVec4 col_grid = GetStyleColorVec4(ImPlotCol_AxisGrid);+ axis.ColorMaj = ImGui::GetColorU32(col_grid);+ axis.ColorMin = ImGui::GetColorU32(col_grid*ImVec4(1,1,1,GImPlot->Style.MinorAlpha));+ axis.ColorTick = GetStyleColorU32(ImPlotCol_AxisTick);+ axis.ColorTxt = GetStyleColorU32(ImPlotCol_AxisText);+ axis.ColorBg = GetStyleColorU32(ImPlotCol_AxisBg);+ axis.ColorHov = GetStyleColorU32(ImPlotCol_AxisBgHovered);+ axis.ColorAct = GetStyleColorU32(ImPlotCol_AxisBgActive);+ // axis.ColorHiLi = IM_COL32_BLACK_TRANS;+}++void PadAndDatumAxesX(ImPlotPlot& plot, float& pad_T, float& pad_B, ImPlotAlignmentData* align) {++ ImPlotContext& gp = *GImPlot;++ const float T = ImGui::GetTextLineHeight();+ const float P = gp.Style.LabelPadding.y;+ const float K = gp.Style.MinorTickLen.x;++ int count_T = 0;+ int count_B = 0;+ float last_T = plot.AxesRect.Min.y;+ float last_B = plot.AxesRect.Max.y;++ for (int i = IMPLOT_NUM_X_AXES; i-- > 0;) { // FYI: can iterate forward+ ImPlotAxis& axis = plot.XAxis(i);+ if (!axis.Enabled)+ continue;+ const bool label = axis.HasLabel();+ const bool ticks = axis.HasTickLabels();+ const bool opp = axis.IsOpposite();+ const bool time = axis.Scale == ImPlotScale_Time;+ if (opp) {+ if (count_T++ > 0)+ pad_T += K + P;+ if (label) {+ ImVec2 label_size = ImGui::CalcTextSize(plot.GetAxisLabel(axis));+ pad_T += label_size.y + P;+ }+ if (ticks)+ pad_T += ImMax(T, axis.Ticker.MaxSize.y) + P + (time ? T + P : 0);+ axis.Datum1 = plot.CanvasRect.Min.y + pad_T;+ axis.Datum2 = last_T;+ last_T = axis.Datum1;+ }+ else {+ if (count_B++ > 0)+ pad_B += K + P;+ if (label) {+ ImVec2 label_size = ImGui::CalcTextSize(plot.GetAxisLabel(axis));+ pad_B += label_size.y + P;+ }+ if (ticks)+ pad_B += ImMax(T, axis.Ticker.MaxSize.y) + P + (time ? T + P : 0);+ axis.Datum1 = plot.CanvasRect.Max.y - pad_B;+ axis.Datum2 = last_B;+ last_B = axis.Datum1;+ }+ }++ if (align) {+ count_T = count_B = 0;+ float delta_T, delta_B;+ align->Update(pad_T,pad_B,delta_T,delta_B);+ for (int i = IMPLOT_NUM_X_AXES; i-- > 0;) {+ ImPlotAxis& axis = plot.XAxis(i);+ if (!axis.Enabled)+ continue;+ if (axis.IsOpposite()) {+ axis.Datum1 += delta_T;+ axis.Datum2 += count_T++ > 1 ? delta_T : 0;+ }+ else {+ axis.Datum1 -= delta_B;+ axis.Datum2 -= count_B++ > 1 ? delta_B : 0;+ }+ }+ }+}++void PadAndDatumAxesY(ImPlotPlot& plot, float& pad_L, float& pad_R, ImPlotAlignmentData* align) {++ // [ pad_L ] [ pad_R ]+ // .................CanvasRect................+ // :TPWPK.PTPWP _____PlotRect____ PWPTP.KPWPT:+ // :A # |- A # |- -| # A -| # A:+ // :X | X | | X | x:+ // :I # |- I # |- -| # I -| # I:+ // :S | S | | S | S:+ // :3 # |- 0 # |-_______________-| # 1 -| # 2:+ // :.........................................:+ //+ // T = text height+ // P = label padding+ // K = minor tick length+ // W = label width++ ImPlotContext& gp = *GImPlot;++ const float T = ImGui::GetTextLineHeight();+ const float P = gp.Style.LabelPadding.x;+ const float K = gp.Style.MinorTickLen.y;++ int count_L = 0;+ int count_R = 0;+ float last_L = plot.AxesRect.Min.x;+ float last_R = plot.AxesRect.Max.x;++ for (int i = IMPLOT_NUM_Y_AXES; i-- > 0;) { // FYI: can iterate forward+ ImPlotAxis& axis = plot.YAxis(i);+ if (!axis.Enabled)+ continue;+ const bool label = axis.HasLabel();+ const bool ticks = axis.HasTickLabels();+ const bool opp = axis.IsOpposite();+ if (opp) {+ if (count_R++ > 0)+ pad_R += K + P;+ if (label)+ pad_R += T + P;+ if (ticks)+ pad_R += axis.Ticker.MaxSize.x + P;+ axis.Datum1 = plot.CanvasRect.Max.x - pad_R;+ axis.Datum2 = last_R;+ last_R = axis.Datum1;+ }+ else {+ if (count_L++ > 0)+ pad_L += K + P;+ if (label)+ pad_L += T + P;+ if (ticks)+ pad_L += axis.Ticker.MaxSize.x + P;+ axis.Datum1 = plot.CanvasRect.Min.x + pad_L;+ axis.Datum2 = last_L;+ last_L = axis.Datum1;+ }+ }++ plot.PlotRect.Min.x = plot.CanvasRect.Min.x + pad_L;+ plot.PlotRect.Max.x = plot.CanvasRect.Max.x - pad_R;++ if (align) {+ count_L = count_R = 0;+ float delta_L, delta_R;+ align->Update(pad_L,pad_R,delta_L,delta_R);+ for (int i = IMPLOT_NUM_Y_AXES; i-- > 0;) {+ ImPlotAxis& axis = plot.YAxis(i);+ if (!axis.Enabled)+ continue;+ if (axis.IsOpposite()) {+ axis.Datum1 -= delta_R;+ axis.Datum2 -= count_R++ > 1 ? delta_R : 0;+ }+ else {+ axis.Datum1 += delta_L;+ axis.Datum2 += count_L++ > 1 ? delta_L : 0;+ }+ }+ }+}++//-----------------------------------------------------------------------------+// RENDERING+//-----------------------------------------------------------------------------++static inline void RenderGridLinesX(ImDrawList& DrawList, const ImPlotTicker& ticker, const ImRect& rect, ImU32 col_maj, ImU32 col_min, float size_maj, float size_min) {+ const float density = ticker.TickCount() / rect.GetWidth();+ ImVec4 col_min4 = ImGui::ColorConvertU32ToFloat4(col_min);+ col_min4.w *= ImClamp(ImRemap(density, 0.1f, 0.2f, 1.0f, 0.0f), 0.0f, 1.0f);+ col_min = ImGui::ColorConvertFloat4ToU32(col_min4);+ for (int t = 0; t < ticker.TickCount(); t++) {+ const ImPlotTick& xt = ticker.Ticks[t];+ if (xt.PixelPos < rect.Min.x || xt.PixelPos > rect.Max.x)+ continue;+ if (xt.Level == 0) {+ if (xt.Major)+ AddLineV(&DrawList, xt.PixelPos, rect.Min.y, rect.Max.y, col_maj, size_maj);+ else if (density < 0.2f)+ AddLineV(&DrawList, xt.PixelPos, rect.Min.y, rect.Max.y, col_min, size_min);+ }+ }+}++static inline void RenderGridLinesY(ImDrawList& DrawList, const ImPlotTicker& ticker, const ImRect& rect, ImU32 col_maj, ImU32 col_min, float size_maj, float size_min) {+ const float density = ticker.TickCount() / rect.GetHeight();+ ImVec4 col_min4 = ImGui::ColorConvertU32ToFloat4(col_min);+ col_min4.w *= ImClamp(ImRemap(density, 0.1f, 0.2f, 1.0f, 0.0f), 0.0f, 1.0f);+ col_min = ImGui::ColorConvertFloat4ToU32(col_min4);+ for (int t = 0; t < ticker.TickCount(); t++) {+ const ImPlotTick& yt = ticker.Ticks[t];+ if (yt.PixelPos < rect.Min.y || yt.PixelPos > rect.Max.y)+ continue;+ if (yt.Major)+ AddLineH(&DrawList, rect.Min.x, rect.Max.x, yt.PixelPos, col_maj, size_maj);+ else if (density < 0.2f)+ AddLineH(&DrawList, rect.Min.x, rect.Max.x, yt.PixelPos, col_min, size_min);+ }+}++static inline void RenderSelectionRect(ImDrawList& DrawList, const ImVec2& p_min, const ImVec2& p_max, const ImVec4& col) {+ const ImU32 col_bg = ImGui::GetColorU32(col * ImVec4(1,1,1,0.25f));+ const ImU32 col_bd = ImGui::GetColorU32(col);+ DrawList.AddRectFilled(p_min, p_max, col_bg);+ DrawList.AddRect(p_min, p_max, col_bd);+}++//-----------------------------------------------------------------------------+// Input Handling+//-----------------------------------------------------------------------------++constexpr float MOUSE_CURSOR_DRAG_THRESHOLD = 5.0f;+constexpr float BOX_SELECT_DRAG_THRESHOLD = 4.0f;++bool UpdateInput(ImPlotPlot& plot) {++ bool changed = false;++ ImPlotContext& gp = *GImPlot;+ ImGuiIO& IO = ImGui::GetIO();++ // BUTTON STATE -----------------------------------------------------------++ const ImGuiButtonFlags plot_button_flags = ImGuiButtonFlags_AllowOverlap+ | ImGuiButtonFlags_PressedOnClick+ | ImGuiButtonFlags_PressedOnDoubleClick+ | ImGuiButtonFlags_MouseButtonLeft+ | ImGuiButtonFlags_MouseButtonRight+ | ImGuiButtonFlags_MouseButtonMiddle;+ const ImGuiButtonFlags axis_button_flags = ImGuiButtonFlags_FlattenChildren+ | plot_button_flags;++ const bool plot_clicked = ImGui::ButtonBehavior(plot.PlotRect,plot.ID,&plot.Hovered,&plot.Held,plot_button_flags);+#if (IMGUI_VERSION_NUM < 18966)+ ImGui::SetItemAllowOverlap(); // Handled by ButtonBehavior()+#endif++ if (plot_clicked) {+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoBoxSelect) && IO.MouseClicked[gp.InputMap.Select] && ImHasFlag(IO.KeyMods, gp.InputMap.SelectMod)) {+ plot.Selecting = true;+ plot.SelectStart = IO.MousePos;+ plot.SelectRect = ImRect(0,0,0,0);+ }+ if (IO.MouseDoubleClicked[gp.InputMap.Fit]) {+ plot.FitThisFrame = true;+ for (int i = 0; i < ImAxis_COUNT; ++i)+ plot.Axes[i].FitThisFrame = true;+ }+ }++ const bool can_pan = IO.MouseDown[gp.InputMap.Pan] && ImHasFlag(IO.KeyMods, gp.InputMap.PanMod);++ plot.Held = plot.Held && can_pan;++ bool x_click[IMPLOT_NUM_X_AXES] = {false};+ bool x_held[IMPLOT_NUM_X_AXES] = {false};+ bool x_hov[IMPLOT_NUM_X_AXES] = {false};++ bool y_click[IMPLOT_NUM_Y_AXES] = {false};+ bool y_held[IMPLOT_NUM_Y_AXES] = {false};+ bool y_hov[IMPLOT_NUM_Y_AXES] = {false};++ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImPlotAxis& xax = plot.XAxis(i);+ if (xax.Enabled) {+ ImGui::KeepAliveID(xax.ID);+ x_click[i] = ImGui::ButtonBehavior(xax.HoverRect,xax.ID,&xax.Hovered,&xax.Held,axis_button_flags);+ if (x_click[i] && IO.MouseDoubleClicked[gp.InputMap.Fit])+ plot.FitThisFrame = xax.FitThisFrame = true;+ xax.Held = xax.Held && can_pan;+ x_hov[i] = xax.Hovered || plot.Hovered;+ x_held[i] = xax.Held || plot.Held;+ }+ }++ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ ImPlotAxis& yax = plot.YAxis(i);+ if (yax.Enabled) {+ ImGui::KeepAliveID(yax.ID);+ y_click[i] = ImGui::ButtonBehavior(yax.HoverRect,yax.ID,&yax.Hovered,&yax.Held,axis_button_flags);+ if (y_click[i] && IO.MouseDoubleClicked[gp.InputMap.Fit])+ plot.FitThisFrame = yax.FitThisFrame = true;+ yax.Held = yax.Held && can_pan;+ y_hov[i] = yax.Hovered || plot.Hovered;+ y_held[i] = yax.Held || plot.Held;+ }+ }++ // cancel due to DND activity+ if (GImGui->DragDropActive || (IO.KeyMods == gp.InputMap.OverrideMod && gp.InputMap.OverrideMod != 0))+ return false;++ // STATE -------------------------------------------------------------------++ const bool axis_equal = ImHasFlag(plot.Flags, ImPlotFlags_Equal);++ const bool any_x_hov = plot.Hovered || AnyAxesHovered(&plot.Axes[ImAxis_X1], IMPLOT_NUM_X_AXES);+ const bool any_x_held = plot.Held || AnyAxesHeld(&plot.Axes[ImAxis_X1], IMPLOT_NUM_X_AXES);+ const bool any_y_hov = plot.Hovered || AnyAxesHovered(&plot.Axes[ImAxis_Y1], IMPLOT_NUM_Y_AXES);+ const bool any_y_held = plot.Held || AnyAxesHeld(&plot.Axes[ImAxis_Y1], IMPLOT_NUM_Y_AXES);+ const bool any_hov = any_x_hov || any_y_hov;+ const bool any_held = any_x_held || any_y_held;++ const ImVec2 select_drag = ImGui::GetMouseDragDelta(gp.InputMap.Select);+ const ImVec2 pan_drag = ImGui::GetMouseDragDelta(gp.InputMap.Pan);+ const float select_drag_sq = ImLengthSqr(select_drag);+ const float pan_drag_sq = ImLengthSqr(pan_drag);+ const bool selecting = plot.Selecting && select_drag_sq > MOUSE_CURSOR_DRAG_THRESHOLD;+ const bool panning = any_held && pan_drag_sq > MOUSE_CURSOR_DRAG_THRESHOLD;++ // CONTEXT MENU -----------------------------------------------------------++ if (IO.MouseReleased[gp.InputMap.Menu] && !plot.ContextLocked)+ gp.OpenContextThisFrame = true;++ if (selecting || panning)+ plot.ContextLocked = true;+ else if (!(IO.MouseDown[gp.InputMap.Menu] || IO.MouseReleased[gp.InputMap.Menu]))+ plot.ContextLocked = false;++ // DRAG INPUT -------------------------------------------------------------++ if (any_held && !plot.Selecting) {+ int drag_direction = 0;+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (x_held[i] && !x_axis.IsInputLocked()) {+ drag_direction |= (1 << 1);+ bool increasing = x_axis.IsInverted() ? IO.MouseDelta.x > 0 : IO.MouseDelta.x < 0;+ if (IO.MouseDelta.x != 0 && !x_axis.IsPanLocked(increasing)) {+ const double plot_l = x_axis.PixelsToPlot(plot.PlotRect.Min.x - IO.MouseDelta.x);+ const double plot_r = x_axis.PixelsToPlot(plot.PlotRect.Max.x - IO.MouseDelta.x);+ x_axis.SetMin(x_axis.IsInverted() ? plot_r : plot_l);+ x_axis.SetMax(x_axis.IsInverted() ? plot_l : plot_r);+ if (axis_equal && x_axis.OrthoAxis != nullptr)+ x_axis.OrthoAxis->SetAspect(x_axis.GetAspect());+ changed = true;+ }+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (y_held[i] && !y_axis.IsInputLocked()) {+ drag_direction |= (1 << 2);+ bool increasing = y_axis.IsInverted() ? IO.MouseDelta.y < 0 : IO.MouseDelta.y > 0;+ if (IO.MouseDelta.y != 0 && !y_axis.IsPanLocked(increasing)) {+ const double plot_t = y_axis.PixelsToPlot(plot.PlotRect.Min.y - IO.MouseDelta.y);+ const double plot_b = y_axis.PixelsToPlot(plot.PlotRect.Max.y - IO.MouseDelta.y);+ y_axis.SetMin(y_axis.IsInverted() ? plot_t : plot_b);+ y_axis.SetMax(y_axis.IsInverted() ? plot_b : plot_t);+ if (axis_equal && y_axis.OrthoAxis != nullptr)+ y_axis.OrthoAxis->SetAspect(y_axis.GetAspect());+ changed = true;+ }+ }+ }+ if (IO.MouseDragMaxDistanceSqr[gp.InputMap.Pan] > MOUSE_CURSOR_DRAG_THRESHOLD) {+ switch (drag_direction) {+ case 0 : ImGui::SetMouseCursor(ImGuiMouseCursor_NotAllowed); break;+ case (1 << 1) : ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); break;+ case (1 << 2) : ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS); break;+ default : ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeAll); break;+ }+ }+ }++ // SCROLL INPUT -----------------------------------------------------------++ if (any_hov && ImHasFlag(IO.KeyMods, gp.InputMap.ZoomMod)) {++ float zoom_rate = gp.InputMap.ZoomRate;+ if (IO.MouseWheel == 0.0f)+ zoom_rate = 0;+ else if (IO.MouseWheel > 0)+ zoom_rate = (-zoom_rate) / (1.0f + (2.0f * zoom_rate));+ ImVec2 rect_size = plot.PlotRect.GetSize();+ float tx = ImRemap(IO.MousePos.x, plot.PlotRect.Min.x, plot.PlotRect.Max.x, 0.0f, 1.0f);+ float ty = ImRemap(IO.MousePos.y, plot.PlotRect.Min.y, plot.PlotRect.Max.y, 0.0f, 1.0f);++ // Track which axis to use as reference for equal aspect+ ImPlotAxis* equal_ref_axis = nullptr;++ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ const bool equal_zoom = axis_equal && x_axis.OrthoAxis != nullptr;+ const bool equal_locked = (equal_zoom != false) && x_axis.OrthoAxis->IsInputLocked();+ if (x_hov[i] && !x_axis.IsInputLocked() && !equal_locked) {+ ImGui::SetKeyOwner(ImGuiKey_MouseWheelY, plot.ID);+ if (zoom_rate != 0.0f) {+ const double plot_l = x_axis.PixelsToPlot(plot.PlotRect.Min.x - rect_size.x * tx * zoom_rate);+ const double plot_r = x_axis.PixelsToPlot(plot.PlotRect.Max.x + rect_size.x * (1 - tx) * zoom_rate);+ x_axis.SetMin(x_axis.IsInverted() ? plot_r : plot_l);+ x_axis.SetMax(x_axis.IsInverted() ? plot_l : plot_r);+ if (equal_zoom)+ equal_ref_axis = &x_axis;+ changed = true;+ }+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ const bool equal_zoom = axis_equal && y_axis.OrthoAxis != nullptr;+ const bool equal_locked = equal_zoom && y_axis.OrthoAxis->IsInputLocked();+ if (y_hov[i] && !y_axis.IsInputLocked() && !equal_locked) {+ ImGui::SetKeyOwner(ImGuiKey_MouseWheelY, plot.ID);+ if (zoom_rate != 0.0f) {+ const double plot_t = y_axis.PixelsToPlot(plot.PlotRect.Min.y - rect_size.y * ty * zoom_rate);+ const double plot_b = y_axis.PixelsToPlot(plot.PlotRect.Max.y + rect_size.y * (1 - ty) * zoom_rate);+ y_axis.SetMin(y_axis.IsInverted() ? plot_t : plot_b);+ y_axis.SetMax(y_axis.IsInverted() ? plot_b : plot_t);+ if (equal_zoom)+ equal_ref_axis = &y_axis;+ changed = true;+ }+ }+ }++ // Apply equal aspect constraint after zooming both axes+ if (equal_ref_axis != nullptr && equal_ref_axis->OrthoAxis != nullptr) {+ equal_ref_axis->OrthoAxis->SetAspect(equal_ref_axis->GetAspect());+ }+ }++ // BOX-SELECTION ----------------------------------------------------------++ if (plot.Selecting) {+ const ImVec2 d = plot.SelectStart - IO.MousePos;+ const bool x_can_change = !ImHasFlag(IO.KeyMods,gp.InputMap.SelectHorzMod) && ImFabs(d.x) > 2;+ const bool y_can_change = !ImHasFlag(IO.KeyMods,gp.InputMap.SelectVertMod) && ImFabs(d.y) > 2;+ // confirm+ if (IO.MouseReleased[gp.InputMap.Select]) {+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (!x_axis.IsInputLocked() && x_can_change) {+ const double p1 = x_axis.PixelsToPlot(plot.SelectStart.x);+ const double p2 = x_axis.PixelsToPlot(IO.MousePos.x);+ x_axis.SetMin(ImMin(p1, p2));+ x_axis.SetMax(ImMax(p1, p2));+ changed = true;+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (!y_axis.IsInputLocked() && y_can_change) {+ const double p1 = y_axis.PixelsToPlot(plot.SelectStart.y);+ const double p2 = y_axis.PixelsToPlot(IO.MousePos.y);+ y_axis.SetMin(ImMin(p1, p2));+ y_axis.SetMax(ImMax(p1, p2));+ changed = true;+ }+ }+ if (x_can_change || y_can_change || (ImHasFlag(IO.KeyMods,gp.InputMap.SelectHorzMod) && ImHasFlag(IO.KeyMods,gp.InputMap.SelectVertMod)))+ gp.OpenContextThisFrame = false;+ plot.Selected = plot.Selecting = false;+ }+ // cancel+ else if (IO.MouseReleased[gp.InputMap.SelectCancel]) {+ plot.Selected = plot.Selecting = false;+ gp.OpenContextThisFrame = false;+ }+ else if (ImLengthSqr(d) > BOX_SELECT_DRAG_THRESHOLD) {+ // bad selection+ if (plot.IsInputLocked()) {+ ImGui::SetMouseCursor(ImGuiMouseCursor_NotAllowed);+ gp.OpenContextThisFrame = false;+ plot.Selected = false;+ }+ else {+ // TODO: Handle only min or max locked cases+ const bool full_width = ImHasFlag(IO.KeyMods, gp.InputMap.SelectHorzMod) || AllAxesInputLocked(&plot.Axes[ImAxis_X1], IMPLOT_NUM_X_AXES);+ const bool full_height = ImHasFlag(IO.KeyMods, gp.InputMap.SelectVertMod) || AllAxesInputLocked(&plot.Axes[ImAxis_Y1], IMPLOT_NUM_Y_AXES);+ plot.SelectRect.Min.x = full_width ? plot.PlotRect.Min.x : ImMin(plot.SelectStart.x, IO.MousePos.x);+ plot.SelectRect.Max.x = full_width ? plot.PlotRect.Max.x : ImMax(plot.SelectStart.x, IO.MousePos.x);+ plot.SelectRect.Min.y = full_height ? plot.PlotRect.Min.y : ImMin(plot.SelectStart.y, IO.MousePos.y);+ plot.SelectRect.Max.y = full_height ? plot.PlotRect.Max.y : ImMax(plot.SelectStart.y, IO.MousePos.y);+ plot.SelectRect.Min -= plot.PlotRect.Min;+ plot.SelectRect.Max -= plot.PlotRect.Min;+ plot.Selected = true;+ }+ }+ else {+ plot.Selected = false;+ }+ }+ return changed;+}++//-----------------------------------------------------------------------------+// Next Plot Data (Legacy)+//-----------------------------------------------------------------------------++void ApplyNextPlotData(ImAxis idx) {+ ImPlotContext& gp = *GImPlot;+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ if (!axis.Enabled)+ return;+ double* npd_lmin = gp.NextPlotData.LinkedMin[idx];+ double* npd_lmax = gp.NextPlotData.LinkedMax[idx];+ bool npd_rngh = gp.NextPlotData.HasRange[idx];+ ImPlotCond npd_rngc = gp.NextPlotData.RangeCond[idx];+ ImPlotRange npd_rngv = gp.NextPlotData.Range[idx];+ axis.LinkedMin = npd_lmin;+ axis.LinkedMax = npd_lmax;+ axis.PullLinks();+ if (npd_rngh) {+ if (!plot.Initialized || npd_rngc == ImPlotCond_Always)+ axis.SetRange(npd_rngv);+ }+ axis.HasRange = npd_rngh;+ axis.RangeCond = npd_rngc;+}++//-----------------------------------------------------------------------------+// Setup+//-----------------------------------------------------------------------------++void SetupAxis(ImAxis idx, const char* label, ImPlotAxisFlags flags) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ // get plot and axis+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ // set ID+ axis.ID = plot.ID + idx + 1;+ // check and set flags+ if (plot.JustCreated || flags != axis.PreviousFlags)+ axis.Flags = flags;+ axis.PreviousFlags = flags;+ // enable axis+ axis.Enabled = true;+ // set label+ plot.SetAxisLabel(axis,label);+ // cache colors+ UpdateAxisColors(axis);+}++void SetupAxisLimits(ImAxis idx, double min_lim, double max_lim, ImPlotCond cond) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!"); // get plot and axis+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ if (!plot.Initialized || cond == ImPlotCond_Always)+ axis.SetRange(min_lim, max_lim);+ axis.HasRange = true;+ axis.RangeCond = cond;+}++void SetupAxisFormat(ImAxis idx, const char* fmt) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.HasFormatSpec = fmt != nullptr;+ if (fmt != nullptr)+ ImStrncpy(axis.FormatSpec,fmt,sizeof(axis.FormatSpec));+}++void SetupAxisLinks(ImAxis idx, double* min_lnk, double* max_lnk) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.LinkedMin = min_lnk;+ axis.LinkedMax = max_lnk;+ axis.PullLinks();+}++void SetupAxisFormat(ImAxis idx, ImPlotFormatter formatter, void* data) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.Formatter = formatter;+ axis.FormatterData = data;+}++void SetupAxisTicks(ImAxis idx, const double* values, int n_ticks, const char* const labels[], bool show_default) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.ShowDefaultTicks = show_default;+ AddTicksCustom(values,+ labels,+ n_ticks,+ axis.Ticker,+ axis.Formatter ? axis.Formatter : Formatter_Default,+ (axis.Formatter && axis.FormatterData) ? axis.FormatterData : axis.HasFormatSpec ? axis.FormatSpec : (void*)IMPLOT_LABEL_FORMAT);+}++void SetupAxisTicks(ImAxis idx, double v_min, double v_max, int n_ticks, const char* const labels[], bool show_default) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ IM_ASSERT_USER_ERROR(labels == nullptr || n_ticks >= 2,+ "When providing custom labels, n_ticks must be at least 2!");+ n_ticks = n_ticks < 2 ? 2 : n_ticks;+ FillRange(gp.TempDouble1, n_ticks, v_min, v_max);+ SetupAxisTicks(idx, gp.TempDouble1.Data, n_ticks, labels, show_default);+}++void SetupAxisScale(ImAxis idx, ImPlotScale scale) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.Scale = scale;+ switch (scale)+ {+ case ImPlotScale_Time:+ axis.TransformForward = nullptr;+ axis.TransformInverse = nullptr;+ axis.TransformData = nullptr;+ axis.Locator = Locator_Time;+ axis.ConstraintRange = ImPlotRange(IMPLOT_MIN_TIME, IMPLOT_MAX_TIME);+ axis.Ticker.Levels = 2;+ break;+ case ImPlotScale_Log10:+ axis.TransformForward = TransformForward_Log10;+ axis.TransformInverse = TransformInverse_Log10;+ axis.TransformData = nullptr;+ axis.Locator = Locator_Log10;+ axis.ConstraintRange = ImPlotRange(DBL_MIN, INFINITY);+ break;+ case ImPlotScale_SymLog:+ axis.TransformForward = TransformForward_SymLog;+ axis.TransformInverse = TransformInverse_SymLog;+ axis.TransformData = nullptr;+ axis.Locator = Locator_SymLog;+ axis.ConstraintRange = ImPlotRange(-INFINITY, INFINITY);+ break;+ default:+ axis.TransformForward = nullptr;+ axis.TransformInverse = nullptr;+ axis.TransformData = nullptr;+ axis.Locator = nullptr;+ axis.ConstraintRange = ImPlotRange(-INFINITY, INFINITY);+ break;+ }+}++void SetupAxisScale(ImAxis idx, ImPlotTransform fwd, ImPlotTransform inv, void* data) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.Scale = IMPLOT_AUTO;+ axis.TransformForward = fwd;+ axis.TransformInverse = inv;+ axis.TransformData = data;+}++void SetupAxisLimitsConstraints(ImAxis idx, double v_min, double v_max) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.ConstraintRange.Min = v_min;+ axis.ConstraintRange.Max = v_max;+}++void SetupAxisZoomConstraints(ImAxis idx, double z_min, double z_max) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& axis = plot.Axes[idx];+ IM_ASSERT_USER_ERROR(axis.Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ axis.ConstraintZoom.Min = z_min;+ axis.ConstraintZoom.Max = z_max;+}++void SetupAxes(const char* x_label, const char* y_label, ImPlotAxisFlags x_flags, ImPlotAxisFlags y_flags) {+ SetupAxis(ImAxis_X1, x_label, x_flags);+ SetupAxis(ImAxis_Y1, y_label, y_flags);+}++void SetupAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond) {+ SetupAxisLimits(ImAxis_X1, x_min, x_max, cond);+ SetupAxisLimits(ImAxis_Y1, y_min, y_max, cond);+}++void SetupLegend(ImPlotLocation location, ImPlotLegendFlags flags) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR((gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked) || (gp.CurrentSubplot != nullptr && gp.CurrentPlot == nullptr),+ "Setup needs to be called after BeginPlot or BeginSubplots and before any setup locking functions (e.g. PlotX)!");+ if (gp.CurrentItems) {+ ImPlotLegend& legend = gp.CurrentItems->Legend;+ // check and set location+ if (location != legend.PreviousLocation)+ legend.Location = location;+ legend.PreviousLocation = location;+ // check and set flags+ if (flags != legend.PreviousFlags)+ legend.Flags = flags;+ legend.PreviousFlags = flags;+ }+}++void SetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flags) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr && !gp.CurrentPlot->SetupLocked,+ "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!");+ gp.CurrentPlot->MouseTextLocation = location;+ gp.CurrentPlot->MouseTextFlags = flags;+}++//-----------------------------------------------------------------------------+// SetNext+//-----------------------------------------------------------------------------++void SetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot == nullptr, "SetNextAxisLimits() needs to be called before BeginPlot()!");+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.+ gp.NextPlotData.HasRange[axis] = true;+ gp.NextPlotData.RangeCond[axis] = cond;+ gp.NextPlotData.Range[axis].Min = v_min;+ gp.NextPlotData.Range[axis].Max = v_max;+}++void SetNextAxisLinks(ImAxis axis, double* link_min, double* link_max) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot == nullptr, "SetNextAxisLinks() needs to be called before BeginPlot()!");+ gp.NextPlotData.LinkedMin[axis] = link_min;+ gp.NextPlotData.LinkedMax[axis] = link_max;+}++void SetNextAxisToFit(ImAxis axis) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot == nullptr, "SetNextAxisToFit() needs to be called before BeginPlot()!");+ gp.NextPlotData.Fit[axis] = true;+}++void SetNextAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond) {+ SetNextAxisLimits(ImAxis_X1, x_min, x_max, cond);+ SetNextAxisLimits(ImAxis_Y1, y_min, y_max, cond);+}++void SetNextAxesToFit() {+ for (int i = 0; i < ImAxis_COUNT; ++i)+ SetNextAxisToFit(i);+}++//-----------------------------------------------------------------------------+// BeginPlot+//-----------------------------------------------------------------------------++bool BeginPlot(const char* title_id, const ImVec2& size, ImPlotFlags flags) {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot == nullptr, "Mismatched BeginPlot()/EndPlot()!");++ // FRONT MATTER -----------------------------------------------------------++ if (gp.CurrentSubplot != nullptr)+ ImGui::PushID(gp.CurrentSubplot->CurrentIdx);++ // get globals+ ImGuiContext &G = *GImGui;+ ImGuiWindow* Window = G.CurrentWindow;++ // skip if needed+ if (Window->SkipItems && !gp.CurrentSubplot) {+ ResetCtxForNextPlot(GImPlot);+ return false;+ }++ // ID and age (TODO: keep track of plot age in frames)+ const ImGuiID ID = Window->GetID(title_id);+ const bool just_created = gp.Plots.GetByKey(ID) == nullptr;+ gp.CurrentPlot = gp.Plots.GetOrAddByKey(ID);++ ImPlotPlot &plot = *gp.CurrentPlot;+ plot.ID = ID;+ plot.Items.ID = ID - 1;+ plot.JustCreated = just_created;+ plot.SetupLocked = false;++ // check flags+ if (plot.JustCreated)+ plot.Flags = flags;+ else if (flags != plot.PreviousFlags)+ plot.Flags = flags;+ plot.PreviousFlags = flags;++ // setup default axes+ if (plot.JustCreated) {+ SetupAxis(ImAxis_X1);+ SetupAxis(ImAxis_Y1);+ }++ // reset axes+ for (int i = 0; i < ImAxis_COUNT; ++i) {+ plot.Axes[i].Reset();+ UpdateAxisColors(plot.Axes[i]);+ }+ // ensure first axes enabled+ plot.Axes[ImAxis_X1].Enabled = true;+ plot.Axes[ImAxis_Y1].Enabled = true;+ // set initial axes+ plot.CurrentX = ImAxis_X1;+ plot.CurrentY = ImAxis_Y1;++ // process next plot data (legacy)+ for (int i = 0; i < ImAxis_COUNT; ++i)+ ApplyNextPlotData(i);++ // clear text buffers+ plot.ClearTextBuffer();+ plot.SetTitle(title_id);++ // set frame size+ ImVec2 frame_size;+ if (gp.CurrentSubplot != nullptr)+ frame_size = gp.CurrentSubplot->CellSize;+ else+ frame_size = ImGui::CalcItemSize(size, gp.Style.PlotDefaultSize.x, gp.Style.PlotDefaultSize.y);++ if (frame_size.x < gp.Style.PlotMinSize.x && (size.x < 0.0f || gp.CurrentSubplot != nullptr))+ frame_size.x = gp.Style.PlotMinSize.x;+ if (frame_size.y < gp.Style.PlotMinSize.y && (size.y < 0.0f || gp.CurrentSubplot != nullptr))+ frame_size.y = gp.Style.PlotMinSize.y;++ plot.FrameRect = ImRect(Window->DC.CursorPos, Window->DC.CursorPos + frame_size);+ ImGui::ItemSize(plot.FrameRect);+ if (!ImGui::ItemAdd(plot.FrameRect, plot.ID, &plot.FrameRect) && !gp.CurrentSubplot) {+ ResetCtxForNextPlot(GImPlot);+ return false;+ }++ // setup items (or dont)+ if (gp.CurrentItems == nullptr)+ gp.CurrentItems = &plot.Items;++ return true;+}++//-----------------------------------------------------------------------------+// SetupFinish+//-----------------------------------------------------------------------------++void SetupFinish() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "SetupFinish needs to be called after BeginPlot!");++ ImGuiContext& G = *GImGui;+ ImDrawList& DrawList = *G.CurrentWindow->DrawList;+ const ImGuiStyle& Style = G.Style;++ ImPlotPlot &plot = *gp.CurrentPlot;++ // lock setup+ plot.SetupLocked = true;++ // finalize axes and set default formatter/locator+ for (int i = 0; i < ImAxis_COUNT; ++i) {+ ImPlotAxis& axis = plot.Axes[i];+ if (axis.Enabled) {+ axis.Constrain();+ if (!plot.Initialized && axis.CanInitFit())+ plot.FitThisFrame = axis.FitThisFrame = true;+ }+ if (axis.Formatter == nullptr) {+ axis.Formatter = Formatter_Default;+ if (axis.HasFormatSpec)+ axis.FormatterData = axis.FormatSpec;+ else+ axis.FormatterData = (void*)IMPLOT_LABEL_FORMAT;+ }+ if (axis.Locator == nullptr) {+ axis.Locator = Locator_Default;+ }+ }++ // setup nullptr orthogonal axes+ const bool axis_equal = ImHasFlag(plot.Flags, ImPlotFlags_Equal);+ for (int ix = ImAxis_X1, iy = ImAxis_Y1; ix < ImAxis_Y1 || iy < ImAxis_COUNT; ++ix, ++iy) {+ ImPlotAxis& x_axis = plot.Axes[ix];+ ImPlotAxis& y_axis = plot.Axes[iy];+ if (x_axis.Enabled && y_axis.Enabled) {+ if (x_axis.OrthoAxis == nullptr)+ x_axis.OrthoAxis = &y_axis;+ if (y_axis.OrthoAxis == nullptr)+ y_axis.OrthoAxis = &x_axis;+ }+ else if (x_axis.Enabled)+ {+ if (x_axis.OrthoAxis == nullptr && !axis_equal)+ x_axis.OrthoAxis = &plot.Axes[ImAxis_Y1];+ }+ else if (y_axis.Enabled) {+ if (y_axis.OrthoAxis == nullptr && !axis_equal)+ y_axis.OrthoAxis = &plot.Axes[ImAxis_X1];+ }+ }++ // canvas/axes bb+ plot.CanvasRect = ImRect(plot.FrameRect.Min + gp.Style.PlotPadding, plot.FrameRect.Max - gp.Style.PlotPadding);+ plot.AxesRect = plot.FrameRect;++ // outside legend adjustments+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoLegend) && plot.Items.GetLegendCount() > 0 && ImHasFlag(plot.Items.Legend.Flags, ImPlotLegendFlags_Outside)) {+ ImPlotLegend& legend = plot.Items.Legend;+ const bool horz = ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal);+ const ImVec2 legend_size = CalcLegendSize(plot.Items, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !horz);+ const bool west = ImHasFlag(legend.Location, ImPlotLocation_West) && !ImHasFlag(legend.Location, ImPlotLocation_East);+ const bool east = ImHasFlag(legend.Location, ImPlotLocation_East) && !ImHasFlag(legend.Location, ImPlotLocation_West);+ const bool north = ImHasFlag(legend.Location, ImPlotLocation_North) && !ImHasFlag(legend.Location, ImPlotLocation_South);+ const bool south = ImHasFlag(legend.Location, ImPlotLocation_South) && !ImHasFlag(legend.Location, ImPlotLocation_North);+ if ((west && !horz) || (west && horz && !north && !south)) {+ plot.CanvasRect.Min.x += (legend_size.x + gp.Style.LegendPadding.x);+ plot.AxesRect.Min.x += (legend_size.x + gp.Style.PlotPadding.x);+ }+ if ((east && !horz) || (east && horz && !north && !south)) {+ plot.CanvasRect.Max.x -= (legend_size.x + gp.Style.LegendPadding.x);+ plot.AxesRect.Max.x -= (legend_size.x + gp.Style.PlotPadding.x);+ }+ if ((north && horz) || (north && !horz && !west && !east)) {+ plot.CanvasRect.Min.y += (legend_size.y + gp.Style.LegendPadding.y);+ plot.AxesRect.Min.y += (legend_size.y + gp.Style.PlotPadding.y);+ }+ if ((south && horz) || (south && !horz && !west && !east)) {+ plot.CanvasRect.Max.y -= (legend_size.y + gp.Style.LegendPadding.y);+ plot.AxesRect.Max.y -= (legend_size.y + gp.Style.PlotPadding.y);+ }+ }++ // plot bb+ float pad_top = 0, pad_bot = 0, pad_left = 0, pad_right = 0;++ // (0) calc top padding form title+ ImVec2 title_size(0.0f, 0.0f);+ if (plot.HasTitle())+ title_size = ImGui::CalcTextSize(plot.GetTitle(), nullptr, true);+ if (title_size.x > 0) {+ pad_top += title_size.y + gp.Style.LabelPadding.y;+ plot.AxesRect.Min.y += gp.Style.PlotPadding.y + pad_top;+ }++ // (1) calc addition top padding and bot padding+ PadAndDatumAxesX(plot,pad_top,pad_bot,gp.CurrentAlignmentH);++ const float plot_height = plot.CanvasRect.GetHeight() - pad_top - pad_bot;++ // (2) get y tick labels (needed for left/right pad)+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& axis = plot.YAxis(i);+ if (axis.WillRender() && axis.ShowDefaultTicks && plot_height > 0) {+ axis.Locator(axis.Ticker, axis.Range, plot_height, true, axis.Formatter, axis.FormatterData);+ }+ }++ // (3) calc left/right pad+ PadAndDatumAxesY(plot,pad_left,pad_right,gp.CurrentAlignmentV);++ const float plot_width = plot.CanvasRect.GetWidth() - pad_left - pad_right;++ // (4) get x ticks+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& axis = plot.XAxis(i);+ if (axis.WillRender() && axis.ShowDefaultTicks && plot_width > 0) {+ axis.Locator(axis.Ticker, axis.Range, plot_width, false, axis.Formatter, axis.FormatterData);+ }+ }++ // (4.5) recalc padding now that we have actual X-axis tick labels (handles multi-line labels)+ // Save title padding before resetting+ const float title_pad = (title_size.x > 0) ? (title_size.y + gp.Style.LabelPadding.y) : 0.0f;+ pad_top = title_pad;+ pad_bot = 0;+ PadAndDatumAxesX(plot,pad_top,pad_bot,gp.CurrentAlignmentH);+ // Update AxesRect to account for title padding (was done in step 0)+ if (title_size.x > 0) {+ plot.AxesRect.Min.y = plot.FrameRect.Min.y + gp.Style.PlotPadding.y + title_pad;+ }++ // (5) calc plot bb+ plot.PlotRect = ImRect(plot.CanvasRect.Min + ImVec2(pad_left, pad_top), plot.CanvasRect.Max - ImVec2(pad_right, pad_bot));++ // HOVER------------------------------------------------------------++ // axes hover rect, pixel ranges+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImPlotAxis& xax = plot.XAxis(i);+ xax.HoverRect = ImRect(ImVec2(plot.PlotRect.Min.x, ImMin(xax.Datum1,xax.Datum2)),+ ImVec2(plot.PlotRect.Max.x, ImMax(xax.Datum1,xax.Datum2)));+ xax.PixelMin = xax.IsInverted() ? plot.PlotRect.Max.x : plot.PlotRect.Min.x;+ xax.PixelMax = xax.IsInverted() ? plot.PlotRect.Min.x : plot.PlotRect.Max.x;+ xax.UpdateTransformCache();+ }++ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ ImPlotAxis& yax = plot.YAxis(i);+ yax.HoverRect = ImRect(ImVec2(ImMin(yax.Datum1,yax.Datum2),plot.PlotRect.Min.y),+ ImVec2(ImMax(yax.Datum1,yax.Datum2),plot.PlotRect.Max.y));+ yax.PixelMin = yax.IsInverted() ? plot.PlotRect.Min.y : plot.PlotRect.Max.y;+ yax.PixelMax = yax.IsInverted() ? plot.PlotRect.Max.y : plot.PlotRect.Min.y;+ yax.UpdateTransformCache();+ }+ // Equal axis constraint. Must happen after we set Pixels+ // constrain equal axes for primary x and y if not approximately equal+ // constrains x to y since x pixel size depends on y labels width, and causes feedback loops in opposite case+ if (axis_equal) {+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (x_axis.OrthoAxis == nullptr)+ continue;+ double xar = x_axis.GetAspect();+ double yar = x_axis.OrthoAxis->GetAspect();+ // edge case: user has set x range this frame, so fit y to x so that we honor their request for x range+ // NB: because of feedback across several frames, the user's x request may not be perfectly honored+ if (x_axis.HasRange)+ x_axis.OrthoAxis->SetAspect(xar);+ else if (!ImAlmostEqual(xar,yar) && !x_axis.OrthoAxis->IsInputLocked())+ x_axis.SetAspect(yar);+ }+ }++ // INPUT ------------------------------------------------------------------+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoInputs))+ UpdateInput(plot);++ // fit from FitNextPlotAxes or auto fit+ for (int i = 0; i < ImAxis_COUNT; ++i) {+ if (gp.NextPlotData.Fit[i] || plot.Axes[i].IsAutoFitting()) {+ plot.FitThisFrame = true;+ plot.Axes[i].FitThisFrame = true;+ }+ }++ // RENDER -----------------------------------------------------------------++ const float txt_height = ImGui::GetTextLineHeight();++ // render frame+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoFrame))+ ImGui::RenderFrame(plot.FrameRect.Min, plot.FrameRect.Max, GetStyleColorU32(ImPlotCol_FrameBg), true, Style.FrameRounding);++ // grid bg+ DrawList.AddRectFilled(plot.PlotRect.Min, plot.PlotRect.Max, GetStyleColorU32(ImPlotCol_PlotBg));++ // transform ticks+ for (int i = 0; i < ImAxis_COUNT; i++) {+ ImPlotAxis& axis = plot.Axes[i];+ if (axis.WillRender()) {+ for (int t = 0; t < axis.Ticker.TickCount(); t++) {+ ImPlotTick& tk = axis.Ticker.Ticks[t];+ tk.PixelPos = IM_ROUND(axis.PlotToPixels(tk.PlotPos));+ }+ }+ }++ // render grid (background)+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (x_axis.Enabled && x_axis.HasGridLines() && !x_axis.IsForeground())+ RenderGridLinesX(DrawList, x_axis.Ticker, plot.PlotRect, x_axis.ColorMaj, x_axis.ColorMin, gp.Style.MajorGridSize.x, gp.Style.MinorGridSize.x);+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (y_axis.Enabled && y_axis.HasGridLines() && !y_axis.IsForeground())+ RenderGridLinesY(DrawList, y_axis.Ticker, plot.PlotRect, y_axis.ColorMaj, y_axis.ColorMin, gp.Style.MajorGridSize.y, gp.Style.MinorGridSize.y);+ }++ // render x axis button, label, tick labels+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& ax = plot.XAxis(i);+ if (!ax.Enabled)+ continue;+ if ((ax.Hovered || ax.Held) && !plot.Held && !ImHasFlag(ax.Flags, ImPlotAxisFlags_NoHighlight))+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.Held ? ax.ColorAct : ax.ColorHov);+ else if (ax.ColorHiLi != IM_COL32_BLACK_TRANS) {+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.ColorHiLi);+ ax.ColorHiLi = IM_COL32_BLACK_TRANS;+ }+ else if (ax.ColorBg != IM_COL32_BLACK_TRANS) {+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.ColorBg);+ }+ const ImPlotTicker& tkr = ax.Ticker;+ const bool opp = ax.IsOpposite();+ if (ax.HasLabel()) {+ const char* label = plot.GetAxisLabel(ax);+ const ImVec2 label_size = ImGui::CalcTextSize(label);+ const float label_offset = (ax.HasTickLabels() ? tkr.MaxSize.y + gp.Style.LabelPadding.y : 0.0f)+ + (tkr.Levels - 1) * (txt_height + gp.Style.LabelPadding.y)+ + gp.Style.LabelPadding.y;+ const ImVec2 label_pos(plot.PlotRect.GetCenter().x - label_size.x * 0.5f,+ opp ? ax.Datum1 - label_offset - label_size.y : ax.Datum1 + label_offset);+ DrawList.AddText(label_pos, ax.ColorTxt, label);+ }+ if (ax.HasTickLabels()) {+ for (int j = 0; j < tkr.TickCount(); ++j) {+ const ImPlotTick& tk = tkr.Ticks[j];+ const float datum = ax.Datum1 + (opp ? (-gp.Style.LabelPadding.y -txt_height -tk.Level * (txt_height + gp.Style.LabelPadding.y))+ : gp.Style.LabelPadding.y + tk.Level * (txt_height + gp.Style.LabelPadding.y));+ if (tk.ShowLabel && tk.PixelPos >= plot.PlotRect.Min.x - 1 && tk.PixelPos <= plot.PlotRect.Max.x + 1) {+ ImVec2 start(tk.PixelPos - 0.5f * tk.LabelSize.x, datum);+ DrawList.AddText(start, ax.ColorTxt, tkr.GetText(j));+ }+ }+ }+ }++ // render y axis button, label, tick labels+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& ax = plot.YAxis(i);+ if (!ax.Enabled)+ continue;+ if ((ax.Hovered || ax.Held) && !plot.Held && !ImHasFlag(ax.Flags, ImPlotAxisFlags_NoHighlight))+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.Held ? ax.ColorAct : ax.ColorHov);+ else if (ax.ColorHiLi != IM_COL32_BLACK_TRANS) {+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.ColorHiLi);+ ax.ColorHiLi = IM_COL32_BLACK_TRANS;+ }+ else if (ax.ColorBg != IM_COL32_BLACK_TRANS) {+ DrawList.AddRectFilled(ax.HoverRect.Min, ax.HoverRect.Max, ax.ColorBg);+ }+ const ImPlotTicker& tkr = ax.Ticker;+ const bool opp = ax.IsOpposite();+ if (ax.HasLabel()) {+ const char* label = plot.GetAxisLabel(ax);+ const ImVec2 label_size = CalcTextSizeVertical(label);+ const float label_offset = (ax.HasTickLabels() ? tkr.MaxSize.x + gp.Style.LabelPadding.x : 0.0f)+ + gp.Style.LabelPadding.x;+ const ImVec2 label_pos(opp ? ax.Datum1 + label_offset : ax.Datum1 - label_offset - label_size.x,+ plot.PlotRect.GetCenter().y + label_size.y * 0.5f);+ AddTextVertical(&DrawList, label_pos, ax.ColorTxt, label);+ }+ if (ax.HasTickLabels()) {+ for (int j = 0; j < tkr.TickCount(); ++j) {+ const ImPlotTick& tk = tkr.Ticks[j];+ const float datum = ax.Datum1 + (opp ? gp.Style.LabelPadding.x : (-gp.Style.LabelPadding.x - tk.LabelSize.x));+ if (tk.ShowLabel && tk.PixelPos >= plot.PlotRect.Min.y - 1 && tk.PixelPos <= plot.PlotRect.Max.y + 1) {+ ImVec2 start(datum, tk.PixelPos - 0.5f * tk.LabelSize.y);+ DrawList.AddText(start, ax.ColorTxt, tkr.GetText(j));+ }+ }+ }+ }+++ // clear legend (TODO: put elsewhere)+ plot.Items.Legend.Reset();+ // push ID to set item hashes (NB: !!!THIS PROBABLY NEEDS TO BE IN BEGIN PLOT!!!!)+ ImGui::PushOverrideID(gp.CurrentItems->ID);+}++//-----------------------------------------------------------------------------+// EndPlot()+//-----------------------------------------------------------------------------++void EndPlot() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "Mismatched BeginPlot()/EndPlot()!");++ SetupLock();++ ImGuiContext &G = *GImGui;+ ImPlotPlot &plot = *gp.CurrentPlot;+ ImGuiWindow * Window = G.CurrentWindow;+ ImDrawList & DrawList = *Window->DrawList;+ const ImGuiIO & IO = ImGui::GetIO();++ // FINAL RENDER -----------------------------------------------------------++ const bool render_border = gp.Style.PlotBorderSize > 0 && GetStyleColorVec4(ImPlotCol_PlotBorder).w > 0;+ const bool any_x_held = plot.Held || AnyAxesHeld(&plot.Axes[ImAxis_X1], IMPLOT_NUM_X_AXES);+ const bool any_y_held = plot.Held || AnyAxesHeld(&plot.Axes[ImAxis_Y1], IMPLOT_NUM_Y_AXES);++ ImGui::PushClipRect(plot.FrameRect.Min, plot.FrameRect.Max, true);++ // render grid (foreground)+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (x_axis.Enabled && x_axis.HasGridLines() && x_axis.IsForeground())+ RenderGridLinesX(DrawList, x_axis.Ticker, plot.PlotRect, x_axis.ColorMaj, x_axis.ColorMin, gp.Style.MajorGridSize.x, gp.Style.MinorGridSize.x);+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (y_axis.Enabled && y_axis.HasGridLines() && y_axis.IsForeground())+ RenderGridLinesY(DrawList, y_axis.Ticker, plot.PlotRect, y_axis.ColorMaj, y_axis.ColorMin, gp.Style.MajorGridSize.y, gp.Style.MinorGridSize.y);+ }+++ // render title+ if (plot.HasTitle()) {+ ImU32 col = GetStyleColorU32(ImPlotCol_TitleText);+ AddTextCentered(&DrawList,ImVec2(plot.PlotRect.GetCenter().x, plot.CanvasRect.Min.y),col,plot.GetTitle());+ }++ // render x ticks+ int count_B = 0, count_T = 0;+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ const ImPlotAxis& ax = plot.XAxis(i);+ if (!ax.Enabled)+ continue;+ const ImPlotTicker& tkr = ax.Ticker;+ const bool opp = ax.IsOpposite();+ const bool aux = ((opp && count_T > 0)||(!opp && count_B > 0));+ if (ax.HasTickMarks()) {+ const float direction = opp ? 1.0f : -1.0f;+ for (int j = 0; j < tkr.TickCount(); ++j) {+ const ImPlotTick& tk = tkr.Ticks[j];+ if (tk.Level != 0 || tk.PixelPos < plot.PlotRect.Min.x || tk.PixelPos > plot.PlotRect.Max.x)+ continue;+ const ImVec2 start(tk.PixelPos, ax.Datum1);+ const float len = (!aux && tk.Major) ? gp.Style.MajorTickLen.x : gp.Style.MinorTickLen.x;+ const float thk = (!aux && tk.Major) ? gp.Style.MajorTickSize.x : gp.Style.MinorTickSize.x;+ AddLineV(&DrawList, start.x, start.y, start.y + direction*len, ax.ColorTick, thk);+ }+ if (aux || !render_border)+ AddLineH(&DrawList, plot.PlotRect.Min.x,plot.PlotRect.Max.x,ax.Datum1, ax.ColorTick, gp.Style.MinorTickSize.x);+ }+ count_B += !opp;+ count_T += opp;+ }++ // render y ticks+ int count_L = 0, count_R = 0;+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ const ImPlotAxis& ax = plot.YAxis(i);+ if (!ax.Enabled)+ continue;+ const ImPlotTicker& tkr = ax.Ticker;+ const bool opp = ax.IsOpposite();+ const bool aux = ((opp && count_R > 0)||(!opp && count_L > 0));+ if (ax.HasTickMarks()) {+ const float direction = opp ? -1.0f : 1.0f;+ for (int j = 0; j < tkr.TickCount(); ++j) {+ const ImPlotTick& tk = tkr.Ticks[j];+ if (tk.Level != 0 || tk.PixelPos < plot.PlotRect.Min.y || tk.PixelPos > plot.PlotRect.Max.y)+ continue;+ const ImVec2 start(ax.Datum1, tk.PixelPos);+ const float len = (!aux && tk.Major) ? gp.Style.MajorTickLen.y : gp.Style.MinorTickLen.y;+ const float thk = (!aux && tk.Major) ? gp.Style.MajorTickSize.y : gp.Style.MinorTickSize.y;+ AddLineH(&DrawList, start.x, start.x + direction*len, start.y, ax.ColorTick, thk);+ }+ if (aux || !render_border)+ AddLineV(&DrawList, ax.Datum1, plot.PlotRect.Min.y, plot.PlotRect.Max.y, ax.ColorTick, gp.Style.MinorTickSize.y);+ }+ count_L += !opp;+ count_R += opp;+ }+ ImGui::PopClipRect();++ // render annotations+ PushPlotClipRect();+ for (int i = 0; i < gp.Annotations.Size; ++i) {+ const char* txt = gp.Annotations.GetText(i);+ ImPlotAnnotation& an = gp.Annotations.Annotations[i];+ const ImVec2 txt_size = ImGui::CalcTextSize(txt);+ const ImVec2 size = txt_size + gp.Style.AnnotationPadding * 2;+ ImVec2 pos = an.Pos;+ if (an.Offset.x == 0)+ pos.x -= size.x / 2;+ else if (an.Offset.x > 0)+ pos.x += an.Offset.x;+ else+ pos.x -= size.x - an.Offset.x;+ if (an.Offset.y == 0)+ pos.y -= size.y / 2;+ else if (an.Offset.y > 0)+ pos.y += an.Offset.y;+ else+ pos.y -= size.y - an.Offset.y;+ if (an.Clamp)+ pos = ClampLabelPos(pos, size, plot.PlotRect.Min, plot.PlotRect.Max);+ ImRect rect(pos,pos+size);+ if (an.Offset.x != 0 || an.Offset.y != 0) {+ ImVec2 corners[4] = {rect.GetTL(), rect.GetTR(), rect.GetBR(), rect.GetBL()};+ int min_corner = 0;+ float min_len = FLT_MAX;+ for (int c = 0; c < 4; ++c) {+ float len = ImLengthSqr(an.Pos - corners[c]);+ if (len < min_len) {+ min_corner = c;+ min_len = len;+ }+ }+ DrawList.AddLine(an.Pos, corners[min_corner], an.ColorBg);+ }+ DrawList.AddRectFilled(rect.Min, rect.Max, an.ColorBg);+ DrawList.AddText(pos + gp.Style.AnnotationPadding, an.ColorFg, txt);+ }++ // render selection+ if (plot.Selected)+ RenderSelectionRect(DrawList, plot.SelectRect.Min + plot.PlotRect.Min, plot.SelectRect.Max + plot.PlotRect.Min, GetStyleColorVec4(ImPlotCol_Selection));++ // render crosshairs+ if (ImHasFlag(plot.Flags, ImPlotFlags_Crosshairs) && plot.Hovered && !(any_x_held || any_y_held) && !plot.Selecting && !plot.Items.Legend.Hovered) {+ ImGui::SetMouseCursor(ImGuiMouseCursor_None);+ ImVec2 xy = IO.MousePos;+ ImU32 col = GetStyleColorU32(ImPlotCol_Crosshairs);+ AddLineH(&DrawList, plot.PlotRect.Min.x, xy.x - 5, xy.y, col);+ AddLineH(&DrawList, xy.x + 5, plot.PlotRect.Max.x, xy.y, col);+ AddLineV(&DrawList, xy.x, plot.PlotRect.Min.y, xy.y - 5, col);+ AddLineV(&DrawList, xy.x, xy.y + 5, plot.PlotRect.Max.y, col);+ }++ // render mouse pos+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoMouseText) && (plot.Hovered || ImHasFlag(plot.MouseTextFlags, ImPlotMouseTextFlags_ShowAlways))) {++ const bool no_aux = ImHasFlag(plot.MouseTextFlags, ImPlotMouseTextFlags_NoAuxAxes);+ const bool no_fmt = ImHasFlag(plot.MouseTextFlags, ImPlotMouseTextFlags_NoFormat);++ ImGuiTextBuffer& builder = gp.MousePosStringBuilder;+ builder.Buf.shrink(0);+ char buff[IMPLOT_LABEL_MAX_SIZE];++ const int num_x = no_aux ? 1 : IMPLOT_NUM_X_AXES;+ for (int i = 0; i < num_x; ++i) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (!x_axis.Enabled)+ continue;+ if (i > 0)+ builder.append(", (");+ double v = x_axis.PixelsToPlot(IO.MousePos.x);+ if (no_fmt)+ Formatter_Default(v,buff,IMPLOT_LABEL_MAX_SIZE,(void*)IMPLOT_LABEL_FORMAT);+ else+ LabelAxisValue(x_axis,v,buff,IMPLOT_LABEL_MAX_SIZE,true);+ builder.append(buff);+ if (i > 0)+ builder.append(")");+ }+ builder.append(", ");+ const int num_y = no_aux ? 1 : IMPLOT_NUM_Y_AXES;+ for (int i = 0; i < num_y; ++i) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (!y_axis.Enabled)+ continue;+ if (i > 0)+ builder.append(", (");+ double v = y_axis.PixelsToPlot(IO.MousePos.y);+ if (no_fmt)+ Formatter_Default(v,buff,IMPLOT_LABEL_MAX_SIZE,(void*)IMPLOT_LABEL_FORMAT);+ else+ LabelAxisValue(y_axis,v,buff,IMPLOT_LABEL_MAX_SIZE,true);+ builder.append(buff);+ if (i > 0)+ builder.append(")");+ }++ if (!builder.empty()) {+ const ImVec2 size = ImGui::CalcTextSize(builder.c_str());+ const ImVec2 pos = GetLocationPos(plot.PlotRect, size, plot.MouseTextLocation, gp.Style.MousePosPadding);+ DrawList.AddText(pos, GetStyleColorU32(ImPlotCol_InlayText), builder.c_str());+ }+ }+ PopPlotClipRect();++ // axis side switch+ if (!plot.Held) {+ ImVec2 mouse_pos = ImGui::GetIO().MousePos;+ ImRect trigger_rect = plot.PlotRect;+ trigger_rect.Expand(-10);+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (ImHasFlag(x_axis.Flags, ImPlotAxisFlags_NoSideSwitch))+ continue;+ if (x_axis.Held && plot.PlotRect.Contains(mouse_pos)) {+ const bool opp = ImHasFlag(x_axis.Flags, ImPlotAxisFlags_Opposite);+ if (!opp) {+ ImRect rect(plot.PlotRect.Min.x - 5, plot.PlotRect.Min.y - 5,+ plot.PlotRect.Max.x + 5, plot.PlotRect.Min.y + 5);+ if (mouse_pos.y < plot.PlotRect.Max.y - 10)+ DrawList.AddRectFilled(rect.Min, rect.Max, x_axis.ColorHov);+ if (rect.Contains(mouse_pos))+ x_axis.Flags |= ImPlotAxisFlags_Opposite;+ }+ else {+ ImRect rect(plot.PlotRect.Min.x - 5, plot.PlotRect.Max.y - 5,+ plot.PlotRect.Max.x + 5, plot.PlotRect.Max.y + 5);+ if (mouse_pos.y > plot.PlotRect.Min.y + 10)+ DrawList.AddRectFilled(rect.Min, rect.Max, x_axis.ColorHov);+ if (rect.Contains(mouse_pos))+ x_axis.Flags &= ~ImPlotAxisFlags_Opposite;+ }+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (ImHasFlag(y_axis.Flags, ImPlotAxisFlags_NoSideSwitch))+ continue;+ if (y_axis.Held && plot.PlotRect.Contains(mouse_pos)) {+ const bool opp = ImHasFlag(y_axis.Flags, ImPlotAxisFlags_Opposite);+ if (!opp) {+ ImRect rect(plot.PlotRect.Max.x - 5, plot.PlotRect.Min.y - 5,+ plot.PlotRect.Max.x + 5, plot.PlotRect.Max.y + 5);+ if (mouse_pos.x > plot.PlotRect.Min.x + 10)+ DrawList.AddRectFilled(rect.Min, rect.Max, y_axis.ColorHov);+ if (rect.Contains(mouse_pos))+ y_axis.Flags |= ImPlotAxisFlags_Opposite;+ }+ else {+ ImRect rect(plot.PlotRect.Min.x - 5, plot.PlotRect.Min.y - 5,+ plot.PlotRect.Min.x + 5, plot.PlotRect.Max.y + 5);+ if (mouse_pos.x < plot.PlotRect.Max.x - 10)+ DrawList.AddRectFilled(rect.Min, rect.Max, y_axis.ColorHov);+ if (rect.Contains(mouse_pos))+ y_axis.Flags &= ~ImPlotAxisFlags_Opposite;+ }+ }+ }+ }++ // reset legend hovers+ plot.Items.Legend.Hovered = false;+ for (int i = 0; i < plot.Items.GetItemCount(); ++i)+ plot.Items.GetItemByIndex(i)->LegendHovered = false;+ // render legend+ if (!ImHasFlag(plot.Flags, ImPlotFlags_NoLegend) && plot.Items.GetLegendCount() > 0) {+ ImPlotLegend& legend = plot.Items.Legend;+ const bool legend_out = ImHasFlag(legend.Flags, ImPlotLegendFlags_Outside);+ const bool legend_horz = ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal);+ const ImVec2 legend_size = CalcLegendSize(plot.Items, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz);+ const ImVec2 legend_pos = GetLocationPos(legend_out ? plot.FrameRect : plot.PlotRect,+ legend_size,+ legend.Location,+ legend_out ? gp.Style.PlotPadding : gp.Style.LegendPadding);+ legend.Rect = ImRect(legend_pos, legend_pos + legend_size);+ legend.RectClamped = legend.Rect;+ const bool legend_scrollable = ClampLegendRect(legend.RectClamped,+ legend_out ? plot.FrameRect : plot.PlotRect,+ legend_out ? gp.Style.PlotPadding : gp.Style.LegendPadding+ );+ const ImGuiButtonFlags legend_button_flags = ImGuiButtonFlags_AllowOverlap+ | ImGuiButtonFlags_PressedOnClick+ | ImGuiButtonFlags_PressedOnDoubleClick+ | ImGuiButtonFlags_MouseButtonLeft+ | ImGuiButtonFlags_MouseButtonRight+ | ImGuiButtonFlags_MouseButtonMiddle+ | ImGuiButtonFlags_FlattenChildren;+ ImGui::KeepAliveID(plot.Items.ID);+ ImGui::ButtonBehavior(legend.RectClamped, plot.Items.ID, &legend.Hovered, &legend.Held, legend_button_flags);+ legend.Hovered = legend.Hovered || (ImGui::IsWindowHovered() && legend.RectClamped.Contains(IO.MousePos));++ if (legend_scrollable) {+ if (legend.Hovered) {+ ImGui::SetKeyOwner(ImGuiKey_MouseWheelY, plot.Items.ID);+ if (IO.MouseWheel != 0.0f) {+ ImVec2 max_step = legend.Rect.GetSize() * 0.67f;+#if IMGUI_VERSION_NUM < 19172+ float font_size = ImGui::GetCurrentWindow()->CalcFontSize();+#else+ float font_size = ImGui::GetCurrentWindow()->FontRefSize;+#endif+ float scroll_step = ImFloor(ImMin(2 * font_size, max_step.x));+ legend.Scroll.x += scroll_step * IO.MouseWheel;+ legend.Scroll.y += scroll_step * IO.MouseWheel;+ }+ }+ const ImVec2 min_scroll_offset = legend.RectClamped.GetSize() - legend.Rect.GetSize();+ legend.Scroll.x = ImClamp(legend.Scroll.x, min_scroll_offset.x, 0.0f);+ legend.Scroll.y = ImClamp(legend.Scroll.y, min_scroll_offset.y, 0.0f);+ const ImVec2 scroll_offset = legend_horz ? ImVec2(legend.Scroll.x, 0) : ImVec2(0, legend.Scroll.y);+ ImVec2 legend_offset = legend.RectClamped.Min - legend.Rect.Min + scroll_offset;+ legend.Rect.Min += legend_offset;+ legend.Rect.Max += legend_offset;+ } else {+ legend.Scroll = ImVec2(0,0);+ }++ const ImU32 col_bg = GetStyleColorU32(ImPlotCol_LegendBg);+ const ImU32 col_bd = GetStyleColorU32(ImPlotCol_LegendBorder);+ ImGui::PushClipRect(legend.RectClamped.Min, legend.RectClamped.Max, true);+ DrawList.AddRectFilled(legend.RectClamped.Min, legend.RectClamped.Max, col_bg);+ bool legend_contextable = ShowLegendEntries(plot.Items, legend.Rect, legend.Hovered, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz, DrawList)+ && !ImHasFlag(legend.Flags, ImPlotLegendFlags_NoMenus);+ DrawList.AddRect(legend.RectClamped.Min, legend.RectClamped.Max, col_bd);+ ImGui::PopClipRect();++ // main ctx menu+ if (gp.OpenContextThisFrame && legend_contextable && !ImHasFlag(plot.Flags, ImPlotFlags_NoMenus))+ ImGui::OpenPopup("##LegendContext");++ if (ImGui::BeginPopup("##LegendContext")) {+ ImGui::Text("Legend"); ImGui::Separator();+ if (ShowLegendContextMenu(legend, !ImHasFlag(plot.Flags, ImPlotFlags_NoLegend)))+ ImFlipFlag(plot.Flags, ImPlotFlags_NoLegend);+ ImGui::EndPopup();+ }+ }+ else {+ plot.Items.Legend.Rect = ImRect();+ }++ // render border+#if IMGUI_VERSION_NUM < 19276+ if (render_border)+ DrawList.AddRect(plot.PlotRect.Min, plot.PlotRect.Max, GetStyleColorU32(ImPlotCol_PlotBorder), 0, ImDrawFlags_None, gp.Style.PlotBorderSize);+#else+ if (render_border)+ DrawList.AddRect(plot.PlotRect.Min, plot.PlotRect.Max, GetStyleColorU32(ImPlotCol_PlotBorder), 0, gp.Style.PlotBorderSize, ImDrawFlags_None);+#endif++ // render tags+ for (int i = 0; i < gp.Tags.Size; ++i) {+ ImPlotTag& tag = gp.Tags.Tags[i];+ ImPlotAxis& axis = plot.Axes[tag.Axis];+ if (!axis.Enabled || !axis.Range.Contains(tag.Value))+ continue;+ const char* txt = gp.Tags.GetText(i);+ ImVec2 text_size = ImGui::CalcTextSize(txt);+ ImVec2 size = text_size + gp.Style.AnnotationPadding * 2;+ ImVec2 pos;+ axis.Ticker.OverrideSizeLate(size);+ float pix = IM_ROUND(axis.PlotToPixels(tag.Value));+ if (axis.Vertical) {+ if (axis.IsOpposite()) {+ pos = ImVec2(axis.Datum1 + gp.Style.LabelPadding.x, pix - size.y * 0.5f);+ DrawList.AddTriangleFilled(ImVec2(axis.Datum1,pix), pos, pos + ImVec2(0,size.y), tag.ColorBg);+ }+ else {+ pos = ImVec2(axis.Datum1 - size.x - gp.Style.LabelPadding.x, pix - size.y * 0.5f);+ DrawList.AddTriangleFilled(pos + ImVec2(size.x,0), ImVec2(axis.Datum1,pix), pos+size, tag.ColorBg);+ }+ }+ else {+ if (axis.IsOpposite()) {+ pos = ImVec2(pix - size.x * 0.5f, axis.Datum1 - size.y - gp.Style.LabelPadding.y );+ DrawList.AddTriangleFilled(pos + ImVec2(0,size.y), pos + size, ImVec2(pix,axis.Datum1), tag.ColorBg);+ }+ else {+ pos = ImVec2(pix - size.x * 0.5f, axis.Datum1 + gp.Style.LabelPadding.y);+ DrawList.AddTriangleFilled(pos, ImVec2(pix,axis.Datum1), pos + ImVec2(size.x, 0), tag.ColorBg);+ }+ }+ DrawList.AddRectFilled(pos,pos+size,tag.ColorBg);+ DrawList.AddText(pos+gp.Style.AnnotationPadding,tag.ColorFg,txt);+ }++ // FIT DATA --------------------------------------------------------------+ const bool axis_equal = ImHasFlag(plot.Flags, ImPlotFlags_Equal);+ if (plot.FitThisFrame) {+ for (int i = 0; i < IMPLOT_NUM_X_AXES; i++) {+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (x_axis.FitThisFrame) {+ x_axis.ApplyFit(gp.Style.FitPadding.x);+ if (axis_equal && x_axis.OrthoAxis != nullptr) {+ double aspect = x_axis.GetAspect();+ ImPlotAxis& y_axis = *x_axis.OrthoAxis;+ if (y_axis.FitThisFrame) {+ y_axis.ApplyFit(gp.Style.FitPadding.y);+ y_axis.FitThisFrame = false;+ aspect = ImMax(aspect, y_axis.GetAspect());+ }+ x_axis.SetAspect(aspect);+ y_axis.SetAspect(aspect);+ }+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; i++) {+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (y_axis.FitThisFrame) {+ y_axis.ApplyFit(gp.Style.FitPadding.y);+ if (axis_equal && y_axis.OrthoAxis != nullptr) {+ double aspect = y_axis.GetAspect();+ ImPlotAxis& x_axis = *y_axis.OrthoAxis;+ if (x_axis.FitThisFrame) {+ x_axis.ApplyFit(gp.Style.FitPadding.x);+ x_axis.FitThisFrame = false;+ aspect = ImMax(x_axis.GetAspect(), aspect);+ }+ x_axis.SetAspect(aspect);+ y_axis.SetAspect(aspect);+ }+ }+ }+ plot.FitThisFrame = false;+ }++ // CONTEXT MENUS -----------------------------------------------------------++ ImGui::PushOverrideID(plot.ID);++ const bool can_ctx = gp.OpenContextThisFrame &&+ !ImHasFlag(plot.Flags, ImPlotFlags_NoMenus) &&+ !plot.Items.Legend.Hovered;++++ // main ctx menu+ if (can_ctx && plot.Hovered)+ ImGui::OpenPopup("##PlotContext");+ if (ImGui::BeginPopup("##PlotContext")) {+ ShowPlotContextMenu(plot);+ ImGui::EndPopup();+ }++ // axes ctx menus+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImGui::PushID(i);+ ImPlotAxis& x_axis = plot.XAxis(i);+ if (can_ctx && x_axis.Hovered && x_axis.HasMenus())+ ImGui::OpenPopup("##XContext");+ if (ImGui::BeginPopup("##XContext")) {+ ImGui::Text(x_axis.HasLabel() ? plot.GetAxisLabel(x_axis) : i == 0 ? "X-Axis" : "X-Axis %d", i + 1);+ ImGui::Separator();+ ShowAxisContextMenu(x_axis, axis_equal ? x_axis.OrthoAxis : nullptr, true);+ ImGui::EndPopup();+ }+ ImGui::PopID();+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ ImGui::PushID(i);+ ImPlotAxis& y_axis = plot.YAxis(i);+ if (can_ctx && y_axis.Hovered && y_axis.HasMenus())+ ImGui::OpenPopup("##YContext");+ if (ImGui::BeginPopup("##YContext")) {+ ImGui::Text(y_axis.HasLabel() ? plot.GetAxisLabel(y_axis) : i == 0 ? "Y-Axis" : "Y-Axis %d", i + 1);+ ImGui::Separator();+ ShowAxisContextMenu(y_axis, axis_equal ? y_axis.OrthoAxis : nullptr, false);+ ImGui::EndPopup();+ }+ ImGui::PopID();+ }+ ImGui::PopID();++ // LINKED AXES ------------------------------------------------------------++ for (int i = 0; i < ImAxis_COUNT; ++i)+ plot.Axes[i].PushLinks();+++ // CLEANUP ----------------------------------------------------------------++ // remove items+ if (gp.CurrentItems == &plot.Items)+ gp.CurrentItems = nullptr;+ // reset the plot items for the next frame+ for (int i = 0; i < plot.Items.GetItemCount(); ++i) {+ plot.Items.GetItemByIndex(i)->SeenThisFrame = false;+ }++ // mark the plot as initialized, i.e. having made it through one frame completely+ plot.Initialized = true;+ // Pop ImGui::PushID at the end of BeginPlot+ ImGui::PopID();+ // Reset context for next plot+ ResetCtxForNextPlot(GImPlot);++ // setup next subplot+ if (gp.CurrentSubplot != nullptr) {+ ImGui::PopID();+ SubplotNextCell();+ }+}++//-----------------------------------------------------------------------------+// BEGIN/END SUBPLOT+//-----------------------------------------------------------------------------++constexpr float SUBPLOT_BORDER_SIZE = 1.0f;+constexpr float SUBPLOT_SPLITTER_HALF_THICKNESS = 4.0f;+constexpr float SUBPLOT_SPLITTER_FEEDBACK_TIMER = 0.06f;++void SubplotSetCell(int row, int col) {+ ImPlotContext& gp = *GImPlot;+ ImPlotSubplot& subplot = *gp.CurrentSubplot;+ if (row >= subplot.Rows || col >= subplot.Cols)+ return;+ float xoff = 0;+ float yoff = 0;+ for (int c = 0; c < col; ++c)+ xoff += subplot.ColRatios[c];+ for (int r = 0; r < row; ++r)+ yoff += subplot.RowRatios[r];+ const ImVec2 grid_size = subplot.GridRect.GetSize();+ ImVec2 cpos = subplot.GridRect.Min + ImVec2(xoff*grid_size.x,yoff*grid_size.y);+ cpos.x = IM_ROUND(cpos.x);+ cpos.y = IM_ROUND(cpos.y);+ ImGui::GetCurrentWindow()->DC.CursorPos = cpos;+ // set cell size+ subplot.CellSize.x = IM_ROUND(subplot.GridRect.GetWidth() * subplot.ColRatios[col]);+ subplot.CellSize.y = IM_ROUND(subplot.GridRect.GetHeight() * subplot.RowRatios[row]);+ // setup links+ const bool lx = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllX);+ const bool ly = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkAllY);+ const bool lr = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkRows);+ const bool lc = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_LinkCols);++ SetNextAxisLinks(ImAxis_X1, lx ? &subplot.ColLinkData[0].Min : lc ? &subplot.ColLinkData[col].Min : nullptr,+ lx ? &subplot.ColLinkData[0].Max : lc ? &subplot.ColLinkData[col].Max : nullptr);+ SetNextAxisLinks(ImAxis_Y1, ly ? &subplot.RowLinkData[0].Min : lr ? &subplot.RowLinkData[row].Min : nullptr,+ ly ? &subplot.RowLinkData[0].Max : lr ? &subplot.RowLinkData[row].Max : nullptr);+ // setup alignment+ if (!ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoAlign)) {+ gp.CurrentAlignmentH = &subplot.RowAlignmentData[row];+ gp.CurrentAlignmentV = &subplot.ColAlignmentData[col];+ }+ // set idx+ if (ImHasFlag(subplot.Flags, ImPlotSubplotFlags_ColMajor))+ subplot.CurrentIdx = col * subplot.Rows + row;+ else+ subplot.CurrentIdx = row * subplot.Cols + col;+}++void SubplotSetCell(int idx) {+ ImPlotContext& gp = *GImPlot;+ ImPlotSubplot& subplot = *gp.CurrentSubplot;+ if (idx >= subplot.Rows * subplot.Cols)+ return;+ int row = 0, col = 0;+ if (ImHasFlag(subplot.Flags, ImPlotSubplotFlags_ColMajor)) {+ row = idx % subplot.Rows;+ col = idx / subplot.Rows;+ }+ else {+ row = idx / subplot.Cols;+ col = idx % subplot.Cols;+ }+ return SubplotSetCell(row, col);+}++void SubplotNextCell() {+ ImPlotContext& gp = *GImPlot;+ ImPlotSubplot& subplot = *gp.CurrentSubplot;+ SubplotSetCell(++subplot.CurrentIdx);+}++bool BeginSubplots(const char* title, int rows, int cols, const ImVec2& size, ImPlotSubplotFlags flags, float* row_sizes, float* col_sizes) {+ IM_ASSERT_USER_ERROR(rows > 0 && cols > 0, "Invalid sizing arguments!");+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentSubplot == nullptr, "Mismatched BeginSubplots()/EndSubplots()!");+ ImGuiContext &G = *GImGui;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return false;+ const ImGuiID ID = Window->GetID(title);+ bool just_created = gp.Subplots.GetByKey(ID) == nullptr;+ gp.CurrentSubplot = gp.Subplots.GetOrAddByKey(ID);+ ImPlotSubplot& subplot = *gp.CurrentSubplot;+ subplot.ID = ID;+ subplot.Items.ID = ID - 1;+ subplot.HasTitle = ImGui::FindRenderedTextEnd(title, nullptr) != title;+ // push ID+ ImGui::PushID(ID);++ if (just_created)+ subplot.Flags = flags;+ else if (flags != subplot.PreviousFlags)+ subplot.Flags = flags;+ subplot.PreviousFlags = flags;++ // check for change in rows and cols+ if (subplot.Rows != rows || subplot.Cols != cols) {+ subplot.RowAlignmentData.resize(rows);+ subplot.RowLinkData.resize(rows);+ subplot.RowRatios.resize(rows);+ for (int r = 0; r < rows; ++r) {+ subplot.RowAlignmentData[r].Reset();+ subplot.RowLinkData[r] = ImPlotRange(0,1);+ subplot.RowRatios[r] = 1.0f / rows;+ }+ subplot.ColAlignmentData.resize(cols);+ subplot.ColLinkData.resize(cols);+ subplot.ColRatios.resize(cols);+ for (int c = 0; c < cols; ++c) {+ subplot.ColAlignmentData[c].Reset();+ subplot.ColLinkData[c] = ImPlotRange(0,1);+ subplot.ColRatios[c] = 1.0f / cols;+ }+ }+ // check incoming size requests+ float row_sum = 0, col_sum = 0;+ if (row_sizes != nullptr) {+ row_sum = ImSum(row_sizes, rows);+ for (int r = 0; r < rows; ++r)+ subplot.RowRatios[r] = row_sizes[r] / row_sum;+ }+ if (col_sizes != nullptr) {+ col_sum = ImSum(col_sizes, cols);+ for (int c = 0; c < cols; ++c)+ subplot.ColRatios[c] = col_sizes[c] / col_sum;+ }+ subplot.Rows = rows;+ subplot.Cols = cols;++ // calc plot frame sizes+ ImVec2 title_size(0.0f, 0.0f);+ if (!ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoTitle))+ title_size = ImGui::CalcTextSize(title, nullptr, true);+ const float pad_top = title_size.x > 0.0f ? title_size.y + gp.Style.LabelPadding.y : 0;+ const ImVec2 half_pad = gp.Style.PlotPadding/2;+ const ImVec2 frame_size = ImGui::CalcItemSize(size, gp.Style.PlotDefaultSize.x, gp.Style.PlotDefaultSize.y);+ subplot.FrameRect = ImRect(Window->DC.CursorPos, Window->DC.CursorPos + frame_size);+ subplot.GridRect.Min = subplot.FrameRect.Min + half_pad + ImVec2(0,pad_top);+ subplot.GridRect.Max = subplot.FrameRect.Max - half_pad;+ subplot.FrameHovered = subplot.FrameRect.Contains(ImGui::GetMousePos()) && ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows|ImGuiHoveredFlags_AllowWhenBlockedByActiveItem);++ // outside legend adjustments (TODO: make function)+ const bool share_items = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_ShareItems);+ if (share_items)+ gp.CurrentItems = &subplot.Items;+ if (share_items && !ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoLegend) && subplot.Items.GetLegendCount() > 0) {+ ImPlotLegend& legend = subplot.Items.Legend;+ const bool horz = ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal);+ const ImVec2 legend_size = CalcLegendSize(subplot.Items, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !horz);+ const bool west = ImHasFlag(legend.Location, ImPlotLocation_West) && !ImHasFlag(legend.Location, ImPlotLocation_East);+ const bool east = ImHasFlag(legend.Location, ImPlotLocation_East) && !ImHasFlag(legend.Location, ImPlotLocation_West);+ const bool north = ImHasFlag(legend.Location, ImPlotLocation_North) && !ImHasFlag(legend.Location, ImPlotLocation_South);+ const bool south = ImHasFlag(legend.Location, ImPlotLocation_South) && !ImHasFlag(legend.Location, ImPlotLocation_North);+ if ((west && !horz) || (west && horz && !north && !south))+ subplot.GridRect.Min.x += (legend_size.x + gp.Style.LegendPadding.x);+ if ((east && !horz) || (east && horz && !north && !south))+ subplot.GridRect.Max.x -= (legend_size.x + gp.Style.LegendPadding.x);+ if ((north && horz) || (north && !horz && !west && !east))+ subplot.GridRect.Min.y += (legend_size.y + gp.Style.LegendPadding.y);+ if ((south && horz) || (south && !horz && !west && !east))+ subplot.GridRect.Max.y -= (legend_size.y + gp.Style.LegendPadding.y);+ }++ // render single background frame+ ImGui::RenderFrame(subplot.FrameRect.Min, subplot.FrameRect.Max, GetStyleColorU32(ImPlotCol_FrameBg), true, ImGui::GetStyle().FrameRounding);+ // render title+ if (title_size.x > 0.0f && !ImHasFlag(subplot.Flags, ImPlotFlags_NoTitle)) {+ const ImU32 col = GetStyleColorU32(ImPlotCol_TitleText);+ AddTextCentered(ImGui::GetWindowDrawList(),ImVec2(subplot.GridRect.GetCenter().x, subplot.GridRect.Min.y - pad_top + half_pad.y),col,title);+ }++ // render splitters+ if (!ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoResize)) {+ ImDrawList& DrawList = *ImGui::GetWindowDrawList();+ const ImU32 hov_col = ImGui::ColorConvertFloat4ToU32(GImGui->Style.Colors[ImGuiCol_SeparatorHovered]);+ const ImU32 act_col = ImGui::ColorConvertFloat4ToU32(GImGui->Style.Colors[ImGuiCol_SeparatorActive]);+ float xpos = subplot.GridRect.Min.x;+ float ypos = subplot.GridRect.Min.y;+ int separator = 1;+ // bool pass = false;+ for (int r = 0; r < subplot.Rows-1; ++r) {+ ypos += subplot.RowRatios[r] * subplot.GridRect.GetHeight();+ const ImGuiID sep_id = subplot.ID + separator;+ ImGui::KeepAliveID(sep_id);+ const ImRect sep_bb = ImRect(subplot.GridRect.Min.x, ypos-SUBPLOT_SPLITTER_HALF_THICKNESS, subplot.GridRect.Max.x, ypos+SUBPLOT_SPLITTER_HALF_THICKNESS);+ bool sep_hov = false, sep_hld = false;+ const bool sep_clk = ImGui::ButtonBehavior(sep_bb, sep_id, &sep_hov, &sep_hld, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick);+ if ((sep_hov && G.HoveredIdTimer > SUBPLOT_SPLITTER_FEEDBACK_TIMER) || sep_hld) {+ if (sep_clk && ImGui::IsMouseDoubleClicked(0)) {+ float p = (subplot.RowRatios[r] + subplot.RowRatios[r+1])/2;+ subplot.RowRatios[r] = subplot.RowRatios[r+1] = p;+ }+ if (sep_clk) {+ subplot.TempSizes[0] = subplot.RowRatios[r];+ subplot.TempSizes[1] = subplot.RowRatios[r+1];+ }+ if (sep_hld) {+ float dp = ImGui::GetMouseDragDelta(0).y / subplot.GridRect.GetHeight();+ if (subplot.TempSizes[0] + dp > 0.1f && subplot.TempSizes[1] - dp > 0.1f) {+ subplot.RowRatios[r] = subplot.TempSizes[0] + dp;+ subplot.RowRatios[r+1] = subplot.TempSizes[1] - dp;+ }+ }+ AddLineH(&DrawList, IM_ROUND(subplot.GridRect.Min.x), IM_ROUND(subplot.GridRect.Max.x),IM_ROUND(ypos),+ sep_hld ? act_col : hov_col, SUBPLOT_BORDER_SIZE);+ ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS);+ }+ separator++;+ }+ for (int c = 0; c < subplot.Cols-1; ++c) {+ xpos += subplot.ColRatios[c] * subplot.GridRect.GetWidth();+ const ImGuiID sep_id = subplot.ID + separator;+ ImGui::KeepAliveID(sep_id);+ const ImRect sep_bb = ImRect(xpos-SUBPLOT_SPLITTER_HALF_THICKNESS, subplot.GridRect.Min.y, xpos+SUBPLOT_SPLITTER_HALF_THICKNESS, subplot.GridRect.Max.y);+ bool sep_hov = false, sep_hld = false;+ const bool sep_clk = ImGui::ButtonBehavior(sep_bb, sep_id, &sep_hov, &sep_hld, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick);+ if ((sep_hov && G.HoveredIdTimer > SUBPLOT_SPLITTER_FEEDBACK_TIMER) || sep_hld) {+ if (sep_clk && ImGui::IsMouseDoubleClicked(0)) {+ float p = (subplot.ColRatios[c] + subplot.ColRatios[c+1])/2;+ subplot.ColRatios[c] = subplot.ColRatios[c+1] = p;+ }+ if (sep_clk) {+ subplot.TempSizes[0] = subplot.ColRatios[c];+ subplot.TempSizes[1] = subplot.ColRatios[c+1];+ }+ if (sep_hld) {+ float dp = ImGui::GetMouseDragDelta(0).x / subplot.GridRect.GetWidth();+ if (subplot.TempSizes[0] + dp > 0.1f && subplot.TempSizes[1] - dp > 0.1f) {+ subplot.ColRatios[c] = subplot.TempSizes[0] + dp;+ subplot.ColRatios[c+1] = subplot.TempSizes[1] - dp;+ }+ }+ AddLineV(&DrawList, IM_ROUND(xpos),IM_ROUND(subplot.GridRect.Min.y),IM_ROUND(subplot.GridRect.Max.y),+ sep_hld ? act_col : hov_col, SUBPLOT_BORDER_SIZE);+ ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);+ }+ separator++;+ }+ }++ // set outgoing sizes+ if (row_sizes != nullptr) {+ for (int r = 0; r < rows; ++r)+ row_sizes[r] = subplot.RowRatios[r] * row_sum;+ }+ if (col_sizes != nullptr) {+ for (int c = 0; c < cols; ++c)+ col_sizes[c] = subplot.ColRatios[c] * col_sum;+ }++ // push styling+ PushStyleColor(ImPlotCol_FrameBg, IM_COL32_BLACK_TRANS);+ PushStyleVar(ImPlotStyleVar_PlotPadding, half_pad);+ PushStyleVar(ImPlotStyleVar_PlotMinSize, ImVec2(0,0));+ ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize,0);++ // set initial cursor pos+ Window->DC.CursorPos = subplot.GridRect.Min;+ // begin alignments+ for (int r = 0; r < subplot.Rows; ++r)+ subplot.RowAlignmentData[r].Begin();+ for (int c = 0; c < subplot.Cols; ++c)+ subplot.ColAlignmentData[c].Begin();+ // clear legend data+ subplot.Items.Legend.Reset();+ // Setup first subplot+ SubplotSetCell(0,0);+ return true;+}++void EndSubplots() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentSubplot != nullptr, "Mismatched BeginSubplots()/EndSubplots()!");+ ImPlotSubplot& subplot = *gp.CurrentSubplot;+ const ImGuiIO& IO = ImGui::GetIO();+ // set alignments+ for (int r = 0; r < subplot.Rows; ++r)+ subplot.RowAlignmentData[r].End();+ for (int c = 0; c < subplot.Cols; ++c)+ subplot.ColAlignmentData[c].End();+ // pop styling+ PopStyleColor();+ PopStyleVar();+ PopStyleVar();+ ImGui::PopStyleVar();+ // legend+ subplot.Items.Legend.Hovered = false;+ for (int i = 0; i < subplot.Items.GetItemCount(); ++i)+ subplot.Items.GetItemByIndex(i)->LegendHovered = false;+ // render legend+ const bool share_items = ImHasFlag(subplot.Flags, ImPlotSubplotFlags_ShareItems);+ ImDrawList& DrawList = *ImGui::GetWindowDrawList();+ if (share_items && !ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoLegend) && subplot.Items.GetLegendCount() > 0) {+ ImPlotLegend& legend = subplot.Items.Legend;+ const bool legend_horz = ImHasFlag(legend.Flags, ImPlotLegendFlags_Horizontal);+ const ImVec2 legend_size = CalcLegendSize(subplot.Items, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz);+ const ImVec2 legend_pos = GetLocationPos(subplot.FrameRect, legend_size, legend.Location, gp.Style.PlotPadding);+ legend.Rect = ImRect(legend_pos, legend_pos + legend_size);+ legend.RectClamped = legend.Rect;+ const bool legend_scrollable = ClampLegendRect(legend.RectClamped,subplot.FrameRect, gp.Style.PlotPadding);+ const ImGuiButtonFlags legend_button_flags = ImGuiButtonFlags_AllowOverlap+ | ImGuiButtonFlags_PressedOnClick+ | ImGuiButtonFlags_PressedOnDoubleClick+ | ImGuiButtonFlags_MouseButtonLeft+ | ImGuiButtonFlags_MouseButtonRight+ | ImGuiButtonFlags_MouseButtonMiddle+ | ImGuiButtonFlags_FlattenChildren;+ ImGui::KeepAliveID(subplot.Items.ID);+ ImGui::ButtonBehavior(legend.RectClamped, subplot.Items.ID, &legend.Hovered, &legend.Held, legend_button_flags);+ legend.Hovered = legend.Hovered || (subplot.FrameHovered && legend.RectClamped.Contains(ImGui::GetIO().MousePos));++ if (legend_scrollable) {+ if (legend.Hovered) {+ ImGui::SetKeyOwner(ImGuiKey_MouseWheelY, subplot.Items.ID);+ if (IO.MouseWheel != 0.0f) {+ ImVec2 max_step = legend.Rect.GetSize() * 0.67f;+#if IMGUI_VERSION_NUM < 19172+ float font_size = ImGui::GetCurrentWindow()->CalcFontSize();+#else+ float font_size = ImGui::GetCurrentWindow()->FontRefSize;+#endif+ float scroll_step = ImFloor(ImMin(2 * font_size, max_step.x));+ legend.Scroll.x += scroll_step * IO.MouseWheel;+ legend.Scroll.y += scroll_step * IO.MouseWheel;+ }+ }+ const ImVec2 min_scroll_offset = legend.RectClamped.GetSize() - legend.Rect.GetSize();+ legend.Scroll.x = ImClamp(legend.Scroll.x, min_scroll_offset.x, 0.0f);+ legend.Scroll.y = ImClamp(legend.Scroll.y, min_scroll_offset.y, 0.0f);+ const ImVec2 scroll_offset = legend_horz ? ImVec2(legend.Scroll.x, 0) : ImVec2(0, legend.Scroll.y);+ ImVec2 legend_offset = legend.RectClamped.Min - legend.Rect.Min + scroll_offset;+ legend.Rect.Min += legend_offset;+ legend.Rect.Max += legend_offset;+ } else {+ legend.Scroll = ImVec2(0,0);+ }++ const ImU32 col_bg = GetStyleColorU32(ImPlotCol_LegendBg);+ const ImU32 col_bd = GetStyleColorU32(ImPlotCol_LegendBorder);+ ImGui::PushClipRect(legend.RectClamped.Min, legend.RectClamped.Max, true);+ DrawList.AddRectFilled(legend.RectClamped.Min, legend.RectClamped.Max, col_bg);+ bool legend_contextable = ShowLegendEntries(subplot.Items, legend.Rect, legend.Hovered, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz, DrawList)+ && !ImHasFlag(legend.Flags, ImPlotLegendFlags_NoMenus);+ DrawList.AddRect(legend.RectClamped.Min, legend.RectClamped.Max, col_bd);+ ImGui::PopClipRect();++ if (legend_contextable && !ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoMenus) && ImGui::GetIO().MouseReleased[gp.InputMap.Menu])+ ImGui::OpenPopup("##LegendContext");+ if (ImGui::BeginPopup("##LegendContext")) {+ ImGui::Text("Legend"); ImGui::Separator();+ if (ShowLegendContextMenu(legend, !ImHasFlag(subplot.Flags, ImPlotFlags_NoLegend)))+ ImFlipFlag(subplot.Flags, ImPlotFlags_NoLegend);+ ImGui::EndPopup();+ }+ }+ else {+ subplot.Items.Legend.Rect = ImRect();+ }+ // remove items+ if (gp.CurrentItems == &subplot.Items)+ gp.CurrentItems = nullptr;+ // reset the plot items for the next frame (TODO: put this elsewhere)+ for (int i = 0; i < subplot.Items.GetItemCount(); ++i) {+ subplot.Items.GetItemByIndex(i)->SeenThisFrame = false;+ }+ // pop id+ ImGui::PopID();+ // set DC back correctly+ GImGui->CurrentWindow->DC.CursorPos = subplot.FrameRect.Min;+ ImGui::Dummy(subplot.FrameRect.GetSize());+ ResetCtxForNextSubplot(GImPlot);++}++//-----------------------------------------------------------------------------+// [SECTION] Plot Utils+//-----------------------------------------------------------------------------++void SetAxis(ImAxis axis) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "SetAxis() needs to be called between BeginPlot() and EndPlot()!");+ IM_ASSERT_USER_ERROR(axis >= ImAxis_X1 && axis < ImAxis_COUNT, "Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(gp.CurrentPlot->Axes[axis].Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ SetupLock();+ if (axis < ImAxis_Y1)+ gp.CurrentPlot->CurrentX = axis;+ else+ gp.CurrentPlot->CurrentY = axis;+}++void SetAxes(ImAxis x_idx, ImAxis y_idx) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "SetAxes() needs to be called between BeginPlot() and EndPlot()!");+ IM_ASSERT_USER_ERROR(x_idx >= ImAxis_X1 && x_idx < ImAxis_Y1, "X-Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(y_idx >= ImAxis_Y1 && y_idx < ImAxis_COUNT, "Y-Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(gp.CurrentPlot->Axes[x_idx].Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ IM_ASSERT_USER_ERROR(gp.CurrentPlot->Axes[y_idx].Enabled, "Axis is not enabled! Did you forget to call SetupAxis()?");+ SetupLock();+ gp.CurrentPlot->CurrentX = x_idx;+ gp.CurrentPlot->CurrentY = y_idx;+}++ImPlotPoint PixelsToPlot(float x, float y, ImAxis x_idx, ImAxis y_idx) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "PixelsToPlot() needs to be called between BeginPlot() and EndPlot()!");+ IM_ASSERT_USER_ERROR(x_idx == IMPLOT_AUTO || (x_idx >= ImAxis_X1 && x_idx < ImAxis_Y1), "X-Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(y_idx == IMPLOT_AUTO || (y_idx >= ImAxis_Y1 && y_idx < ImAxis_COUNT), "Y-Axis index out of bounds!");+ SetupLock();+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& x_axis = x_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentX] : plot.Axes[x_idx];+ ImPlotAxis& y_axis = y_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentY] : plot.Axes[y_idx];+ return ImPlotPoint( x_axis.PixelsToPlot(x), y_axis.PixelsToPlot(y) );+}++ImPlotPoint PixelsToPlot(const ImVec2& pix, ImAxis x_idx, ImAxis y_idx) {+ return PixelsToPlot(pix.x, pix.y, x_idx, y_idx);+}++ImVec2 PlotToPixels(double x, double y, ImAxis x_idx, ImAxis y_idx) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "PlotToPixels() needs to be called between BeginPlot() and EndPlot()!");+ IM_ASSERT_USER_ERROR(x_idx == IMPLOT_AUTO || (x_idx >= ImAxis_X1 && x_idx < ImAxis_Y1), "X-Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(y_idx == IMPLOT_AUTO || (y_idx >= ImAxis_Y1 && y_idx < ImAxis_COUNT), "Y-Axis index out of bounds!");+ SetupLock();+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& x_axis = x_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentX] : plot.Axes[x_idx];+ ImPlotAxis& y_axis = y_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentY] : plot.Axes[y_idx];+ return ImVec2( x_axis.PlotToPixels(x), y_axis.PlotToPixels(y) );+}++ImVec2 PlotToPixels(const ImPlotPoint& plt, ImAxis x_idx, ImAxis y_idx) {+ return PlotToPixels(plt.x, plt.y, x_idx, y_idx);+}++ImVec2 GetPlotPos() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "GetPlotPos() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return gp.CurrentPlot->PlotRect.Min;+}++ImVec2 GetPlotSize() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "GetPlotSize() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return gp.CurrentPlot->PlotRect.GetSize();+}++ImPlotPoint GetPlotMousePos(ImAxis x_idx, ImAxis y_idx) {+ IM_ASSERT_USER_ERROR(GImPlot->CurrentPlot != nullptr, "GetPlotMousePos() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return PixelsToPlot(ImGui::GetMousePos(), x_idx, y_idx);+}++ImPlotRect GetPlotLimits(ImAxis x_idx, ImAxis y_idx) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "GetPlotLimits() needs to be called between BeginPlot() and EndPlot()!");+ IM_ASSERT_USER_ERROR(x_idx == IMPLOT_AUTO || (x_idx >= ImAxis_X1 && x_idx < ImAxis_Y1), "X-Axis index out of bounds!");+ IM_ASSERT_USER_ERROR(y_idx == IMPLOT_AUTO || (y_idx >= ImAxis_Y1 && y_idx < ImAxis_COUNT), "Y-Axis index out of bounds!");+ SetupLock();+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& x_axis = x_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentX] : plot.Axes[x_idx];+ ImPlotAxis& y_axis = y_idx == IMPLOT_AUTO ? plot.Axes[plot.CurrentY] : plot.Axes[y_idx];+ ImPlotRect limits;+ limits.X = x_axis.Range;+ limits.Y = y_axis.Range;+ return limits;+}++bool IsPlotHovered() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "IsPlotHovered() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return gp.CurrentPlot->Hovered;+}++bool IsAxisHovered(ImAxis axis) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "IsPlotXAxisHovered() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return gp.CurrentPlot->Axes[axis].Hovered;+}++bool IsSubplotsHovered() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentSubplot != nullptr, "IsSubplotsHovered() needs to be called between BeginSubplots() and EndSubplots()!");+ return gp.CurrentSubplot->FrameHovered;+}++bool IsPlotSelected() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "IsPlotSelected() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ return gp.CurrentPlot->Selected;+}++ImPlotRect GetPlotSelection(ImAxis x_idx, ImAxis y_idx) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "GetPlotSelection() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ ImPlotPlot& plot = *gp.CurrentPlot;+ if (!plot.Selected)+ return ImPlotRect(0,0,0,0);+ ImPlotPoint p1 = PixelsToPlot(plot.SelectRect.Min + plot.PlotRect.Min, x_idx, y_idx);+ ImPlotPoint p2 = PixelsToPlot(plot.SelectRect.Max + plot.PlotRect.Min, x_idx, y_idx);+ ImPlotRect result;+ result.X.Min = ImMin(p1.x, p2.x);+ result.X.Max = ImMax(p1.x, p2.x);+ result.Y.Min = ImMin(p1.y, p2.y);+ result.Y.Max = ImMax(p1.y, p2.y);+ return result;+}++void CancelPlotSelection() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "CancelPlotSelection() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ ImPlotPlot& plot = *gp.CurrentPlot;+ if (plot.Selected)+ plot.Selected = plot.Selecting = false;+}++void HideNextItem(bool hidden, ImPlotCond cond) {+ ImPlotContext& gp = *GImPlot;+ gp.NextItemData.HasHidden = true;+ gp.NextItemData.Hidden = hidden;+ gp.NextItemData.HiddenCond = cond;+}++//-----------------------------------------------------------------------------+// [SECTION] Plot Tools+//-----------------------------------------------------------------------------++void Annotation(double x, double y, const ImVec4& col, const ImVec2& offset, bool clamp, bool round) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "Annotation() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ char x_buff[IMPLOT_LABEL_MAX_SIZE];+ char y_buff[IMPLOT_LABEL_MAX_SIZE];+ ImPlotAxis& x_axis = gp.CurrentPlot->Axes[gp.CurrentPlot->CurrentX];+ ImPlotAxis& y_axis = gp.CurrentPlot->Axes[gp.CurrentPlot->CurrentY];+ LabelAxisValue(x_axis, x, x_buff, sizeof(x_buff), round);+ LabelAxisValue(y_axis, y, y_buff, sizeof(y_buff), round);+ Annotation(x,y,col,offset,clamp,"%s, %s",x_buff,y_buff);+}++void AnnotationV(double x, double y, const ImVec4& col, const ImVec2& offset, bool clamp, const char* fmt, va_list args) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "Annotation() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ ImVec2 pos = PlotToPixels(x,y,IMPLOT_AUTO,IMPLOT_AUTO);+ ImU32 bg = ImGui::GetColorU32(col);+ ImU32 fg = col.w == 0 ? GetStyleColorU32(ImPlotCol_InlayText) : CalcTextColor(col);+ gp.Annotations.AppendV(pos, offset, bg, fg, clamp, fmt, args);+}++void Annotation(double x, double y, const ImVec4& col, const ImVec2& offset, bool clamp, const char* fmt, ...) {+ va_list args;+ va_start(args, fmt);+ AnnotationV(x,y,col,offset,clamp,fmt,args);+ va_end(args);+}++void TagV(ImAxis axis, double v, const ImVec4& col, const char* fmt, va_list args) {+ ImPlotContext& gp = *GImPlot;+ SetupLock();+ ImU32 bg = ImGui::GetColorU32(col);+ ImU32 fg = col.w == 0 ? GetStyleColorU32(ImPlotCol_AxisText) : CalcTextColor(col);+ gp.Tags.AppendV(axis,v,bg,fg,fmt,args);+}++void Tag(ImAxis axis, double v, const ImVec4& col, const char* fmt, ...) {+ va_list args;+ va_start(args, fmt);+ TagV(axis,v,col,fmt,args);+ va_end(args);+}++void Tag(ImAxis axis, double v, const ImVec4& color, bool round) {+ ImPlotContext& gp = *GImPlot;+ SetupLock();+ char buff[IMPLOT_LABEL_MAX_SIZE];+ ImPlotAxis& ax = gp.CurrentPlot->Axes[axis];+ LabelAxisValue(ax, v, buff, sizeof(buff), round);+ Tag(axis,v,color,"%s",buff);+}++IMPLOT_API void TagX(double x, const ImVec4& color, bool round) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagX() needs to be called between BeginPlot() and EndPlot()!");+ Tag(gp.CurrentPlot->CurrentX, x, color, round);+}++IMPLOT_API void TagX(double x, const ImVec4& color, const char* fmt, ...) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagX() needs to be called between BeginPlot() and EndPlot()!");+ va_list args;+ va_start(args, fmt);+ TagV(gp.CurrentPlot->CurrentX,x,color,fmt,args);+ va_end(args);+}++IMPLOT_API void TagXV(double x, const ImVec4& color, const char* fmt, va_list args) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagX() needs to be called between BeginPlot() and EndPlot()!");+ TagV(gp.CurrentPlot->CurrentX, x, color, fmt, args);+}++IMPLOT_API void TagY(double y, const ImVec4& color, bool round) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagY() needs to be called between BeginPlot() and EndPlot()!");+ Tag(gp.CurrentPlot->CurrentY, y, color, round);+}++IMPLOT_API void TagY(double y, const ImVec4& color, const char* fmt, ...) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagY() needs to be called between BeginPlot() and EndPlot()!");+ va_list args;+ va_start(args, fmt);+ TagV(gp.CurrentPlot->CurrentY,y,color,fmt,args);+ va_end(args);+}++IMPLOT_API void TagYV(double y, const ImVec4& color, const char* fmt, va_list args) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "TagY() needs to be called between BeginPlot() and EndPlot()!");+ TagV(gp.CurrentPlot->CurrentY, y, color, fmt, args);+}++constexpr float DRAG_GRAB_HALF_SIZE = 4.0f;++bool DragPoint(int n_id, double* x, double* y, const ImVec4& col, float radius, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ ImGui::PushID("#IMPLOT_DRAG_POINT");+ IM_ASSERT_USER_ERROR(GImPlot->CurrentPlot != nullptr, "DragPoint() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();++ if (!ImHasFlag(flags,ImPlotDragToolFlags_NoFit) && FitThisFrame()) {+ FitPoint(ImPlotPoint(*x,*y));+ }++ const bool input = !ImHasFlag(flags, ImPlotDragToolFlags_NoInputs);+ const bool show_curs = !ImHasFlag(flags, ImPlotDragToolFlags_NoCursors);+ const bool no_delay = !ImHasFlag(flags, ImPlotDragToolFlags_Delayed);+ const float grab_half_size = ImMax(DRAG_GRAB_HALF_SIZE, radius);+ const ImVec4 color = IsColorAuto(col) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : col;+ const ImU32 col32 = ImGui::ColorConvertFloat4ToU32(color);++ ImVec2 pos = PlotToPixels(*x,*y,IMPLOT_AUTO,IMPLOT_AUTO);+ const ImGuiID id = ImGui::GetCurrentWindow()->GetID(n_id);+ ImRect rect(pos.x-grab_half_size,pos.y-grab_half_size,pos.x+grab_half_size,pos.y+grab_half_size);+ bool hovered = false, held = false;++ ImGui::KeepAliveID(id);+ if (input) {+ bool clicked = ImGui::ButtonBehavior(rect,id,&hovered,&held);+ if (out_clicked) *out_clicked = clicked;+ if (out_hovered) *out_hovered = hovered;+ if (out_held) *out_held = held;+ }++ bool modified = false;+ if (held && ImGui::IsMouseDragging(0)) {+ *x = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x;+ *y = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y;+ modified = true;+ }++ PushPlotClipRect();+ ImDrawList& DrawList = *GetPlotDrawList();+ if ((hovered || held) && show_curs)+ ImGui::SetMouseCursor(ImGuiMouseCursor_Hand);+ if (modified && no_delay)+ pos = PlotToPixels(*x,*y,IMPLOT_AUTO,IMPLOT_AUTO);+ DrawList.AddCircleFilled(pos, radius, col32);+ PopPlotClipRect();++ ImGui::PopID();+ return modified;+}++bool DragLineX(int n_id, double* value, const ImVec4& col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ // ImGui::PushID("#IMPLOT_DRAG_LINE_X");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "DragLineX() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();++ if (!ImHasFlag(flags,ImPlotDragToolFlags_NoFit) && FitThisFrame()) {+ FitPointX(*value);+ }++ const bool input = !ImHasFlag(flags, ImPlotDragToolFlags_NoInputs);+ const bool show_curs = !ImHasFlag(flags, ImPlotDragToolFlags_NoCursors);+ const bool no_delay = !ImHasFlag(flags, ImPlotDragToolFlags_Delayed);+ const float grab_half_size = ImMax(DRAG_GRAB_HALF_SIZE, thickness/2);+ float yt = gp.CurrentPlot->PlotRect.Min.y;+ float yb = gp.CurrentPlot->PlotRect.Max.y;+ float x = IM_ROUND(PlotToPixels(*value,0,IMPLOT_AUTO,IMPLOT_AUTO).x);+ const ImGuiID id = ImGui::GetCurrentWindow()->GetID(n_id);+ ImRect rect(x-grab_half_size,yt,x+grab_half_size,yb);+ bool hovered = false, held = false;++ ImGui::KeepAliveID(id);+ if (input) {+ bool clicked = ImGui::ButtonBehavior(rect,id,&hovered,&held);+ if (out_clicked) *out_clicked = clicked;+ if (out_hovered) *out_hovered = hovered;+ if (out_held) *out_held = held;+ }++ if ((hovered || held) && show_curs)+ ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);++ float len = gp.Style.MajorTickLen.x;+ ImVec4 color = IsColorAuto(col) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : col;+ ImU32 col32 = ImGui::ColorConvertFloat4ToU32(color);++ bool modified = false;+ if (held && ImGui::IsMouseDragging(0)) {+ *value = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x;+ modified = true;+ }++ PushPlotClipRect();+ ImDrawList& DrawList = *GetPlotDrawList();+ if (modified && no_delay)+ x = IM_ROUND(PlotToPixels(*value,0,IMPLOT_AUTO,IMPLOT_AUTO).x);+ AddLineV(&DrawList,x,yt,yb, col32, thickness);+ AddLineV(&DrawList,x,yt,yt+len, col32, 3*thickness);+ AddLineV(&DrawList,x,yb,yb-len, col32, 3*thickness);+ PopPlotClipRect();++ // ImGui::PopID();+ return modified;+}++bool DragLineY(int n_id, double* value, const ImVec4& col, float thickness, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ ImGui::PushID("#IMPLOT_DRAG_LINE_Y");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "DragLineY() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();++ if (!ImHasFlag(flags,ImPlotDragToolFlags_NoFit) && FitThisFrame()) {+ FitPointY(*value);+ }++ const bool input = !ImHasFlag(flags, ImPlotDragToolFlags_NoInputs);+ const bool show_curs = !ImHasFlag(flags, ImPlotDragToolFlags_NoCursors);+ const bool no_delay = !ImHasFlag(flags, ImPlotDragToolFlags_Delayed);+ const float grab_half_size = ImMax(DRAG_GRAB_HALF_SIZE, thickness/2);+ float xl = gp.CurrentPlot->PlotRect.Min.x;+ float xr = gp.CurrentPlot->PlotRect.Max.x;+ float y = IM_ROUND(PlotToPixels(0, *value,IMPLOT_AUTO,IMPLOT_AUTO).y);++ const ImGuiID id = ImGui::GetCurrentWindow()->GetID(n_id);+ ImRect rect(xl,y-grab_half_size,xr,y+grab_half_size);+ bool hovered = false, held = false;++ ImGui::KeepAliveID(id);+ if (input) {+ bool clicked = ImGui::ButtonBehavior(rect,id,&hovered,&held);+ if (out_clicked) *out_clicked = clicked;+ if (out_hovered) *out_hovered = hovered;+ if (out_held) *out_held = held;+ }++ if ((hovered || held) && show_curs)+ ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS);++ float len = gp.Style.MajorTickLen.y;+ ImVec4 color = IsColorAuto(col) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : col;+ ImU32 col32 = ImGui::ColorConvertFloat4ToU32(color);++ bool modified = false;+ if (held && ImGui::IsMouseDragging(0)) {+ *value = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y;+ modified = true;+ }++ PushPlotClipRect();+ ImDrawList& DrawList = *GetPlotDrawList();+ if (modified && no_delay)+ y = IM_ROUND(PlotToPixels(0, *value,IMPLOT_AUTO,IMPLOT_AUTO).y);+ AddLineH(&DrawList,xl,xr,y, col32, thickness);+ AddLineH(&DrawList,xl,xl+len,y, col32, 3*thickness);+ AddLineH(&DrawList,xr,xr-len,y, col32, 3*thickness);+ PopPlotClipRect();++ ImGui::PopID();+ return modified;+}++bool DragRect(int n_id, double* x_min, double* y_min, double* x_max, double* y_max, const ImVec4& col, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ ImGui::PushID("#IMPLOT_DRAG_RECT");+ IM_ASSERT_USER_ERROR(GImPlot->CurrentPlot != nullptr, "DragRect() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();++ if (!ImHasFlag(flags,ImPlotDragToolFlags_NoFit) && FitThisFrame()) {+ FitPoint(ImPlotPoint(*x_min,*y_min));+ FitPoint(ImPlotPoint(*x_max,*y_max));+ }++ const bool input = !ImHasFlag(flags, ImPlotDragToolFlags_NoInputs);+ const bool show_curs = !ImHasFlag(flags, ImPlotDragToolFlags_NoCursors);+ const bool no_delay = !ImHasFlag(flags, ImPlotDragToolFlags_Delayed);+ bool h[] = {true,false,true,false};+ double* x[] = {x_min,x_max,x_max,x_min};+ double* y[] = {y_min,y_min,y_max,y_max};+ ImVec2 p[4];+ for (int i = 0; i < 4; ++i)+ p[i] = PlotToPixels(*x[i],*y[i],IMPLOT_AUTO,IMPLOT_AUTO);+ ImVec2 pc = PlotToPixels((*x_min+*x_max)/2,(*y_min+*y_max)/2,IMPLOT_AUTO,IMPLOT_AUTO);+ ImRect rect(ImMin(p[0],p[2]),ImMax(p[0],p[2]));+ ImRect rect_grab = rect; rect_grab.Expand(DRAG_GRAB_HALF_SIZE);++ ImGuiMouseCursor cur[4];+ if (show_curs) {+ cur[0] = (rect.Min.x == p[0].x && rect.Min.y == p[0].y) || (rect.Max.x == p[0].x && rect.Max.y == p[0].y) ? ImGuiMouseCursor_ResizeNWSE : ImGuiMouseCursor_ResizeNESW;+ cur[1] = cur[0] == ImGuiMouseCursor_ResizeNWSE ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;+ cur[2] = cur[1] == ImGuiMouseCursor_ResizeNWSE ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;+ cur[3] = cur[2] == ImGuiMouseCursor_ResizeNWSE ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;+ }++ ImVec4 color = IsColorAuto(col) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : col;+ ImU32 col32 = ImGui::ColorConvertFloat4ToU32(color);+ color.w *= 0.25f;+ ImU32 col32_a = ImGui::ColorConvertFloat4ToU32(color);+ const ImGuiID id = ImGui::GetCurrentWindow()->GetID(n_id);++ bool modified = false;+ bool clicked = false, hovered = false, held = false;++ const bool is_movable = *x_min != *x_max || *y_min != *y_max;+ if (is_movable) {+ ImGui::KeepAliveID(id);+ if (input) {+ // middle point+ ImRect b_rect(pc.x-DRAG_GRAB_HALF_SIZE,pc.y-DRAG_GRAB_HALF_SIZE,pc.x+DRAG_GRAB_HALF_SIZE,pc.y+DRAG_GRAB_HALF_SIZE);+ clicked = ImGui::ButtonBehavior(b_rect,id,&hovered,&held);+ if (out_clicked) *out_clicked = clicked;+ if (out_hovered) *out_hovered = hovered;+ if (out_held) *out_held = held;+ }++ if ((hovered || held) && show_curs)+ ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeAll);+ if (held && ImGui::IsMouseDragging(0)) {+ for (int i = 0; i < 4; ++i) {+ ImPlotPoint pp = PixelsToPlot(p[i] + ImGui::GetIO().MouseDelta,IMPLOT_AUTO,IMPLOT_AUTO);+ *y[i] = pp.y;+ *x[i] = pp.x;+ }+ modified = true;+ }+ }++ for (int i = 0; i < 4; ++i) {+ // points+ ImRect b_rect(p[i].x - DRAG_GRAB_HALF_SIZE, p[i].y - DRAG_GRAB_HALF_SIZE, p[i].x + DRAG_GRAB_HALF_SIZE, p[i].y + DRAG_GRAB_HALF_SIZE);+ ImGuiID p_id = id + i + 1;+ ImGui::KeepAliveID(p_id);+ if (input) {+ clicked = ImGui::ButtonBehavior(b_rect,p_id,&hovered,&held);+ if (out_clicked) *out_clicked = *out_clicked || clicked;+ if (out_hovered) *out_hovered = *out_hovered || hovered;+ if (out_held) *out_held = *out_held || held;+ }+ if ((hovered || held) && show_curs)+ ImGui::SetMouseCursor(cur[i]);++ if (held && ImGui::IsMouseDragging(0)) {+ *x[i] = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x;+ *y[i] = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y;+ modified = true;+ }++ // edges+ ImVec2 e_min = ImMin(p[i],p[(i+1)%4]);+ ImVec2 e_max = ImMax(p[i],p[(i+1)%4]);+ b_rect = h[i] ? ImRect(e_min.x + DRAG_GRAB_HALF_SIZE, e_min.y - DRAG_GRAB_HALF_SIZE, e_max.x - DRAG_GRAB_HALF_SIZE, e_max.y + DRAG_GRAB_HALF_SIZE)+ : ImRect(e_min.x - DRAG_GRAB_HALF_SIZE, e_min.y + DRAG_GRAB_HALF_SIZE, e_max.x + DRAG_GRAB_HALF_SIZE, e_max.y - DRAG_GRAB_HALF_SIZE);+ ImGuiID e_id = id + i + 5;+ ImGui::KeepAliveID(e_id);+ if (input) {+ clicked = ImGui::ButtonBehavior(b_rect,e_id,&hovered,&held);+ if (out_clicked) *out_clicked = *out_clicked || clicked;+ if (out_hovered) *out_hovered = *out_hovered || hovered;+ if (out_held) *out_held = *out_held || held;+ }+ if ((hovered || held) && show_curs)+ h[i] ? ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS) : ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);+ if (held && ImGui::IsMouseDragging(0)) {+ if (h[i])+ *y[i] = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y;+ else+ *x[i] = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x;+ modified = true;+ }+ if (hovered && ImGui::IsMouseDoubleClicked(0))+ {+ ImPlotRect b = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO);+ if (h[i])+ *y[i] = ((y[i] == y_min && *y_min < *y_max) || (y[i] == y_max && *y_max < *y_min)) ? b.Y.Min : b.Y.Max;+ else+ *x[i] = ((x[i] == x_min && *x_min < *x_max) || (x[i] == x_max && *x_max < *x_min)) ? b.X.Min : b.X.Max;+ modified = true;+ }+ }++ const bool mouse_inside = rect_grab.Contains(ImGui::GetMousePos());+ const bool mouse_clicked = ImGui::IsMouseClicked(0);+ const bool mouse_down = ImGui::IsMouseDown(0);+ if (input && mouse_inside) {+ if (out_clicked) *out_clicked = *out_clicked || mouse_clicked;+ if (out_hovered) *out_hovered = true;+ if (out_held) *out_held = *out_held || mouse_down;+ }++ PushPlotClipRect();+ ImDrawList& DrawList = *GetPlotDrawList();+ if (modified && no_delay) {+ for (int i = 0; i < 4; ++i)+ p[i] = PlotToPixels(*x[i],*y[i],IMPLOT_AUTO,IMPLOT_AUTO);+ pc = PlotToPixels((*x_min+*x_max)/2,(*y_min+*y_max)/2,IMPLOT_AUTO,IMPLOT_AUTO);+ rect = ImRect(ImMin(p[0],p[2]),ImMax(p[0],p[2]));+ }+ DrawList.AddRectFilled(rect.Min, rect.Max, col32_a);+ DrawList.AddRect(rect.Min, rect.Max, col32);+ if (input && (modified || mouse_inside)) {+ DrawList.AddCircleFilled(pc,DRAG_GRAB_HALF_SIZE,col32);+ for (int i = 0; i < 4; ++i)+ DrawList.AddCircleFilled(p[i],DRAG_GRAB_HALF_SIZE,col32);+ }+ PopPlotClipRect();+ ImGui::PopID();+ return modified;+}++bool DragRect(int id, ImPlotRect* bounds, const ImVec4& col, ImPlotDragToolFlags flags, bool* out_clicked, bool* out_hovered, bool* out_held) {+ return DragRect(id, &bounds->X.Min, &bounds->Y.Min,&bounds->X.Max, &bounds->Y.Max, col, flags, out_clicked, out_hovered, out_held);+}++//-----------------------------------------------------------------------------+// [SECTION] Legend Utils and Tools+//-----------------------------------------------------------------------------++bool IsLegendEntryHovered(const char* label_id) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, "IsPlotItemHighlight() needs to be called within an itemized context!");+ SetupLock();+ ImGuiID id = ImGui::GetIDWithSeed(label_id, nullptr, gp.CurrentItems->ID);+ ImPlotItem* item = gp.CurrentItems->GetItem(id);+ return item && item->LegendHovered;+}++bool BeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_button) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, "BeginLegendPopup() needs to be called within an itemized context!");+ SetupLock();+ ImGuiWindow* window = GImGui->CurrentWindow;+ if (window->SkipItems)+ return false;+ ImGuiID id = ImGui::GetIDWithSeed(label_id, nullptr, gp.CurrentItems->ID);+ if (ImGui::IsMouseReleased(mouse_button)) {+ ImPlotItem* item = gp.CurrentItems->GetItem(id);+ if (item && item->LegendHovered)+ ImGui::OpenPopupEx(id);+ }+ return ImGui::BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings);+}++void EndLegendPopup() {+ SetupLock();+ ImGui::EndPopup();+}++void ShowAltLegend(const char* title_id, bool vertical, const ImVec2 size, bool interactable) {+ ImPlotContext& gp = *GImPlot;+ ImGuiContext &G = *GImGui;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return;+ ImDrawList &DrawList = *Window->DrawList;+ ImPlotPlot* plot = GetPlot(title_id);+ ImVec2 legend_size;+ ImVec2 default_size = gp.Style.LegendPadding * 2;+ if (plot != nullptr) {+ legend_size = CalcLegendSize(plot->Items, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, vertical);+ default_size = legend_size + gp.Style.LegendPadding * 2;+ }+ ImVec2 frame_size = ImGui::CalcItemSize(size, default_size.x, default_size.y);+ ImRect bb_frame = ImRect(Window->DC.CursorPos, Window->DC.CursorPos + frame_size);+ ImGui::ItemSize(bb_frame);+ if (!ImGui::ItemAdd(bb_frame, 0, &bb_frame))+ return;+ ImGui::RenderFrame(bb_frame.Min, bb_frame.Max, GetStyleColorU32(ImPlotCol_FrameBg), true, G.Style.FrameRounding);+ DrawList.PushClipRect(bb_frame.Min, bb_frame.Max, true);+ if (plot != nullptr) {+ const ImVec2 legend_pos = GetLocationPos(bb_frame, legend_size, 0, gp.Style.LegendPadding);+ const ImRect legend_bb(legend_pos, legend_pos + legend_size);+ interactable = interactable && bb_frame.Contains(ImGui::GetIO().MousePos);+ // render legend box+ ImU32 col_bg = GetStyleColorU32(ImPlotCol_LegendBg);+ ImU32 col_bd = GetStyleColorU32(ImPlotCol_LegendBorder);+ DrawList.AddRectFilled(legend_bb.Min, legend_bb.Max, col_bg);+ DrawList.AddRect(legend_bb.Min, legend_bb.Max, col_bd);+ // render entries+ ShowLegendEntries(plot->Items, legend_bb, interactable, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, vertical, DrawList);+ }+ DrawList.PopClipRect();+}++//-----------------------------------------------------------------------------+// [SECTION] Drag and Drop Utils+//-----------------------------------------------------------------------------++bool BeginDragDropTargetPlot() {+ SetupLock();+ ImPlotContext& gp = *GImPlot;+ ImRect rect = gp.CurrentPlot->PlotRect;+ return ImGui::BeginDragDropTargetCustom(rect, gp.CurrentPlot->ID);+}++bool BeginDragDropTargetAxis(ImAxis axis) {+ SetupLock();+ ImPlotPlot& plot = *GImPlot->CurrentPlot;+ ImPlotAxis& ax = plot.Axes[axis];+ ImRect rect = ax.HoverRect;+ rect.Expand(-3.5f);+ return ImGui::BeginDragDropTargetCustom(rect, ax.ID);+}++bool BeginDragDropTargetLegend() {+ SetupLock();+ ImPlotItemGroup& items = *GImPlot->CurrentItems;+ ImRect rect = items.Legend.RectClamped;+ return ImGui::BeginDragDropTargetCustom(rect, items.ID);+}++void EndDragDropTarget() {+ SetupLock();+ ImGui::EndDragDropTarget();+}++bool BeginDragDropSourcePlot(ImGuiDragDropFlags flags) {+ SetupLock();+ ImPlotContext& gp = *GImPlot;+ ImPlotPlot* plot = gp.CurrentPlot;+ if (GImGui->IO.KeyMods == gp.InputMap.OverrideMod || GImGui->DragDropPayload.SourceId == plot->ID)+ return ImGui::ItemAdd(plot->PlotRect, plot->ID) && ImGui::BeginDragDropSource(flags);+ return false;+}++bool BeginDragDropSourceAxis(ImAxis idx, ImGuiDragDropFlags flags) {+ SetupLock();+ ImPlotContext& gp = *GImPlot;+ ImPlotAxis& axis = gp.CurrentPlot->Axes[idx];+ if (GImGui->IO.KeyMods == gp.InputMap.OverrideMod || GImGui->DragDropPayload.SourceId == axis.ID)+ return ImGui::ItemAdd(axis.HoverRect, axis.ID) && ImGui::BeginDragDropSource(flags);+ return false;+}++bool BeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags flags) {+ SetupLock();+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, "BeginDragDropSourceItem() needs to be called within an itemized context!");+ ImGuiID item_id = ImGui::GetIDWithSeed(label_id, nullptr, gp.CurrentItems->ID);+ ImPlotItem* item = gp.CurrentItems->GetItem(item_id);+ if (item != nullptr) {+ return ImGui::ItemAdd(item->LegendHoverRect, item->ID) && ImGui::BeginDragDropSource(flags);+ }+ return false;+}++void EndDragDropSource() {+ SetupLock();+ ImGui::EndDragDropSource();+}++//-----------------------------------------------------------------------------+// [SECTION] Aligned Plots+//-----------------------------------------------------------------------------++bool BeginAlignedPlots(const char* group_id, bool vertical) {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentAlignmentH == nullptr && gp.CurrentAlignmentV == nullptr, "Mismatched BeginAlignedPlots()/EndAlignedPlots()!");+ ImGuiContext &G = *GImGui;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return false;+ const ImGuiID ID = Window->GetID(group_id);+ ImPlotAlignmentData* alignment = gp.AlignmentData.GetOrAddByKey(ID);+ if (vertical)+ gp.CurrentAlignmentV = alignment;+ else+ gp.CurrentAlignmentH = alignment;+ if (alignment->Vertical != vertical)+ alignment->Reset();+ alignment->Vertical = vertical;+ alignment->Begin();+ return true;+}++void EndAlignedPlots() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentAlignmentH != nullptr || gp.CurrentAlignmentV != nullptr, "Mismatched BeginAlignedPlots()/EndAlignedPlots()!");+ ImPlotAlignmentData* alignment = gp.CurrentAlignmentH != nullptr ? gp.CurrentAlignmentH : (gp.CurrentAlignmentV != nullptr ? gp.CurrentAlignmentV : nullptr);+ if (alignment)+ alignment->End();+ ResetCtxForNextAlignedPlots(GImPlot);+}++//-----------------------------------------------------------------------------+// [SECTION] Plot and Item Styling+//-----------------------------------------------------------------------------++ImPlotStyle& GetStyle() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ return gp.Style;+}++void PushStyleColor(ImPlotCol idx, ImU32 col) {+ ImPlotContext& gp = *GImPlot;+ ImGuiColorMod backup;+ backup.Col = (ImGuiCol)idx;+ backup.BackupValue = gp.Style.Colors[idx];+ gp.ColorModifiers.push_back(backup);+ gp.Style.Colors[idx] = ImGui::ColorConvertU32ToFloat4(col);+}++void PushStyleColor(ImPlotCol idx, const ImVec4& col) {+ ImPlotContext& gp = *GImPlot;+ ImGuiColorMod backup;+ backup.Col = (ImGuiCol)idx;+ backup.BackupValue = gp.Style.Colors[idx];+ gp.ColorModifiers.push_back(backup);+ gp.Style.Colors[idx] = col;+}++void PopStyleColor(int count) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(count <= gp.ColorModifiers.Size, "You can't pop more modifiers than have been pushed!");+ while (count > 0)+ {+ ImGuiColorMod& backup = gp.ColorModifiers.back();+ gp.Style.Colors[backup.Col] = backup.BackupValue;+ gp.ColorModifiers.pop_back();+ count--;+ }+}++void PushStyleVar(ImPlotStyleVar idx, float val) {+ ImPlotContext& gp = *GImPlot;+ const ImPlotStyleVarInfo* var_info = GetPlotStyleVarInfo(idx);+ if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1) {+ float* pvar = (float*)var_info->GetVarPtr(&gp.Style);+ gp.StyleModifiers.push_back(ImGuiStyleMod((ImGuiStyleVar)idx, *pvar));+ *pvar = val;+ return;+ }+ IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");+}++void PushStyleVar(ImPlotStyleVar idx, int val) {+ ImPlotContext& gp = *GImPlot;+ const ImPlotStyleVarInfo* var_info = GetPlotStyleVarInfo(idx);+ if (var_info->Type == ImGuiDataType_S32 && var_info->Count == 1) {+ int* pvar = (int*)var_info->GetVarPtr(&gp.Style);+ gp.StyleModifiers.push_back(ImGuiStyleMod((ImGuiStyleVar)idx, *pvar));+ *pvar = val;+ return;+ }+ else if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1) {+ float* pvar = (float*)var_info->GetVarPtr(&gp.Style);+ gp.StyleModifiers.push_back(ImGuiStyleMod((ImGuiStyleVar)idx, *pvar));+ *pvar = (float)val;+ return;+ }+ IM_ASSERT(0 && "Called PushStyleVar() int variant but variable is not a int!");+}++void PushStyleVar(ImPlotStyleVar idx, const ImVec2& val)+{+ ImPlotContext& gp = *GImPlot;+ const ImPlotStyleVarInfo* var_info = GetPlotStyleVarInfo(idx);+ if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)+ {+ ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&gp.Style);+ gp.StyleModifiers.push_back(ImGuiStyleMod((ImGuiStyleVar)idx, *pvar));+ *pvar = val;+ return;+ }+ IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");+}++void PopStyleVar(int count) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(count <= gp.StyleModifiers.Size, "You can't pop more modifiers than have been pushed!");+ while (count > 0) {+ ImGuiStyleMod& backup = gp.StyleModifiers.back();+ const ImPlotStyleVarInfo* info = GetPlotStyleVarInfo(backup.VarIdx);+ void* data = info->GetVarPtr(&gp.Style);+ if (info->Type == ImGuiDataType_Float && info->Count == 1) {+ ((float*)data)[0] = backup.BackupFloat[0];+ }+ else if (info->Type == ImGuiDataType_Float && info->Count == 2) {+ ((float*)data)[0] = backup.BackupFloat[0];+ ((float*)data)[1] = backup.BackupFloat[1];+ }+ else if (info->Type == ImGuiDataType_S32 && info->Count == 1) {+ ((int*)data)[0] = backup.BackupInt[0];+ }+ gp.StyleModifiers.pop_back();+ count--;+ }+}++ImPlotMarker NextMarker() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, "NextMarker() needs to be called between BeginPlot() and EndPlot()!");+ const int idx = gp.CurrentItems->MarkerIdx % ImPlotMarker_COUNT;+ ++gp.CurrentItems->MarkerIdx;+ return idx;+}+ +//------------------------------------------------------------------------------+// [Section] Colormaps+//------------------------------------------------------------------------------++ImPlotColormap AddColormap(const char* name, const ImVec4* colormap, int size, bool qual) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(size > 1, "The colormap size must be greater than 1!");+ IM_ASSERT_USER_ERROR(gp.ColormapData.GetIndex(name) == -1, "The colormap name has already been used!");+ ImVector<ImU32> buffer;+ buffer.resize(size);+ for (int i = 0; i < size; ++i)+ buffer[i] = ImGui::ColorConvertFloat4ToU32(colormap[i]);+ return gp.ColormapData.Append(name, buffer.Data, size, qual);+}++ImPlotColormap AddColormap(const char* name, const ImU32* colormap, int size, bool qual) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(size > 1, "The colormap size must be greater than 1!");+ IM_ASSERT_USER_ERROR(gp.ColormapData.GetIndex(name) == -1, "The colormap name has already be used!");+ return gp.ColormapData.Append(name, colormap, size, qual);+}++int GetColormapCount() {+ ImPlotContext& gp = *GImPlot;+ return gp.ColormapData.Count;+}++const char* GetColormapName(ImPlotColormap colormap) {+ ImPlotContext& gp = *GImPlot;+ return gp.ColormapData.GetName(colormap);+}++ImPlotColormap GetColormapIndex(const char* name) {+ ImPlotContext& gp = *GImPlot;+ return gp.ColormapData.GetIndex(name);+}++void PushColormap(ImPlotColormap colormap) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(colormap >= 0 && colormap < gp.ColormapData.Count, "The colormap index is invalid!");+ gp.ColormapModifiers.push_back(gp.Style.Colormap);+ gp.Style.Colormap = colormap;+}++void PushColormap(const char* name) {+ ImPlotContext& gp = *GImPlot;+ ImPlotColormap idx = gp.ColormapData.GetIndex(name);+ IM_ASSERT_USER_ERROR(idx != -1, "The colormap name is invalid!");+ PushColormap(idx);+}++void PopColormap(int count) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(count <= gp.ColormapModifiers.Size, "You can't pop more modifiers than have been pushed!");+ while (count > 0) {+ const ImPlotColormap& backup = gp.ColormapModifiers.back();+ gp.Style.Colormap = backup;+ gp.ColormapModifiers.pop_back();+ count--;+ }+}++ImU32 NextColormapColorU32() {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, "NextColormapColor() needs to be called between BeginPlot() and EndPlot()!");+ int idx = gp.CurrentItems->ColormapIdx % gp.ColormapData.GetKeyCount(gp.Style.Colormap);+ ImU32 col = gp.ColormapData.GetKeyColor(gp.Style.Colormap, idx);+ gp.CurrentItems->ColormapIdx++;+ return col;+}++ImVec4 NextColormapColor() {+ return ImGui::ColorConvertU32ToFloat4(NextColormapColorU32());+} ++int GetColormapSize(ImPlotColormap cmap) {+ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");+ return gp.ColormapData.GetKeyCount(cmap);+}++ImU32 GetColormapColorU32(int idx, ImPlotColormap cmap) {+ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");+ idx = idx % gp.ColormapData.GetKeyCount(cmap);+ return gp.ColormapData.GetKeyColor(cmap, idx);+}++ImVec4 GetColormapColor(int idx, ImPlotColormap cmap) {+ return ImGui::ColorConvertU32ToFloat4(GetColormapColorU32(idx,cmap));+}++ImU32 SampleColormapU32(float t, ImPlotColormap cmap) {+ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");+ return gp.ColormapData.LerpTable(cmap, t);+}++ImVec4 SampleColormap(float t, ImPlotColormap cmap) {+ return ImGui::ColorConvertU32ToFloat4(SampleColormapU32(t,cmap));+}++void RenderColorBar(const ImU32* colors, int size, ImDrawList& DrawList, const ImRect& bounds, bool vert, bool reversed, bool continuous) {+ const int n = continuous ? size - 1 : size;+ ImU32 col1, col2;+ if (vert) {+ const float step = bounds.GetHeight() / n;+ ImRect rect(bounds.Min.x, bounds.Min.y, bounds.Max.x, bounds.Min.y + step);+ for (int i = 0; i < n; ++i) {+ if (reversed) {+ col1 = colors[size-i-1];+ col2 = continuous ? colors[size-i-2] : col1;+ }+ else {+ col1 = colors[i];+ col2 = continuous ? colors[i+1] : col1;+ }+ DrawList.AddRectFilledMultiColor(rect.Min, rect.Max, col1, col1, col2, col2);+ rect.TranslateY(step);+ }+ }+ else {+ const float step = bounds.GetWidth() / n;+ ImRect rect(bounds.Min.x, bounds.Min.y, bounds.Min.x + step, bounds.Max.y);+ for (int i = 0; i < n; ++i) {+ if (reversed) {+ col1 = colors[size-i-1];+ col2 = continuous ? colors[size-i-2] : col1;+ }+ else {+ col1 = colors[i];+ col2 = continuous ? colors[i+1] : col1;+ }+ DrawList.AddRectFilledMultiColor(rect.Min, rect.Max, col1, col2, col2, col1);+ rect.TranslateX(step);+ }+ }+}++void ColormapScale(const char* label, double scale_min, double scale_max, const ImVec2& size, const char* format, ImPlotColormapScaleFlags flags, ImPlotColormap cmap) {+ ImGuiContext &G = *GImGui;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return;++ const ImGuiID ID = Window->GetID(label);+ ImVec2 label_size(0,0);+ if (!ImHasFlag(flags, ImPlotColormapScaleFlags_NoLabel)) {+ label_size = ImGui::CalcTextSize(label,nullptr,true);+ }++ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");++ ImVec2 frame_size = ImGui::CalcItemSize(size, 0, gp.Style.PlotDefaultSize.y);+ if (frame_size.y < gp.Style.PlotMinSize.y && size.y < 0.0f)+ frame_size.y = gp.Style.PlotMinSize.y;++ ImPlotRange range(ImMin(scale_min,scale_max), ImMax(scale_min,scale_max));+ gp.CTicker.Reset();+ Locator_Default(gp.CTicker, range, frame_size.y, true, Formatter_Default, (void*)format);++ const bool rend_label = label_size.x > 0;+ const float txt_off = gp.Style.LabelPadding.x;+ const float pad = txt_off + gp.CTicker.MaxSize.x + (rend_label ? txt_off + label_size.y : 0);+ float bar_w = 20;+ if (frame_size.x == 0)+ frame_size.x = bar_w + pad + 2 * gp.Style.PlotPadding.x;+ else {+ bar_w = frame_size.x - (pad + 2 * gp.Style.PlotPadding.x);+ if (bar_w < gp.Style.MajorTickLen.y)+ bar_w = gp.Style.MajorTickLen.y;+ }++ ImDrawList &DrawList = *Window->DrawList;+ ImRect bb_frame = ImRect(Window->DC.CursorPos, Window->DC.CursorPos + frame_size);+ ImGui::ItemSize(bb_frame);+ if (!ImGui::ItemAdd(bb_frame, ID, &bb_frame))+ return;++ ImGui::RenderFrame(bb_frame.Min, bb_frame.Max, GetStyleColorU32(ImPlotCol_FrameBg), true, G.Style.FrameRounding);++ const bool opposite = ImHasFlag(flags, ImPlotColormapScaleFlags_Opposite);+ const bool inverted = ImHasFlag(flags, ImPlotColormapScaleFlags_Invert);+ const bool reversed = scale_min > scale_max;++ float bb_grad_shift = opposite ? pad : 0;+ ImRect bb_grad(bb_frame.Min + gp.Style.PlotPadding + ImVec2(bb_grad_shift, 0),+ bb_frame.Min + ImVec2(bar_w + gp.Style.PlotPadding.x + bb_grad_shift,+ frame_size.y - gp.Style.PlotPadding.y));++ ImGui::PushClipRect(bb_frame.Min, bb_frame.Max, true);+ const ImU32 col_text = ImGui::GetColorU32(ImGuiCol_Text);++ const bool invert_scale = inverted ? (reversed ? false : true) : (reversed ? true : false);+ const float y_min = invert_scale ? bb_grad.Max.y : bb_grad.Min.y;+ const float y_max = invert_scale ? bb_grad.Min.y : bb_grad.Max.y;++ RenderColorBar(gp.ColormapData.GetKeys(cmap), gp.ColormapData.GetKeyCount(cmap), DrawList, bb_grad, true, !inverted, !gp.ColormapData.IsQual(cmap));+ for (int i = 0; i < gp.CTicker.TickCount(); ++i) {+ const double y_pos_plt = gp.CTicker.Ticks[i].PlotPos;+ const float y_pos = ImRemap((float)y_pos_plt, (float)range.Max, (float)range.Min, y_min, y_max);+ const float tick_width = gp.CTicker.Ticks[i].Major ? gp.Style.MajorTickLen.y : gp.Style.MinorTickLen.y;+ const float tick_thick = gp.CTicker.Ticks[i].Major ? gp.Style.MajorTickSize.y : gp.Style.MinorTickSize.y;+ const float tick_t = (float)((y_pos_plt - scale_min) / (scale_max - scale_min));+ const ImU32 tick_col = CalcTextColor(gp.ColormapData.LerpTable(cmap,tick_t));+ if (y_pos < bb_grad.Max.y - 2 && y_pos > bb_grad.Min.y + 2) {+ AddLineH(&DrawList,+ opposite ? (bb_grad.Min.x+1) : (bb_grad.Max.x-1),+ opposite ? (bb_grad.Min.x + tick_width) : (bb_grad.Max.x - tick_width),+ y_pos,+ tick_col,+ tick_thick);+ }+ const float txt_x = opposite ? bb_grad.Min.x - txt_off - gp.CTicker.Ticks[i].LabelSize.x : bb_grad.Max.x + txt_off;+ const float txt_y = y_pos - gp.CTicker.Ticks[i].LabelSize.y * 0.5f;+ DrawList.AddText(ImVec2(txt_x, txt_y), col_text, gp.CTicker.GetText(i));+ }++ if (rend_label) {+ const float pos_x = opposite ? bb_frame.Min.x + gp.Style.PlotPadding.x : bb_grad.Max.x + 2 * txt_off + gp.CTicker.MaxSize.x;+ const float pos_y = bb_grad.GetCenter().y + label_size.x * 0.5f;+ const char* label_end = ImGui::FindRenderedTextEnd(label);+ AddTextVertical(&DrawList,ImVec2(pos_x,pos_y),col_text,label,label_end);+ }+ DrawList.AddRect(bb_grad.Min, bb_grad.Max, GetStyleColorU32(ImPlotCol_PlotBorder));+ ImGui::PopClipRect();+}++bool ColormapSlider(const char* label, float* t, ImVec4* out, const char* format, ImPlotColormap cmap) {+ *t = ImClamp(*t,0.0f,1.0f);+ ImGuiContext &G = *GImGui;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return false;+ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");+ const ImU32* keys = gp.ColormapData.GetKeys(cmap);+ const int count = gp.ColormapData.GetKeyCount(cmap);+ const bool qual = gp.ColormapData.IsQual(cmap);+ const ImVec2 pos = ImGui::GetCurrentWindow()->DC.CursorPos;+ const float w = ImGui::CalcItemWidth();+ const float h = ImGui::GetFrameHeight();+ const ImRect rect = ImRect(pos.x,pos.y,pos.x+w,pos.y+h);+ RenderColorBar(keys,count,*ImGui::GetWindowDrawList(),rect,false,false,!qual);+ const ImU32 grab = CalcTextColor(gp.ColormapData.LerpTable(cmap,*t));+ // const ImU32 text = CalcTextColor(gp.ColormapData.LerpTable(cmap,0.5f));+ ImGui::PushStyleColor(ImGuiCol_FrameBg,IM_COL32_BLACK_TRANS);+ ImGui::PushStyleColor(ImGuiCol_FrameBgActive,IM_COL32_BLACK_TRANS);+ ImGui::PushStyleColor(ImGuiCol_FrameBgHovered,ImVec4(1,1,1,0.1f));+ ImGui::PushStyleColor(ImGuiCol_SliderGrab,grab);+ ImGui::PushStyleColor(ImGuiCol_SliderGrabActive, grab);+ ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize,2);+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding,0);+ const bool changed = ImGui::SliderFloat(label,t,0,1,format);+ ImGui::PopStyleColor(5);+ ImGui::PopStyleVar(2);+ if (out != nullptr)+ *out = ImGui::ColorConvertU32ToFloat4(gp.ColormapData.LerpTable(cmap,*t));+ return changed;+}++bool ColormapButton(const char* label, const ImVec2& size_arg, ImPlotColormap cmap) {+ ImGuiContext &G = *GImGui;+ const ImGuiStyle& style = G.Style;+ ImGuiWindow * Window = G.CurrentWindow;+ if (Window->SkipItems)+ return false;+ ImPlotContext& gp = *GImPlot;+ cmap = cmap == IMPLOT_AUTO ? gp.Style.Colormap : cmap;+ IM_ASSERT_USER_ERROR(cmap >= 0 && cmap < gp.ColormapData.Count, "Invalid colormap index!");+ const ImU32* keys = gp.ColormapData.GetKeys(cmap);+ const int count = gp.ColormapData.GetKeyCount(cmap);+ const bool qual = gp.ColormapData.IsQual(cmap);+ const ImVec2 pos = ImGui::GetCurrentWindow()->DC.CursorPos;+ const ImVec2 label_size = ImGui::CalcTextSize(label, nullptr, true);+ ImVec2 size = ImGui::CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);+ const ImRect rect = ImRect(pos.x,pos.y,pos.x+size.x,pos.y+size.y);+ RenderColorBar(keys,count,*ImGui::GetWindowDrawList(),rect,false,false,!qual);+ const ImU32 text = CalcTextColor(gp.ColormapData.LerpTable(cmap,G.Style.ButtonTextAlign.x));+ ImGui::PushStyleColor(ImGuiCol_Button,IM_COL32_BLACK_TRANS);+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered,ImVec4(1,1,1,0.1f));+ ImGui::PushStyleColor(ImGuiCol_ButtonActive,ImVec4(1,1,1,0.2f));+ ImGui::PushStyleColor(ImGuiCol_Text,text);+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding,0);+ const bool pressed = ImGui::Button(label,size);+ ImGui::PopStyleColor(4);+ ImGui::PopStyleVar(1);+ return pressed;+}++//-----------------------------------------------------------------------------+// [Section] Miscellaneous+//-----------------------------------------------------------------------------++ImPlotInputMap& GetInputMap() {+ IM_ASSERT_USER_ERROR(GImPlot != nullptr, "No current context. Did you call ImPlot::CreateContext() or ImPlot::SetCurrentContext()?");+ ImPlotContext& gp = *GImPlot;+ return gp.InputMap;+}++void MapInputDefault(ImPlotInputMap* dst) {+ ImPlotInputMap& map = dst ? *dst : GetInputMap();+ map.Pan = ImGuiMouseButton_Left;+ map.PanMod = ImGuiMod_None;+ map.Fit = ImGuiMouseButton_Left;+ map.Menu = ImGuiMouseButton_Right;+ map.Select = ImGuiMouseButton_Right;+ map.SelectMod = ImGuiMod_None;+ map.SelectCancel = ImGuiMouseButton_Left;+ map.SelectHorzMod = ImGuiMod_Alt;+ map.SelectVertMod = ImGuiMod_Shift;+ map.OverrideMod = ImGuiMod_Ctrl;+ map.ZoomMod = ImGuiMod_None;+ map.ZoomRate = 0.1f;+}++void MapInputReverse(ImPlotInputMap* dst) {+ ImPlotInputMap& map = dst ? *dst : GetInputMap();+ map.Pan = ImGuiMouseButton_Right;+ map.PanMod = ImGuiMod_None;+ map.Fit = ImGuiMouseButton_Left;+ map.Menu = ImGuiMouseButton_Right;+ map.Select = ImGuiMouseButton_Left;+ map.SelectMod = ImGuiMod_None;+ map.SelectCancel = ImGuiMouseButton_Right;+ map.SelectHorzMod = ImGuiMod_Alt;+ map.SelectVertMod = ImGuiMod_Shift;+ map.OverrideMod = ImGuiMod_Ctrl;+ map.ZoomMod = ImGuiMod_None;+ map.ZoomRate = 0.1f;+}++//-----------------------------------------------------------------------------+// [Section] Miscellaneous+//-----------------------------------------------------------------------------++void ItemIcon(const ImVec4& col) {+ ItemIcon(ImGui::ColorConvertFloat4ToU32(col));+}++void ItemIcon(ImU32 col) {+ const float txt_size = ImGui::GetTextLineHeight();+ ImVec2 size(txt_size-4,txt_size);+ ImGuiWindow* window = ImGui::GetCurrentWindow();+ ImVec2 pos = window->DC.CursorPos;+ ImGui::GetWindowDrawList()->AddRectFilled(pos + ImVec2(0,2), pos + size - ImVec2(0,2), col);+ ImGui::Dummy(size);+}++void ColormapIcon(ImPlotColormap cmap) {+ ImPlotContext& gp = *GImPlot;+ const float txt_size = ImGui::GetTextLineHeight();+ ImVec2 size(txt_size-4,txt_size);+ ImGuiWindow* window = ImGui::GetCurrentWindow();+ ImVec2 pos = window->DC.CursorPos;+ ImRect rect(pos+ImVec2(0,2),pos+size-ImVec2(0,2));+ ImDrawList& DrawList = *ImGui::GetWindowDrawList();+ RenderColorBar(gp.ColormapData.GetKeys(cmap),gp.ColormapData.GetKeyCount(cmap),DrawList,rect,false,false,!gp.ColormapData.IsQual(cmap));+ ImGui::Dummy(size);+}++ImDrawList* GetPlotDrawList() {+ return ImGui::GetWindowDrawList();+}++void PushPlotClipRect(float expand) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "PushPlotClipRect() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ ImRect rect = gp.CurrentPlot->PlotRect;+ rect.Expand(expand);+ ImGui::PushClipRect(rect.Min, rect.Max, true);+}++void PopPlotClipRect() {+ SetupLock();+ ImGui::PopClipRect();+}++static void HelpMarker(const char* desc) {+ ImGui::TextDisabled("(?)");+ if (ImGui::IsItemHovered()) {+ ImGui::BeginTooltip();+ ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);+ ImGui::TextUnformatted(desc);+ ImGui::PopTextWrapPos();+ ImGui::EndTooltip();+ }+}++bool ShowStyleSelector(const char* label)+{+ static int style_idx = -1;+ if (ImGui::Combo(label, &style_idx, "Auto\0Classic\0Dark\0Light\0"))+ {+ switch (style_idx)+ {+ case 0: StyleColorsAuto(); break;+ case 1: StyleColorsClassic(); break;+ case 2: StyleColorsDark(); break;+ case 3: StyleColorsLight(); break;+ }+ return true;+ }+ return false;+}++bool ShowColormapSelector(const char* label) {+ ImPlotContext& gp = *GImPlot;+ bool set = false;+ if (ImGui::BeginCombo(label, gp.ColormapData.GetName(gp.Style.Colormap))) {+ for (int i = 0; i < gp.ColormapData.Count; ++i) {+ const char* name = gp.ColormapData.GetName(i);+ if (ImGui::Selectable(name, gp.Style.Colormap == i)) {+ gp.Style.Colormap = i;+ ImPlot::BustItemCache();+ set = true;+ }+ }+ ImGui::EndCombo();+ }+ return set;+}++bool ShowInputMapSelector(const char* label) {+ static int map_idx = -1;+ if (ImGui::Combo(label, &map_idx, "Default\0Reversed\0"))+ {+ switch (map_idx)+ {+ case 0: MapInputDefault(); break;+ case 1: MapInputReverse(); break;+ }+ return true;+ }+ return false;+}+++void ShowStyleEditor(ImPlotStyle* ref) {+ ImPlotContext& gp = *GImPlot;+ ImPlotStyle& style = GetStyle();+ static ImPlotStyle ref_saved_style;+ // Default to using internal storage as reference+ static bool init = true;+ if (init && ref == nullptr)+ ref_saved_style = style;+ init = false;+ if (ref == nullptr)+ ref = &ref_saved_style;++ if (ImPlot::ShowStyleSelector("Colors##Selector"))+ ref_saved_style = style;++ // Save/Revert button+ if (ImGui::Button("Save Ref"))+ *ref = ref_saved_style = style;+ ImGui::SameLine();+ if (ImGui::Button("Revert Ref"))+ style = *ref;+ ImGui::SameLine();+ HelpMarker("Save/Revert in local non-persistent storage. Default Colors definition are not affected. "+ "Use \"Export\" below to save them somewhere.");+ if (ImGui::BeginTabBar("##StyleEditor")) {+ if (ImGui::BeginTabItem("Variables")) {+ ImGui::Text("Plot Styling");+ ImGui::SliderFloat2("PlotDefaultSize", (float*)&style.PlotDefaultSize, 0.0f, 1000, "%.0f");+ ImGui::SliderFloat2("PlotMinSize", (float*)&style.PlotMinSize, 0.0f, 300, "%.0f");+ ImGui::SliderFloat("PlotBorderSize", &style.PlotBorderSize, 0.0f, 2.0f, "%.0f");+ ImGui::SliderFloat("MinorAlpha", &style.MinorAlpha, 0.0f, 1.0f, "%.2f");+ ImGui::SliderFloat2("MajorTickLen", (float*)&style.MajorTickLen, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("MinorTickLen", (float*)&style.MinorTickLen, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("MajorTickSize", (float*)&style.MajorTickSize, 0.0f, 2.0f, "%.1f");+ ImGui::SliderFloat2("MinorTickSize", (float*)&style.MinorTickSize, 0.0f, 2.0f, "%.1f");+ ImGui::SliderFloat2("MajorGridSize", (float*)&style.MajorGridSize, 0.0f, 2.0f, "%.1f");+ ImGui::SliderFloat2("MinorGridSize", (float*)&style.MinorGridSize, 0.0f, 2.0f, "%.1f");+ ImGui::Text("Plot Padding");+ ImGui::SliderFloat2("PlotPadding", (float*)&style.PlotPadding, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("LabelPadding", (float*)&style.LabelPadding, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("LegendPadding", (float*)&style.LegendPadding, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("LegendInnerPadding", (float*)&style.LegendInnerPadding, 0.0f, 10.0f, "%.0f");+ ImGui::SliderFloat2("LegendSpacing", (float*)&style.LegendSpacing, 0.0f, 5.0f, "%.0f");+ ImGui::SliderFloat2("MousePosPadding", (float*)&style.MousePosPadding, 0.0f, 20.0f, "%.0f");+ ImGui::SliderFloat2("AnnotationPadding", (float*)&style.AnnotationPadding, 0.0f, 5.0f, "%.0f");+ ImGui::SliderFloat2("FitPadding", (float*)&style.FitPadding, 0, 0.2f, "%.2f");+ ImGui::SliderFloat("DigitalPadding", &style.DigitalPadding, 0.0f, 20.0f, "%.1f");+ ImGui::SliderFloat("DigitalSpacing", &style.DigitalSpacing, 0.0f, 10.0f, "%.1f");+ ImGui::EndTabItem();+ }+ if (ImGui::BeginTabItem("Colors")) {+ static int output_dest = 0;+ static bool output_only_modified = false;++ if (ImGui::Button("Export", ImVec2(75,0))) {+ if (output_dest == 0)+ ImGui::LogToClipboard();+ else+ ImGui::LogToTTY();+ ImGui::LogText("ImVec4* colors = ImPlot::GetStyle().Colors;\n");+ for (int i = 0; i < ImPlotCol_COUNT; i++) {+ const ImVec4& col = style.Colors[i];+ const char* name = ImPlot::GetStyleColorName(i);+ if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0) {+ if (IsColorAuto(i))+ ImGui::LogText("colors[ImPlotCol_%s]%*s= IMPLOT_AUTO_COL;\n",name,14 - (int)strlen(name), "");+ else+ ImGui::LogText("colors[ImPlotCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);\n",+ name, 14 - (int)strlen(name), "", col.x, col.y, col.z, col.w);+ }+ }+ ImGui::LogFinish();+ }+ ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");+ ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);++ static ImGuiTextFilter filter;+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 16);+ filter.Draw("Filter colors");++ static ImGuiColorEditFlags alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf;+#if IMGUI_VERSION_NUM < 19173+ if (ImGui::RadioButton("Opaque", alpha_flags == ImGuiColorEditFlags_None)) { alpha_flags = ImGuiColorEditFlags_None; } ImGui::SameLine();+ if (ImGui::RadioButton("Alpha", alpha_flags == ImGuiColorEditFlags_AlphaPreview)) { alpha_flags = ImGuiColorEditFlags_AlphaPreview; } ImGui::SameLine();+ if (ImGui::RadioButton("Both", alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf)) { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine();+#else+ if (ImGui::RadioButton("Opaque", alpha_flags == ImGuiColorEditFlags_AlphaOpaque)) { alpha_flags = ImGuiColorEditFlags_AlphaOpaque; } ImGui::SameLine();+ if (ImGui::RadioButton("Alpha", alpha_flags == ImGuiColorEditFlags_None)) { alpha_flags = ImGuiColorEditFlags_None; } ImGui::SameLine();+ if (ImGui::RadioButton("Both", alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf)) { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine();+#endif+ HelpMarker(+ "In the color list:\n"+ "Left-click on colored square to open color picker,\n"+ "Right-click to open edit options menu.");+ ImGui::Separator();+ ImGui::PushItemWidth(-160);+ for (int i = 0; i < ImPlotCol_COUNT; i++) {+ const char* name = ImPlot::GetStyleColorName(i);+ if (!filter.PassFilter(name))+ continue;+ ImGui::PushID(i);+ ImVec4 temp = GetStyleColorVec4(i);+ const bool is_auto = IsColorAuto(i);+ if (!is_auto)+ ImGui::PushStyleVar(ImGuiStyleVar_Alpha, 0.25f);+ if (ImGui::Button("Auto")) {+ if (is_auto)+ style.Colors[i] = temp;+ else+ style.Colors[i] = IMPLOT_AUTO_COL;+ BustItemCache();+ }+ if (!is_auto)+ ImGui::PopStyleVar();+ ImGui::SameLine();+ if (ImGui::ColorEdit4(name, &temp.x, ImGuiColorEditFlags_NoInputs | alpha_flags)) {+ style.Colors[i] = temp;+ BustItemCache();+ }+ if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0) {+ ImGui::SameLine(175); if (ImGui::Button("Save")) { ref->Colors[i] = style.Colors[i]; }+ ImGui::SameLine(); if (ImGui::Button("Revert")) {+ style.Colors[i] = ref->Colors[i];+ BustItemCache();+ }+ }+ ImGui::PopID();+ }+ ImGui::PopItemWidth();+ ImGui::Separator();+ ImGui::Text("Colors that are set to Auto (i.e. IMPLOT_AUTO_COL) will\n"+ "be automatically deduced from your ImGui style.");+ ImGui::EndTabItem();+ }+ if (ImGui::BeginTabItem("Colormaps")) {+ static int output_dest = 0;+ if (ImGui::Button("Export", ImVec2(75,0))) {+ if (output_dest == 0)+ ImGui::LogToClipboard();+ else+ ImGui::LogToTTY();+ int size = GetColormapSize();+ const char* name = GetColormapName(gp.Style.Colormap);+ ImGui::LogText("static const ImU32 %s_Data[%d] = {\n", name, size);+ for (int i = 0; i < size; ++i) {+ ImU32 col = GetColormapColorU32(i,gp.Style.Colormap);+ ImGui::LogText(" %u%s\n", col, i == size - 1 ? "" : ",");+ }+ ImGui::LogText("};\nImPlotColormap %s = ImPlot::AddColormap(\"%s\", %s_Data, %d);", name, name, name, size);+ ImGui::LogFinish();+ }+ ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");+ ImGui::SameLine();+ static bool edit = false;+ ImGui::Checkbox("Edit Mode",&edit);++ // built-in/added+ ImGui::Separator();+ for (int i = 0; i < gp.ColormapData.Count; ++i) {+ ImGui::PushID(i);+ int size = gp.ColormapData.GetKeyCount(i);+ bool selected = i == gp.Style.Colormap;++ const char* name = GetColormapName(i);+ if (!selected)+ ImGui::PushStyleVar(ImGuiStyleVar_Alpha, 0.25f);+ if (ImGui::Button(name, ImVec2(100,0))) {+ gp.Style.Colormap = i;+ BustItemCache();+ }+ if (!selected)+ ImGui::PopStyleVar();+ ImGui::SameLine();+ ImGui::BeginGroup();+ if (edit) {+ for (int c = 0; c < size; ++c) {+ ImGui::PushID(c);+ ImVec4 col4 = ImGui::ColorConvertU32ToFloat4(gp.ColormapData.GetKeyColor(i,c));+ if (ImGui::ColorEdit4("",&col4.x,ImGuiColorEditFlags_NoInputs)) {+ ImU32 col32 = ImGui::ColorConvertFloat4ToU32(col4);+ gp.ColormapData.SetKeyColor(i,c,col32);+ BustItemCache();+ }+ if ((c + 1) % 12 != 0 && c != size -1)+ ImGui::SameLine();+ ImGui::PopID();+ }+ }+ else {+ if (ImPlot::ColormapButton("##",ImVec2(-1,0),i))+ edit = true;+ }+ ImGui::EndGroup();+ ImGui::PopID();+ }+++ static ImVector<ImVec4> custom;+ if (custom.Size == 0) {+ custom.push_back(ImVec4(1,0,0,1));+ custom.push_back(ImVec4(0,1,0,1));+ custom.push_back(ImVec4(0,0,1,1));+ }+ ImGui::Separator();+ ImGui::BeginGroup();+ static char name[16] = "MyColormap";+++ if (ImGui::Button("+", ImVec2((100 - ImGui::GetStyle().ItemSpacing.x)/2,0)))+ custom.push_back(ImVec4(0,0,0,1));+ ImGui::SameLine();+ if (ImGui::Button("-", ImVec2((100 - ImGui::GetStyle().ItemSpacing.x)/2,0)) && custom.Size > 2)+ custom.pop_back();+ ImGui::SetNextItemWidth(100);+ ImGui::InputText("##Name",name,16,ImGuiInputTextFlags_CharsNoBlank);+ static bool qual = true;+ ImGui::Checkbox("Qualitative",&qual);+ if (ImGui::Button("Add", ImVec2(100, 0)) && gp.ColormapData.GetIndex(name)==-1)+ AddColormap(name,custom.Data,custom.Size,qual);++ ImGui::EndGroup();+ ImGui::SameLine();+ ImGui::BeginGroup();+ for (int c = 0; c < custom.Size; ++c) {+ ImGui::PushID(c);+ if (ImGui::ColorEdit4("##Col1", &custom[c].x, ImGuiColorEditFlags_NoInputs)) {++ }+ if ((c + 1) % 12 != 0)+ ImGui::SameLine();+ ImGui::PopID();+ }+ ImGui::EndGroup();+++ ImGui::EndTabItem();+ }+ ImGui::EndTabBar();+ }+}++void ShowUserGuide() {+ ImGui::BulletText("Left-click drag within the plot area to pan X and Y axes.");+ ImGui::Indent();+ ImGui::BulletText("Left-click drag on axis labels to pan an individual axis.");+ ImGui::Unindent();+ ImGui::BulletText("Scroll in the plot area to zoom both X and Y axes.");+ ImGui::Indent();+ ImGui::BulletText("Scroll on axis labels to zoom an individual axis.");+ ImGui::Unindent();+ ImGui::BulletText("Right-click drag to box select data.");+ ImGui::Indent();+ ImGui::BulletText("Hold Alt to expand box selection horizontally.");+ ImGui::BulletText("Hold Shift to expand box selection vertically.");+ ImGui::BulletText("Left-click while box selecting to cancel the selection.");+ ImGui::Unindent();+ ImGui::BulletText("Double left-click to fit all visible data.");+ ImGui::Indent();+ ImGui::BulletText("Double left-click axis labels to fit the individual axis.");+ ImGui::Unindent();+ ImGui::BulletText("Right-click open the full plot context menu.");+ ImGui::Indent();+ ImGui::BulletText("Right-click axis labels to open an individual axis context menu.");+ ImGui::Unindent();+ ImGui::BulletText("Click legend label icons to show/hide plot items.");+}++void ShowTicksMetrics(const ImPlotTicker& ticker) {+ ImGui::BulletText("Size: %d", ticker.TickCount());+ ImGui::BulletText("MaxSize: [%f,%f]", ticker.MaxSize.x, ticker.MaxSize.y);+}++void ShowAxisMetrics(const ImPlotPlot& plot, const ImPlotAxis& axis) {+ ImGui::BulletText("Label: %s", axis.LabelOffset == -1 ? "[none]" : plot.GetAxisLabel(axis));+ ImGui::BulletText("Flags: 0x%08X", axis.Flags);+ ImGui::BulletText("Range: [%f,%f]",axis.Range.Min, axis.Range.Max);+ ImGui::BulletText("Pixels: %f", axis.PixelSize());+ ImGui::BulletText("Aspect: %f", axis.GetAspect());+ ImGui::BulletText(axis.OrthoAxis == nullptr ? "OrthoAxis: NULL" : "OrthoAxis: 0x%08X", axis.OrthoAxis->ID);+ ImGui::BulletText("LinkedMin: %p", (void*)axis.LinkedMin);+ ImGui::BulletText("LinkedMax: %p", (void*)axis.LinkedMax);+ ImGui::BulletText("HasRange: %s", axis.HasRange ? "true" : "false");+ ImGui::BulletText("Hovered: %s", axis.Hovered ? "true" : "false");+ ImGui::BulletText("Held: %s", axis.Held ? "true" : "false");++ if (ImGui::TreeNode("Transform")) {+ ImGui::BulletText("PixelMin: %f", axis.PixelMin);+ ImGui::BulletText("PixelMax: %f", axis.PixelMax);+ ImGui::BulletText("ScaleToPixel: %f", axis.ScaleToPixel);+ ImGui::BulletText("ScaleMax: %f", axis.ScaleMax);+ ImGui::TreePop();+ }++ if (ImGui::TreeNode("Ticks")) {+ ShowTicksMetrics(axis.Ticker);+ ImGui::TreePop();+ }+}++void ShowMetricsWindow(bool* p_popen) {++ static bool show_plot_rects = false;+ static bool show_axes_rects = false;+ static bool show_axis_rects = false;+ static bool show_canvas_rects = false;+ static bool show_frame_rects = false;+ static bool show_subplot_frame_rects = false;+ static bool show_subplot_grid_rects = false;+ static bool show_legend_rects = false;++ ImDrawList& fg = *ImGui::GetForegroundDrawList();++ ImPlotContext& gp = *GImPlot;+ // ImGuiContext& g = *GImGui;+ ImGuiIO& io = ImGui::GetIO();+ ImGui::Begin("ImPlot Metrics", p_popen);+ ImGui::Text("ImPlot " IMPLOT_VERSION);+ ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);+ ImGui::Text("Mouse Position: [%.0f,%.0f]", io.MousePos.x, io.MousePos.y);+ ImGui::Separator();+ if (ImGui::TreeNode("Tools")) {+ if (ImGui::Button("Bust Plot Cache"))+ BustPlotCache();+ ImGui::SameLine();+ if (ImGui::Button("Bust Item Cache"))+ BustItemCache();+ ImGui::Checkbox("Show Frame Rects", &show_frame_rects);+ ImGui::Checkbox("Show Canvas Rects",&show_canvas_rects);+ ImGui::Checkbox("Show Plot Rects", &show_plot_rects);+ ImGui::Checkbox("Show Axes Rects", &show_axes_rects);+ ImGui::Checkbox("Show Axis Rects", &show_axis_rects);+ ImGui::Checkbox("Show Subplot Frame Rects", &show_subplot_frame_rects);+ ImGui::Checkbox("Show Subplot Grid Rects", &show_subplot_grid_rects);+ ImGui::Checkbox("Show Legend Rects", &show_legend_rects);+ ImGui::TreePop();+ }+ const int n_plots = gp.Plots.GetBufSize();+ const int n_subplots = gp.Subplots.GetBufSize();+ // render rects+ for (int p = 0; p < n_plots; ++p) {+ ImPlotPlot* plot = gp.Plots.GetByIndex(p);+ if (show_frame_rects)+ fg.AddRect(plot->FrameRect.Min, plot->FrameRect.Max, IM_COL32(255,0,255,255));+ if (show_canvas_rects)+ fg.AddRect(plot->CanvasRect.Min, plot->CanvasRect.Max, IM_COL32(0,255,255,255));+ if (show_plot_rects)+ fg.AddRect(plot->PlotRect.Min, plot->PlotRect.Max, IM_COL32(255,255,0,255));+ if (show_axes_rects)+ fg.AddRect(plot->AxesRect.Min, plot->AxesRect.Max, IM_COL32(0,255,128,255));+ if (show_axis_rects) {+ for (int i = 0; i < ImAxis_COUNT; ++i) {+ if (plot->Axes[i].Enabled)+ fg.AddRect(plot->Axes[i].HoverRect.Min, plot->Axes[i].HoverRect.Max, IM_COL32(0,255,0,255));+ }+ }+ if (show_legend_rects && plot->Items.GetLegendCount() > 0) {+ fg.AddRect(plot->Items.Legend.Rect.Min, plot->Items.Legend.Rect.Max, IM_COL32(255,192,0,255));+ fg.AddRect(plot->Items.Legend.RectClamped.Min, plot->Items.Legend.RectClamped.Max, IM_COL32(255,128,0,255));+ }+ }+ for (int p = 0; p < n_subplots; ++p) {+ ImPlotSubplot* subplot = gp.Subplots.GetByIndex(p);+ if (show_subplot_frame_rects)+ fg.AddRect(subplot->FrameRect.Min, subplot->FrameRect.Max, IM_COL32(255,0,0,255));+ if (show_subplot_grid_rects)+ fg.AddRect(subplot->GridRect.Min, subplot->GridRect.Max, IM_COL32(0,0,255,255));+ if (show_legend_rects && subplot->Items.GetLegendCount() > 0) {+ fg.AddRect(subplot->Items.Legend.Rect.Min, subplot->Items.Legend.Rect.Max, IM_COL32(255,192,0,255));+ fg.AddRect(subplot->Items.Legend.RectClamped.Min, subplot->Items.Legend.RectClamped.Max, IM_COL32(255,128,0,255));+ }+ }+ if (ImGui::TreeNode("Plots","Plots (%d)", n_plots)) {+ for (int p = 0; p < n_plots; ++p) {+ // plot+ ImPlotPlot& plot = *gp.Plots.GetByIndex(p);+ ImGui::PushID(p);+ if (ImGui::TreeNode("Plot", "Plot [0x%08X]", plot.ID)) {+ int n_items = plot.Items.GetItemCount();+ if (ImGui::TreeNode("Items", "Items (%d)", n_items)) {+ for (int i = 0; i < n_items; ++i) {+ ImPlotItem* item = plot.Items.GetItemByIndex(i);+ ImGui::PushID(i);+ if (ImGui::TreeNode("Item", "Item [0x%08X]", item->ID)) {+ ImGui::Bullet(); ImGui::Checkbox("Show", &item->Show);+ ImGui::Bullet();+ ImVec4 temp = ImGui::ColorConvertU32ToFloat4(item->Color);+ if (ImGui::ColorEdit4("Color",&temp.x, ImGuiColorEditFlags_NoInputs))+ item->Color = ImGui::ColorConvertFloat4ToU32(temp);+ ImGui::BulletText("Marker: %s", GetMarkerName(item->Marker));+ ImGui::BulletText("NameOffset: %d",item->NameOffset);+ ImGui::BulletText("Name: %s", item->NameOffset != -1 ? plot.Items.Legend.Labels.Buf.Data + item->NameOffset : "N/A");+ ImGui::BulletText("Hovered: %s",item->LegendHovered ? "true" : "false");+ ImGui::TreePop();+ }+ ImGui::PopID();+ }+ ImGui::TreePop();+ }+ char buff[16];+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ ImFormatString(buff,16,"X-Axis %d", i+1);+ if (plot.XAxis(i).Enabled && ImGui::TreeNode(buff, "X-Axis %d [0x%08X]", i+1, plot.XAxis(i).ID)) {+ ShowAxisMetrics(plot, plot.XAxis(i));+ ImGui::TreePop();+ }+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ ImFormatString(buff,16,"Y-Axis %d", i+1);+ if (plot.YAxis(i).Enabled && ImGui::TreeNode(buff, "Y-Axis %d [0x%08X]", i+1, plot.YAxis(i).ID)) {+ ShowAxisMetrics(plot, plot.YAxis(i));+ ImGui::TreePop();+ }+ }+ ImGui::BulletText("Title: %s", plot.HasTitle() ? plot.GetTitle() : "none");+ ImGui::BulletText("Flags: 0x%08X", plot.Flags);+ ImGui::BulletText("Initialized: %s", plot.Initialized ? "true" : "false");+ ImGui::BulletText("Selecting: %s", plot.Selecting ? "true" : "false");+ ImGui::BulletText("Selected: %s", plot.Selected ? "true" : "false");+ ImGui::BulletText("Hovered: %s", plot.Hovered ? "true" : "false");+ ImGui::BulletText("Held: %s", plot.Held ? "true" : "false");+ ImGui::BulletText("LegendHovered: %s", plot.Items.Legend.Hovered ? "true" : "false");+ ImGui::BulletText("ContextLocked: %s", plot.ContextLocked ? "true" : "false");+ ImGui::TreePop();+ }+ ImGui::PopID();+ }+ ImGui::TreePop();+ }++ if (ImGui::TreeNode("Subplots","Subplots (%d)", n_subplots)) {+ for (int p = 0; p < n_subplots; ++p) {+ // plot+ ImPlotSubplot& plot = *gp.Subplots.GetByIndex(p);+ ImGui::PushID(p);+ if (ImGui::TreeNode("Subplot", "Subplot [0x%08X]", plot.ID)) {+ int n_items = plot.Items.GetItemCount();+ if (ImGui::TreeNode("Items", "Items (%d)", n_items)) {+ for (int i = 0; i < n_items; ++i) {+ ImPlotItem* item = plot.Items.GetItemByIndex(i);+ ImGui::PushID(i);+ if (ImGui::TreeNode("Item", "Item [0x%08X]", item->ID)) {+ ImGui::Bullet(); ImGui::Checkbox("Show", &item->Show);+ ImGui::Bullet();+ ImVec4 temp = ImGui::ColorConvertU32ToFloat4(item->Color);+ if (ImGui::ColorEdit4("Color",&temp.x, ImGuiColorEditFlags_NoInputs))+ item->Color = ImGui::ColorConvertFloat4ToU32(temp);++ ImGui::BulletText("NameOffset: %d",item->NameOffset);+ ImGui::BulletText("Name: %s", item->NameOffset != -1 ? plot.Items.Legend.Labels.Buf.Data + item->NameOffset : "N/A");+ ImGui::BulletText("Hovered: %s",item->LegendHovered ? "true" : "false");+ ImGui::TreePop();+ }+ ImGui::PopID();+ }+ ImGui::TreePop();+ }+ ImGui::BulletText("Flags: 0x%08X", plot.Flags);+ ImGui::BulletText("FrameHovered: %s", plot.FrameHovered ? "true" : "false");+ ImGui::BulletText("LegendHovered: %s", plot.Items.Legend.Hovered ? "true" : "false");+ ImGui::TreePop();+ }+ ImGui::PopID();+ }+ ImGui::TreePop();+ }+ if (ImGui::TreeNode("Colormaps")) {+ ImGui::BulletText("Colormaps: %d", gp.ColormapData.Count);+ ImGui::BulletText("Memory: %d bytes", gp.ColormapData.Tables.Size * 4);+ if (ImGui::TreeNode("Data")) {+ for (int m = 0; m < gp.ColormapData.Count; ++m) {+ if (ImGui::TreeNode(gp.ColormapData.GetName(m))) {+ int count = gp.ColormapData.GetKeyCount(m);+ int size = gp.ColormapData.GetTableSize(m);+ bool qual = gp.ColormapData.IsQual(m);+ ImGui::BulletText("Qualitative: %s", qual ? "true" : "false");+ ImGui::BulletText("Key Count: %d", count);+ ImGui::BulletText("Table Size: %d", size);+ ImGui::Indent();++ static float t = 0.5;+ ImVec4 samp;+ float wid = 32 * 10 - ImGui::GetFrameHeight() - ImGui::GetStyle().ItemSpacing.x;+ ImGui::SetNextItemWidth(wid);+ ImPlot::ColormapSlider("##Sample",&t,&samp,"%.3f",m);+ ImGui::SameLine();+ ImGui::ColorButton("Sampler",samp);+ ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0,0,0,0));+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));+ for (int c = 0; c < size; ++c) {+ ImVec4 col = ImGui::ColorConvertU32ToFloat4(gp.ColormapData.GetTableColor(m,c));+ ImGui::PushID(m*1000+c);+ ImGui::ColorButton("",col,0,ImVec2(10,10));+ ImGui::PopID();+ if ((c + 1) % 32 != 0 && c != size - 1)+ ImGui::SameLine();+ }+ ImGui::PopStyleVar();+ ImGui::PopStyleColor();+ ImGui::Unindent();+ ImGui::TreePop();+ }+ }+ ImGui::TreePop();+ }+ ImGui::TreePop();+ }+ ImGui::End();+}++bool ShowDatePicker(const char* id, int* level, ImPlotTime* t, const ImPlotTime* t1, const ImPlotTime* t2) {++ ImGui::PushID(id);+ ImGui::BeginGroup();++ ImGuiStyle& style = ImGui::GetStyle();+ ImVec4 col_txt = style.Colors[ImGuiCol_Text];+ ImVec4 col_dis = style.Colors[ImGuiCol_TextDisabled];+ ImVec4 col_btn = style.Colors[ImGuiCol_Button];+ ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0,0,0,0));+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0));++ const float ht = ImGui::GetFrameHeight();+ ImVec2 cell_size(ht*1.25f,ht);+ char buff[32];+ bool clk = false;+ tm& Tm = GImPlot->Tm;++ const int min_yr = 1970;+ const int max_yr = 2999;++ // t1 parts+ int t1_mo = 0; int t1_md = 0; int t1_yr = 0;+ if (t1 != nullptr) {+ GetTime(*t1,&Tm);+ t1_mo = Tm.tm_mon;+ t1_md = Tm.tm_mday;+ t1_yr = Tm.tm_year + 1900;+ }++ // t2 parts+ int t2_mo = 0; int t2_md = 0; int t2_yr = 0;+ if (t2 != nullptr) {+ GetTime(*t2,&Tm);+ t2_mo = Tm.tm_mon;+ t2_md = Tm.tm_mday;+ t2_yr = Tm.tm_year + 1900;+ }++ // day widget+ if (*level == 0) {+ *t = FloorTime(*t, ImPlotTimeUnit_Day);+ GetTime(*t, &Tm);+ const int this_year = Tm.tm_year + 1900;+ const int last_year = this_year - 1;+ const int next_year = this_year + 1;+ const int this_mon = Tm.tm_mon;+ const int last_mon = this_mon == 0 ? 11 : this_mon - 1;+ const int next_mon = this_mon == 11 ? 0 : this_mon + 1;+ const int days_this_mo = GetDaysInMonth(this_year, this_mon);+ const int days_last_mo = GetDaysInMonth(this_mon == 0 ? last_year : this_year, last_mon);+ ImPlotTime t_first_mo = FloorTime(*t,ImPlotTimeUnit_Mo);+ GetTime(t_first_mo,&Tm);+ const int first_wd = Tm.tm_wday;+ // month year+ ImFormatString(buff, 32, "%s %d", MONTH_NAMES[this_mon], this_year);+ if (ImGui::Button(buff))+ *level = 1;+ ImGui::SameLine(5*cell_size.x);+ BeginDisabledControls(this_year <= min_yr && this_mon == 0);+ if (ImGui::ArrowButtonEx("##Up",ImGuiDir_Up,cell_size))+ *t = AddTime(*t, ImPlotTimeUnit_Mo, -1);+ EndDisabledControls(this_year <= min_yr && this_mon == 0);+ ImGui::SameLine();+ BeginDisabledControls(this_year >= max_yr && this_mon == 11);+ if (ImGui::ArrowButtonEx("##Down",ImGuiDir_Down,cell_size))+ *t = AddTime(*t, ImPlotTimeUnit_Mo, 1);+ EndDisabledControls(this_year >= max_yr && this_mon == 11);+ // render weekday abbreviations+ ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);+ for (int i = 0; i < 7; ++i) {+ ImGui::Button(WD_ABRVS[i],cell_size);+ if (i != 6) { ImGui::SameLine(); }+ }+ ImGui::PopItemFlag();+ // 0 = last mo, 1 = this mo, 2 = next mo+ int mo = first_wd > 0 ? 0 : 1;+ int day = mo == 1 ? 1 : days_last_mo - first_wd + 1;+ for (int i = 0; i < 6; ++i) {+ for (int j = 0; j < 7; ++j) {+ if (mo == 0 && day > days_last_mo) {+ mo = 1;+ day = 1;+ }+ else if (mo == 1 && day > days_this_mo) {+ mo = 2;+ day = 1;+ }+ const int now_yr = (mo == 0 && this_mon == 0) ? last_year : ((mo == 2 && this_mon == 11) ? next_year : this_year);+ const int now_mo = mo == 0 ? last_mon : (mo == 1 ? this_mon : next_mon);+ const int now_md = day;++ const bool off_mo = mo == 0 || mo == 2;+ const bool t1_or_t2 = (t1 != nullptr && t1_mo == now_mo && t1_yr == now_yr && t1_md == now_md) ||+ (t2 != nullptr && t2_mo == now_mo && t2_yr == now_yr && t2_md == now_md);++ if (off_mo)+ ImGui::PushStyleColor(ImGuiCol_Text, col_dis);+ if (t1_or_t2) {+ ImGui::PushStyleColor(ImGuiCol_Button, col_btn);+ ImGui::PushStyleColor(ImGuiCol_Text, col_txt);+ }+ ImGui::PushID(i*7+j);+ ImFormatString(buff,32,"%d",day);+ if (now_yr == min_yr-1 || now_yr == max_yr+1) {+ ImGui::Dummy(cell_size);+ }+ else if (ImGui::Button(buff,cell_size) && !clk) {+ *t = MakeTime(now_yr, now_mo, now_md);+ clk = true;+ }+ ImGui::PopID();+ if (t1_or_t2)+ ImGui::PopStyleColor(2);+ if (off_mo)+ ImGui::PopStyleColor();+ if (j != 6)+ ImGui::SameLine();+ day++;+ }+ }+ }+ // month widget+ else if (*level == 1) {+ *t = FloorTime(*t, ImPlotTimeUnit_Mo);+ GetTime(*t, &Tm);+ int this_yr = Tm.tm_year + 1900;+ ImFormatString(buff, 32, "%d", this_yr);+ if (ImGui::Button(buff))+ *level = 2;+ BeginDisabledControls(this_yr <= min_yr);+ ImGui::SameLine(5*cell_size.x);+ if (ImGui::ArrowButtonEx("##Up",ImGuiDir_Up,cell_size))+ *t = AddTime(*t, ImPlotTimeUnit_Yr, -1);+ EndDisabledControls(this_yr <= min_yr);+ ImGui::SameLine();+ BeginDisabledControls(this_yr >= max_yr);+ if (ImGui::ArrowButtonEx("##Down",ImGuiDir_Down,cell_size))+ *t = AddTime(*t, ImPlotTimeUnit_Yr, 1);+ EndDisabledControls(this_yr >= max_yr);+ // ImGui::Dummy(cell_size);+ cell_size.x *= 7.0f/4.0f;+ cell_size.y *= 7.0f/3.0f;+ int mo = 0;+ for (int i = 0; i < 3; ++i) {+ for (int j = 0; j < 4; ++j) {+ const bool t1_or_t2 = (t1 != nullptr && t1_yr == this_yr && t1_mo == mo) ||+ (t2 != nullptr && t2_yr == this_yr && t2_mo == mo);+ if (t1_or_t2)+ ImGui::PushStyleColor(ImGuiCol_Button, col_btn);+ if (ImGui::Button(MONTH_ABRVS[mo],cell_size) && !clk) {+ *t = MakeTime(this_yr, mo);+ *level = 0;+ }+ if (t1_or_t2)+ ImGui::PopStyleColor();+ if (j != 3)+ ImGui::SameLine();+ mo++;+ }+ }+ }+ else if (*level == 2) {+ *t = FloorTime(*t, ImPlotTimeUnit_Yr);+ int this_yr = GetYear(*t);+ int yr = this_yr - this_yr % 20;+ ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true);+ ImFormatString(buff,32,"%d-%d",yr,yr+19);+ ImGui::Button(buff);+ ImGui::PopItemFlag();+ ImGui::SameLine(5*cell_size.x);+ BeginDisabledControls(yr <= min_yr);+ if (ImGui::ArrowButtonEx("##Up",ImGuiDir_Up,cell_size))+ *t = MakeTime(yr-20);+ EndDisabledControls(yr <= min_yr);+ ImGui::SameLine();+ BeginDisabledControls(yr + 20 >= max_yr);+ if (ImGui::ArrowButtonEx("##Down",ImGuiDir_Down,cell_size))+ *t = MakeTime(yr+20);+ EndDisabledControls(yr+ 20 >= max_yr);+ // ImGui::Dummy(cell_size);+ cell_size.x *= 7.0f/4.0f;+ cell_size.y *= 7.0f/5.0f;+ for (int i = 0; i < 5; ++i) {+ for (int j = 0; j < 4; ++j) {+ const bool t1_or_t2 = (t1 != nullptr && t1_yr == yr) || (t2 != nullptr && t2_yr == yr);+ if (t1_or_t2)+ ImGui::PushStyleColor(ImGuiCol_Button, col_btn);+ ImFormatString(buff,32,"%d",yr);+ if (yr<1970||yr>3000) {+ ImGui::Dummy(cell_size);+ }+ else if (ImGui::Button(buff,cell_size)) {+ *t = MakeTime(yr);+ *level = 1;+ }+ if (t1_or_t2)+ ImGui::PopStyleColor();+ if (j != 3)+ ImGui::SameLine();+ yr++;+ }+ }+ }+ ImGui::PopStyleVar();+ ImGui::PopStyleColor();+ ImGui::EndGroup();+ ImGui::PopID();+ return clk;+}++bool ShowTimePicker(const char* id, ImPlotTime* t) {+ ImPlotContext& gp = *GImPlot;+ ImGui::PushID(id);+ tm& Tm = gp.Tm;+ GetTime(*t,&Tm);++ static const char* nums[] = { "00","01","02","03","04","05","06","07","08","09",+ "10","11","12","13","14","15","16","17","18","19",+ "20","21","22","23","24","25","26","27","28","29",+ "30","31","32","33","34","35","36","37","38","39",+ "40","41","42","43","44","45","46","47","48","49",+ "50","51","52","53","54","55","56","57","58","59"};++ static const char* am_pm[] = {"am","pm"};++ bool hour24 = gp.Style.Use24HourClock;++ int hr = hour24 ? Tm.tm_hour : ((Tm.tm_hour == 0 || Tm.tm_hour == 12) ? 12 : Tm.tm_hour % 12);+ int min = Tm.tm_min;+ int sec = Tm.tm_sec;+ int ap = Tm.tm_hour < 12 ? 0 : 1;++ bool changed = false;++ ImVec2 spacing = ImGui::GetStyle().ItemSpacing;+ spacing.x = 0;+ float width = ImGui::CalcTextSize("888").x;+ float height = ImGui::GetFrameHeight();++ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, spacing);+ ImGui::PushStyleVar(ImGuiStyleVar_ScrollbarSize,2.0f);+ ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0,0,0,0));+ ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0,0,0,0));+ ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered));++ ImGui::SetNextItemWidth(width);+ if (ImGui::BeginCombo("##hr",nums[hr],ImGuiComboFlags_NoArrowButton)) {+ const int ia = hour24 ? 0 : 1;+ const int ib = hour24 ? 24 : 13;+ for (int i = ia; i < ib; ++i) {+ if (ImGui::Selectable(nums[i],i==hr)) {+ hr = i;+ changed = true;+ }+ }+ ImGui::EndCombo();+ }+ ImGui::SameLine();+ ImGui::Text(":");+ ImGui::SameLine();+ ImGui::SetNextItemWidth(width);+ if (ImGui::BeginCombo("##min",nums[min],ImGuiComboFlags_NoArrowButton)) {+ for (int i = 0; i < 60; ++i) {+ if (ImGui::Selectable(nums[i],i==min)) {+ min = i;+ changed = true;+ }+ }+ ImGui::EndCombo();+ }+ ImGui::SameLine();+ ImGui::Text(":");+ ImGui::SameLine();+ ImGui::SetNextItemWidth(width);+ if (ImGui::BeginCombo("##sec",nums[sec],ImGuiComboFlags_NoArrowButton)) {+ for (int i = 0; i < 60; ++i) {+ if (ImGui::Selectable(nums[i],i==sec)) {+ sec = i;+ changed = true;+ }+ }+ ImGui::EndCombo();+ }+ if (!hour24) {+ ImGui::SameLine();+ if (ImGui::Button(am_pm[ap],ImVec2(0,height))) {+ ap = 1 - ap;+ changed = true;+ }+ }++ ImGui::PopStyleColor(3);+ ImGui::PopStyleVar(2);+ ImGui::PopID();++ if (changed) {+ if (!hour24)+ hr = hr % 12 + ap * 12;+ Tm.tm_hour = hr;+ Tm.tm_min = min;+ Tm.tm_sec = sec;+ *t = MkTime(&Tm);+ }++ return changed;+}++void StyleColorsAuto(ImPlotStyle* dst) {+ ImPlotStyle* style = dst ? dst : &ImPlot::GetStyle();+ ImVec4* colors = style->Colors;++ style->MinorAlpha = 0.25f;++ colors[ImPlotCol_FrameBg] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_PlotBg] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_PlotBorder] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_LegendBg] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_LegendBorder] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_LegendText] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_TitleText] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_InlayText] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_PlotBorder] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisText] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisGrid] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisTick] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisBg] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisBgHovered] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_AxisBgActive] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_Selection] = IMPLOT_AUTO_COL;+ colors[ImPlotCol_Crosshairs] = IMPLOT_AUTO_COL;+}++void StyleColorsClassic(ImPlotStyle* dst) {+ ImPlotStyle* style = dst ? dst : &ImPlot::GetStyle();+ ImVec4* colors = style->Colors;++ style->MinorAlpha = 0.5f;+ + colors[ImPlotCol_FrameBg] = ImVec4(0.43f, 0.43f, 0.43f, 0.39f);+ colors[ImPlotCol_PlotBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.35f);+ colors[ImPlotCol_PlotBorder] = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);+ colors[ImPlotCol_LegendBg] = ImVec4(0.11f, 0.11f, 0.14f, 0.92f);+ colors[ImPlotCol_LegendBorder] = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);+ colors[ImPlotCol_LegendText] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);+ colors[ImPlotCol_TitleText] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);+ colors[ImPlotCol_InlayText] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);+ colors[ImPlotCol_AxisText] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);+ colors[ImPlotCol_AxisGrid] = ImVec4(0.90f, 0.90f, 0.90f, 0.25f);+ colors[ImPlotCol_AxisTick] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBg] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgHovered] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgActive] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_Selection] = ImVec4(0.97f, 0.97f, 0.39f, 1.00f);+ colors[ImPlotCol_Crosshairs] = ImVec4(0.50f, 0.50f, 0.50f, 0.75f);+}++void StyleColorsDark(ImPlotStyle* dst) {+ ImPlotStyle* style = dst ? dst : &ImPlot::GetStyle();+ ImVec4* colors = style->Colors;++ style->MinorAlpha = 0.25f;++ colors[ImPlotCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);+ colors[ImPlotCol_PlotBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.50f);+ colors[ImPlotCol_PlotBorder] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);+ colors[ImPlotCol_LegendBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);+ colors[ImPlotCol_LegendBorder] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);+ colors[ImPlotCol_LegendText] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_TitleText] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_InlayText] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_AxisText] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_AxisGrid] = ImVec4(1.00f, 1.00f, 1.00f, 0.25f);+ colors[ImPlotCol_AxisTick] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBg] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgHovered] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgActive] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_Selection] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);+ colors[ImPlotCol_Crosshairs] = ImVec4(1.00f, 1.00f, 1.00f, 0.50f);+}++void StyleColorsLight(ImPlotStyle* dst) {+ ImPlotStyle* style = dst ? dst : &ImPlot::GetStyle();+ ImVec4* colors = style->Colors;++ style->MinorAlpha = 1.0f;++ colors[ImPlotCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_PlotBg] = ImVec4(0.42f, 0.57f, 1.00f, 0.13f);+ colors[ImPlotCol_PlotBorder] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);+ colors[ImPlotCol_LegendBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.98f);+ colors[ImPlotCol_LegendBorder] = ImVec4(0.82f, 0.82f, 0.82f, 0.80f);+ colors[ImPlotCol_LegendText] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);+ colors[ImPlotCol_TitleText] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);+ colors[ImPlotCol_InlayText] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);+ colors[ImPlotCol_AxisText] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);+ colors[ImPlotCol_AxisGrid] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);+ colors[ImPlotCol_AxisTick] = ImVec4(0.00f, 0.00f, 0.00f, 0.25f);+ colors[ImPlotCol_AxisBg] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgHovered] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_AxisBgActive] = IMPLOT_AUTO_COL; // TODO+ colors[ImPlotCol_Selection] = ImVec4(0.82f, 0.64f, 0.03f, 1.00f);+ colors[ImPlotCol_Crosshairs] = ImVec4(0.00f, 0.00f, 0.00f, 0.50f);+}++//-----------------------------------------------------------------------------+// [SECTION] Obsolete Functions/Types+//-----------------------------------------------------------------------------++#ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS++// Deprecated method will go in here++#endif++} // namespace ImPlot++#endif // #ifndef IMGUI_DISABLE
+ cbits/implot/implot.h view
@@ -0,0 +1,1408 @@+// MIT License++// Copyright (c) 2020-2024 Evan Pezent+// Copyright (c) 2025-2026 Breno Cunha Queiroz++// Permission is hereby granted, free of charge, to any person obtaining a copy+// of this software and associated documentation files (the "Software"), to deal+// in the Software without restriction, including without limitation the rights+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+// copies of the Software, and to permit persons to whom the Software is+// furnished to do so, subject to the following conditions:++// The above copyright notice and this permission notice shall be included in all+// copies or substantial portions of the Software.++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+// SOFTWARE.++// ImPlot v1.1 WIP++// Table of Contents:+//+// [SECTION] Macros and Defines+// [SECTION] Enums and Types+// [SECTION] Callbacks+// [SECTION] Contexts+// [SECTION] Begin/End Plot+// [SECTION] Begin/End Subplot+// [SECTION] Setup+// [SECTION] SetNext+// [SECTION] Plot Items+// [SECTION] Plot Tools+// [SECTION] Plot Utils+// [SECTION] Legend Utils+// [SECTION] Drag and Drop+// [SECTION] Styling+// [SECTION] Colormaps+// [SECTION] Input Mapping+// [SECTION] Miscellaneous+// [SECTION] Demo+// [SECTION] Obsolete API++#pragma once+#include "imgui.h"+#ifndef IMGUI_DISABLE++//-----------------------------------------------------------------------------+// [SECTION] Macros and Defines+//-----------------------------------------------------------------------------++// Define attributes of all API symbols declarations (e.g. for DLL under Windows)+// Using ImPlot via a shared library is not recommended, because we don't guarantee+// backward nor forward ABI compatibility and also function call overhead. If you+// do use ImPlot as a DLL, be sure to call SetImGuiContext (see Miscellaneous section).+#ifndef IMPLOT_API+#define IMPLOT_API+#endif++// ImPlot version string.+#define IMPLOT_VERSION "1.1 WIP"+// ImPlot version integer encoded as XYYZZ (X=major, YY=minor, ZZ=patch).+#define IMPLOT_VERSION_NUM 10100+// Macro for templated plotting functions; keeps header clean.+#define IMPLOT_TMP template <typename T> IMPLOT_API++// Indicates variable should deduced automatically.+constexpr int IMPLOT_AUTO = -1;+// Special color used to indicate that a color should be deduced automatically.+constexpr ImVec4 IMPLOT_AUTO_COL = ImVec4(0,0,0,-1);++//-----------------------------------------------------------------------------+// [SECTION] Enums and Types+//-----------------------------------------------------------------------------++// Forward declarations+struct ImPlotContext; // ImPlot context (opaque struct, see implot_internal.h)++// Enums/Flags+typedef int ImAxis; // -> enum ImAxis_+typedef int ImPlotProp; // -> enum ImPlotProp_+typedef int ImPlotFlags; // -> enum ImPlotFlags_+typedef int ImPlotAxisFlags; // -> enum ImPlotAxisFlags_+typedef int ImPlotSubplotFlags; // -> enum ImPlotSubplotFlags_+typedef int ImPlotLegendFlags; // -> enum ImPlotLegendFlags_+typedef int ImPlotMouseTextFlags; // -> enum ImPlotMouseTextFlags_+typedef int ImPlotDragToolFlags; // -> ImPlotDragToolFlags_+typedef int ImPlotColormapScaleFlags; // -> ImPlotColormapScaleFlags_++typedef int ImPlotItemFlags; // -> ImPlotItemFlags_+typedef int ImPlotLineFlags; // -> ImPlotLineFlags_+typedef int ImPlotScatterFlags; // -> ImPlotScatterFlags+typedef int ImPlotBubblesFlags; // -> ImPlotBubblesFlags+typedef int ImPlotPolygonFlags; // -> ImPlotPolygonFlags_+typedef int ImPlotStairsFlags; // -> ImPlotStairsFlags_+typedef int ImPlotShadedFlags; // -> ImPlotShadedFlags_+typedef int ImPlotBarsFlags; // -> ImPlotBarsFlags_+typedef int ImPlotBarGroupsFlags; // -> ImPlotBarGroupsFlags_+typedef int ImPlotErrorBarsFlags; // -> ImPlotErrorBarsFlags_+typedef int ImPlotStemsFlags; // -> ImPlotStemsFlags_+typedef int ImPlotInfLinesFlags; // -> ImPlotInfLinesFlags_+typedef int ImPlotPieChartFlags; // -> ImPlotPieChartFlags_+typedef int ImPlotHeatmapFlags; // -> ImPlotHeatmapFlags_+typedef int ImPlotHistogramFlags; // -> ImPlotHistogramFlags_+typedef int ImPlotDigitalFlags; // -> ImPlotDigitalFlags_+typedef int ImPlotImageFlags; // -> ImPlotImageFlags_+typedef int ImPlotTextFlags; // -> ImPlotTextFlags_+typedef int ImPlotDummyFlags; // -> ImPlotDummyFlags_++typedef int ImPlotCond; // -> enum ImPlotCond_+typedef int ImPlotCol; // -> enum ImPlotCol_+typedef int ImPlotStyleVar; // -> enum ImPlotStyleVar_+typedef int ImPlotScale; // -> enum ImPlotScale_+typedef int ImPlotMarker; // -> enum ImPlotMarker_+typedef int ImPlotColormap; // -> enum ImPlotColormap_+typedef int ImPlotLocation; // -> enum ImPlotLocation_+typedef int ImPlotBin; // -> enum ImPlotBin_+++// Axis indices. The values assigned may change; NEVER hardcode these.+enum ImAxis_ {+ // horizontal axes+ ImAxis_X1 = 0, // enabled by default+ ImAxis_X2, // disabled by default+ ImAxis_X3, // disabled by default+ // vertical axes+ ImAxis_Y1, // enabled by default+ ImAxis_Y2, // disabled by default+ ImAxis_Y3, // disabled by default+ // bookkeeping+ ImAxis_COUNT+};++// Plotting properties. These provide syntactic sugar for creating ImPlotSpecs from (ImPlotProp,value) pairs. See ImPlotSpec documentation.+enum ImPlotProp_ {+ ImPlotProp_LineColor, // line color (applies to lines, bar edges); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImPlotProp_LineColors, // array of colors for each line; if nullptr, use LineColor for all lines+ ImPlotProp_LineWeight, // line weight in pixels (applies to lines, bar edges, marker edges)+ ImPlotProp_FillColor, // fill color (applies to shaded regions, bar faces); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImPlotProp_FillColors, // array of colors for each fill; if nullptr, use FillColor for all fills+ ImPlotProp_FillAlpha, // alpha multiplier (applies to FillColor, FillColors, MarkerFillColor, and MarkerFillColors)+ ImPlotProp_Marker, // marker type; specify ImPlotMarker_Auto to use the next unused marker+ ImPlotProp_MarkerSize, // size of markers (radius) *in pixels*+ ImPlotProp_MarkerSizes, // array of sizes for each marker; if nullptr, use MarkerSize for all markers+ ImPlotProp_MarkerLineColor, // marker edge color; IMPLOT_AUTO_COL will use LineColor+ ImPlotProp_MarkerLineColors, // array of colors for each marker edge; if nullptr, use MarkerLineColor for all markers+ ImPlotProp_MarkerFillColor, // marker face color; IMPLOT_AUTO_COL will use LineColor+ ImPlotProp_MarkerFillColors, // array of colors for each marker face; if nullptr, use MarkerFillColor for all markers+ ImPlotProp_Size, // size of error bar whiskers (width or height), and digital bars (height) *in pixels*+ ImPlotProp_Offset, // data index offset+ ImPlotProp_Stride, // data stride in bytes; IMPLOT_AUTO will result in sizeof(T) where T is the type passed to PlotX+ ImPlotProp_Flags // optional item flags; can be composed from common ImPlotItemFlags and/or specialized ImPlotXFlags+};++// Options for plots (see BeginPlot).+enum ImPlotFlags_ {+ ImPlotFlags_None = 0, // default+ ImPlotFlags_NoTitle = 1 << 0, // the plot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MyPlot")+ ImPlotFlags_NoLegend = 1 << 1, // the legend will not be displayed+ ImPlotFlags_NoMouseText = 1 << 2, // the mouse position, in plot coordinates, will not be displayed inside of the plot+ ImPlotFlags_NoInputs = 1 << 3, // the user will not be able to interact with the plot+ ImPlotFlags_NoMenus = 1 << 4, // the user will not be able to open context menus+ ImPlotFlags_NoBoxSelect = 1 << 5, // the user will not be able to box-select+ ImPlotFlags_NoFrame = 1 << 6, // the ImGui frame will not be rendered+ ImPlotFlags_Equal = 1 << 7, // x and y axes pairs will be constrained to have the same units/pixel+ ImPlotFlags_Crosshairs = 1 << 8, // the default mouse cursor will be replaced with a crosshair when hovered+ ImPlotFlags_CanvasOnly = ImPlotFlags_NoTitle | ImPlotFlags_NoLegend | ImPlotFlags_NoMenus | ImPlotFlags_NoBoxSelect | ImPlotFlags_NoMouseText+};++// Options for plot axes (see SetupAxis).+enum ImPlotAxisFlags_ {+ ImPlotAxisFlags_None = 0, // default+ ImPlotAxisFlags_NoLabel = 1 << 0, // the axis label will not be displayed (axis labels are also hidden if the supplied string name is nullptr)+ ImPlotAxisFlags_NoGridLines = 1 << 1, // no grid lines will be displayed+ ImPlotAxisFlags_NoTickMarks = 1 << 2, // no tick marks will be displayed+ ImPlotAxisFlags_NoTickLabels = 1 << 3, // no text labels will be displayed+ ImPlotAxisFlags_NoInitialFit = 1 << 4, // axis will not be initially fit to data extents on the first rendered frame+ ImPlotAxisFlags_NoMenus = 1 << 5, // the user will not be able to open context menus with right-click+ ImPlotAxisFlags_NoSideSwitch = 1 << 6, // the user will not be able to switch the axis side by dragging it+ ImPlotAxisFlags_NoHighlight = 1 << 7, // the axis will not have its background highlighted when hovered or held+ ImPlotAxisFlags_Opposite = 1 << 8, // axis ticks and labels will be rendered on the conventionally opposite side (i.e, right or top)+ ImPlotAxisFlags_Foreground = 1 << 9, // grid lines will be displayed in the foreground (i.e. on top of data) instead of the background+ ImPlotAxisFlags_Invert = 1 << 10, // the axis will be inverted+ ImPlotAxisFlags_AutoFit = 1 << 11, // axis will be auto-fitting to data extents+ ImPlotAxisFlags_RangeFit = 1 << 12, // axis will only fit points if the point is in the visible range of the **orthogonal** axis+ ImPlotAxisFlags_PanStretch = 1 << 13, // panning in a locked or constrained state will cause the axis to stretch if possible+ ImPlotAxisFlags_LockMin = 1 << 14, // the axis minimum value will be locked when panning/zooming+ ImPlotAxisFlags_LockMax = 1 << 15, // the axis maximum value will be locked when panning/zooming+ ImPlotAxisFlags_Lock = ImPlotAxisFlags_LockMin | ImPlotAxisFlags_LockMax,+ ImPlotAxisFlags_NoDecorations = ImPlotAxisFlags_NoLabel | ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_NoTickMarks | ImPlotAxisFlags_NoTickLabels,+ ImPlotAxisFlags_AuxDefault = ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_Opposite+};++// Options for subplots (see BeginSubplot)+enum ImPlotSubplotFlags_ {+ ImPlotSubplotFlags_None = 0, // default+ ImPlotSubplotFlags_NoTitle = 1 << 0, // the subplot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MySubplot")+ ImPlotSubplotFlags_NoLegend = 1 << 1, // the legend will not be displayed (only applicable if ImPlotSubplotFlags_ShareItems is enabled)+ ImPlotSubplotFlags_NoMenus = 1 << 2, // the user will not be able to open context menus with right-click+ ImPlotSubplotFlags_NoResize = 1 << 3, // resize splitters between subplot cells will be not be provided+ ImPlotSubplotFlags_NoAlign = 1 << 4, // subplot edges will not be aligned vertically or horizontally+ ImPlotSubplotFlags_ShareItems = 1 << 5, // items across all subplots will be shared and rendered into a single legend entry+ ImPlotSubplotFlags_LinkRows = 1 << 6, // link the y-axis limits of all plots in each row (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkCols = 1 << 7, // link the x-axis limits of all plots in each column (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkAllX = 1 << 8, // link the x-axis limits in every plot in the subplot (does not apply to auxiliary axes)+ ImPlotSubplotFlags_LinkAllY = 1 << 9, // link the y-axis limits in every plot in the subplot (does not apply to auxiliary axes)+ ImPlotSubplotFlags_ColMajor = 1 << 10 // subplots are added in column major order instead of the default row major order+};++// Options for legends (see SetupLegend)+enum ImPlotLegendFlags_ {+ ImPlotLegendFlags_None = 0, // default+ ImPlotLegendFlags_NoButtons = 1 << 0, // legend icons will not function as hide/show buttons+ ImPlotLegendFlags_NoHighlightItem = 1 << 1, // plot items will not be highlighted when their legend entry is hovered+ ImPlotLegendFlags_NoHighlightAxis = 1 << 2, // axes will not be highlighted when legend entries are hovered (only relevant if x/y-axis count > 1)+ ImPlotLegendFlags_NoMenus = 1 << 3, // the user will not be able to open context menus with right-click+ ImPlotLegendFlags_Outside = 1 << 4, // legend will be rendered outside of the plot area+ ImPlotLegendFlags_Horizontal = 1 << 5, // legend entries will be displayed horizontally+ ImPlotLegendFlags_Sort = 1 << 6, // legend entries will be displayed in alphabetical order+ ImPlotLegendFlags_Reverse = 1 << 7, // legend entries will be displayed in reverse order+};++// Options for mouse hover text (see SetupMouseText)+enum ImPlotMouseTextFlags_ {+ ImPlotMouseTextFlags_None = 0, // default+ ImPlotMouseTextFlags_NoAuxAxes = 1 << 0, // only show the mouse position for primary axes+ ImPlotMouseTextFlags_NoFormat = 1 << 1, // axes label formatters won't be used to render text+ ImPlotMouseTextFlags_ShowAlways = 1 << 2, // always display mouse position even if plot not hovered+};++// Options for DragPoint, DragLine, DragRect+enum ImPlotDragToolFlags_ {+ ImPlotDragToolFlags_None = 0, // default+ ImPlotDragToolFlags_NoCursors = 1 << 0, // drag tools won't change cursor icons when hovered or held+ ImPlotDragToolFlags_NoFit = 1 << 1, // the drag tool won't be considered for plot fits+ ImPlotDragToolFlags_NoInputs = 1 << 2, // lock the tool from user inputs+ ImPlotDragToolFlags_Delayed = 1 << 3, // tool rendering will be delayed one frame; useful when applying position-constraints+};++// Flags for ColormapScale+enum ImPlotColormapScaleFlags_ {+ ImPlotColormapScaleFlags_None = 0, // default+ ImPlotColormapScaleFlags_NoLabel = 1 << 0, // the colormap axis label will not be displayed+ ImPlotColormapScaleFlags_Opposite = 1 << 1, // render the colormap label and tick labels on the opposite side+ ImPlotColormapScaleFlags_Invert = 1 << 2, // invert the colormap bar and axis scale (this only affects rendering; if you only want to reverse the scale mapping, make scale_min > scale_max)+};++// Flags for ANY PlotX function. Used by setting ImPlotSpec::Flags.+enum ImPlotItemFlags_ {+ ImPlotItemFlags_None = 0,+ ImPlotItemFlags_NoLegend = 1 << 0, // the item won't have a legend entry displayed+ ImPlotItemFlags_NoFit = 1 << 1, // the item won't be considered for plot fits+};++// Flags for PlotLine. Used by setting ImPlotSpec::Flags.+enum ImPlotLineFlags_ {+ ImPlotLineFlags_None = 0, // default+ ImPlotLineFlags_Segments = 1 << 10, // a line segment will be rendered from every two consecutive points+ ImPlotLineFlags_Loop = 1 << 11, // the last and first point will be connected to form a closed loop+ ImPlotLineFlags_SkipNaN = 1 << 12, // NaNs values will be skipped instead of rendered as missing data+ ImPlotLineFlags_NoClip = 1 << 13, // markers (if displayed) on the edge of a plot will not be clipped+ ImPlotLineFlags_Shaded = 1 << 14, // a filled region between the line and horizontal origin will be rendered; use PlotShaded for more advanced cases+};++// Flags for PlotScatter. Used by setting ImPlotSpec::Flags.+enum ImPlotScatterFlags_ {+ ImPlotScatterFlags_None = 0, // default+ ImPlotScatterFlags_NoClip = 1 << 10, // markers on the edge of a plot will not be clipped+};++// Flags for PlotBubbles. Used by setting ImPlotSpec::Flags.+enum ImPlotBubblesFlags_ {+ ImPlotBubblesFlags_None = 0, // default+};++// Flags for PlotPolygon. Used by setting ImPlotSpec::Flags.+enum ImPlotPolygonFlags_ {+ ImPlotPolygonFlags_None = 0, // default (closed, convex polygon)+ ImPlotPolygonFlags_Concave = 1 << 10, // use concave polygon filling (slower but supports concave shapes)+};++// Flags for PlotStairs. Used by setting ImPlotSpec::Flags.+enum ImPlotStairsFlags_ {+ ImPlotStairsFlags_None = 0, // default+ ImPlotStairsFlags_PreStep = 1 << 10, // the y value is continued constantly to the left from every x position, i.e. the interval (x[i-1], x[i]] has the value y[i]+ ImPlotStairsFlags_Shaded = 1 << 11 // a filled region between the stairs and horizontal origin will be rendered; use PlotShaded for more advanced cases+};++// Flags for PlotShaded (placeholder). Used by setting ImPlotSpec::Flags.+enum ImPlotShadedFlags_ {+ ImPlotShadedFlags_None = 0 // default+};++// Flags for PlotBars. Used by setting ImPlotSpec::Flags.+enum ImPlotBarsFlags_ {+ ImPlotBarsFlags_None = 0, // default+ ImPlotBarsFlags_Horizontal = 1 << 10, // bars will be rendered horizontally on the current y-axis+};++// Flags for PlotBarGroups. Used by setting ImPlotSpec::Flags.+enum ImPlotBarGroupsFlags_ {+ ImPlotBarGroupsFlags_None = 0, // default+ ImPlotBarGroupsFlags_Horizontal = 1 << 10, // bar groups will be rendered horizontally on the current y-axis+ ImPlotBarGroupsFlags_Stacked = 1 << 11, // items in a group will be stacked on top of each other+};++// Flags for PlotErrorBars. Used by setting ImPlotSpec::Flags.+enum ImPlotErrorBarsFlags_ {+ ImPlotErrorBarsFlags_None = 0, // default+ ImPlotErrorBarsFlags_Horizontal = 1 << 10, // error bars will be rendered horizontally on the current y-axis+};++// Flags for PlotStems. Used by setting ImPlotSpec::Flags.+enum ImPlotStemsFlags_ {+ ImPlotStemsFlags_None = 0, // default+ ImPlotStemsFlags_Horizontal = 1 << 10, // stems will be rendered horizontally on the current y-axis+};++// Flags for PlotInfLines. Used by setting ImPlotSpec::Flags.+enum ImPlotInfLinesFlags_ {+ ImPlotInfLinesFlags_None = 0, // default+ ImPlotInfLinesFlags_Horizontal = 1 << 10 // lines will be rendered horizontally on the current y-axis+};++// Flags for PlotPieChart. Used by setting ImPlotSpec::Flags.+enum ImPlotPieChartFlags_ {+ ImPlotPieChartFlags_None = 0, // default+ ImPlotPieChartFlags_Normalize = 1 << 10, // force normalization of pie chart values (i.e. always make a full circle if sum < 0)+ ImPlotPieChartFlags_IgnoreHidden = 1 << 11, // ignore hidden slices when drawing the pie chart (as if they were not there)+ ImPlotPieChartFlags_Exploding = 1 << 12, // explode legend-hovered slice+ ImPlotPieChartFlags_NoSliceBorder = 1 << 13 // do not draw slice borders+};++// Flags for PlotHeatmap. Used by setting ImPlotSpec::Flags.+enum ImPlotHeatmapFlags_ {+ ImPlotHeatmapFlags_None = 0, // default+ ImPlotHeatmapFlags_ColMajor = 1 << 10, // data will be read in column major order+};++// Flags for PlotHistogram and PlotHistogram2D. Used by setting ImPlotSpec::Flags.+enum ImPlotHistogramFlags_ {+ ImPlotHistogramFlags_None = 0, // default+ ImPlotHistogramFlags_Horizontal = 1 << 10, // histogram bars will be rendered horizontally (not supported by PlotHistogram2D)+ ImPlotHistogramFlags_Cumulative = 1 << 11, // each bin will contain its count plus the counts of all previous bins (not supported by PlotHistogram2D)+ ImPlotHistogramFlags_Density = 1 << 12, // counts will be normalized, i.e. the PDF will be visualized, or the CDF will be visualized if Cumulative is also set+ ImPlotHistogramFlags_NoOutliers = 1 << 13, // exclude values outside the specified histogram range from the count toward normalizing and cumulative counts+ ImPlotHistogramFlags_ColMajor = 1 << 14 // data will be read in column major order (not supported by PlotHistogram)+};++// Flags for PlotDigital (placeholder). Used by setting ImPlotSpec::Flags.+enum ImPlotDigitalFlags_ {+ ImPlotDigitalFlags_None = 0 // default+};++// Flags for PlotImage (placeholder). Used by setting ImPlotSpec::Flags.+enum ImPlotImageFlags_ {+ ImPlotImageFlags_None = 0 // default+};++// Flags for PlotText. Used by setting ImPlotSpec::Flags.+enum ImPlotTextFlags_ {+ ImPlotTextFlags_None = 0, // default+ ImPlotTextFlags_Vertical = 1 << 10 // text will be rendered vertically+};++// Flags for PlotDummy (placeholder). Used by setting ImPlotSpec::Flags.+enum ImPlotDummyFlags_ {+ ImPlotDummyFlags_None = 0 // default+};++// Represents a condition for SetupAxisLimits etc. (same as ImGuiCond, but we only support a subset of those enums)+enum ImPlotCond_+{+ ImPlotCond_None = ImGuiCond_None, // No condition (always set the variable), same as _Always+ ImPlotCond_Always = ImGuiCond_Always, // No condition (always set the variable)+ ImPlotCond_Once = ImGuiCond_Once, // Set the variable once per runtime session (only the first call will succeed)+};++// Plot styling colors.+enum ImPlotCol_ {+ ImPlotCol_FrameBg, // plot frame background color (defaults to ImGuiCol_FrameBg)+ ImPlotCol_PlotBg, // plot area background color (defaults to ImGuiCol_WindowBg)+ ImPlotCol_PlotBorder, // plot area border color (defaults to ImGuiCol_Border)+ ImPlotCol_LegendBg, // legend background color (defaults to ImGuiCol_PopupBg)+ ImPlotCol_LegendBorder, // legend border color (defaults to ImPlotCol_PlotBorder)+ ImPlotCol_LegendText, // legend text color (defaults to ImPlotCol_InlayText)+ ImPlotCol_TitleText, // plot title text color (defaults to ImGuiCol_Text)+ ImPlotCol_InlayText, // color of text appearing inside of plots (defaults to ImGuiCol_Text)+ ImPlotCol_AxisText, // axis label and tick labels color (defaults to ImGuiCol_Text)+ ImPlotCol_AxisGrid, // axis grid color (defaults to 25% ImPlotCol_AxisText)+ ImPlotCol_AxisTick, // axis tick color (defaults to AxisGrid)+ ImPlotCol_AxisBg, // background color of axis hover region (defaults to transparent)+ ImPlotCol_AxisBgHovered, // axis hover color (defaults to ImGuiCol_ButtonHovered)+ ImPlotCol_AxisBgActive, // axis active color (defaults to ImGuiCol_ButtonActive)+ ImPlotCol_Selection, // box-selection color (defaults to yellow)+ ImPlotCol_Crosshairs, // crosshairs color (defaults to ImPlotCol_PlotBorder)+ ImPlotCol_COUNT+};++// Plot styling variables.+enum ImPlotStyleVar_ {+ ImPlotStyleVar_PlotDefaultSize, // ImVec2, default size used when ImVec2(0,0) is passed to BeginPlot+ ImPlotStyleVar_PlotMinSize, // ImVec2, minimum size plot frame can be when shrunk+ ImPlotStyleVar_PlotBorderSize, // float, thickness of border around plot area+ ImPlotStyleVar_MinorAlpha, // float, alpha multiplier applied to minor axis grid lines+ ImPlotStyleVar_MajorTickLen, // ImVec2, major tick lengths for X and Y axes+ ImPlotStyleVar_MinorTickLen, // ImVec2, minor tick lengths for X and Y axes+ ImPlotStyleVar_MajorTickSize, // ImVec2, line thickness of major ticks+ ImPlotStyleVar_MinorTickSize, // ImVec2, line thickness of minor ticks+ ImPlotStyleVar_MajorGridSize, // ImVec2, line thickness of major grid lines+ ImPlotStyleVar_MinorGridSize, // ImVec2, line thickness of minor grid lines+ ImPlotStyleVar_PlotPadding, // ImVec2, padding between widget frame and plot area, labels, or outside legends (i.e. main padding)+ ImPlotStyleVar_LabelPadding, // ImVec2, padding between axes labels, tick labels, and plot edge+ ImPlotStyleVar_LegendPadding, // ImVec2, legend padding from plot edges+ ImPlotStyleVar_LegendInnerPadding, // ImVec2, legend inner padding from legend edges+ ImPlotStyleVar_LegendSpacing, // ImVec2, spacing between legend entries+ ImPlotStyleVar_MousePosPadding, // ImVec2, padding between plot edge and interior info text+ ImPlotStyleVar_AnnotationPadding, // ImVec2, text padding around annotation labels+ ImPlotStyleVar_FitPadding, // ImVec2, additional fit padding as a percentage of the fit extents (e.g. ImVec2(0.1f,0.1f) adds 10% to the fit extents of X and Y)+ ImPlotStyleVar_DigitalPadding, // float, digital plot padding from bottom in pixels+ ImPlotStyleVar_DigitalSpacing, // float, digital plot spacing gap in pixels+ ImPlotStyleVar_COUNT+};++// Axis scale+enum ImPlotScale_ {+ ImPlotScale_Linear = 0, // default linear scale+ ImPlotScale_Time, // date/time scale+ ImPlotScale_Log10, // base 10 logarithmic scale+ ImPlotScale_SymLog, // symmetric log scale+};++// Marker specifications.+enum ImPlotMarker_ {+ ImPlotMarker_None = -2, // no marker+ ImPlotMarker_Auto = -1, // automatic marker selection+ ImPlotMarker_Circle, // a circle marker (default)+ ImPlotMarker_Square, // a square maker+ ImPlotMarker_Diamond, // a diamond marker+ ImPlotMarker_Up, // an upward-pointing triangle marker+ ImPlotMarker_Down, // an downward-pointing triangle marker+ ImPlotMarker_Left, // an leftward-pointing triangle marker+ ImPlotMarker_Right, // an rightward-pointing triangle marker+ ImPlotMarker_Cross, // a cross marker (not fill-able)+ ImPlotMarker_Plus, // a plus marker (not fill-able)+ ImPlotMarker_Asterisk, // a asterisk marker (not fill-able)+ ImPlotMarker_Vertical, // a vertical line marker (not fill-able)+ ImPlotMarker_Horizontal, // a horizontal line marker (not fill-able)+ ImPlotMarker_COUNT+};++// Built-in colormaps+enum ImPlotColormap_ {+ ImPlotColormap_Deep = 0, // a.k.a. seaborn deep (qual=true, n=10) (default)+ ImPlotColormap_Dark = 1, // a.k.a. matplotlib "Set1" (qual=true, n=9 )+ ImPlotColormap_Pastel = 2, // a.k.a. matplotlib "Pastel1" (qual=true, n=9 )+ ImPlotColormap_Paired = 3, // a.k.a. matplotlib "Paired" (qual=true, n=12)+ ImPlotColormap_Viridis = 4, // a.k.a. matplotlib "viridis" (qual=false, n=11)+ ImPlotColormap_Plasma = 5, // a.k.a. matplotlib "plasma" (qual=false, n=11)+ ImPlotColormap_Hot = 6, // a.k.a. matplotlib/MATLAB "hot" (qual=false, n=11)+ ImPlotColormap_Cool = 7, // a.k.a. matplotlib/MATLAB "cool" (qual=false, n=11)+ ImPlotColormap_Pink = 8, // a.k.a. matplotlib/MATLAB "pink" (qual=false, n=11)+ ImPlotColormap_Jet = 9, // a.k.a. MATLAB "jet" (qual=false, n=11)+ ImPlotColormap_Twilight = 10, // a.k.a. matplotlib "twilight" (qual=false, n=11)+ ImPlotColormap_RdBu = 11, // red/blue, Color Brewer (qual=false, n=11)+ ImPlotColormap_BrBG = 12, // brown/blue-green, Color Brewer (qual=false, n=11)+ ImPlotColormap_PiYG = 13, // pink/yellow-green, Color Brewer (qual=false, n=11)+ ImPlotColormap_Spectral = 14, // color spectrum, Color Brewer (qual=false, n=11)+ ImPlotColormap_Greys = 15, // white/black (qual=false, n=2 )+};++// Used to position items on a plot (e.g. legends, labels, etc.)+enum ImPlotLocation_ {+ ImPlotLocation_Center = 0, // center-center+ ImPlotLocation_North = 1 << 0, // top-center+ ImPlotLocation_South = 1 << 1, // bottom-center+ ImPlotLocation_West = 1 << 2, // center-left+ ImPlotLocation_East = 1 << 3, // center-right+ ImPlotLocation_NorthWest = ImPlotLocation_North | ImPlotLocation_West, // top-left+ ImPlotLocation_NorthEast = ImPlotLocation_North | ImPlotLocation_East, // top-right+ ImPlotLocation_SouthWest = ImPlotLocation_South | ImPlotLocation_West, // bottom-left+ ImPlotLocation_SouthEast = ImPlotLocation_South | ImPlotLocation_East // bottom-right+};++// Enums for different automatic histogram binning methods (k = bin count or w = bin width)+enum ImPlotBin_ {+ ImPlotBin_Sqrt = -1, // k = sqrt(n)+ ImPlotBin_Sturges = -2, // k = 1 + log2(n)+ ImPlotBin_Rice = -3, // k = 2 * cbrt(n)+ ImPlotBin_Scott = -4, // w = 3.49 * sigma / cbrt(n)+};++// Plot item styling specification. Provide these to PlotX functions to override styling, specify+// offsetting or stride, or set optional flags. This struct can be used in the following ways:+//+// 1. By declaring and defining a struct instance:+//+// ImPlotSpec spec;+// spec.LineColor = ImVec4(1,0,0,1);+// spec.LineWeight = 2.0f;+// spec.Marker = ImPlotMarker_Circle;+// spec.Flags = ImPlotItemFlags_NoLegend | ImPlotLineFlags_Segments;+// ImPlot::PlotLine("MyLine", xs, ys, 100, spec);+//+// 2. Inline using (ImPlotProp,value) pairs (order does NOT matter):+//+// ImPlot::PlotLine("MyLine", xs, ys, 100, {+// ImPlotProp_LineColor, ImVec4(1,0,0,1),+// ImPlotProp_LineWeight, 2.0f,+// ImPlotProp_Marker, ImPlotMarker_Circle,+// ImPlotProp_Flags, ImPlotItemFlags_NoLegend | ImPlotLineFlags_Segments+// });+struct ImPlotSpec {+ ImVec4 LineColor = IMPLOT_AUTO_COL; // line color (applies to lines, bar edges); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImU32* LineColors = nullptr; // array of colors for each line; if nullptr, use LineColor for all lines+ float LineWeight = 1.0f; // line weight in pixels (applies to lines, bar edges, marker edges)+ ImVec4 FillColor = IMPLOT_AUTO_COL; // fill color (applies to shaded regions, bar faces); IMPLOT_AUTO_COL will use next Colormap color or current item color+ ImU32* FillColors = nullptr; // array of colors for each fill; if nullptr, use FillColor for all fills+ float FillAlpha = 1.0f; // alpha multiplier (applies to FillColor, FillColors, MarkerFillColor, and MarkerFillColors)+ ImPlotMarker Marker = ImPlotMarker_None; // marker type; specify ImPlotMarker_Auto to use the next unused marker+ float MarkerSize = 4; // size of markers (radius) *in pixels*+ float* MarkerSizes = nullptr; // array of sizes for each marker; if nullptr, use MarkerSize for all markers+ ImVec4 MarkerLineColor = IMPLOT_AUTO_COL; // marker edge color; IMPLOT_AUTO_COL will use LineColor+ ImU32* MarkerLineColors = nullptr; // array of colors for each marker edge; if nullptr, use MarkerLineColor for all markers+ ImVec4 MarkerFillColor = IMPLOT_AUTO_COL; // marker face color; IMPLOT_AUTO_COL will use LineColor+ ImU32* MarkerFillColors = nullptr; // array of colors for each marker face; if nullptr, use MarkerFillColor for all markers+ float Size = 4; // size of error bar whiskers (width or height), and digital bars (height) *in pixels*+ int Offset = 0; // data index offset+ int Stride = IMPLOT_AUTO; // data stride in bytes; IMPLOT_AUTO will result in sizeof(T) where T is the type passed to PlotX+ ImPlotItemFlags Flags = ImPlotItemFlags_None; // optional item flags; can be composed from common ImPlotItemFlags and/or specialized ImPlotXFlags++ ImPlotSpec() { }++ // Construct a plot item specification from (ImPlotProp,value) pairs in any order, e.g. ImPlotSpec(ImPlotProp_LineColor, my_color, ImPlotProp_Marker, 4.0f)+ template <typename ...Args>+ ImPlotSpec(Args... args) {+ static_assert((sizeof ...(Args)) % 2 == 0, "Odd number of arguments! You must provide (ImPlotProp, value) pairs!");+ SetProp(args...);+ }++ // Set properties from (ImPlotProp,value) pairs in any order, e.g. SetProp(ImPlotProp_LineColor, my_color, ImPlotProp_Marker, 4.0f)+ template <typename Arg, typename ...Args>+ void SetProp(ImPlotProp prop, Arg arg, Args... args) {+ static_assert((sizeof ...(Args)) % 2 == 0, "Odd number of arguments! You must provide (ImPlotProp,value) pairs!");+ SetProp(prop, arg);+ SetProp(args...);+ }++ // Set a property from a scalar value.+ template <typename T>+ void SetProp(ImPlotProp prop, T v) {+ switch (prop) {+ case ImPlotProp_LineColor : LineColor = ImGui::ColorConvertU32ToFloat4((ImU32)v); return;+ case ImPlotProp_LineWeight : LineWeight = (float)v; return;+ case ImPlotProp_FillColor : FillColor = ImGui::ColorConvertU32ToFloat4((ImU32)v); return;+ case ImPlotProp_FillAlpha : FillAlpha = (float)v; return;+ case ImPlotProp_Marker : Marker = (ImPlotMarker)v; return;+ case ImPlotProp_MarkerSize : MarkerSize = (float)v; return;+ case ImPlotProp_MarkerLineColor : MarkerLineColor = ImGui::ColorConvertU32ToFloat4((ImU32)v); return;+ case ImPlotProp_MarkerFillColor : MarkerFillColor = ImGui::ColorConvertU32ToFloat4((ImU32)v); return;+ case ImPlotProp_Size : Size = (float)v; return;+ case ImPlotProp_Offset : Offset = (int)v; return;+ case ImPlotProp_Stride : Stride = (int)v; return;+ case ImPlotProp_Flags : Flags = (ImPlotItemFlags)v; return;+ default: break;+ }+ IM_ASSERT(0 && "User provided an ImPlotProp which cannot be set from scalar value!");+ }++ // Set a property from a pointer value.+ void SetProp(ImPlotProp prop, ImU32* v) {+ switch (prop) {+ case ImPlotProp_LineColors : LineColors = v; return;+ case ImPlotProp_FillColors : FillColors = v; return;+ case ImPlotProp_MarkerLineColors : MarkerLineColors = v; return;+ case ImPlotProp_MarkerFillColors : MarkerFillColors = v; return;+ default: break;+ }+ IM_ASSERT(0 && "User provided an ImPlotProp which cannot be set from pointer value!");+ }++ // Set a property from a float pointer value.+ void SetProp(ImPlotProp prop, float* v) {+ switch (prop) {+ case ImPlotProp_MarkerSizes : MarkerSizes = v; return;+ default: break;+ }+ IM_ASSERT(0 && "User provided an ImPlotProp which cannot be set from float pointer value!");+ }++ // Set a property from an ImVec4 value.+ void SetProp(ImPlotProp prop, const ImVec4& v) {+ switch (prop) {+ case ImPlotProp_LineColor : LineColor = v; return;+ case ImPlotProp_FillColor : FillColor = v; return;+ case ImPlotProp_MarkerLineColor : MarkerLineColor = v; return;+ case ImPlotProp_MarkerFillColor : MarkerFillColor = v; return;+ default: break;+ }+ IM_ASSERT(0 && "User provided an ImPlotProp which cannot be set from ImVec4 value!");+ }+};++// Double precision version of ImVec2 used by ImPlot. Extensible by end users.+IM_MSVC_RUNTIME_CHECKS_OFF+struct ImPlotPoint {+ double x, y;+ IMPLOT_API constexpr ImPlotPoint() : x(0.0), y(0.0) { }+ IMPLOT_API constexpr ImPlotPoint(double _x, double _y) : x(_x), y(_y) { }+ IMPLOT_API constexpr ImPlotPoint(const ImVec2& p) : x((double)p.x), y((double)p.y) { }+ IMPLOT_API double& operator[] (size_t idx) { IM_ASSERT(idx == 0 || idx == 1); return ((double*)(void*)(char*)this)[idx]; }+ IMPLOT_API double operator[] (size_t idx) const { IM_ASSERT(idx == 0 || idx == 1); return ((const double*)(const void*)(const char*)this)[idx]; }+#ifdef IMPLOT_POINT_CLASS_EXTRA+ IMPLOT_POINT_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h+ // to convert back and forth between your math types and ImPlotPoint.+#endif+};+IM_MSVC_RUNTIME_CHECKS_RESTORE++// Range defined by a min/max value.+struct ImPlotRange {+ double Min, Max;+ IMPLOT_API constexpr ImPlotRange() : Min(0.0), Max(0.0) { }+ IMPLOT_API constexpr ImPlotRange(double _min, double _max) : Min(_min), Max(_max) { }+ IMPLOT_API bool Contains(double value) const { return value >= Min && value <= Max; }+ IMPLOT_API double Size() const { return Max - Min; }+ IMPLOT_API double Clamp(double value) const { return (value < Min) ? Min : (value > Max) ? Max : value; }+};++// Combination of two range limits for X and Y axes. Also an AABB defined by Min()/Max().+struct ImPlotRect {+ ImPlotRange X, Y;+ IMPLOT_API constexpr ImPlotRect() : X(0.0,0.0), Y(0.0,0.0) { }+ IMPLOT_API constexpr ImPlotRect(double x_min, double x_max, double y_min, double y_max) : X(x_min, x_max), Y(y_min, y_max) { }+ IMPLOT_API bool Contains(const ImPlotPoint& p) const { return Contains(p.x, p.y); }+ IMPLOT_API bool Contains(double x, double y) const { return X.Contains(x) && Y.Contains(y); }+ IMPLOT_API ImPlotPoint Size() const { return ImPlotPoint(X.Size(), Y.Size()); }+ IMPLOT_API ImPlotPoint Clamp(const ImPlotPoint& p) const { return Clamp(p.x, p.y); }+ IMPLOT_API ImPlotPoint Clamp(double x, double y) const { return ImPlotPoint(X.Clamp(x),Y.Clamp(y)); }+ IMPLOT_API ImPlotPoint Min() const { return ImPlotPoint(X.Min, Y.Min); }+ IMPLOT_API ImPlotPoint Max() const { return ImPlotPoint(X.Max, Y.Max); }+};++// Plot style structure+struct ImPlotStyle {+ // plot styling+ ImVec2 PlotDefaultSize; // = 400,300 default size used when ImVec2(0,0) is passed to BeginPlot+ ImVec2 PlotMinSize; // = 200,150 minimum size plot frame can be when shrunk+ float PlotBorderSize; // = 1, line thickness of border around plot area+ float MinorAlpha; // = 0.25 alpha multiplier applied to minor axis grid lines+ ImVec2 MajorTickLen; // = 10,10 major tick lengths for X and Y axes+ ImVec2 MinorTickLen; // = 5,5 minor tick lengths for X and Y axes+ ImVec2 MajorTickSize; // = 1,1 line thickness of major ticks+ ImVec2 MinorTickSize; // = 1,1 line thickness of minor ticks+ ImVec2 MajorGridSize; // = 1,1 line thickness of major grid lines+ ImVec2 MinorGridSize; // = 1,1 line thickness of minor grid lines+ // plot padding+ ImVec2 PlotPadding; // = 10,10 padding between widget frame and plot area, labels, or outside legends (i.e. main padding)+ ImVec2 LabelPadding; // = 5,5 padding between axes labels, tick labels, and plot edge+ ImVec2 LegendPadding; // = 10,10 legend padding from plot edges+ ImVec2 LegendInnerPadding; // = 5,5 legend inner padding from legend edges+ ImVec2 LegendSpacing; // = 5,0 spacing between legend entries+ ImVec2 MousePosPadding; // = 10,10 padding between plot edge and interior mouse location text+ ImVec2 AnnotationPadding; // = 2,2 text padding around annotation labels+ ImVec2 FitPadding; // = 0,0 additional fit padding as a percentage of the fit extents (e.g. ImVec2(0.1f,0.1f) adds 10% to the fit extents of X and Y)+ float DigitalPadding; // = 20, digital plot padding from bottom in pixels+ float DigitalSpacing; // = 4, digital plot spacing gap in pixels+ // style colors+ ImVec4 Colors[ImPlotCol_COUNT]; // Array of styling colors. Indexable with ImPlotCol_ enums.+ // colormap+ ImPlotColormap Colormap; // The current colormap. Set this to either an ImPlotColormap_ enum or an index returned by AddColormap.+ // settings/flags+ bool UseLocalTime; // = false, axis labels will be formatted for your timezone when ImPlotAxisFlag_Time is enabled+ bool UseISO8601; // = false, dates will be formatted according to ISO 8601 where applicable (e.g. YYYY-MM-DD, YYYY-MM, --MM-DD, etc.)+ bool Use24HourClock; // = false, times will be formatted using a 24 hour clock+ IMPLOT_API ImPlotStyle();+};++// Support for legacy versions+#if (IMGUI_VERSION_NUM < 18716) // Renamed in 1.88+#define ImGuiMod_None 0+#define ImGuiMod_Ctrl ImGuiKeyModFlags_Ctrl+#define ImGuiMod_Shift ImGuiKeyModFlags_Shift+#define ImGuiMod_Alt ImGuiKeyModFlags_Alt+#define ImGuiMod_Super ImGuiKeyModFlags_Super+#elif (IMGUI_VERSION_NUM < 18823) // Renamed in 1.89, sorry+#define ImGuiMod_None 0+#define ImGuiMod_Ctrl ImGuiModFlags_Ctrl+#define ImGuiMod_Shift ImGuiModFlags_Shift+#define ImGuiMod_Alt ImGuiModFlags_Alt+#define ImGuiMod_Super ImGuiModFlags_Super+#endif++// Input mapping structure. Default values listed. See also MapInputDefault, MapInputReverse.+struct ImPlotInputMap {+ ImGuiMouseButton Pan; // LMB enables panning when held,+ int PanMod; // none optional modifier that must be held for panning/fitting+ ImGuiMouseButton Fit; // LMB initiates fit when double clicked+ ImGuiMouseButton Select; // RMB begins box selection when pressed and confirms selection when released+ ImGuiMouseButton SelectCancel; // LMB cancels active box selection when pressed; cannot be same as Select+ int SelectMod; // none optional modifier that must be held for box selection+ int SelectHorzMod; // Alt expands active box selection horizontally to plot edge when held+ int SelectVertMod; // Shift expands active box selection vertically to plot edge when held+ ImGuiMouseButton Menu; // RMB opens context menus (if enabled) when clicked+ int OverrideMod; // Ctrl when held, all input is ignored; used to enable axis/plots as DND sources+ int ZoomMod; // none optional modifier that must be held for scroll wheel zooming+ float ZoomRate; // 0.1f zoom rate for scroll (e.g. 0.1f = 10% plot range every scroll click); make negative to invert+ IMPLOT_API ImPlotInputMap();+};++//-----------------------------------------------------------------------------+// [SECTION] Callbacks+//-----------------------------------------------------------------------------++// Callback signature for axis tick label formatter.+typedef int (*ImPlotFormatter)(double value, char* buff, int size, void* user_data);++// Callback signature for data getter.+typedef ImPlotPoint (*ImPlotGetter)(int idx, void* user_data);++// Callback signature for axis transform.+typedef double (*ImPlotTransform)(double value, void* user_data);++namespace ImPlot {++//-----------------------------------------------------------------------------+// [SECTION] Contexts+//-----------------------------------------------------------------------------++// Creates a new ImPlot context. Call this after ImGui::CreateContext.+IMPLOT_API ImPlotContext* CreateContext();+// Destroys an ImPlot context. Call this before ImGui::DestroyContext. nullptr = destroy current context.+IMPLOT_API void DestroyContext(ImPlotContext* ctx = nullptr);+// Returns the current ImPlot context. nullptr if no context has ben set.+IMPLOT_API ImPlotContext* GetCurrentContext();+// Sets the current ImPlot context.+IMPLOT_API void SetCurrentContext(ImPlotContext* ctx);++// Sets the current **ImGui** context. This is ONLY necessary if you are compiling+// ImPlot as a DLL (not recommended) separate from your ImGui compilation. It+// sets the global variable GImGui, which is not shared across DLL boundaries.+// See GImGui documentation in imgui.cpp for more details.+IMPLOT_API void SetImGuiContext(ImGuiContext* ctx);++//-----------------------------------------------------------------------------+// [SECTION] Begin/End Plot+//-----------------------------------------------------------------------------++// Starts a 2D plotting context. If this function returns true, EndPlot() MUST+// be called! You are encouraged to use the following convention:+//+// if (BeginPlot(...)) {+// PlotLine(...);+// ...+// EndPlot();+// }+//+// Important notes:+//+// - #title_id must be unique to the current ImGui ID scope. If you need to avoid ID+// collisions or don't want to display a title in the plot, use double hashes+// (e.g. "MyPlot##HiddenIdText" or "##NoTitle").+// - #size is the **frame** size of the plot widget, not the plot area. The default+// size of plots (i.e. when ImVec2(0,0)) can be modified in your ImPlotStyle.+IMPLOT_API bool BeginPlot(const char* title_id, const ImVec2& size=ImVec2(-1,0), ImPlotFlags flags=0);++// Only call EndPlot() if BeginPlot() returns true! Typically called at the end+// of an if statement conditioned on BeginPlot(). See example above.+IMPLOT_API void EndPlot();++//-----------------------------------------------------------------------------+// [SECTION] Begin/End Subplots+//-----------------------------------------------------------------------------++// Starts a subdivided plotting context. If the function returns true,+// EndSubplots() MUST be called! Call BeginPlot/EndPlot AT MOST [rows*cols]+// times in between the beginning and end of the subplot context. Plots are+// added in row major order.+//+// Example:+//+// if (BeginSubplots("My Subplot",2,3,ImVec2(800,400)) {+// for (int i = 0; i < 6; ++i) {+// if (BeginPlot(...)) {+// ImPlot::PlotLine(...);+// ...+// EndPlot();+// }+// }+// EndSubplots();+// }+//+// Produces:+//+// [0] | [1] | [2]+// ----|-----|----+// [3] | [4] | [5]+//+// Important notes:+//+// - #title_id must be unique to the current ImGui ID scope. If you need to avoid ID+// collisions or don't want to display a title in the plot, use double hashes+// (e.g. "MySubplot##HiddenIdText" or "##NoTitle").+// - #rows and #cols must be greater than 0.+// - #size is the size of the entire grid of subplots, not the individual plots+// - #row_ratios and #col_ratios must have AT LEAST #rows and #cols elements,+// respectively. These are the sizes of the rows and columns expressed in ratios.+// If the user adjusts the dimensions, the arrays are updated with new ratios.+//+// Important notes regarding BeginPlot from inside of BeginSubplots:+//+// - The #title_id parameter of _BeginPlot_ (see above) does NOT have to be+// unique when called inside of a subplot context. Subplot IDs are hashed+// for your convenience so you don't have call PushID or generate unique title+// strings. Simply pass an empty string to BeginPlot unless you want to title+// each subplot.+// - The #size parameter of _BeginPlot_ (see above) is ignored when inside of a+// subplot context. The actual size of the subplot will be based on the+// #size value you pass to _BeginSubplots_ and #row/#col_ratios if provided.++IMPLOT_API bool BeginSubplots(const char* title_id,+ int rows,+ int cols,+ const ImVec2& size,+ ImPlotSubplotFlags flags = 0,+ float* row_ratios = nullptr,+ float* col_ratios = nullptr);++// Only call EndSubplots() if BeginSubplots() returns true! Typically called at the end+// of an if statement conditioned on BeginSubplots(). See example above.+IMPLOT_API void EndSubplots();++//-----------------------------------------------------------------------------+// [SECTION] Setup+//-----------------------------------------------------------------------------++// The following API allows you to setup and customize various aspects of the+// current plot. The functions should be called immediately after BeginPlot+// and before any other API calls. Typical usage is as follows:++// if (BeginPlot(...)) { 1) begin a new plot+// SetupAxis(ImAxis_X1, "My X-Axis"); 2) make Setup calls+// SetupAxis(ImAxis_Y1, "My Y-Axis");+// SetupLegend(ImPlotLocation_North);+// ...+// SetupFinish(); 3) [optional] explicitly finish setup+// PlotLine(...); 4) plot items+// ...+// EndPlot(); 5) end the plot+// }+//+// Important notes:+//+// - Always call Setup code at the top of your BeginPlot conditional statement.+// - Setup is locked once you start plotting or explicitly call SetupFinish.+// Do NOT call Setup code after you begin plotting or after you make+// any non-Setup API calls (e.g. utils like PlotToPixels also lock Setup)+// - Calling SetupFinish is OPTIONAL, but probably good practice. If you do not+// call it yourself, then the first subsequent plotting or utility function will+// call it for you.++// Enables an axis or sets the label and/or flags for an existing axis. Leave #label = nullptr for no label.+IMPLOT_API void SetupAxis(ImAxis axis, const char* label=nullptr, ImPlotAxisFlags flags=0);+// Sets an axis range limits. If ImPlotCond_Always is used, the axes limits will be locked. Inversion with v_min > v_max is not supported; use SetupAxisLimits instead.+IMPLOT_API void SetupAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond = ImPlotCond_Once);+// Links an axis range limits to external values. Set to nullptr for no linkage. The pointer data must remain valid until EndPlot.+IMPLOT_API void SetupAxisLinks(ImAxis axis, double* link_min, double* link_max);+// Sets the format of numeric axis labels via formatter specifier (default="%g"). Formatted values will be double (i.e. use %f).+IMPLOT_API void SetupAxisFormat(ImAxis axis, const char* fmt);+// Sets the format of numeric axis labels via formatter callback. Given #value, write a label into #buff. Optionally pass user data.+IMPLOT_API void SetupAxisFormat(ImAxis axis, ImPlotFormatter formatter, void* data=nullptr);+// Sets an axis' ticks and optionally the labels. To keep the default ticks, set #keep_default=true.+IMPLOT_API void SetupAxisTicks(ImAxis axis, const double* values, int n_ticks, const char* const labels[]=nullptr, bool keep_default=false);+// Sets an axis' ticks and optionally the labels for the next plot. To keep the default ticks, set #keep_default=true.+IMPLOT_API void SetupAxisTicks(ImAxis axis, double v_min, double v_max, int n_ticks, const char* const labels[]=nullptr, bool keep_default=false);+// Sets an axis' scale using built-in options.+IMPLOT_API void SetupAxisScale(ImAxis axis, ImPlotScale scale);+// Sets an axis' scale using user supplied forward and inverse transforms.+IMPLOT_API void SetupAxisScale(ImAxis axis, ImPlotTransform forward, ImPlotTransform inverse, void* data=nullptr);+// Sets an axis' limits constraints.+IMPLOT_API void SetupAxisLimitsConstraints(ImAxis axis, double v_min, double v_max);+// Sets an axis' zoom constraints.+IMPLOT_API void SetupAxisZoomConstraints(ImAxis axis, double z_min, double z_max);++// Sets the label and/or flags for primary X and Y axes (shorthand for two calls to SetupAxis).+IMPLOT_API void SetupAxes(const char* x_label, const char* y_label, ImPlotAxisFlags x_flags=0, ImPlotAxisFlags y_flags=0);+// Sets the primary X and Y axes range limits. If ImPlotCond_Always is used, the axes limits will be locked (shorthand for two calls to SetupAxisLimits).+IMPLOT_API void SetupAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond = ImPlotCond_Once);++// Sets up the plot legend. This can also be called immediately after BeginSubplots when using ImPlotSubplotFlags_ShareItems.+IMPLOT_API void SetupLegend(ImPlotLocation location, ImPlotLegendFlags flags=0);+// Set the location of the current plot's mouse position text (default = South|East).+IMPLOT_API void SetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flags=0);++// Explicitly finalize plot setup. Once you call this, you cannot make anymore Setup calls for the current plot!+// Note that calling this function is OPTIONAL; it will be called by the first subsequent setup-locking API call.+IMPLOT_API void SetupFinish();++//-----------------------------------------------------------------------------+// [SECTION] SetNext+//-----------------------------------------------------------------------------++// Though you should default to the `Setup` API above, there are some scenarios+// where (re)configuring a plot or axis before `BeginPlot` is needed (e.g. if+// using a preceding button or slider widget to change the plot limits). In+// this case, you can use the `SetNext` API below. While this is not as feature+// rich as the Setup API, most common needs are provided. These functions can be+// called anywhere except for inside of `Begin/EndPlot`. For example:++// if (ImGui::Button("Center Plot"))+// ImPlot::SetNextPlotLimits(-1,1,-1,1);+// if (ImPlot::BeginPlot(...)) {+// ...+// ImPlot::EndPlot();+// }+//+// Important notes:+//+// - You must still enable non-default axes with SetupAxis for these functions+// to work properly.++// Sets an upcoming axis range limits. If ImPlotCond_Always is used, the axes limits will be locked.+IMPLOT_API void SetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond = ImPlotCond_Once);+// Links an upcoming axis range limits to external values. Set to nullptr for no linkage. The pointer data must remain valid until EndPlot!+IMPLOT_API void SetNextAxisLinks(ImAxis axis, double* link_min, double* link_max);+// Set an upcoming axis to auto fit to its data.+IMPLOT_API void SetNextAxisToFit(ImAxis axis);++// Sets the upcoming primary X and Y axes range limits. If ImPlotCond_Always is used, the axes limits will be locked (shorthand for two calls to SetupAxisLimits).+IMPLOT_API void SetNextAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond = ImPlotCond_Once);+// Sets all upcoming axes to auto fit to their data.+IMPLOT_API void SetNextAxesToFit();++//-----------------------------------------------------------------------------+// [SECTION] Plot Items+//-----------------------------------------------------------------------------++// The main plotting API is provided below. Call these functions between+// Begin/EndPlot and after any Setup API calls. Each plots data on the current+// x and y axes, which can be changed with `SetAxis/Axes`.+//+// The templated functions are explicitly instantiated in implot_items.cpp.+// They are not intended to be used generically with custom types. You will get+// a linker error if you try! All functions support the following scalar types:+//+// float, double, ImS8, ImU8, ImS16, ImU16, ImS32, ImU32, ImS64, ImU64+//+//+// If you need to plot custom or non-homogenous data you have a few options:+//+// 1. If your data is a simple struct/class (e.g. Vector2f), you can use striding in your ImPlotSpec.+// This is the most performant option if applicable.+//+// struct Vector2f { float X, Y; };+// ...+// Vector2f data[42];+// ImPlot::PlotLine("line", &data[0].x, &data[0].y, 42, {ImPlotProp_Stride, sizeof(Vector2f});+//+// 2. Write a custom getter C function or C++ lambda and pass it and optionally your data to+// an ImPlot function post-fixed with a G (e.g. PlotScatterG). This has a slight performance+// cost, but probably not enough to worry about unless your data is very large. Examples:+//+// ImPlotPoint MyDataGetter(int idx, void* data) {+// MyData* my_data = (MyData*)data;+// ImPlotPoint p;+// p.x = my_data->GetTime(idx);+// p.y = my_data->GetValue(idx);+// return p+// }+// ...+// auto my_lambda = [](int idx, void*) {+// double t = idx / 999.0;+// return ImPlotPoint(t, 0.5+0.5*std::sin(2*PI*10*t));+// };+// ...+// if (ImPlot::BeginPlot("MyPlot")) {+// MyData my_data;+// ImPlot::PlotScatterG("scatter", MyDataGetter, &my_data, my_data.Size());+// ImPlot::PlotLineG("line", my_lambda, nullptr, 1000);+// ImPlot::EndPlot();+// }+//+// NB: All types are converted to double before plotting. You may lose information+// if you try plotting extremely large 64-bit integral types. Proceed with caution!++// Plots a standard 2D line plot.+IMPLOT_TMP void PlotLine(const char* label_id, const T* values, int count, double xscale=1, double xstart=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotLine(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotLineG(const char* label_id, ImPlotGetter getter, void* data, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a standard 2D scatter plot. Default marker is ImPlotMarker_Circle.+IMPLOT_TMP void PlotScatter(const char* label_id, const T* values, int count, double xscale=1, double xstart=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotScatter(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotScatterG(const char* label_id, ImPlotGetter getter, void* data, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a bubble graph. #szs are the radius of each bubble in plot units.+IMPLOT_TMP void PlotBubbles(const char* label_id, const T* values, const T* szs, int count, double xscale=1, double xstart=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotBubbles(const char* label_id, const T* xs, const T* ys, const T* szs, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a polygon. Points are specified in counter-clockwise order. If concave, make sure to set the Concave flag.+IMPLOT_TMP void PlotPolygon(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a a stairstep graph. The y value is continued constantly to the right from every x position, i.e. the interval [x[i], x[i+1]) has the value y[i]+IMPLOT_TMP void PlotStairs(const char* label_id, const T* values, int count, double xscale=1, double xstart=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotStairs(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotStairsG(const char* label_id, ImPlotGetter getter, void* data, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a shaded (filled) region between two lines, or a line and a horizontal reference. Set yref to +/-INFINITY for infinite fill extents.+IMPLOT_TMP void PlotShaded(const char* label_id, const T* values, int count, double yref=0, double xscale=1, double xstart=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotShaded(const char* label_id, const T* xs, const T* ys, int count, double yref=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotShaded(const char* label_id, const T* xs, const T* ys1, const T* ys2, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotShadedG(const char* label_id, ImPlotGetter getter1, void* data1, ImPlotGetter getter2, void* data2, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a bar graph. Vertical by default. #bar_size and #shift are in plot units.+IMPLOT_TMP void PlotBars(const char* label_id, const T* values, int count, double bar_size=0.67, double shift=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotBars(const char* label_id, const T* xs, const T* ys, int count, double bar_size, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotBarsG(const char* label_id, ImPlotGetter getter, void* data, int count, double bar_size, const ImPlotSpec& spec=ImPlotSpec());++// Plots a group of bars. #values is a row-major matrix with #item_count rows and #group_count cols. #label_ids should have #item_count elements.+IMPLOT_TMP void PlotBarGroups(const char* const label_ids[], const T* values, int item_count, int group_count, double group_size=0.67, double shift=0, const ImPlotSpec& spec=ImPlotSpec());++// Plots vertical error bar. The label_id should be the same as the label_id of the associated line or bar plot.+IMPLOT_TMP void PlotErrorBars(const char* label_id, const T* xs, const T* ys, const T* err, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotErrorBars(const char* label_id, const T* xs, const T* ys, const T* neg, const T* pos, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots stems. Vertical by default.+IMPLOT_TMP void PlotStems(const char* label_id, const T* values, int count, double ref=0, double scale=1, double start=0, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotStems(const char* label_id, const T* xs, const T* ys, int count, double ref=0, const ImPlotSpec& spec=ImPlotSpec());++// Plots infinite vertical or horizontal lines (e.g. for references or asymptotes).+IMPLOT_TMP void PlotInfLines(const char* label_id, const T* values, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots a pie chart. Center and radius are in plot units. #label_fmt can be set to nullptr for no labels.+IMPLOT_TMP void PlotPieChart(const char* const label_ids[], const T* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data=nullptr, double angle0=90, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_TMP void PlotPieChart(const char* const label_ids[], const T* values, int count, double x, double y, double radius, const char* label_fmt="%.1f", double angle0=90, const ImPlotSpec& spec=ImPlotSpec());++// Plots a 2D heatmap chart. Values are expected to be in row-major order by default. Leave #scale_min and scale_max both at 0 for automatic color scaling, or set them to a predefined range. #label_fmt can be set to nullptr for no labels.+IMPLOT_TMP void PlotHeatmap(const char* label_id, const T* values, int rows, int cols, double scale_min=0, double scale_max=0, const char* label_fmt="%.1f", const ImPlotPoint& bounds_min=ImPlotPoint(0,0), const ImPlotPoint& bounds_max=ImPlotPoint(1,1), const ImPlotSpec& spec=ImPlotSpec());++// Plots a horizontal histogram. #bins can be a positive integer or an ImPlotBin_ method. If #range is left unspecified, the min/max of #values will be used as the range.+// Otherwise, outlier values outside of the range are not binned. The largest bin count or density is returned.+IMPLOT_TMP double PlotHistogram(const char* label_id, const T* values, int count, int bins=ImPlotBin_Sturges, double bar_scale=1.0, ImPlotRange range=ImPlotRange(), const ImPlotSpec& spec=ImPlotSpec());++// Plots two dimensional, bivariate histogram as a heatmap. #x_bins and #y_bins can be a positive integer or an ImPlotBin. If #range is left unspecified, the min/max of+// #xs an #ys will be used as the ranges. Otherwise, outlier values outside of range are not binned. The largest bin count or density is returned.+IMPLOT_TMP double PlotHistogram2D(const char* label_id, const T* xs, const T* ys, int count, int x_bins=ImPlotBin_Sturges, int y_bins=ImPlotBin_Sturges, ImPlotRect range=ImPlotRect(), const ImPlotSpec& spec=ImPlotSpec());++// Plots digital data. Digital plots do not respond to y drag or zoom, and are always referenced to the bottom of the plot.+IMPLOT_TMP void PlotDigital(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec=ImPlotSpec());+IMPLOT_API void PlotDigitalG(const char* label_id, ImPlotGetter getter, void* data, int count, const ImPlotSpec& spec=ImPlotSpec());++// Plots an axis-aligned image. #bounds_min/bounds_max are in plot coordinates (y-up) and #uv0/uv1 are in texture coordinates (y-down).+#ifdef IMGUI_HAS_TEXTURES+IMPLOT_API void PlotImage(const char* label_id, ImTextureRef tex_ref, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1, 1), const ImVec4& tint_col = ImVec4(1, 1, 1, 1), const ImPlotSpec& spec=ImPlotSpec());+#else+IMPLOT_API void PlotImage(const char* label_id, ImTextureID tex_ref, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImVec2& uv0=ImVec2(0,0), const ImVec2& uv1=ImVec2(1,1), const ImVec4& tint_col=ImVec4(1,1,1,1), const ImPlotSpec& spec=ImPlotSpec());+#endif++// Plots a centered text label at point x,y with an optional pixel offset. Text color can be changed with ImPlot::PushStyleColor(ImPlotCol_InlayText, ...).+IMPLOT_API void PlotText(const char* text, double x, double y, const ImVec2& pix_offset=ImVec2(0,0), const ImPlotSpec& spec=ImPlotSpec());++// Plots a dummy item (i.e. adds a legend entry colored by ImPlotCol_Line)+IMPLOT_API void PlotDummy(const char* label_id, const ImPlotSpec& spec=ImPlotSpec());++//-----------------------------------------------------------------------------+// [SECTION] Plot Tools+//-----------------------------------------------------------------------------++// The following can be used to render interactive elements and/or annotations.+// Like the item plotting functions above, they apply to the current x and y+// axes, which can be changed with `SetAxis/SetAxes`. These functions return true+// when user interaction causes the provided coordinates to change. Additional+// user interactions can be retrieved through the optional output parameters.++// Shows a draggable point at x,y. #col defaults to ImGuiCol_Text.+IMPLOT_API bool DragPoint(int id, double* x, double* y, const ImVec4& col, float size = 4, ImPlotDragToolFlags flags = 0, bool* out_clicked = nullptr, bool* out_hovered = nullptr, bool* out_held = nullptr);+// Shows a draggable vertical guide line at an x-value. #col defaults to ImGuiCol_Text.+IMPLOT_API bool DragLineX(int id, double* x, const ImVec4& col, float thickness = 1, ImPlotDragToolFlags flags = 0, bool* out_clicked = nullptr, bool* out_hovered = nullptr, bool* out_held = nullptr);+// Shows a draggable horizontal guide line at a y-value. #col defaults to ImGuiCol_Text.+IMPLOT_API bool DragLineY(int id, double* y, const ImVec4& col, float thickness = 1, ImPlotDragToolFlags flags = 0, bool* out_clicked = nullptr, bool* out_hovered = nullptr, bool* out_held = nullptr);+// Shows a draggable and resizeable rectangle.+IMPLOT_API bool DragRect(int id, double* x1, double* y1, double* x2, double* y2, const ImVec4& col, ImPlotDragToolFlags flags = 0, bool* out_clicked = nullptr, bool* out_hovered = nullptr, bool* out_held = nullptr);++// Shows an annotation callout at a chosen point. Clamping keeps annotations in the plot area. Annotations are always rendered on top.+IMPLOT_API void Annotation(double x, double y, const ImVec4& col, const ImVec2& pix_offset, bool clamp, bool round = false);+IMPLOT_API void Annotation(double x, double y, const ImVec4& col, const ImVec2& pix_offset, bool clamp, const char* fmt, ...) IM_FMTARGS(6);+IMPLOT_API void AnnotationV(double x, double y, const ImVec4& col, const ImVec2& pix_offset, bool clamp, const char* fmt, va_list args) IM_FMTLIST(6);++// Shows a x-axis tag at the specified coordinate value.+IMPLOT_API void TagX(double x, const ImVec4& col, bool round = false);+IMPLOT_API void TagX(double x, const ImVec4& col, const char* fmt, ...) IM_FMTARGS(3);+IMPLOT_API void TagXV(double x, const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(3);++// Shows a y-axis tag at the specified coordinate value.+IMPLOT_API void TagY(double y, const ImVec4& col, bool round = false);+IMPLOT_API void TagY(double y, const ImVec4& col, const char* fmt, ...) IM_FMTARGS(3);+IMPLOT_API void TagYV(double y, const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(3);++//-----------------------------------------------------------------------------+// [SECTION] Plot Utils+//-----------------------------------------------------------------------------++// Select which axis/axes will be used for subsequent plot elements.+IMPLOT_API void SetAxis(ImAxis axis);+IMPLOT_API void SetAxes(ImAxis x_axis, ImAxis y_axis);++// Convert pixels to a position in the current plot's coordinate system. Passing IMPLOT_AUTO uses the current axes.+IMPLOT_API ImPlotPoint PixelsToPlot(const ImVec2& pix, ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);+IMPLOT_API ImPlotPoint PixelsToPlot(float x, float y, ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);++// Convert a position in the current plot's coordinate system to pixels. Passing IMPLOT_AUTO uses the current axes.+IMPLOT_API ImVec2 PlotToPixels(const ImPlotPoint& plt, ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);+IMPLOT_API ImVec2 PlotToPixels(double x, double y, ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);++// Get the current Plot position (top-left) in pixels.+IMPLOT_API ImVec2 GetPlotPos();+// Get the current Plot size in pixels.+IMPLOT_API ImVec2 GetPlotSize();++// Returns the mouse position in x,y coordinates of the current plot. Passing IMPLOT_AUTO uses the current axes.+IMPLOT_API ImPlotPoint GetPlotMousePos(ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);+// Returns the current plot axis range.+IMPLOT_API ImPlotRect GetPlotLimits(ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);++// Returns true if the plot area in the current plot is hovered.+IMPLOT_API bool IsPlotHovered();+// Returns true if the axis label area in the current plot is hovered.+IMPLOT_API bool IsAxisHovered(ImAxis axis);+// Returns true if the bounding frame of a subplot is hovered.+IMPLOT_API bool IsSubplotsHovered();++// Returns true if the current plot is being box selected.+IMPLOT_API bool IsPlotSelected();+// Returns the current plot box selection bounds. Passing IMPLOT_AUTO uses the current axes.+IMPLOT_API ImPlotRect GetPlotSelection(ImAxis x_axis = IMPLOT_AUTO, ImAxis y_axis = IMPLOT_AUTO);+// Cancels a the current plot box selection.+IMPLOT_API void CancelPlotSelection();++// Hides or shows the next plot item (i.e. as if it were toggled from the legend).+// Use ImPlotCond_Always if you need to forcefully set this every frame.+IMPLOT_API void HideNextItem(bool hidden = true, ImPlotCond cond = ImPlotCond_Once);++// Use the following around calls to Begin/EndPlot to align l/r/t/b padding.+// Consider using Begin/EndSubplots first. They are more feature rich and+// accomplish the same behaviour by default. The functions below offer lower+// level control of plot alignment.++// Align axis padding over multiple plots in a single row or column. #group_id must+// be unique. If this function returns true, EndAlignedPlots() must be called.+IMPLOT_API bool BeginAlignedPlots(const char* group_id, bool vertical = true);+// Only call EndAlignedPlots() if BeginAlignedPlots() returns true!+IMPLOT_API void EndAlignedPlots();++//-----------------------------------------------------------------------------+// [SECTION] Legend Utils+//-----------------------------------------------------------------------------++// Begin a popup for a legend entry.+IMPLOT_API bool BeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_button=1);+// End a popup for a legend entry.+IMPLOT_API void EndLegendPopup();+// Returns true if a plot item legend entry is hovered.+IMPLOT_API bool IsLegendEntryHovered(const char* label_id);++//-----------------------------------------------------------------------------+// [SECTION] Drag and Drop+//-----------------------------------------------------------------------------++// Turns the current plot's plotting area into a drag and drop target. Don't forget to call EndDragDropTarget!+IMPLOT_API bool BeginDragDropTargetPlot();+// Turns the current plot's X-axis into a drag and drop target. Don't forget to call EndDragDropTarget!+IMPLOT_API bool BeginDragDropTargetAxis(ImAxis axis);+// Turns the current plot's legend into a drag and drop target. Don't forget to call EndDragDropTarget!+IMPLOT_API bool BeginDragDropTargetLegend();+// Ends a drag and drop target (currently just an alias for ImGui::EndDragDropTarget).+IMPLOT_API void EndDragDropTarget();++// NB: By default, plot and axes drag and drop *sources* require holding the Ctrl modifier to initiate the drag.+// You can change the modifier if desired. If ImGuiMod_None is provided, the axes will be locked from panning.++// Turns the current plot's plotting area into a drag and drop source. You must hold Ctrl. Don't forget to call EndDragDropSource!+IMPLOT_API bool BeginDragDropSourcePlot(ImGuiDragDropFlags flags=0);+// Turns the current plot's X-axis into a drag and drop source. You must hold Ctrl. Don't forget to call EndDragDropSource!+IMPLOT_API bool BeginDragDropSourceAxis(ImAxis axis, ImGuiDragDropFlags flags=0);+// Turns an item in the current plot's legend into drag and drop source. Don't forget to call EndDragDropSource!+IMPLOT_API bool BeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags flags=0);+// Ends a drag and drop source (currently just an alias for ImGui::EndDragDropSource).+IMPLOT_API void EndDragDropSource();++//-----------------------------------------------------------------------------+// [SECTION] Styling+//-----------------------------------------------------------------------------+ +// Styling colors in ImPlot works similarly to styling colors in ImGui, but+// with one important difference. Like ImGui, all style colors are stored in an+// indexable array in ImPlotStyle. You can permanently modify these values through+// GetStyle().Colors, or temporarily modify them with Push/Pop functions below.+// However, by default all style colors in ImPlot default to a special color+// IMPLOT_AUTO_COL. IMPLOT_AUTO_COL tells ImPlot to set that color from color data+// in your **ImGuiStyle**. The ImGuiCol_ that these style colors default to are+// detailed above, and in general have been mapped to produce plots visually+// consistent with your current ImGui style. Of course, you are free to+// manually set these colors to whatever you like, and further can Push/Pop+// them around individual plots for plot-specific styling (e.g. coloring axes).++// Provides access to plot style structure for permanent modifications to colors, sizes, etc.+IMPLOT_API ImPlotStyle& GetStyle();++// Style plot colors for current ImGui style (default).+IMPLOT_API void StyleColorsAuto(ImPlotStyle* dst = nullptr);+// Style plot colors for ImGui "Classic".+IMPLOT_API void StyleColorsClassic(ImPlotStyle* dst = nullptr);+// Style plot colors for ImGui "Dark".+IMPLOT_API void StyleColorsDark(ImPlotStyle* dst = nullptr);+// Style plot colors for ImGui "Light".+IMPLOT_API void StyleColorsLight(ImPlotStyle* dst = nullptr);++// Use PushStyleX to temporarily modify your ImPlotStyle. The modification+// will last until the matching call to PopStyleX. You MUST call a pop for+// every push, otherwise you will leak memory! This behaves just like ImGui.++// Temporarily modify a style color. Don't forget to call PopStyleColor!+IMPLOT_API void PushStyleColor(ImPlotCol idx, ImU32 col);+IMPLOT_API void PushStyleColor(ImPlotCol idx, const ImVec4& col);+// Undo temporary style color modification(s). Undo multiple pushes at once by increasing count.+IMPLOT_API void PopStyleColor(int count = 1);++// Temporarily modify a style variable of float type. Don't forget to call PopStyleVar!+IMPLOT_API void PushStyleVar(ImPlotStyleVar idx, float val);+// Temporarily modify a style variable of int type. Don't forget to call PopStyleVar!+IMPLOT_API void PushStyleVar(ImPlotStyleVar idx, int val);+// Temporarily modify a style variable of ImVec2 type. Don't forget to call PopStyleVar!+IMPLOT_API void PushStyleVar(ImPlotStyleVar idx, const ImVec2& val);+// Undo temporary style variable modification(s). Undo multiple pushes at once by increasing count.+IMPLOT_API void PopStyleVar(int count = 1);++// Gets the last item primary color (i.e. its legend icon color)+IMPLOT_API ImVec4 GetLastItemColor();++// Returns the null terminated string name for an ImPlotCol.+IMPLOT_API const char* GetStyleColorName(ImPlotCol idx);+// Returns the null terminated string name for an ImPlotMarker.+IMPLOT_API const char* GetMarkerName(ImPlotMarker idx);++// Returns the next marker and advances the marker for the current plot. You need to call this between Begin/EndPlot!+IMPLOT_API ImPlotMarker NextMarker();++//-----------------------------------------------------------------------------+// [SECTION] Colormaps+//-----------------------------------------------------------------------------++// Item styling is based on colormaps when the relevant ImPlotCol_XXX is set to+// IMPLOT_AUTO_COL (default). Several built-in colormaps are available. You can+// add and then push/pop your own colormaps as well. To permanently set a colormap,+// modify the Colormap index member of your ImPlotStyle.++// Colormap data will be ignored and a custom color will be used if you have done one of the following:+// 1) Modified an item style color in your ImPlotStyle to anything other than IMPLOT_AUTO_COL.+// 2) Pushed an item style color using PushStyleColor().+// 3) Set the next item style with a SetNextXXXStyle function.++// Add a new colormap. The color data will be copied. The colormap can be used by pushing either the returned index or the+// string name with PushColormap. The colormap name must be unique and the size must be greater than 1. You will receive+// an assert otherwise! By default colormaps are considered to be qualitative (i.e. discrete). If you want to create a+// continuous colormap, set #qual=false. This will treat the colors you provide as keys, and ImPlot will build a linearly+// interpolated lookup table. The memory footprint of this table will be exactly ((size-1)*255+1)*4 bytes.+IMPLOT_API ImPlotColormap AddColormap(const char* name, const ImVec4* cols, int size, bool qual=true);+IMPLOT_API ImPlotColormap AddColormap(const char* name, const ImU32* cols, int size, bool qual=true);++// Returns the number of available colormaps (i.e. the built-in + user-added count).+IMPLOT_API int GetColormapCount();+// Returns a null terminated string name for a colormap given an index. Returns nullptr if index is invalid.+IMPLOT_API const char* GetColormapName(ImPlotColormap cmap);+// Returns an index number for a colormap given a valid string name. Returns -1 if name is invalid.+IMPLOT_API ImPlotColormap GetColormapIndex(const char* name);++// Temporarily switch to one of the built-in (i.e. ImPlotColormap_XXX) or user-added colormaps (i.e. a return value of AddColormap). Don't forget to call PopColormap!+IMPLOT_API void PushColormap(ImPlotColormap cmap);+// Push a colormap by string name. Use built-in names such as "Default", "Deep", "Jet", etc. or a string you provided to AddColormap. Don't forget to call PopColormap!+IMPLOT_API void PushColormap(const char* name);+// Undo temporary colormap modification(s). Undo multiple pushes at once by increasing count.+IMPLOT_API void PopColormap(int count = 1);++// Returns the next color from the current colormap and advances the colormap for the current plot.+// Can also be used with no return value to skip colors if desired. You need to call this between Begin/EndPlot!+IMPLOT_API ImVec4 NextColormapColor();++// Colormap utils. If cmap = IMPLOT_AUTO (default), the current colormap is assumed.+// Pass an explicit colormap index (built-in or user-added) to specify otherwise.++// Returns the size of a colormap.+IMPLOT_API int GetColormapSize(ImPlotColormap cmap = IMPLOT_AUTO);+// Returns a color from a colormap given an index >= 0 (modulo will be performed).+IMPLOT_API ImVec4 GetColormapColor(int idx, ImPlotColormap cmap = IMPLOT_AUTO);+// Sample a color from the current colormap given t between 0 and 1.+IMPLOT_API ImVec4 SampleColormap(float t, ImPlotColormap cmap = IMPLOT_AUTO);++// Shows a vertical color scale with linear spaced ticks using the specified color map. Use double hashes to hide label (e.g. "##NoLabel"). If scale_min > scale_max, the scale to color mapping will be reversed.+IMPLOT_API void ColormapScale(const char* label, double scale_min, double scale_max, const ImVec2& size = ImVec2(0,0), const char* format = "%g", ImPlotColormapScaleFlags flags = 0, ImPlotColormap cmap = IMPLOT_AUTO);+// Shows a horizontal slider with a colormap gradient background. Optionally returns the color sampled at t in [0 1].+IMPLOT_API bool ColormapSlider(const char* label, float* t, ImVec4* out = nullptr, const char* format = "", ImPlotColormap cmap = IMPLOT_AUTO);+// Shows a button with a colormap gradient background.+IMPLOT_API bool ColormapButton(const char* label, const ImVec2& size = ImVec2(0,0), ImPlotColormap cmap = IMPLOT_AUTO);++// When items in a plot sample their color from a colormap, the color is cached and does not change+// unless explicitly overridden. Therefore, if you change the colormap after the item has already been plotted,+// item colors will NOT update. If you need item colors to resample the new colormap, then use this+// function to bust the cached colors. If #plot_title_id is nullptr, then every item in EVERY existing plot+// will be cache busted. Otherwise only the plot specified by #plot_title_id will be busted. For the+// latter, this function must be called in the same ImGui ID scope that the plot is in. You should rarely if ever+// need this function, but it is available for applications that require runtime colormap swaps (e.g. Heatmaps demo).+IMPLOT_API void BustColorCache(const char* plot_title_id = nullptr);++//-----------------------------------------------------------------------------+// [SECTION] Input Mapping+//-----------------------------------------------------------------------------++// Provides access to input mapping structure for permanent modifications to controls for pan, select, etc.+IMPLOT_API ImPlotInputMap& GetInputMap();++// Default input mapping: pan = LMB drag, box select = RMB drag, fit = LMB double click, context menu = RMB click, zoom = scroll.+IMPLOT_API void MapInputDefault(ImPlotInputMap* dst = nullptr);+// Reverse input mapping: pan = RMB drag, box select = LMB drag, fit = LMB double click, context menu = RMB click, zoom = scroll.+IMPLOT_API void MapInputReverse(ImPlotInputMap* dst = nullptr);++//-----------------------------------------------------------------------------+// [SECTION] Miscellaneous+//-----------------------------------------------------------------------------++// Render icons similar to those that appear in legends (nifty for data lists).+IMPLOT_API void ItemIcon(const ImVec4& col);+IMPLOT_API void ItemIcon(ImU32 col);+IMPLOT_API void ColormapIcon(ImPlotColormap cmap);++// Get the plot draw list for custom rendering to the current plot area. Call between Begin/EndPlot.+IMPLOT_API ImDrawList* GetPlotDrawList();+// Push clip rect for rendering to current plot area. The rect can be expanded or contracted by #expand pixels. Call between Begin/EndPlot.+IMPLOT_API void PushPlotClipRect(float expand=0);+// Pop plot clip rect. Call between Begin/EndPlot.+IMPLOT_API void PopPlotClipRect();++// Shows ImPlot style selector dropdown menu.+IMPLOT_API bool ShowStyleSelector(const char* label);+// Shows ImPlot colormap selector dropdown menu.+IMPLOT_API bool ShowColormapSelector(const char* label);+// Shows ImPlot input map selector dropdown menu.+IMPLOT_API bool ShowInputMapSelector(const char* label);+// Shows ImPlot style editor block (not a window).+IMPLOT_API void ShowStyleEditor(ImPlotStyle* ref = nullptr);+// Add basic help/info block for end users (not a window).+IMPLOT_API void ShowUserGuide();+// Shows ImPlot metrics/debug information window.+IMPLOT_API void ShowMetricsWindow(bool* p_popen = nullptr);++//-----------------------------------------------------------------------------+// [SECTION] Demo+//-----------------------------------------------------------------------------++// Shows the ImPlot demo window (add implot_demo.cpp to your sources!)+IMPLOT_API void ShowDemoWindow(bool* p_open = nullptr);++} // namespace ImPlot++//-----------------------------------------------------------------------------+// [SECTION] Obsolete API+//-----------------------------------------------------------------------------++// The following functions will be removed! Keep your copy of implot up to date!+// Occasionally set '#define IMPLOT_DISABLE_OBSOLETE_FUNCTIONS' to stay ahead.+// If you absolutely must use these functions and do not want to receive compiler+// warnings, set '#define IMPLOT_DISABLE_OBSOLETE_WARNINGS'.++#ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS++#ifndef IMPLOT_DISABLE_DEPRECATED_WARNINGS+#if __cplusplus > 201402L+#define IMPLOT_DEPRECATED(method) [[deprecated]] method+#elif defined( __GNUC__ ) && !defined( __INTEL_COMPILER ) && ( __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ >= 1 ) )+#define IMPLOT_DEPRECATED(method) method __attribute__( ( deprecated ) )+#elif defined( _MSC_VER )+#define IMPLOT_DEPRECATED(method) __declspec(deprecated) method+#else+#define IMPLOT_DEPRECATED(method) method+#endif+#else+#define IMPLOT_DEPRECATED(method) method+#endif++namespace ImPlot {++// OBSOLETED in v1.0 (from February 2026)+// IMPLOT_API void SetNextLineStyle(const ImVec4& col = IMPLOT_AUTO_COL, float weight = IMPLOT_AUTO); // OBSOLETED IN v1.0 // Set ImPlotSpec.LineColor/LineWeight or construct ImPlotSpec with { ImPlotSpec_LineColor, color, ImPlotSpec_LineWeight, weight }.++// IMPLOT_API void SetNextFillStyle(const ImVec4& col = IMPLOT_AUTO_COL, float alpha_mod = IMPLOT_AUTO);// OBSOLETED IN v1.0 // Set ImPlotSpec.FillColor/FillAlpha or construct ImPlotSpec with { ImPlotSpec_FillColor, color, ImPlotSpec_FillAlpha, alpha }.++// IMPLOT_API void SetNextMarkerStyle(ImPlotMarker marker = IMPLOT_AUTO, float size = IMPLOT_AUTO, const ImVec4& fill = IMPLOT_AUTO_COL, float weight = IMPLOT_AUTO, const ImVec4& outline = IMPLOT_AUTO_COL); // OBSOLETED IN v1.0 // Set ImPlotSpec.Marker/MarkerSize/MarkerFillColor/LineWeight/MarkerLineColor or construct ImPlotSpec with { ImPlotSpec_Marker, marker, ImPlotSpec_MarkerSize, size, ImPlotSpec_MarkerFillColor, fill_color, ImPlotSpec_LineWeight, weight, ImPlotSpec_MarkerLineColor, outline }.++// IMPLOT_API void SetNextErrorBarStyle(const ImVec4& col = IMPLOT_AUTO_COL, float size = IMPLOT_AUTO, float weight = IMPLOT_AUTO); // OBSOLETED IN v1.0 // Set ImPlotSpec.LineColor/Size/LineWeight or construct ImPlotSpec with { ImPlotSpec_LineColor, col, ImPlotSpec_Size, size, ImPlotSpec_LineWeight, weight }.+++} // namespace ImPlot++#endif // #ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS+#endif // #ifndef IMGUI_DISABLE
+ cbits/implot/implot_internal.h view
@@ -0,0 +1,1722 @@+// MIT License++// Copyright (c) 2020-2024 Evan Pezent+// Copyright (c) 2025-2026 Breno Cunha Queiroz++// Permission is hereby granted, free of charge, to any person obtaining a copy+// of this software and associated documentation files (the "Software"), to deal+// in the Software without restriction, including without limitation the rights+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+// copies of the Software, and to permit persons to whom the Software is+// furnished to do so, subject to the following conditions:++// The above copyright notice and this permission notice shall be included in all+// copies or substantial portions of the Software.++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+// SOFTWARE.++// ImPlot v1.1 WIP++// You may use this file to debug, understand or extend ImPlot features but we+// don't provide any guarantee of forward compatibility!++//-----------------------------------------------------------------------------+// [SECTION] Header Mess+//-----------------------------------------------------------------------------++#pragma once++#ifndef IMPLOT_VERSION+#error Must include implot.h before implot_internal.h+#endif++#ifndef IMGUI_DISABLE+#include <time.h>+#include "imgui_internal.h"++// Support for pre-1.84 versions. ImPool's GetSize() -> GetBufSize()+#if (IMGUI_VERSION_NUM < 18303)+#define GetBufSize GetSize+#endif++//-----------------------------------------------------------------------------+// [SECTION] Constants+//-----------------------------------------------------------------------------++// Constants can be changed unless stated otherwise. We may move some of these+// to ImPlotStyleVar_ over time.++// Minimum allowable timestamp value 01/01/1970 @ 12:00am (UTC) (DO NOT DECREASE THIS)+constexpr double IMPLOT_MIN_TIME = 0;+// Maximum allowable timestamp value 01/01/3000 @ 12:00am (UTC) (DO NOT INCREASE THIS)+constexpr double IMPLOT_MAX_TIME = 32503680000;++// Default label format for axis labels+constexpr const char* IMPLOT_LABEL_FORMAT = "%g";+// Max character size for tick labels+constexpr int IMPLOT_LABEL_MAX_SIZE = 32;++// Number of X axes+constexpr int IMPLOT_NUM_X_AXES = ImAxis_Y1;+// Number of Y axes+constexpr int IMPLOT_NUM_Y_AXES = ImAxis_COUNT - IMPLOT_NUM_X_AXES;++//-----------------------------------------------------------------------------+// [SECTION] Macros+//-----------------------------------------------------------------------------++// Split ImU32 color into RGB components [0 255]+#define IM_COL32_SPLIT_RGB(col,r,g,b) \+ ImU32 r = ((col >> IM_COL32_R_SHIFT) & 0xFF); \+ ImU32 g = ((col >> IM_COL32_G_SHIFT) & 0xFF); \+ ImU32 b = ((col >> IM_COL32_B_SHIFT) & 0xFF);++//-----------------------------------------------------------------------------+// [SECTION] Forward Declarations+//-----------------------------------------------------------------------------++struct ImPlotTick;+struct ImPlotAxis;+struct ImPlotAxisColor;+struct ImPlotItem;+struct ImPlotLegend;+struct ImPlotPlot;+struct ImPlotNextPlotData;+struct ImPlotTicker;++//-----------------------------------------------------------------------------+// [SECTION] Context Pointer+//-----------------------------------------------------------------------------++#ifndef GImPlot+extern IMPLOT_API ImPlotContext* GImPlot; // Current implicit context pointer+#endif++//-----------------------------------------------------------------------------+// [SECTION] Generic Helpers+//-----------------------------------------------------------------------------++// Computes the common (base-10) logarithm+static inline float ImLog10(float x) { return log10f(x); }+static inline double ImLog10(double x) { return log10(x); }+static inline float ImSinh(float x) { return sinhf(x); }+static inline double ImSinh(double x) { return sinh(x); }+static inline float ImAsinh(float x) { return asinhf(x); }+static inline double ImAsinh(double x) { return asinh(x); }+// Returns true if a flag is set+template <typename TSet, typename TFlag>+static inline bool ImHasFlag(TSet set, TFlag flag) { return (set & flag) == flag; }+// Flips a flag in a flagset+template <typename TSet, typename TFlag>+static inline void ImFlipFlag(TSet& set, TFlag flag) { ImHasFlag(set, flag) ? set &= ~flag : set |= flag; }+// Linearly remaps x from [x0 x1] to [y0 y1].+template <typename T>+static inline T ImRemap(T x, T x0, T x1, T y0, T y1) { return y0 + (x - x0) * (y1 - y0) / (x1 - x0); }+// Linearly remaps x from [x0 x1] to [0 1]+template <typename T>+static inline T ImRemap01(T x, T x0, T x1) { return (x - x0) / (x1 - x0); }+// Returns always positive modulo (assumes r != 0)+static inline int ImPosMod(int l, int r) { return (l % r + r) % r; }+// Returns true if val is NAN+static inline bool ImNan(double val) { return isnan(val); }+// Returns true if val is NAN or INFINITY+static inline bool ImNanOrInf(double val) { return !(val >= -DBL_MAX && val <= DBL_MAX) || ImNan(val); }+// Turns NANs to 0s+static inline double ImConstrainNan(double val) { return ImNan(val) ? 0 : val; }+// Turns infinity to floating point maximums+static inline double ImConstrainInf(double val) { return val >= DBL_MAX ? DBL_MAX : val <= -DBL_MAX ? - DBL_MAX : val; }+// Turns numbers less than or equal to 0 to 0.001 (sort of arbitrary, is there a better way?)+static inline double ImConstrainLog(double val) { return val <= 0 ? 0.001f : val; }+// Turns numbers less than 0 to zero+static inline double ImConstrainTime(double val) { return val < IMPLOT_MIN_TIME ? IMPLOT_MIN_TIME : (val > IMPLOT_MAX_TIME ? IMPLOT_MAX_TIME : val); }+// True if two numbers are approximately equal using units in the last place.+static inline bool ImAlmostEqual(double v1, double v2, int ulp = 2) { return ImAbs(v1-v2) < DBL_EPSILON * ImAbs(v1+v2) * ulp || ImAbs(v1-v2) < DBL_MIN; }++// Finds min value in an unsorted array+template <typename T>+static inline T ImMinArray(const T* values, int count) { T m = values[0]; for (int i = 1; i < count; ++i) { if (values[i] < m) { m = values[i]; } } return m; }+// Finds the max value in an unsorted array+template <typename T>+static inline T ImMaxArray(const T* values, int count) { T m = values[0]; for (int i = 1; i < count; ++i) { if (values[i] > m) { m = values[i]; } } return m; }+// Finds the min and max value in an unsorted array+template <typename T>+static inline void ImMinMaxArray(const T* values, int count, T* min_out, T* max_out) {+ T Min = values[0]; T Max = values[0];+ for (int i = 1; i < count; ++i) {+ if (values[i] < Min) { Min = values[i]; }+ if (values[i] > Max) { Max = values[i]; }+ }+ *min_out = Min; *max_out = Max;+}+// Finds the sim of an array+template <typename T>+static inline T ImSum(const T* values, int count) {+ T sum = 0;+ for (int i = 0; i < count; ++i)+ sum += values[i];+ return sum;+}+// Finds the mean of an array+template <typename T>+static inline double ImMean(const T* values, int count) {+ double den = 1.0 / count;+ double mu = 0;+ for (int i = 0; i < count; ++i)+ mu += (double)values[i] * den;+ return mu;+}+// Finds the sample standard deviation of an array+template <typename T>+static inline double ImStdDev(const T* values, int count) {+ double den = 1.0 / (count - 1.0);+ double mu = ImMean(values, count);+ double x = 0;+ for (int i = 0; i < count; ++i)+ x += ((double)values[i] - mu) * ((double)values[i] - mu) * den;+ return sqrt(x);+}++// Mix color a and b by factor s in [0 256]+static inline ImU32 ImMixU32(ImU32 a, ImU32 b, ImU32 s) {+#ifdef IMPLOT_MIX64+ const ImU32 af = 256-s;+ const ImU32 bf = s;+ const ImU64 al = (a & 0x00ff00ff) | (((ImU64)(a & 0xff00ff00)) << 24);+ const ImU64 bl = (b & 0x00ff00ff) | (((ImU64)(b & 0xff00ff00)) << 24);+ const ImU64 mix = (al * af + bl * bf);+ return ((mix >> 32) & 0xff00ff00) | ((mix & 0xff00ff00) >> 8);+#else+ const ImU32 af = 256-s;+ const ImU32 bf = s;+ const ImU32 al = (a & 0x00ff00ff);+ const ImU32 ah = (a & 0xff00ff00) >> 8;+ const ImU32 bl = (b & 0x00ff00ff);+ const ImU32 bh = (b & 0xff00ff00) >> 8;+ const ImU32 ml = (al * af + bl * bf);+ const ImU32 mh = (ah * af + bh * bf);+ return (mh & 0xff00ff00) | ((ml & 0xff00ff00) >> 8);+#endif+}++// Lerp across an array of 32-bit colors given t in [0.0 1.0]+static inline ImU32 ImLerpU32(const ImU32* colors, int size, float t) {+ int i1 = (int)((size - 1 ) * t);+ int i2 = i1 + 1;+ if (i2 == size || size == 1)+ return colors[i1];+ float den = 1.0f / (size - 1);+ float t1 = i1 * den;+ float t2 = i2 * den;+ float tr = ImRemap01(t, t1, t2);+ return ImMixU32(colors[i1], colors[i2], (ImU32)(tr*256));+}++// Set alpha channel of 32-bit color from float in range [0.0 1.0]+static inline ImU32 ImAlphaU32(ImU32 col, float alpha) {+ return col & ~((ImU32)((1.0f-alpha)*255)<<IM_COL32_A_SHIFT);+}++// Returns true of two ranges overlap+template <typename T>+static inline bool ImOverlaps(T min_a, T max_a, T min_b, T max_b) {+ return min_a <= max_b && min_b <= max_a;+}++//-----------------------------------------------------------------------------+// [SECTION] ImPlot Enums+//-----------------------------------------------------------------------------++typedef int ImPlotTimeUnit; // -> enum ImPlotTimeUnit_+typedef int ImPlotDateFmt; // -> enum ImPlotDateFmt_+typedef int ImPlotTimeFmt; // -> enum ImPlotTimeFmt_+typedef int ImPlotMarkerInternal; // -> enum ImPlotMarkerInternal_++enum ImPlotTimeUnit_ {+ ImPlotTimeUnit_Us, // microsecond+ ImPlotTimeUnit_Ms, // millisecond+ ImPlotTimeUnit_S, // second+ ImPlotTimeUnit_Min, // minute+ ImPlotTimeUnit_Hr, // hour+ ImPlotTimeUnit_Day, // day+ ImPlotTimeUnit_Mo, // month+ ImPlotTimeUnit_Yr, // year+ ImPlotTimeUnit_COUNT+};++enum ImPlotDateFmt_ { // default [ ISO 8601 ]+ ImPlotDateFmt_None = 0,+ ImPlotDateFmt_DayMo, // 10/3 [ --10-03 ]+ ImPlotDateFmt_DayMoYr, // 10/3/91 [ 1991-10-03 ]+ ImPlotDateFmt_MoYr, // Oct 1991 [ 1991-10 ]+ ImPlotDateFmt_Mo, // Oct [ --10 ]+ ImPlotDateFmt_Yr // 1991 [ 1991 ]+};++enum ImPlotTimeFmt_ { // default [ 24 Hour Clock ]+ ImPlotTimeFmt_None = 0,+ ImPlotTimeFmt_Us, // .428 552 [ .428 552 ]+ ImPlotTimeFmt_SUs, // :29.428 552 [ :29.428 552 ]+ ImPlotTimeFmt_SMs, // :29.428 [ :29.428 ]+ ImPlotTimeFmt_S, // :29 [ :29 ]+ ImPlotTimeFmt_MinSMs, // 21:29.428 [ 21:29.428 ]+ ImPlotTimeFmt_HrMinSMs, // 7:21:29.428pm [ 19:21:29.428 ]+ ImPlotTimeFmt_HrMinS, // 7:21:29pm [ 19:21:29 ]+ ImPlotTimeFmt_HrMin, // 7:21pm [ 19:21 ]+ ImPlotTimeFmt_Hr // 7pm [ 19:00 ]+};++enum ImPlotMarkerInternal_ {+ ImPlotMarker_Invalid = -3+};++//-----------------------------------------------------------------------------+// [SECTION] Callbacks+//-----------------------------------------------------------------------------++typedef void (*ImPlotLocator)(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data);++//-----------------------------------------------------------------------------+// [SECTION] Structs+//-----------------------------------------------------------------------------++// Combined date/time format spec+struct ImPlotDateTimeSpec {+ ImPlotDateTimeSpec() {}+ ImPlotDateTimeSpec(ImPlotDateFmt date_fmt, ImPlotTimeFmt time_fmt, bool use_24_hr_clk = false, bool use_iso_8601 = false) {+ Date = date_fmt;+ Time = time_fmt;+ UseISO8601 = use_iso_8601;+ Use24HourClock = use_24_hr_clk;+ }+ ImPlotDateFmt Date;+ ImPlotTimeFmt Time;+ bool UseISO8601;+ bool Use24HourClock;+};++// Two part timestamp struct.+struct ImPlotTime {+ time_t S; // second part+ int Us; // microsecond part+ ImPlotTime() { S = 0; Us = 0; }+ ImPlotTime(time_t s, int us = 0) { S = s + us / 1000000; Us = us % 1000000; }+ void RollOver() { S = S + Us / 1000000; Us = Us % 1000000; }+ double ToDouble() const { return (double)S + (double)Us / 1000000.0; }+ static ImPlotTime FromDouble(double t) { return ImPlotTime((time_t)t, (int)(t * 1000000 - floor(t) * 1000000)); }+};++static inline ImPlotTime operator+(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return ImPlotTime(lhs.S + rhs.S, lhs.Us + rhs.Us); }+static inline ImPlotTime operator-(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return ImPlotTime(lhs.S - rhs.S, lhs.Us - rhs.Us); }+static inline bool operator==(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return lhs.S == rhs.S && lhs.Us == rhs.Us; }+static inline bool operator<(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return lhs.S == rhs.S ? lhs.Us < rhs.Us : lhs.S < rhs.S; }+static inline bool operator>(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return rhs < lhs; }+static inline bool operator<=(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return lhs < rhs || lhs == rhs; }+static inline bool operator>=(const ImPlotTime& lhs, const ImPlotTime& rhs)+{ return lhs > rhs || lhs == rhs; }++// Colormap data storage+struct ImPlotColormapData {+ ImVector<ImU32> Keys;+ ImVector<int> KeyCounts;+ ImVector<int> KeyOffsets;+ ImVector<ImU32> Tables;+ ImVector<int> TableSizes;+ ImVector<int> TableOffsets;+ ImGuiTextBuffer Text;+ ImVector<int> TextOffsets;+ ImVector<bool> Quals;+ ImGuiStorage Map;+ int Count;++ ImPlotColormapData() { Count = 0; }++ int Append(const char* name, const ImU32* keys, int count, bool qual) {+ if (GetIndex(name) != -1)+ return -1;+ KeyOffsets.push_back(Keys.size());+ KeyCounts.push_back(count);+ Keys.reserve(Keys.size()+count);+ for (int i = 0; i < count; ++i)+ Keys.push_back(keys[i]);+ TextOffsets.push_back(Text.size());+ Text.append(name, name + strlen(name) + 1);+ Quals.push_back(qual);+ ImGuiID id = ImHashStr(name);+ int idx = Count++;+ Map.SetInt(id,idx);+ _AppendTable(idx);+ return idx;+ }++ void _AppendTable(ImPlotColormap cmap) {+ int key_count = GetKeyCount(cmap);+ const ImU32* keys = GetKeys(cmap);+ int off = Tables.size();+ TableOffsets.push_back(off);+ if (IsQual(cmap)) {+ Tables.reserve(key_count);+ for (int i = 0; i < key_count; ++i)+ Tables.push_back(keys[i]);+ TableSizes.push_back(key_count);+ }+ else {+ int max_size = 255 * (key_count-1) + 1;+ Tables.reserve(off + max_size);+ // ImU32 last = keys[0];+ // Tables.push_back(last);+ // int n = 1;+ for (int i = 0; i < key_count-1; ++i) {+ for (int s = 0; s < 255; ++s) {+ ImU32 a = keys[i];+ ImU32 b = keys[i+1];+ ImU32 c = ImMixU32(a,b,s);+ // if (c != last) {+ Tables.push_back(c);+ // last = c;+ // n++;+ // }+ }+ }+ ImU32 c = keys[key_count-1];+ // if (c != last) {+ Tables.push_back(c);+ // n++;+ // }+ // TableSizes.push_back(n);+ TableSizes.push_back(max_size);+ }+ }++ void RebuildTables() {+ Tables.resize(0);+ TableSizes.resize(0);+ TableOffsets.resize(0);+ for (int i = 0; i < Count; ++i)+ _AppendTable(i);+ }++ inline bool IsQual(ImPlotColormap cmap) const { return Quals[cmap]; }+ inline const char* GetName(ImPlotColormap cmap) const { return cmap < Count ? Text.Buf.Data + TextOffsets[cmap] : nullptr; }+ inline ImPlotColormap GetIndex(const char* name) const { ImGuiID key = ImHashStr(name); return Map.GetInt(key,-1); }++ inline const ImU32* GetKeys(ImPlotColormap cmap) const { return &Keys[KeyOffsets[cmap]]; }+ inline int GetKeyCount(ImPlotColormap cmap) const { return KeyCounts[cmap]; }+ inline ImU32 GetKeyColor(ImPlotColormap cmap, int idx) const { return Keys[KeyOffsets[cmap]+idx]; }+ inline void SetKeyColor(ImPlotColormap cmap, int idx, ImU32 value) { Keys[KeyOffsets[cmap]+idx] = value; RebuildTables(); }++ inline const ImU32* GetTable(ImPlotColormap cmap) const { return &Tables[TableOffsets[cmap]]; }+ inline int GetTableSize(ImPlotColormap cmap) const { return TableSizes[cmap]; }+ inline ImU32 GetTableColor(ImPlotColormap cmap, int idx) const { return Tables[TableOffsets[cmap]+idx]; }++ inline ImU32 LerpTable(ImPlotColormap cmap, float t) const {+ int off = TableOffsets[cmap];+ int siz = TableSizes[cmap];+ int idx = Quals[cmap] ? ImClamp((int)(siz*t),0,siz-1) : (int)((siz - 1) * t + 0.5f);+ return Tables[off + idx];+ }+};++// ImPlotPoint with positive/negative error values+struct ImPlotPointError {+ double X, Y, Neg, Pos;+ ImPlotPointError() { X = 0; Y = 0; Neg = 0; Pos = 0; }+ ImPlotPointError(double x, double y, double neg, double pos) {+ X = x; Y = y; Neg = neg; Pos = pos;+ }+};++// Interior plot label/annotation+struct ImPlotAnnotation {+ ImVec2 Pos;+ ImVec2 Offset;+ ImU32 ColorBg;+ ImU32 ColorFg;+ int TextOffset;+ bool Clamp;+ ImPlotAnnotation() {+ ColorBg = ColorFg = 0;+ TextOffset = 0;+ Clamp = false;+ }+};++// Collection of plot labels+struct ImPlotAnnotationCollection {++ ImVector<ImPlotAnnotation> Annotations;+ ImGuiTextBuffer TextBuffer;+ int Size;++ ImPlotAnnotationCollection() { Reset(); }++ void AppendV(const ImVec2& pos, const ImVec2& off, ImU32 bg, ImU32 fg, bool clamp, const char* fmt, va_list args) IM_FMTLIST(7) {+ ImPlotAnnotation an;+ an.Pos = pos; an.Offset = off;+ an.ColorBg = bg; an.ColorFg = fg;+ an.TextOffset = TextBuffer.size();+ an.Clamp = clamp;+ Annotations.push_back(an);+ TextBuffer.appendfv(fmt, args);+ const char nul[] = "";+ TextBuffer.append(nul,nul+1);+ Size++;+ }++ void Append(const ImVec2& pos, const ImVec2& off, ImU32 bg, ImU32 fg, bool clamp, const char* fmt, ...) IM_FMTARGS(7) {+ va_list args;+ va_start(args, fmt);+ AppendV(pos, off, bg, fg, clamp, fmt, args);+ va_end(args);+ }++ const char* GetText(int idx) {+ return TextBuffer.Buf.Data + Annotations[idx].TextOffset;+ }++ void Reset() {+ Annotations.shrink(0);+ TextBuffer.Buf.shrink(0);+ Size = 0;+ }+};++struct ImPlotTag {+ ImAxis Axis;+ double Value;+ ImU32 ColorBg;+ ImU32 ColorFg;+ int TextOffset;++ ImPlotTag() {+ Axis = 0;+ Value = 0;+ ColorBg = 0;+ ColorFg = 0;+ TextOffset = 0;+ }+};++struct ImPlotTagCollection {++ ImVector<ImPlotTag> Tags;+ ImGuiTextBuffer TextBuffer;+ int Size;++ ImPlotTagCollection() { Reset(); }++ void AppendV(ImAxis axis, double value, ImU32 bg, ImU32 fg, const char* fmt, va_list args) IM_FMTLIST(6) {+ ImPlotTag tag;+ tag.Axis = axis;+ tag.Value = value;+ tag.ColorBg = bg;+ tag.ColorFg = fg;+ tag.TextOffset = TextBuffer.size();+ Tags.push_back(tag);+ TextBuffer.appendfv(fmt, args);+ const char nul[] = "";+ TextBuffer.append(nul,nul+1);+ Size++;+ }++ void Append(ImAxis axis, double value, ImU32 bg, ImU32 fg, const char* fmt, ...) IM_FMTARGS(6) {+ va_list args;+ va_start(args, fmt);+ AppendV(axis, value, bg, fg, fmt, args);+ va_end(args);+ }++ const char* GetText(int idx) {+ return TextBuffer.Buf.Data + Tags[idx].TextOffset;+ }++ void Reset() {+ Tags.shrink(0);+ TextBuffer.Buf.shrink(0);+ Size = 0;+ }+};++// Tick mark info+struct ImPlotTick+{+ double PlotPos;+ float PixelPos;+ ImVec2 LabelSize;+ int TextOffset;+ bool Major;+ bool ShowLabel;+ int Level;+ int Idx;++ ImPlotTick() {+ PlotPos = 0;+ PixelPos = 0;+ LabelSize = ImVec2(0,0);+ TextOffset = -1;+ Major = false;+ ShowLabel = false;+ Level = 0;+ Idx = -1;+ }++ ImPlotTick(double value, bool major, int level, bool show_label) {+ PixelPos = 0;+ PlotPos = value;+ Major = major;+ ShowLabel = show_label;+ Level = level;+ TextOffset = -1;+ }+};++// Collection of ticks+struct ImPlotTicker {+ ImVector<ImPlotTick> Ticks;+ ImGuiTextBuffer TextBuffer;+ ImVec2 MaxSize;+ ImVec2 LateSize;+ int Levels;++ ImPlotTicker() {+ Reset();+ }++ ImPlotTick& AddTick(double value, bool major, int level, bool show_label, const char* label) {+ ImPlotTick tick(value, major, level, show_label);+ if (show_label && label != nullptr) {+ tick.TextOffset = TextBuffer.size();+ TextBuffer.append(label, label + strlen(label) + 1);+ tick.LabelSize = ImGui::CalcTextSize(TextBuffer.Buf.Data + tick.TextOffset);+ }+ return AddTick(tick);+ }++ ImPlotTick& AddTick(double value, bool major, int level, bool show_label, ImPlotFormatter formatter, void* data) {+ ImPlotTick tick(value, major, level, show_label);+ if (show_label && formatter != nullptr) {+ char buff[IMPLOT_LABEL_MAX_SIZE];+ tick.TextOffset = TextBuffer.size();+ formatter(tick.PlotPos, buff, sizeof(buff), data);+ TextBuffer.append(buff, buff + strlen(buff) + 1);+ tick.LabelSize = ImGui::CalcTextSize(TextBuffer.Buf.Data + tick.TextOffset);+ }+ return AddTick(tick);+ }++ inline ImPlotTick& AddTick(ImPlotTick tick) {+ if (tick.ShowLabel) {+ MaxSize.x = tick.LabelSize.x > MaxSize.x ? tick.LabelSize.x : MaxSize.x;+ MaxSize.y = tick.LabelSize.y > MaxSize.y ? tick.LabelSize.y : MaxSize.y;+ }+ tick.Idx = Ticks.size();+ Ticks.push_back(tick);+ return Ticks.back();+ }++ const char* GetText(int idx) const {+ return TextBuffer.Buf.Data + Ticks[idx].TextOffset;+ }++ const char* GetText(const ImPlotTick& tick) {+ return GetText(tick.Idx);+ }++ void OverrideSizeLate(const ImVec2& size) {+ LateSize.x = size.x > LateSize.x ? size.x : LateSize.x;+ LateSize.y = size.y > LateSize.y ? size.y : LateSize.y;+ }++ void Reset() {+ Ticks.shrink(0);+ TextBuffer.Buf.shrink(0);+ MaxSize = LateSize;+ LateSize = ImVec2(0,0);+ Levels = 1;+ }++ int TickCount() const {+ return Ticks.Size;+ }+};++// Axis state information that must persist after EndPlot+struct ImPlotAxis+{+ ImGuiID ID;+ ImPlotAxisFlags Flags;+ ImPlotAxisFlags PreviousFlags;+ ImPlotRange Range;+ ImPlotCond RangeCond;+ ImPlotScale Scale;+ ImPlotRange FitExtents;+ ImPlotAxis* OrthoAxis;+ ImPlotRange ConstraintRange;+ ImPlotRange ConstraintZoom;++ ImPlotTicker Ticker;+ ImPlotFormatter Formatter;+ void* FormatterData;+ char FormatSpec[16];+ ImPlotLocator Locator;++ double* LinkedMin;+ double* LinkedMax;++ int PickerLevel;+ ImPlotTime PickerTimeMin, PickerTimeMax;++ ImPlotTransform TransformForward;+ ImPlotTransform TransformInverse;+ void* TransformData;+ float PixelMin, PixelMax;+ double ScaleMin, ScaleMax;+ double ScaleToPixel;+ float Datum1, Datum2;++ ImRect HoverRect;+ int LabelOffset;+ ImU32 ColorMaj, ColorMin, ColorTick, ColorTxt, ColorBg, ColorHov, ColorAct, ColorHiLi;++ bool Enabled;+ bool Vertical;+ bool FitThisFrame;+ bool HasRange;+ bool HasFormatSpec;+ bool ShowDefaultTicks;+ bool Hovered;+ bool Held;++ ImPlotAxis() {+ ID = 0;+ Flags = PreviousFlags = ImPlotAxisFlags_None;+ Range.Min = 0;+ Range.Max = 1;+ Scale = ImPlotScale_Linear;+ TransformForward = TransformInverse = nullptr;+ TransformData = nullptr;+ FitExtents.Min = HUGE_VAL;+ FitExtents.Max = -HUGE_VAL;+ OrthoAxis = nullptr;+ ConstraintRange = ImPlotRange(-INFINITY,INFINITY);+ ConstraintZoom = ImPlotRange(DBL_MIN,INFINITY);+ LinkedMin = LinkedMax = nullptr;+ PickerLevel = 0;+ Datum1 = Datum2 = 0;+ PixelMin = PixelMax = 0;+ LabelOffset = -1;+ ColorMaj = ColorMin = ColorTick = ColorTxt = ColorBg = ColorHov = ColorAct = 0;+ ColorHiLi = IM_COL32_BLACK_TRANS;+ Formatter = nullptr;+ FormatterData = nullptr;+ Locator = nullptr;+ Enabled = Hovered = Held = FitThisFrame = HasRange = HasFormatSpec = false;+ ShowDefaultTicks = true;+ }++ inline void Reset() {+ Enabled = false;+ Scale = ImPlotScale_Linear;+ TransformForward = TransformInverse = nullptr;+ TransformData = nullptr;+ LabelOffset = -1;+ HasFormatSpec = false;+ Formatter = nullptr;+ FormatterData = nullptr;+ Locator = nullptr;+ ShowDefaultTicks = true;+ FitThisFrame = false;+ FitExtents.Min = HUGE_VAL;+ FitExtents.Max = -HUGE_VAL;+ OrthoAxis = nullptr;+ ConstraintRange = ImPlotRange(-INFINITY,INFINITY);+ ConstraintZoom = ImPlotRange(DBL_MIN,INFINITY);+ Ticker.Reset();+ }++ inline bool SetMin(double _min, bool force=false) {+ if (!force && IsLockedMin())+ return false;+ _min = ImConstrainNan(ImConstrainInf(_min));+ if (_min < ConstraintRange.Min)+ _min = ConstraintRange.Min;+ double z = Range.Max - _min;+ if (z < ConstraintZoom.Min)+ _min = Range.Max - ConstraintZoom.Min;+ if (z > ConstraintZoom.Max)+ _min = Range.Max - ConstraintZoom.Max;+ if (_min >= Range.Max)+ return false;+ Range.Min = _min;+ PickerTimeMin = ImPlotTime::FromDouble(Range.Min);+ UpdateTransformCache();+ return true;+ }++ inline bool SetMax(double _max, bool force=false) {+ if (!force && IsLockedMax())+ return false;+ _max = ImConstrainNan(ImConstrainInf(_max));+ if (_max > ConstraintRange.Max)+ _max = ConstraintRange.Max;+ double z = _max - Range.Min;+ if (z < ConstraintZoom.Min)+ _max = Range.Min + ConstraintZoom.Min;+ if (z > ConstraintZoom.Max)+ _max = Range.Min + ConstraintZoom.Max;+ if (_max <= Range.Min)+ return false;+ Range.Max = _max;+ PickerTimeMax = ImPlotTime::FromDouble(Range.Max);+ UpdateTransformCache();+ return true;+ }++ inline void SetRange(double v1, double v2) {+ Range.Min = ImMin(v1,v2);+ Range.Max = ImMax(v1,v2);+ Constrain();+ PickerTimeMin = ImPlotTime::FromDouble(Range.Min);+ PickerTimeMax = ImPlotTime::FromDouble(Range.Max);+ UpdateTransformCache();+ }++ inline void SetRange(const ImPlotRange& range) {+ SetRange(range.Min, range.Max);+ }++ inline void SetAspect(double unit_per_pix) {+ double new_size = unit_per_pix * PixelSize();+ double delta = (new_size - Range.Size()) * 0.5;+ if (IsLocked())+ return;+ else if (IsLockedMin() && !IsLockedMax())+ SetRange(Range.Min, Range.Max + 2*delta);+ else if (!IsLockedMin() && IsLockedMax())+ SetRange(Range.Min - 2*delta, Range.Max);+ else+ SetRange(Range.Min - delta, Range.Max + delta);+ }++ inline float PixelSize() const { return ImAbs(PixelMax - PixelMin); }++ inline double GetAspect() const { return Range.Size() / PixelSize(); }++ inline void Constrain() {+ Range.Min = ImConstrainNan(ImConstrainInf(Range.Min));+ Range.Max = ImConstrainNan(ImConstrainInf(Range.Max));+ if (Range.Min < ConstraintRange.Min)+ Range.Min = ConstraintRange.Min;+ if (Range.Max > ConstraintRange.Max)+ Range.Max = ConstraintRange.Max;+ double z = Range.Size();+ if (z < ConstraintZoom.Min) {+ double delta = (ConstraintZoom.Min - z) * 0.5;+ Range.Min -= delta;+ Range.Max += delta;+ }+ if (z > ConstraintZoom.Max) {+ double delta = (z - ConstraintZoom.Max) * 0.5;+ Range.Min += delta;+ Range.Max -= delta;+ }+ if (Range.Max <= Range.Min)+ Range.Max = Range.Min + DBL_EPSILON;+ }++ inline void UpdateTransformCache() {+ ScaleToPixel = (PixelMax - PixelMin) / Range.Size();+ if (TransformForward != nullptr) {+ ScaleMin = TransformForward(Range.Min, TransformData);+ ScaleMax = TransformForward(Range.Max, TransformData);+ }+ else {+ ScaleMin = Range.Min;+ ScaleMax = Range.Max;+ }+ }++ inline float PlotToPixels(double plt) const {+ if (TransformForward != nullptr) {+ double s = TransformForward(plt, TransformData);+ double t = (s - ScaleMin) / (ScaleMax - ScaleMin);+ plt = Range.Min + Range.Size() * t;+ }+ return (float)(PixelMin + ScaleToPixel * (plt - Range.Min));+ }+++ inline double PixelsToPlot(float pix) const {+ double plt = (pix - PixelMin) / ScaleToPixel + Range.Min;+ if (TransformInverse != nullptr) {+ double t = (plt - Range.Min) / Range.Size();+ double s = t * (ScaleMax - ScaleMin) + ScaleMin;+ plt = TransformInverse(s, TransformData);+ }+ return plt;+ }++ inline void ExtendFit(double v) {+ if (!ImNanOrInf(v) && v >= ConstraintRange.Min && v <= ConstraintRange.Max) {+ FitExtents.Min = v < FitExtents.Min ? v : FitExtents.Min;+ FitExtents.Max = v > FitExtents.Max ? v : FitExtents.Max;+ }+ }++ inline void ExtendFitWith(ImPlotAxis& alt, double v, double v_alt) {+ if (ImHasFlag(Flags, ImPlotAxisFlags_RangeFit) && !alt.Range.Contains(v_alt))+ return;+ if (!ImNanOrInf(v) && v >= ConstraintRange.Min && v <= ConstraintRange.Max) {+ FitExtents.Min = v < FitExtents.Min ? v : FitExtents.Min;+ FitExtents.Max = v > FitExtents.Max ? v : FitExtents.Max;+ }+ }++ inline void ApplyFit(float padding) {+ const double ext_size = FitExtents.Size() * 0.5;+ FitExtents.Min -= ext_size * padding;+ FitExtents.Max += ext_size * padding;+ if (!IsLockedMin() && !ImNanOrInf(FitExtents.Min))+ Range.Min = FitExtents.Min;+ if (!IsLockedMax() && !ImNanOrInf(FitExtents.Max))+ Range.Max = FitExtents.Max;+ if (ImAlmostEqual(Range.Min, Range.Max)) {+ Range.Max += 0.5;+ Range.Min -= 0.5;+ }+ Constrain();+ UpdateTransformCache();+ }++ inline bool HasLabel() const { return LabelOffset != -1 && !ImHasFlag(Flags, ImPlotAxisFlags_NoLabel); }+ inline bool HasGridLines() const { return !ImHasFlag(Flags, ImPlotAxisFlags_NoGridLines); }+ inline bool HasTickLabels() const { return !ImHasFlag(Flags, ImPlotAxisFlags_NoTickLabels); }+ inline bool HasTickMarks() const { return !ImHasFlag(Flags, ImPlotAxisFlags_NoTickMarks); }+ inline bool WillRender() const { return Enabled && (HasGridLines() || HasTickLabels() || HasTickMarks()); }+ inline bool IsOpposite() const { return ImHasFlag(Flags, ImPlotAxisFlags_Opposite); }+ inline bool IsInverted() const { return ImHasFlag(Flags, ImPlotAxisFlags_Invert); }+ inline bool IsForeground() const { return ImHasFlag(Flags, ImPlotAxisFlags_Foreground); }+ inline bool IsAutoFitting() const { return ImHasFlag(Flags, ImPlotAxisFlags_AutoFit); }+ inline bool CanInitFit() const { return !ImHasFlag(Flags, ImPlotAxisFlags_NoInitialFit) && !HasRange && !LinkedMin && !LinkedMax; }+ inline bool IsRangeLocked() const { return HasRange && RangeCond == ImPlotCond_Always; }+ inline bool IsLockedMin() const { return !Enabled || IsRangeLocked() || ImHasFlag(Flags, ImPlotAxisFlags_LockMin); }+ inline bool IsLockedMax() const { return !Enabled || IsRangeLocked() || ImHasFlag(Flags, ImPlotAxisFlags_LockMax); }+ inline bool IsLocked() const { return IsLockedMin() && IsLockedMax(); }+ inline bool IsInputLockedMin() const { return IsLockedMin() || IsAutoFitting(); }+ inline bool IsInputLockedMax() const { return IsLockedMax() || IsAutoFitting(); }+ inline bool IsInputLocked() const { return IsLocked() || IsAutoFitting(); }+ inline bool HasMenus() const { return !ImHasFlag(Flags, ImPlotAxisFlags_NoMenus); }++ inline bool IsPanLocked(bool increasing) {+ if (ImHasFlag(Flags, ImPlotAxisFlags_PanStretch)) {+ return IsInputLocked();+ }+ else {+ if (IsLockedMin() || IsLockedMax() || IsAutoFitting())+ return false;+ if (increasing)+ return Range.Max == ConstraintRange.Max;+ else+ return Range.Min == ConstraintRange.Min;+ }+ }++ void PushLinks() {+ if (LinkedMin) { *LinkedMin = Range.Min; }+ if (LinkedMax) { *LinkedMax = Range.Max; }+ }++ void PullLinks() {+ if (LinkedMin && LinkedMax) { SetRange(*LinkedMin, *LinkedMax); }+ else if (LinkedMin) { SetMin(*LinkedMin,true); }+ else if (LinkedMax) { SetMax(*LinkedMax,true); }+ }+};++// Align plots group data+struct ImPlotAlignmentData {+ bool Vertical;+ float PadA;+ float PadB;+ float PadAMax;+ float PadBMax;+ ImPlotAlignmentData() {+ Vertical = true;+ PadA = PadB = PadAMax = PadBMax = 0;+ }+ void Begin() { PadAMax = PadBMax = 0; }+ void Update(float& pad_a, float& pad_b, float& delta_a, float& delta_b) {+ float bak_a = pad_a; float bak_b = pad_b;+ if (PadAMax < pad_a) { PadAMax = pad_a; }+ if (PadBMax < pad_b) { PadBMax = pad_b; }+ if (pad_a < PadA) { pad_a = PadA; delta_a = pad_a - bak_a; } else { delta_a = 0; }+ if (pad_b < PadB) { pad_b = PadB; delta_b = pad_b - bak_b; } else { delta_b = 0; }+ }+ void End() { PadA = PadAMax; PadB = PadBMax; }+ void Reset() { PadA = PadB = PadAMax = PadBMax = 0; }+};++// State information for Plot items+struct ImPlotItem+{+ ImGuiID ID;+ ImU32 Color;+ ImPlotMarker Marker;+ ImRect LegendHoverRect;+ int NameOffset;+ bool Show;+ bool LegendHovered;+ bool SeenThisFrame;++ ImPlotItem() {+ ID = 0;+ Color = IM_COL32_WHITE;+ Marker = ImPlotMarker_None;+ NameOffset = -1;+ Show = true;+ SeenThisFrame = false;+ LegendHovered = false;+ }++ ~ImPlotItem() { ID = 0; }+};++// Holds Legend state+struct ImPlotLegend+{+ ImPlotLegendFlags Flags;+ ImPlotLegendFlags PreviousFlags;+ ImPlotLocation Location;+ ImPlotLocation PreviousLocation;+ ImVec2 Scroll;+ ImVector<int> Indices;+ ImGuiTextBuffer Labels;+ ImRect Rect;+ ImRect RectClamped;+ bool Hovered;+ bool Held;+ bool CanGoInside;++ ImPlotLegend() {+ Flags = PreviousFlags = ImPlotLegendFlags_None;+ CanGoInside = true;+ Hovered = Held = false;+ Location = PreviousLocation = ImPlotLocation_NorthWest;+ Scroll = ImVec2(0,0);+ }++ void Reset() { Indices.shrink(0); Labels.Buf.shrink(0); }+};++// Holds Items and Legend data+struct ImPlotItemGroup+{+ ImGuiID ID;+ ImPlotLegend Legend;+ ImPool<ImPlotItem> ItemPool;+ int ColormapIdx;+ ImPlotMarker MarkerIdx;++ ImPlotItemGroup() { ID = 0; ColormapIdx = 0; MarkerIdx = 0; }++ int GetItemCount() const { return ItemPool.GetBufSize(); }+ ImGuiID GetItemID(const char* label_id) { return ImGui::GetID(label_id); /* GetIDWithSeed */ }+ ImPlotItem* GetItem(ImGuiID id) { return ItemPool.GetByKey(id); }+ ImPlotItem* GetItem(const char* label_id) { return GetItem(GetItemID(label_id)); }+ ImPlotItem* GetOrAddItem(ImGuiID id) { return ItemPool.GetOrAddByKey(id); }+ ImPlotItem* GetItemByIndex(int i) { return ItemPool.GetByIndex(i); }+ int GetItemIndex(ImPlotItem* item) { return ItemPool.GetIndex(item); }+ int GetLegendCount() const { return Legend.Indices.size(); }+ ImPlotItem* GetLegendItem(int i) { return ItemPool.GetByIndex(Legend.Indices[i]); }+ const char* GetLegendLabel(int i) { return Legend.Labels.Buf.Data + GetLegendItem(i)->NameOffset; }+ void Reset() { ItemPool.Clear(); Legend.Reset(); ColormapIdx = 0; }+};++// Holds Plot state information that must persist after EndPlot+struct ImPlotPlot+{+ ImGuiID ID;+ ImPlotFlags Flags;+ ImPlotFlags PreviousFlags;+ ImPlotLocation MouseTextLocation;+ ImPlotMouseTextFlags MouseTextFlags;+ ImPlotAxis Axes[ImAxis_COUNT];+ ImGuiTextBuffer TextBuffer;+ ImPlotItemGroup Items;+ ImAxis CurrentX;+ ImAxis CurrentY;+ ImRect FrameRect;+ ImRect CanvasRect;+ ImRect PlotRect;+ ImRect AxesRect;+ ImRect SelectRect;+ ImVec2 SelectStart;+ int TitleOffset;+ bool JustCreated;+ bool Initialized;+ bool SetupLocked;+ bool FitThisFrame;+ bool Hovered;+ bool Held;+ bool Selecting;+ bool Selected;+ bool ContextLocked;++ ImPlotPlot() {+ Flags = PreviousFlags = ImPlotFlags_None;+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i)+ XAxis(i).Vertical = false;+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i)+ YAxis(i).Vertical = true;+ SelectStart = ImVec2(0,0);+ CurrentX = ImAxis_X1;+ CurrentY = ImAxis_Y1;+ MouseTextLocation = ImPlotLocation_South | ImPlotLocation_East;+ MouseTextFlags = ImPlotMouseTextFlags_None;+ TitleOffset = -1;+ JustCreated = true;+ Initialized = SetupLocked = FitThisFrame = false;+ Hovered = Held = Selected = Selecting = ContextLocked = false;+ }++ inline bool IsInputLocked() const {+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i) {+ if (!XAxis(i).IsInputLocked())+ return false;+ }+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i) {+ if (!YAxis(i).IsInputLocked())+ return false;+ }+ return true;+ }++ inline void ClearTextBuffer() { TextBuffer.Buf.shrink(0); }++ inline void SetTitle(const char* title) {+ if (title && ImGui::FindRenderedTextEnd(title, nullptr) != title) {+ TitleOffset = TextBuffer.size();+ TextBuffer.append(title, title + strlen(title) + 1);+ }+ else {+ TitleOffset = -1;+ }+ }+ inline bool HasTitle() const { return TitleOffset != -1 && !ImHasFlag(Flags, ImPlotFlags_NoTitle); }+ inline const char* GetTitle() const { return TextBuffer.Buf.Data + TitleOffset; }++ inline ImPlotAxis& XAxis(int i) { return Axes[ImAxis_X1 + i]; }+ inline const ImPlotAxis& XAxis(int i) const { return Axes[ImAxis_X1 + i]; }+ inline ImPlotAxis& YAxis(int i) { return Axes[ImAxis_Y1 + i]; }+ inline const ImPlotAxis& YAxis(int i) const { return Axes[ImAxis_Y1 + i]; }++ inline int EnabledAxesX() {+ int cnt = 0;+ for (int i = 0; i < IMPLOT_NUM_X_AXES; ++i)+ cnt += XAxis(i).Enabled;+ return cnt;+ }++ inline int EnabledAxesY() {+ int cnt = 0;+ for (int i = 0; i < IMPLOT_NUM_Y_AXES; ++i)+ cnt += YAxis(i).Enabled;+ return cnt;+ }++ inline void SetAxisLabel(ImPlotAxis& axis, const char* label) {+ if (label && ImGui::FindRenderedTextEnd(label, nullptr) != label) {+ axis.LabelOffset = TextBuffer.size();+ TextBuffer.append(label, label + strlen(label) + 1);+ }+ else {+ axis.LabelOffset = -1;+ }+ }++ inline const char* GetAxisLabel(const ImPlotAxis& axis) const { return TextBuffer.Buf.Data + axis.LabelOffset; }+};++// Holds subplot data that must persist after EndSubplot+struct ImPlotSubplot {+ ImGuiID ID;+ ImPlotSubplotFlags Flags;+ ImPlotSubplotFlags PreviousFlags;+ ImPlotItemGroup Items;+ int Rows;+ int Cols;+ int CurrentIdx;+ ImRect FrameRect;+ ImRect GridRect;+ ImVec2 CellSize;+ ImVector<ImPlotAlignmentData> RowAlignmentData;+ ImVector<ImPlotAlignmentData> ColAlignmentData;+ ImVector<float> RowRatios;+ ImVector<float> ColRatios;+ ImVector<ImPlotRange> RowLinkData;+ ImVector<ImPlotRange> ColLinkData;+ float TempSizes[2];+ bool FrameHovered;+ bool HasTitle;++ ImPlotSubplot() {+ ID = 0;+ Flags = PreviousFlags = ImPlotSubplotFlags_None;+ Rows = Cols = CurrentIdx = 0;+ Items.Legend.Location = ImPlotLocation_North;+ Items.Legend.Flags = ImPlotLegendFlags_Horizontal|ImPlotLegendFlags_Outside;+ Items.Legend.CanGoInside = false;+ TempSizes[0] = TempSizes[1] = 0;+ FrameHovered = false;+ HasTitle = false;+ }+};++// Temporary data storage for upcoming plot+struct ImPlotNextPlotData+{+ ImPlotCond RangeCond[ImAxis_COUNT];+ ImPlotRange Range[ImAxis_COUNT];+ bool HasRange[ImAxis_COUNT];+ bool Fit[ImAxis_COUNT];+ double* LinkedMin[ImAxis_COUNT];+ double* LinkedMax[ImAxis_COUNT];++ ImPlotNextPlotData() { Reset(); }++ void Reset() {+ for (int i = 0; i < ImAxis_COUNT; ++i) {+ HasRange[i] = false;+ Fit[i] = false;+ LinkedMin[i] = LinkedMax[i] = nullptr;+ }+ }++};++// Temporary data storage for upcoming item+struct ImPlotNextItemData {+ ImPlotSpec Spec;+ bool RenderLine;+ bool RenderFill;+ bool RenderMarkerLine;+ bool RenderMarkerFill;+ bool RenderMarkers;+ bool HasHidden;+ bool Hidden;+ ImPlotCond HiddenCond;+ ImPlotNextItemData() { Reset(); }+ void Reset() {+ Spec = ImPlotSpec();+ HasHidden = Hidden = false;+ HiddenCond = ImPlotCond_None;+ }+};++// Holds state information that must persist between calls to BeginPlot()/EndPlot()+struct ImPlotContext {+ // Plot States+ ImPool<ImPlotPlot> Plots;+ ImPool<ImPlotSubplot> Subplots;+ ImPlotPlot* CurrentPlot;+ ImPlotSubplot* CurrentSubplot;+ ImPlotItemGroup* CurrentItems;+ ImPlotItem* CurrentItem;+ ImPlotItem* PreviousItem;++ // Tick Marks and Labels+ ImPlotTicker CTicker;++ // Annotation and Tabs+ ImPlotAnnotationCollection Annotations;+ ImPlotTagCollection Tags;++ // Style and Colormaps+ ImPlotStyle Style;+ ImVector<ImGuiColorMod> ColorModifiers;+ ImVector<ImGuiStyleMod> StyleModifiers;+ ImPlotColormapData ColormapData;+ ImVector<ImPlotColormap> ColormapModifiers;++ // Time+ tm Tm;++ // Temp data for general use+ ImVector<double> TempDouble1, TempDouble2;+ ImVector<int> TempInt1;++ // Misc+ int DigitalPlotItemCnt;+ int DigitalPlotOffset;+ ImPlotNextPlotData NextPlotData;+ ImPlotNextItemData NextItemData;+ ImPlotInputMap InputMap;+ bool OpenContextThisFrame;+ ImGuiTextBuffer MousePosStringBuilder;+ ImPlotItemGroup* SortItems;++ // Align plots+ ImPool<ImPlotAlignmentData> AlignmentData;+ ImPlotAlignmentData* CurrentAlignmentH;+ ImPlotAlignmentData* CurrentAlignmentV;+};++//-----------------------------------------------------------------------------+// [SECTION] Internal API+// No guarantee of forward compatibility here!+//-----------------------------------------------------------------------------++namespace ImPlot {++//-----------------------------------------------------------------------------+// [SECTION] Context Utils+//-----------------------------------------------------------------------------++// Initializes an ImPlotContext+IMPLOT_API void Initialize(ImPlotContext* ctx);+// Resets an ImPlot context for the next call to BeginPlot+IMPLOT_API void ResetCtxForNextPlot(ImPlotContext* ctx);+// Resets an ImPlot context for the next call to BeginAlignedPlots+IMPLOT_API void ResetCtxForNextAlignedPlots(ImPlotContext* ctx);+// Resets an ImPlot context for the next call to BeginSubplot+IMPLOT_API void ResetCtxForNextSubplot(ImPlotContext* ctx);++//-----------------------------------------------------------------------------+// [SECTION] Plot Utils+//-----------------------------------------------------------------------------++// Gets a plot from the current ImPlotContext+IMPLOT_API ImPlotPlot* GetPlot(const char* title);+// Gets the current plot from the current ImPlotContext+IMPLOT_API ImPlotPlot* GetCurrentPlot();+// Busts the cache for every plot in the current context+IMPLOT_API void BustPlotCache();++// Shows a plot's context menu.+IMPLOT_API void ShowPlotContextMenu(ImPlotPlot& plot);++//-----------------------------------------------------------------------------+// [SECTION] Setup Utils+//-----------------------------------------------------------------------------++// Lock Setup and call SetupFinish if necessary.+static inline void SetupLock() {+ ImPlotContext& gp = *GImPlot;+ if (!gp.CurrentPlot->SetupLocked)+ SetupFinish();+ gp.CurrentPlot->SetupLocked = true;+}++//-----------------------------------------------------------------------------+// [SECTION] Subplot Utils+//-----------------------------------------------------------------------------++// Advances to next subplot+IMPLOT_API void SubplotNextCell();++// Shows a subplot's context menu.+IMPLOT_API void ShowSubplotsContextMenu(ImPlotSubplot& subplot);++//-----------------------------------------------------------------------------+// [SECTION] Item Utils+//-----------------------------------------------------------------------------++// Begins a new item. Returns false if the item should not be plotted. Pushes PlotClipRect.+IMPLOT_API bool BeginItem(const char* label_id, const ImPlotSpec& spec = ImPlotSpec(), const ImVec4& item_col = IMPLOT_AUTO_COL, ImPlotMarker item_mkr = ImPlotMarker_Invalid);++// Same as above but with fitting functionality.+template <typename _Fitter>+bool BeginItemEx(const char* label_id, const _Fitter& fitter, const ImPlotSpec& spec, const ImVec4& item_col = IMPLOT_AUTO_COL, ImPlotMarker item_mkr = ImPlotMarker_Invalid) {+ if (BeginItem(label_id, spec, item_col, item_mkr)) {+ ImPlotPlot& plot = *GetCurrentPlot();+ if (plot.FitThisFrame && !ImHasFlag(spec.Flags, ImPlotItemFlags_NoFit))+ fitter.Fit(plot.Axes[plot.CurrentX], plot.Axes[plot.CurrentY]);+ return true;+ }+ return false;+}++// Ends an item (call only if BeginItem returns true). Pops PlotClipRect.+IMPLOT_API void EndItem();++// Register or get an existing item from the current plot.+IMPLOT_API ImPlotItem* RegisterOrGetItem(const char* label_id, ImPlotItemFlags flags, bool* just_created = nullptr);+// Get a plot item from the current plot.+IMPLOT_API ImPlotItem* GetItem(const char* label_id);+// Gets the current item.+IMPLOT_API ImPlotItem* GetCurrentItem();+// Busts the cache for every item for every plot in the current context.+IMPLOT_API void BustItemCache();++//-----------------------------------------------------------------------------+// [SECTION] Axis Utils+//-----------------------------------------------------------------------------++// Returns true if any enabled axis is locked from user input.+static inline bool AnyAxesInputLocked(ImPlotAxis* axes, int count) {+ for (int i = 0; i < count; ++i) {+ if (axes[i].Enabled && axes[i].IsInputLocked())+ return true;+ }+ return false;+}++// Returns true if all enabled axes are locked from user input.+static inline bool AllAxesInputLocked(ImPlotAxis* axes, int count) {+ for (int i = 0; i < count; ++i) {+ if (axes[i].Enabled && !axes[i].IsInputLocked())+ return false;+ }+ return true;+}++static inline bool AnyAxesHeld(ImPlotAxis* axes, int count) {+ for (int i = 0; i < count; ++i) {+ if (axes[i].Enabled && axes[i].Held)+ return true;+ }+ return false;+}++static inline bool AnyAxesHovered(ImPlotAxis* axes, int count) {+ for (int i = 0; i < count; ++i) {+ if (axes[i].Enabled && axes[i].Hovered)+ return true;+ }+ return false;+}++// Returns true if the user has requested data to be fit.+static inline bool FitThisFrame() {+ return GImPlot->CurrentPlot->FitThisFrame;+}++// Extends the current plot's axes so that it encompasses a vertical line at x+static inline void FitPointX(double x) {+ ImPlotPlot& plot = *GetCurrentPlot();+ ImPlotAxis& x_axis = plot.Axes[plot.CurrentX];+ x_axis.ExtendFit(x);+}++// Extends the current plot's axes so that it encompasses a horizontal line at y+static inline void FitPointY(double y) {+ ImPlotPlot& plot = *GetCurrentPlot();+ ImPlotAxis& y_axis = plot.Axes[plot.CurrentY];+ y_axis.ExtendFit(y);+}++// Extends the current plot's axes so that it encompasses point p+static inline void FitPoint(const ImPlotPoint& p) {+ ImPlotPlot& plot = *GetCurrentPlot();+ ImPlotAxis& x_axis = plot.Axes[plot.CurrentX];+ ImPlotAxis& y_axis = plot.Axes[plot.CurrentY];+ x_axis.ExtendFitWith(y_axis, p.x, p.y);+ y_axis.ExtendFitWith(x_axis, p.y, p.x);+}++// Returns true if two ranges overlap+static inline bool RangesOverlap(const ImPlotRange& r1, const ImPlotRange& r2)+{ return r1.Min <= r2.Max && r2.Min <= r1.Max; }++// Shows an axis's context menu.+IMPLOT_API void ShowAxisContextMenu(ImPlotAxis& axis, ImPlotAxis* equal_axis, bool time_allowed = false);++//-----------------------------------------------------------------------------+// [SECTION] Legend Utils+//-----------------------------------------------------------------------------++// Gets the position of an inner rect that is located inside of an outer rect according to an ImPlotLocation and padding amount.+IMPLOT_API ImVec2 GetLocationPos(const ImRect& outer_rect, const ImVec2& inner_size, ImPlotLocation location, const ImVec2& pad = ImVec2(0,0));+// Calculates the bounding box size of a legend _before_ clipping.+IMPLOT_API ImVec2 CalcLegendSize(ImPlotItemGroup& items, const ImVec2& pad, const ImVec2& spacing, bool vertical);+// Clips calculated legend size+IMPLOT_API bool ClampLegendRect(ImRect& legend_rect, const ImRect& outer_rect, const ImVec2& pad);+// Renders legend entries into a bounding box+IMPLOT_API bool ShowLegendEntries(ImPlotItemGroup& items, const ImRect& legend_bb, bool interactable, const ImVec2& pad, const ImVec2& spacing, bool vertical, ImDrawList& DrawList);+// Shows an alternate legend for the plot identified by #title_id, outside of the plot frame (can be called before or after of Begin/EndPlot but must occur in the same ImGui window! This is not thoroughly tested nor scrollable!).+IMPLOT_API void ShowAltLegend(const char* title_id, bool vertical = true, const ImVec2 size = ImVec2(0,0), bool interactable = true);+// Shows a legend's context menu.+IMPLOT_API bool ShowLegendContextMenu(ImPlotLegend& legend, bool visible);++//-----------------------------------------------------------------------------+// [SECTION] Label Utils+//-----------------------------------------------------------------------------++// Create a a string label for a an axis value+IMPLOT_API void LabelAxisValue(const ImPlotAxis& axis, double value, char* buff, int size, bool round = false);++//-----------------------------------------------------------------------------+// [SECTION] Styling Utils+//-----------------------------------------------------------------------------++// Get styling data for next item (call between Begin/EndItem)+static inline const ImPlotNextItemData& GetItemData() { return GImPlot->NextItemData; }++// Returns true if a color is set to be automatically determined+static inline bool IsColorAuto(const ImVec4& col) { return col.w == -1; }+// Returns true if a style color is set to be automatically determined+static inline bool IsColorAuto(ImPlotCol idx) { return IsColorAuto(GImPlot->Style.Colors[idx]); }+// Returns the automatically deduced style color+IMPLOT_API ImVec4 GetAutoColor(ImPlotCol idx);++// Returns the style color whether it is automatic or custom set+static inline ImVec4 GetStyleColorVec4(ImPlotCol idx) { return IsColorAuto(idx) ? GetAutoColor(idx) : GImPlot->Style.Colors[idx]; }+static inline ImU32 GetStyleColorU32(ImPlotCol idx) { return ImGui::ColorConvertFloat4ToU32(GetStyleColorVec4(idx)); }++// Draws vertical text. The position is the bottom left of the text rect.+IMPLOT_API void AddTextVertical(ImDrawList *DrawList, ImVec2 pos, ImU32 col, const char* text_begin, const char* text_end = nullptr);+// Draws multiline horizontal text centered.+IMPLOT_API void AddTextCentered(ImDrawList* DrawList, ImVec2 top_center, ImU32 col, const char* text_begin, const char* text_end = nullptr);+// Calculates the size of vertical text+static inline ImVec2 CalcTextSizeVertical(const char *text) {+ ImVec2 sz = ImGui::CalcTextSize(text);+ return ImVec2(sz.y, sz.x);+}+// Returns white or black text given background color+static inline ImU32 CalcTextColor(const ImVec4& bg) { return (bg.x * 0.299f + bg.y * 0.587f + bg.z * 0.114f) > 0.5f ? IM_COL32_BLACK : IM_COL32_WHITE; }+static inline ImU32 CalcTextColor(ImU32 bg) { return CalcTextColor(ImGui::ColorConvertU32ToFloat4(bg)); }+// Lightens or darkens a color for hover+static inline ImU32 CalcHoverColor(ImU32 col) { return ImMixU32(col, CalcTextColor(col), 32); }++// Clamps a label position so that it fits a rect defined by Min/Max+static inline ImVec2 ClampLabelPos(ImVec2 pos, const ImVec2& size, const ImVec2& Min, const ImVec2& Max) {+ if (pos.x < Min.x) pos.x = Min.x;+ if (pos.y < Min.y) pos.y = Min.y;+ if ((pos.x + size.x) > Max.x) pos.x = Max.x - size.x;+ if ((pos.y + size.y) > Max.y) pos.y = Max.y - size.y;+ return pos;+}++// Returns a color from the Color map given an index >= 0 (modulo will be performed).+IMPLOT_API ImU32 GetColormapColorU32(int idx, ImPlotColormap cmap);+// Returns the next unused colormap color and advances the colormap. Can be used to skip colors if desired.+IMPLOT_API ImU32 NextColormapColorU32();+// Linearly interpolates a color from the current colormap given t between 0 and 1.+IMPLOT_API ImU32 SampleColormapU32(float t, ImPlotColormap cmap);++// Render a colormap bar+IMPLOT_API void RenderColorBar(const ImU32* colors, int size, ImDrawList& DrawList, const ImRect& bounds, bool vert, bool reversed, bool continuous);++// Render Horizontal/Vertical lines+#if (IMGUI_VERSION_NUM < 19275)+static inline void AddLineH(ImDrawList *draw_list, float x1, float x2, float y, ImU32 col, float thickness = 1.0f) { draw_list->AddLine(ImVec2(x1, y), ImVec2(x2, y), col, thickness); }+static inline void AddLineV(ImDrawList* draw_list, float x, float y1, float y2, ImU32 col, float thickness = 1.0f) { draw_list->AddLine(ImVec2(x, y1), ImVec2(x, y2), col, thickness); }+#else+static inline void AddLineH(ImDrawList *draw_list, float x1, float x2, float y, ImU32 col, float thickness = 1.0f) { draw_list->AddLineH(x1, x2, y, col, thickness); }+static inline void AddLineV(ImDrawList *draw_list, float x, float y1, float y2, ImU32 col, float thickness = 1.0f) { draw_list->AddLineV(x, y1, y2, col, thickness); }+#endif++//-----------------------------------------------------------------------------+// [SECTION] Math and Misc Utils+//-----------------------------------------------------------------------------++// Rounds x to powers of 2,5 and 10 for generating axis labels (from Graphics Gems 1 Chapter 11.2)+IMPLOT_API double NiceNum(double x, bool round);+// Computes order of magnitude of double.+static inline int OrderOfMagnitude(double val) { return val == 0 ? 0 : (int)(floor(log10(fabs(val)))); }+// Returns the precision required for a order of magnitude.+static inline int OrderToPrecision(int order) { return order > 0 ? 0 : 1 - order; }+// Returns a floating point precision to use given a value+static inline int Precision(double val) { return OrderToPrecision(OrderOfMagnitude(val)); }+// Round a value to a given precision+static inline double RoundTo(double val, int prec) { double p = pow(10,(double)prec); return floor(val*p+0.5)/p; }++// Returns the intersection point of two lines A and B (assumes they are not parallel!)+static inline ImVec2 Intersection(const ImVec2& a1, const ImVec2& a2, const ImVec2& b1, const ImVec2& b2) {+ float v1 = (a1.x * a2.y - a1.y * a2.x); float v2 = (b1.x * b2.y - b1.y * b2.x);+ float v3 = ((a1.x - a2.x) * (b1.y - b2.y) - (a1.y - a2.y) * (b1.x - b2.x));+ return ImVec2((v1 * (b1.x - b2.x) - v2 * (a1.x - a2.x)) / v3, (v1 * (b1.y - b2.y) - v2 * (a1.y - a2.y)) / v3);+}++// Fills a buffer with n samples linear interpolated from vmin to vmax+template <typename T>+void FillRange(ImVector<T>& buffer, int n, T vmin, T vmax) {+ buffer.resize(n);+ T step = (vmax - vmin) / (n - 1);+ for (int i = 0; i < n; ++i) {+ buffer[i] = vmin + i * step;+ }+}++// Calculate histogram bin counts and widths+template <typename TContainer>+static inline void CalculateBins(const TContainer& values, int count, ImPlotBin meth, const ImPlotRange& range, int& bins_out, double& width_out) {+ switch (meth) {+ case ImPlotBin_Sqrt:+ bins_out = (int)ceil(sqrt(count));+ break;+ case ImPlotBin_Sturges:+ bins_out = (int)ceil(1.0 + log2(count));+ break;+ case ImPlotBin_Rice:+ bins_out = (int)ceil(2 * cbrt(count));+ break;+ case ImPlotBin_Scott:+ width_out = 3.49 * ImStdDev(values, count) / cbrt(count);+ bins_out = (int)round(range.Size() / width_out);+ break;+ }+ width_out = range.Size() / bins_out;+}++//-----------------------------------------------------------------------------+// Time Utils+//-----------------------------------------------------------------------------++// Returns true if year is leap year (366 days long)+static inline bool IsLeapYear(int year) {+ return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);+}+// Returns the number of days in a month, accounting for Feb. leap years. #month is zero indexed.+static inline int GetDaysInMonth(int year, int month) {+ constexpr int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};+ return days[month] + (int)(month == 1 && IsLeapYear(year));+}++// Make a UNIX timestamp from a tm struct expressed in UTC time (i.e. GMT timezone).+IMPLOT_API ImPlotTime MkGmtTime(struct tm *ptm);+// Make a tm struct expressed in UTC time (i.e. GMT timezone) from a UNIX timestamp.+IMPLOT_API tm* GetGmtTime(const ImPlotTime& t, tm* ptm);++// Make a UNIX timestamp from a tm struct expressed in local time.+IMPLOT_API ImPlotTime MkLocTime(struct tm *ptm);+// Make a tm struct expressed in local time from a UNIX timestamp.+IMPLOT_API tm* GetLocTime(const ImPlotTime& t, tm* ptm);++// NB: The following functions only work if there is a current ImPlotContext because the+// internal tm struct is owned by the context! They are aware of ImPlotStyle.UseLocalTime.++// // Make a UNIX timestamp from a tm struct according to the current ImPlotStyle.UseLocalTime setting.+static inline ImPlotTime MkTime(struct tm *ptm) {+ if (GetStyle().UseLocalTime) return MkLocTime(ptm);+ else return MkGmtTime(ptm);+}+// Get a tm struct from a UNIX timestamp according to the current ImPlotStyle.UseLocalTime setting.+static inline tm* GetTime(const ImPlotTime& t, tm* ptm) {+ if (GetStyle().UseLocalTime) return GetLocTime(t,ptm);+ else return GetGmtTime(t,ptm);+}++// Make a timestamp from time components.+// year[1970-3000], month[0-11], day[1-31], hour[0-23], min[0-59], sec[0-59], us[0,999999]+IMPLOT_API ImPlotTime MakeTime(int year, int month = 0, int day = 1, int hour = 0, int min = 0, int sec = 0, int us = 0);+// Get year component from timestamp [1970-3000]+IMPLOT_API int GetYear(const ImPlotTime& t);+// Get month component from timestamp [0-11]+IMPLOT_API int GetMonth(const ImPlotTime& t);++// Adds or subtracts time from a timestamp. #count > 0 to add, < 0 to subtract.+IMPLOT_API ImPlotTime AddTime(const ImPlotTime& t, ImPlotTimeUnit unit, int count);+// Rounds a timestamp down to nearest unit.+IMPLOT_API ImPlotTime FloorTime(const ImPlotTime& t, ImPlotTimeUnit unit);+// Rounds a timestamp up to the nearest unit.+IMPLOT_API ImPlotTime CeilTime(const ImPlotTime& t, ImPlotTimeUnit unit);+// Rounds a timestamp up or down to the nearest unit.+IMPLOT_API ImPlotTime RoundTime(const ImPlotTime& t, ImPlotTimeUnit unit);+// Combines the date of one timestamp with the time-of-day of another timestamp.+IMPLOT_API ImPlotTime CombineDateTime(const ImPlotTime& date_part, const ImPlotTime& time_part);++// Get the current time as a timestamp.+static inline ImPlotTime Now() { return ImPlotTime::FromDouble((double)time(nullptr)); }+// Get the current date as a timestamp.+static inline ImPlotTime Today() { return ImPlot::FloorTime(Now(), ImPlotTimeUnit_Day); }++// Formats the time part of timestamp t into a buffer according to #fmt+IMPLOT_API int FormatTime(const ImPlotTime& t, char* buffer, int size, ImPlotTimeFmt fmt, bool use_24_hr_clk);+// Formats the date part of timestamp t into a buffer according to #fmt+IMPLOT_API int FormatDate(const ImPlotTime& t, char* buffer, int size, ImPlotDateFmt fmt, bool use_iso_8601);+// Formats the time and/or date parts of a timestamp t into a buffer according to #fmt+IMPLOT_API int FormatDateTime(const ImPlotTime& t, char* buffer, int size, ImPlotDateTimeSpec fmt);++// Shows a date picker widget block (year/month/day).+// #level = 0 for day, 1 for month, 2 for year. Modified by user interaction.+// #t will be set when a day is clicked and the function will return true.+// #t1 and #t2 are optional dates to highlight.+IMPLOT_API bool ShowDatePicker(const char* id, int* level, ImPlotTime* t, const ImPlotTime* t1 = nullptr, const ImPlotTime* t2 = nullptr);+// Shows a time picker widget block (hour/min/sec).+// #t will be set when a new hour, minute, or sec is selected or am/pm is toggled, and the function will return true.+IMPLOT_API bool ShowTimePicker(const char* id, ImPlotTime* t);++//-----------------------------------------------------------------------------+// [SECTION] Transforms+//-----------------------------------------------------------------------------++static inline double TransformForward_Log10(double v, void*) {+ v = v <= 0.0 ? DBL_MIN : v;+ return ImLog10(v);+}++static inline double TransformInverse_Log10(double v, void*) {+ return ImPow(10, v);+}++static inline double TransformForward_SymLog(double v, void*) {+ return 2.0 * ImAsinh(v / 2.0);+}++static inline double TransformInverse_SymLog(double v, void*) {+ return 2.0 * ImSinh(v / 2.0);+}++static inline double TransformForward_Logit(double v, void*) {+ v = ImClamp(v, DBL_MIN, 1.0 - DBL_EPSILON);+ return ImLog10(v / (1 - v));+}++static inline double TransformInverse_Logit(double v, void*) {+ return 1.0 / (1.0 + ImPow(10,-v));+}++//-----------------------------------------------------------------------------+// [SECTION] Formatters+//-----------------------------------------------------------------------------++static inline int Formatter_Default(double value, char* buff, int size, void* data) {+ char* fmt = (char*)data;+ return ImFormatString(buff, size, fmt, value);+}++static inline int Formatter_Logit(double value, char* buff, int size, void*) {+ if (value == 0.5)+ return ImFormatString(buff,size,"1/2");+ else if (value < 0.5)+ return ImFormatString(buff,size,"%g", value);+ else+ return ImFormatString(buff,size,"1 - %g", 1 - value);+}++struct Formatter_Time_Data {+ ImPlotTime Time;+ ImPlotDateTimeSpec Spec;+ ImPlotFormatter UserFormatter;+ void* UserFormatterData;+};++static inline int Formatter_Time(double, char* buff, int size, void* data) {+ Formatter_Time_Data* ftd = (Formatter_Time_Data*)data;+ return FormatDateTime(ftd->Time, buff, size, ftd->Spec);+}++//------------------------------------------------------------------------------+// [SECTION] Locator+//------------------------------------------------------------------------------++IMPLOT_API void Locator_Default(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data);+IMPLOT_API void Locator_Time(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data);+IMPLOT_API void Locator_Log10(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data);+IMPLOT_API void Locator_SymLog(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data);++} // namespace ImPlot++#endif // #ifndef IMGUI_DISABLE
+ cbits/implot/implot_items.cpp view
@@ -0,0 +1,3527 @@+// MIT License++// Copyright (c) 2020-2024 Evan Pezent+// Copyright (c) 2025-2026 Breno Cunha Queiroz++// Permission is hereby granted, free of charge, to any person obtaining a copy+// of this software and associated documentation files (the "Software"), to deal+// in the Software without restriction, including without limitation the rights+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+// copies of the Software, and to permit persons to whom the Software is+// furnished to do so, subject to the following conditions:++// The above copyright notice and this permission notice shall be included in all+// copies or substantial portions of the Software.++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+// SOFTWARE.++// ImPlot v1.1 WIP++#ifndef IMGUI_DEFINE_MATH_OPERATORS+#define IMGUI_DEFINE_MATH_OPERATORS+#endif+#include "implot.h"+#ifndef IMGUI_DISABLE+#include "implot_internal.h"++//-----------------------------------------------------------------------------+// [SECTION] Macros and Defines+//-----------------------------------------------------------------------------++#define SQRT_1_2 0.70710678118f+#define SQRT_3_2 0.86602540378f++#ifndef IMPLOT_NO_FORCE_INLINE+ #ifdef _MSC_VER+ #define IMPLOT_INLINE __forceinline+ #elif defined(__GNUC__)+ #define IMPLOT_INLINE inline __attribute__((__always_inline__))+ #elif defined(__CLANG__)+ #if __has_attribute(__always_inline__)+ #define IMPLOT_INLINE inline __attribute__((__always_inline__))+ #else+ #define IMPLOT_INLINE inline+ #endif+ #else+ #define IMPLOT_INLINE inline+ #endif+#else+ #define IMPLOT_INLINE inline+#endif++#if defined __SSE__ || defined __x86_64__ || defined _M_X64+#ifndef IMGUI_ENABLE_SSE+#include <immintrin.h>+#endif+static IMPLOT_INLINE float ImInvSqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); }+#else+static IMPLOT_INLINE float ImInvSqrt(float x) { return 1.0f / sqrtf(x); }+#endif++#define IMPLOT_NORMALIZE2F_OVER_ZERO(VX,VY) do { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = ImInvSqrt(d2); VX *= inv_len; VY *= inv_len; } } while (0)++// Support for pre-1.82 versions. Users on 1.82+ can use 0 (default) flags to mean "all corners" but in order to support older versions we are more explicit.+#if (IMGUI_VERSION_NUM < 18102) && !defined(ImDrawFlags_RoundCornersAll)+#define ImDrawFlags_RoundCornersAll ImDrawCornerFlags_All+#endif++//-----------------------------------------------------------------------------+// [SECTION] Template instantiation utility+//-----------------------------------------------------------------------------++// By default, templates are instantiated for `float`, `double`, and for the following integer types, which are defined in imgui.h:+// signed char ImS8; // 8-bit signed integer+// unsigned char ImU8; // 8-bit unsigned integer+// signed short ImS16; // 16-bit signed integer+// unsigned short ImU16; // 16-bit unsigned integer+// signed int ImS32; // 32-bit signed integer == int+// unsigned int ImU32; // 32-bit unsigned integer+// signed long long ImS64; // 64-bit signed integer+// unsigned long long ImU64; // 64-bit unsigned integer+// (note: this list does *not* include `long`, `unsigned long` and `long double`)+//+// You can customize the supported types by defining IMPLOT_CUSTOM_NUMERIC_TYPES at compile time to define your own type list.+// As an example, you could use the compile time define given by the line below in order to support only float and double.+// -DIMPLOT_CUSTOM_NUMERIC_TYPES="(float)(double)"+// In order to support all known C++ types, use:+// -DIMPLOT_CUSTOM_NUMERIC_TYPES="(signed char)(unsigned char)(signed short)(unsigned short)(signed int)(unsigned int)(signed long)(unsigned long)(signed long long)(unsigned long long)(float)(double)(long double)"++#ifdef IMPLOT_CUSTOM_NUMERIC_TYPES+ #define IMPLOT_NUMERIC_TYPES IMPLOT_CUSTOM_NUMERIC_TYPES+#else+ #define IMPLOT_NUMERIC_TYPES (ImS8)(ImU8)(ImS16)(ImU16)(ImS32)(ImU32)(ImS64)(ImU64)(float)(double)+#endif++// CALL_INSTANTIATE_FOR_NUMERIC_TYPES will duplicate the template instantiation code `INSTANTIATE_MACRO(T)` on supported types.+#define _CAT(x, y) _CAT_(x, y)+#define _CAT_(x,y) x ## y+#define _INSTANTIATE_FOR_NUMERIC_TYPES(chain) _CAT(_INSTANTIATE_FOR_NUMERIC_TYPES_1 chain, _END)+#define _INSTANTIATE_FOR_NUMERIC_TYPES_1(T) INSTANTIATE_MACRO(T) _INSTANTIATE_FOR_NUMERIC_TYPES_2+#define _INSTANTIATE_FOR_NUMERIC_TYPES_2(T) INSTANTIATE_MACRO(T) _INSTANTIATE_FOR_NUMERIC_TYPES_1+#define _INSTANTIATE_FOR_NUMERIC_TYPES_1_END+#define _INSTANTIATE_FOR_NUMERIC_TYPES_2_END+#define CALL_INSTANTIATE_FOR_NUMERIC_TYPES() _INSTANTIATE_FOR_NUMERIC_TYPES(IMPLOT_NUMERIC_TYPES)++namespace ImPlot {++//-----------------------------------------------------------------------------+// [SECTION] Utils+//-----------------------------------------------------------------------------++// Calc maximum index size of ImDrawIdx+template <typename T>+struct MaxIdx { static const unsigned int Value; };+template <> const unsigned int MaxIdx<unsigned short>::Value = 65535;+template <> const unsigned int MaxIdx<unsigned int>::Value = 4294967295;++template <typename T>+int Stride(const ImPlotSpec& spec) {+ return spec.Stride == IMPLOT_AUTO ? sizeof(T) : spec.Stride;+}++// Finds the min and max value in an unsorted array+template <typename Indexer, typename T>+static inline void ImMinMaxIndexer(const Indexer& values, int count, T* min_out, T* max_out) {+ T Min = values[0]; T Max = values[0];+ for (int i = 1; i < count; ++i) {+ if (values[i] < Min) { Min = values[i]; }+ if (values[i] > Max) { Max = values[i]; }+ }+ *min_out = Min; *max_out = Max;+}++// Finds the mean of a container+template <typename TContainer>+static inline double ImMean(const TContainer& values, int count) {+ double den = 1.0 / count;+ double mu = 0;+ for (int i = 0; i < count; ++i)+ mu += (double)values[i] * den;+ return mu;+}++// Finds the sample standard deviation of a container+template <typename TContainer>+static inline double ImStdDev(const TContainer& values, int count) {+ double den = 1.0 / (count - 1.0);+ double mu = ImMean(values, count);+ double x = 0;+ for (int i = 0; i < count; ++i)+ x += ((double)values[i] - mu) * ((double)values[i] - mu) * den;+ return sqrt(x);+}++IMPLOT_INLINE void GetLineRenderProps(ImDrawList& draw_list, float& half_weight, ImVec2& tex_uv0, ImVec2& tex_uv1) {+#if IMGUI_VERSION_NUM >= 19299 || defined(IM_DRAWLIST_TEX_LINES_SAMPLE_COUNT)+ float fringe;+ draw_list._SelectLineTexture(half_weight * 2.0f, &tex_uv0, &tex_uv1, &fringe, draw_list.Flags);+ //tex_uv0.x -= 0.5f * draw_list._Data->FontAtlas->TexUvScale.x; // Changed in features/drawlist_v193 but seems unncessary?+ //tex_uv1.x -= 0.5f * draw_list._Data->FontAtlas->TexUvScale.x;+ half_weight += fringe * 0.5f;+#else+ const bool aa = ImHasFlag(draw_list.Flags, ImDrawListFlags_AntiAliasedLines) &&+ ImHasFlag(draw_list.Flags, ImDrawListFlags_AntiAliasedLinesUseTex);+ if (aa) {+ ImVec4 tex_uvs = draw_list._Data->TexUvLines[(int)(half_weight*2)];+ tex_uv0 = ImVec2(tex_uvs.x, tex_uvs.y);+ tex_uv1 = ImVec2(tex_uvs.z, tex_uvs.w);+ half_weight += 1;+ }+ else {+ tex_uv0 = tex_uv1 = draw_list._Data->TexUvWhitePixel;+ }+#endif+}++IMPLOT_INLINE void PrimLine(ImDrawList& draw_list, const ImVec2& P1, const ImVec2& P2, float half_weight, ImU32 col, const ImVec2& tex_uv0, const ImVec2 tex_uv1) {+ float dx = P2.x - P1.x;+ float dy = P2.y - P1.y;+ IMPLOT_NORMALIZE2F_OVER_ZERO(dx, dy);+ dx *= half_weight;+ dy *= half_weight;+ draw_list._VtxWritePtr[0].pos.x = P1.x + dy;+ draw_list._VtxWritePtr[0].pos.y = P1.y - dx;+ draw_list._VtxWritePtr[0].uv = tex_uv0;+ draw_list._VtxWritePtr[0].col = col;+ draw_list._VtxWritePtr[1].pos.x = P2.x + dy;+ draw_list._VtxWritePtr[1].pos.y = P2.y - dx;+ draw_list._VtxWritePtr[1].uv = tex_uv0;+ draw_list._VtxWritePtr[1].col = col;+ draw_list._VtxWritePtr[2].pos.x = P2.x - dy;+ draw_list._VtxWritePtr[2].pos.y = P2.y + dx;+ draw_list._VtxWritePtr[2].uv = tex_uv1;+ draw_list._VtxWritePtr[2].col = col;+ draw_list._VtxWritePtr[3].pos.x = P1.x - dy;+ draw_list._VtxWritePtr[3].pos.y = P1.y + dx;+ draw_list._VtxWritePtr[3].uv = tex_uv1;+ draw_list._VtxWritePtr[3].col = col;+ draw_list._VtxWritePtr += 4;+ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[3] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[4] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[5] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr += 6;+ draw_list._VtxCurrentIdx += 4;+}++IMPLOT_INLINE void PrimRectFill(ImDrawList& draw_list, const ImVec2& Pmin, const ImVec2& Pmax, ImU32 col, const ImVec2& uv) {+ draw_list._VtxWritePtr[0].pos = Pmin;+ draw_list._VtxWritePtr[0].uv = uv;+ draw_list._VtxWritePtr[0].col = col;+ draw_list._VtxWritePtr[1].pos = Pmax;+ draw_list._VtxWritePtr[1].uv = uv;+ draw_list._VtxWritePtr[1].col = col;+ draw_list._VtxWritePtr[2].pos.x = Pmin.x;+ draw_list._VtxWritePtr[2].pos.y = Pmax.y;+ draw_list._VtxWritePtr[2].uv = uv;+ draw_list._VtxWritePtr[2].col = col;+ draw_list._VtxWritePtr[3].pos.x = Pmax.x;+ draw_list._VtxWritePtr[3].pos.y = Pmin.y;+ draw_list._VtxWritePtr[3].uv = uv;+ draw_list._VtxWritePtr[3].col = col;+ draw_list._VtxWritePtr += 4;+ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[3] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[4] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[5] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr += 6;+ draw_list._VtxCurrentIdx += 4;+}++IMPLOT_INLINE void PrimRectLine(ImDrawList& draw_list, const ImVec2& Pmin, const ImVec2& Pmax, float weight, ImU32 col, const ImVec2& uv) {++ draw_list._VtxWritePtr[0].pos.x = Pmin.x;+ draw_list._VtxWritePtr[0].pos.y = Pmin.y;+ draw_list._VtxWritePtr[0].uv = uv;+ draw_list._VtxWritePtr[0].col = col;++ draw_list._VtxWritePtr[1].pos.x = Pmin.x;+ draw_list._VtxWritePtr[1].pos.y = Pmax.y;+ draw_list._VtxWritePtr[1].uv = uv;+ draw_list._VtxWritePtr[1].col = col;++ draw_list._VtxWritePtr[2].pos.x = Pmax.x;+ draw_list._VtxWritePtr[2].pos.y = Pmax.y;+ draw_list._VtxWritePtr[2].uv = uv;+ draw_list._VtxWritePtr[2].col = col;++ draw_list._VtxWritePtr[3].pos.x = Pmax.x;+ draw_list._VtxWritePtr[3].pos.y = Pmin.y;+ draw_list._VtxWritePtr[3].uv = uv;+ draw_list._VtxWritePtr[3].col = col;++ draw_list._VtxWritePtr[4].pos.x = Pmin.x + weight;+ draw_list._VtxWritePtr[4].pos.y = Pmin.y + weight;+ draw_list._VtxWritePtr[4].uv = uv;+ draw_list._VtxWritePtr[4].col = col;++ draw_list._VtxWritePtr[5].pos.x = Pmin.x + weight;+ draw_list._VtxWritePtr[5].pos.y = Pmax.y - weight;+ draw_list._VtxWritePtr[5].uv = uv;+ draw_list._VtxWritePtr[5].col = col;++ draw_list._VtxWritePtr[6].pos.x = Pmax.x - weight;+ draw_list._VtxWritePtr[6].pos.y = Pmax.y - weight;+ draw_list._VtxWritePtr[6].uv = uv;+ draw_list._VtxWritePtr[6].col = col;++ draw_list._VtxWritePtr[7].pos.x = Pmax.x - weight;+ draw_list._VtxWritePtr[7].pos.y = Pmin.y + weight;+ draw_list._VtxWritePtr[7].uv = uv;+ draw_list._VtxWritePtr[7].col = col;++ draw_list._VtxWritePtr += 8;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 0);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 5);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 0);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 5);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 4);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 6);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 6);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 5);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 7);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 2);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 7);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 6);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 0);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 4);+ draw_list._IdxWritePtr += 3;++ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 4);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 7);+ draw_list._IdxWritePtr += 3;++ draw_list._VtxCurrentIdx += 8;+}+++//-----------------------------------------------------------------------------+// [SECTION] Item Utils+//-----------------------------------------------------------------------------++ImPlotItem* RegisterOrGetItem(const char* label_id, ImPlotItemFlags flags, bool* just_created) {+ ImPlotContext& gp = *GImPlot;+ ImPlotItemGroup& Items = *gp.CurrentItems;+ ImGuiID id = Items.GetItemID(label_id);+ if (just_created != nullptr)+ *just_created = Items.GetItem(id) == nullptr;+ ImPlotItem* item = Items.GetOrAddItem(id);+ if (item->SeenThisFrame)+ return item;+ item->SeenThisFrame = true;+ int idx = Items.GetItemIndex(item);+ item->ID = id;+ if (!ImHasFlag(flags, ImPlotItemFlags_NoLegend) && ImGui::FindRenderedTextEnd(label_id, nullptr) != label_id) {+ Items.Legend.Indices.push_back(idx);+ item->NameOffset = Items.Legend.Labels.size();+ Items.Legend.Labels.append(label_id, label_id + strlen(label_id) + 1);+ }+ else {+ item->Show = true;+ }+ return item;+}++ImPlotItem* GetItem(const char* label_id) {+ ImPlotContext& gp = *GImPlot;+ return gp.CurrentItems->GetItem(label_id);+}++bool IsItemHidden(const char* label_id) {+ ImPlotItem* item = GetItem(label_id);+ return item != nullptr && !item->Show;+}++ImPlotItem* GetCurrentItem() {+ ImPlotContext& gp = *GImPlot;+ return gp.CurrentItem;+}++ImVec4 GetLastItemColor() {+ ImPlotContext& gp = *GImPlot;+ if (gp.PreviousItem)+ return ImGui::ColorConvertU32ToFloat4(gp.PreviousItem->Color);+ return ImVec4();+}++void BustItemCache() {+ ImPlotContext& gp = *GImPlot;+ for (int p = 0; p < gp.Plots.GetBufSize(); ++p) {+ ImPlotPlot& plot = *gp.Plots.GetByIndex(p);+ plot.Items.Reset();+ }+ for (int p = 0; p < gp.Subplots.GetBufSize(); ++p) {+ ImPlotSubplot& subplot = *gp.Subplots.GetByIndex(p);+ subplot.Items.Reset();+ }+}++void BustColorCache(const char* plot_title_id) {+ ImPlotContext& gp = *GImPlot;+ if (plot_title_id == nullptr) {+ BustItemCache();+ }+ else {+ ImGuiID id = ImGui::GetCurrentWindow()->GetID(plot_title_id);+ ImPlotPlot* plot = gp.Plots.GetByKey(id);+ if (plot != nullptr)+ plot->Items.Reset();+ else {+ ImPlotSubplot* subplot = gp.Subplots.GetByKey(id);+ if (subplot != nullptr)+ subplot->Items.Reset();+ }+ }+}++//-----------------------------------------------------------------------------+// [SECTION] BeginItem / EndItem+//-----------------------------------------------------------------------------++constexpr float ITEM_HIGHLIGHT_LINE_SCALE = 2.0f;+constexpr float ITEM_HIGHLIGHT_MARK_SCALE = 1.25f;++// Begins a new item. Returns false if the item should not be plotted.+bool BeginItem(const char* label_id, const ImPlotSpec& spec, const ImVec4& item_col, ImPlotMarker item_mkr) {+ ImPlotContext& gp = *GImPlot;+ IM_ASSERT_USER_ERROR(gp.CurrentPlot != nullptr, "PlotX() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ bool just_created;+ ImPlotItem* item = RegisterOrGetItem(label_id, spec.Flags, &just_created);+ // set current item+ gp.CurrentItem = item;+ ImPlotNextItemData& s = gp.NextItemData;+ // set/override item color+ if (!IsColorAuto(item_col))+ item->Color = ImGui::ColorConvertFloat4ToU32(item_col);+ else if (just_created)+ item->Color = NextColormapColorU32();+ if (gp.NextItemData.HasHidden) {+ if (just_created || gp.NextItemData.HiddenCond == ImGuiCond_Always)+ item->Show = !gp.NextItemData.Hidden;+ }+ // set/override item marker+ if (item_mkr != ImPlotMarker_Invalid) {+ if (item_mkr != ImPlotMarker_Auto) {+ item->Marker = item_mkr;+ }+ else if (just_created && item_mkr == ImPlotMarker_Auto) {+ item->Marker = NextMarker();+ }+ else if (item_mkr == ImPlotMarker_Auto && item->Marker == ImPlotMarker_None) {+ item->Marker = NextMarker();+ }+ }+ // return false if not shown+ if (!item->Show) {+ // reset next item data+ gp.NextItemData.Reset();+ gp.PreviousItem = item;+ gp.CurrentItem = nullptr;+ return false;+ }+ else {+ ImVec4 item_color = ImGui::ColorConvertU32ToFloat4(item->Color);+ // stage next item spec+ s.Spec = spec;+ s.Spec.LineColor = IsColorAuto(s.Spec.LineColor) ? item_color : s.Spec.LineColor;+ s.Spec.FillColor = IsColorAuto(s.Spec.FillColor) ? item_color : s.Spec.FillColor;+ s.Spec.FillColor.w *= s.Spec.FillAlpha;+ s.Spec.Marker = item->Marker;+ s.Spec.MarkerLineColor = IsColorAuto(s.Spec.MarkerLineColor) ? s.Spec.LineColor : s.Spec.MarkerLineColor;+ s.Spec.MarkerFillColor = IsColorAuto(s.Spec.MarkerFillColor) ? s.Spec.LineColor : s.Spec.MarkerFillColor;+ s.Spec.MarkerFillColor.w *= s.Spec.FillAlpha;+ // apply highlight mods+ if (item->LegendHovered) {+ if (!ImHasFlag(gp.CurrentItems->Legend.Flags, ImPlotLegendFlags_NoHighlightItem)) {+ s.Spec.LineWeight *= ITEM_HIGHLIGHT_LINE_SCALE;+ s.Spec.MarkerSize *= ITEM_HIGHLIGHT_MARK_SCALE;+ s.Spec.Size *= ITEM_HIGHLIGHT_MARK_SCALE;+ // TODO: how to highlight fills?+ }+ if (!ImHasFlag(gp.CurrentItems->Legend.Flags, ImPlotLegendFlags_NoHighlightAxis)) {+ if (gp.CurrentPlot->EnabledAxesX() > 1)+ gp.CurrentPlot->Axes[gp.CurrentPlot->CurrentX].ColorHiLi = item->Color;+ if (gp.CurrentPlot->EnabledAxesY() > 1)+ gp.CurrentPlot->Axes[gp.CurrentPlot->CurrentY].ColorHiLi = item->Color;+ }+ }+ // set render flags+ s.RenderLine = s.Spec.LineColor.w > 0 && s.Spec.LineWeight > 0;+ s.RenderFill = s.Spec.FillColor.w > 0;+ s.RenderMarkerLine = s.Spec.MarkerLineColor.w > 0 && s.Spec.LineWeight > 0;+ s.RenderMarkerFill = s.Spec.MarkerFillColor.w > 0;+ s.RenderMarkers = s.Spec.Marker >= 0 && (s.RenderMarkerFill || s.RenderMarkerLine);+ // push rendering clip rect+ PushPlotClipRect();+ return true;+ }+}++// Ends an item (call only if BeginItem returns true)+void EndItem() {+ ImPlotContext& gp = *GImPlot;+ // pop rendering clip rect+ PopPlotClipRect();+ // reset next item data+ gp.NextItemData.Reset();+ // set current item+ gp.PreviousItem = gp.CurrentItem;+ gp.CurrentItem = nullptr;+}++//-----------------------------------------------------------------------------+// [SECTION] Indexers+//-----------------------------------------------------------------------------++template <typename T>+IMPLOT_INLINE T IndexData(const T* data, int idx, int count, int offset, int stride) {+ const int s = ((offset == 0) << 0) | ((stride == sizeof(T)) << 1);+ switch (s) {+ case 3 : return data[idx];+ case 2 : return data[(offset + idx) % count];+ case 1 : return *(const T*)(const void*)((const unsigned char*)data + (size_t)((idx) ) * stride);+ case 0 : return *(const T*)(const void*)((const unsigned char*)data + (size_t)((offset + idx) % count) * stride);+ default: return T(0);+ }+}++template <typename T>+struct IndexerIdx {+ IndexerIdx(const T* data, int count, int offset = 0, int stride = sizeof(T)) :+ Data(data),+ Count(count),+ Offset(count ? ImPosMod(offset, count) : 0),+ Stride(stride)+ { }+ template <typename I> IMPLOT_INLINE double operator[](I idx) const {+ return (double)IndexData(Data, idx, Count, Offset, Stride);+ }+ const T* Data;+ int Count;+ int Offset;+ int Stride;+ typedef double value_type;+};++template <typename _Indexer1, typename _Indexer2>+struct IndexerAdd {+ IndexerAdd(const _Indexer1& indexer1, const _Indexer2& indexer2, double scale1 = 1, double scale2 = 1)+ : Indexer1(indexer1),+ Indexer2(indexer2),+ Scale1(scale1),+ Scale2(scale2),+ Count(ImMin(Indexer1.Count, Indexer2.Count))+ { }+ template <typename I> IMPLOT_INLINE double operator[](I idx) const {+ return Scale1 * Indexer1[idx] + Scale2 * Indexer2[idx];+ }+ const _Indexer1& Indexer1;+ const _Indexer2& Indexer2;+ double Scale1;+ double Scale2;+ int Count;+ typedef double value_type;+};++struct IndexerLin {+ IndexerLin(double m, double b) : M(m), B(b) { }+ template <typename I> IMPLOT_INLINE double operator[](I idx) const {+ return M * idx + B;+ }+ const double M;+ const double B;+ typedef double value_type;+};++struct IndexerConst {+ IndexerConst(double ref) : Ref(ref) { }+ template <typename I> IMPLOT_INLINE double operator[](I) const { return Ref; }+ const double Ref;+ typedef double value_type;+};++//-----------------------------------------------------------------------------+// [SECTION] Getters+//-----------------------------------------------------------------------------++template <typename _IndexerX, typename _IndexerY>+struct GetterXY {+ GetterXY(_IndexerX x, _IndexerY y, int count) : IndexerX(x), IndexerY(y), Count(count) { }+ template <typename I> IMPLOT_INLINE ImPlotPoint operator[](I idx) const {+ return ImPlotPoint(IndexerX[idx],IndexerY[idx]);+ }+ const _IndexerX IndexerX;+ const _IndexerY IndexerY;+ const int Count;+ typedef ImPlotPoint value_type;+};++// Double precision point with three coordinates used by ImPlot.+struct ImPlotPoint3D {+ double x, y, z;+ constexpr ImPlotPoint3D() : x(0.0), y(0.0), z(0.0) { }+ constexpr ImPlotPoint3D(double _x, double _y, double _z) : x(_x), y(_y), z(_z) { }+ double& operator[] (size_t idx) { IM_ASSERT(idx == 0 || idx == 1 || idx == 2); return ((double*)(void*)(char*)this)[idx]; }+ double operator[] (size_t idx) const { IM_ASSERT(idx == 0 || idx == 1 || idx == 2); return ((const double*)(const void*)(const char*)this)[idx]; }+};++template <typename _IndexerX, typename _IndexerY, typename _IndexerZ>+struct GetterXYZ {+ GetterXYZ(_IndexerX x, _IndexerY y, _IndexerZ z, int count) : IndxerX(x), IndxerY(y), IndxerZ(z), Count(count) { }+ template <typename I> IMPLOT_INLINE ImPlotPoint3D operator()(I idx) const {+ return ImPlotPoint3D(IndxerX[idx],IndxerY[idx],IndxerZ[idx]);+ }+ const _IndexerX IndxerX;+ const _IndexerY IndxerY;+ const _IndexerZ IndxerZ;+ const int Count;+};++/// Interprets a user's function pointer as ImPlotPoints+struct GetterFuncPtr {+ GetterFuncPtr(ImPlotGetter getter, void* data, int count) :+ Getter(getter),+ Data(data),+ Count(count)+ { }+ template <typename I> IMPLOT_INLINE ImPlotPoint operator[](I idx) const {+ return Getter(idx, Data);+ }+ ImPlotGetter Getter;+ void* const Data;+ const int Count;+ typedef ImPlotPoint value_type;+};++template <typename _Getter>+struct GetterOverrideX {+ GetterOverrideX(_Getter getter, double x) : Getter(getter), X(x), Count(getter.Count) { }+ template <typename I> IMPLOT_INLINE ImPlotPoint operator[](I idx) const {+ ImPlotPoint p = Getter[idx];+ p.x = X;+ return p;+ }+ const _Getter Getter;+ const double X;+ const int Count;+ typedef ImPlotPoint value_type;+};++template <typename _Getter>+struct GetterOverrideY {+ GetterOverrideY(_Getter getter, double y) : Getter(getter), Y(y), Count(getter.Count) { }+ template <typename I> IMPLOT_INLINE ImPlotPoint operator[](I idx) const {+ ImPlotPoint p = Getter[idx];+ p.y = Y;+ return p;+ }+ const _Getter Getter;+ const double Y;+ const int Count;+ typedef ImPlotPoint value_type;+};++template <typename _Getter>+struct GetterLoop {+ GetterLoop(_Getter getter) : Getter(getter), Count(getter.Count + 1) { }+ template <typename I> IMPLOT_INLINE ImPlotPoint operator[](I idx) const {+ idx = idx % (Count - 1);+ return Getter[idx];+ }+ const _Getter Getter;+ const int Count;+ typedef ImPlotPoint value_type;+};++template <typename T>+struct GetterError {+ GetterError(const T* xs, const T* ys, const T* neg, const T* pos, int count, int offset, int stride) :+ Xs(xs),+ Ys(ys),+ Neg(neg),+ Pos(pos),+ Count(count),+ Offset(count ? ImPosMod(offset, count) : 0),+ Stride(stride)+ { }+ template <typename I> IMPLOT_INLINE ImPlotPointError operator[](I idx) const {+ return ImPlotPointError((double)IndexData(Xs, idx, Count, Offset, Stride),+ (double)IndexData(Ys, idx, Count, Offset, Stride),+ (double)IndexData(Neg, idx, Count, Offset, Stride),+ (double)IndexData(Pos, idx, Count, Offset, Stride));+ }+ const T* const Xs;+ const T* const Ys;+ const T* const Neg;+ const T* const Pos;+ const int Count;+ const int Offset;+ const int Stride;+ typedef ImPlotPointError value_type;+};++//-----------------------------------------------------------------------------+// [SECTION] Color Getters+//-----------------------------------------------------------------------------++struct GetterConstColor {+ GetterConstColor(ImU32 color, float alpha = 1.0f) {+ ImU32 col = color;+ if (alpha < 1.0f) {+ ImVec4 col_vec = ImGui::ColorConvertU32ToFloat4(col);+ col_vec.w *= alpha;+ col = ImGui::GetColorU32(col_vec);+ }+ Color = col;+ }+ template <typename I> IMPLOT_INLINE ImU32 operator[](I) const { return Color; }+ ImU32 Color;+};++struct GetterIdxColor {+ GetterIdxColor(const ImU32* data, int count, float alpha = 1.0f) : Data(data), Count(count), Alpha(alpha) { }+ template <typename I> IMPLOT_INLINE ImU32 operator[](I idx) const {+ IM_ASSERT(idx >= 0 && idx < Count);+ ImU32 col = Data[idx];+ if (Alpha < 1.0f) {+ ImVec4 col_vec = ImGui::ColorConvertU32ToFloat4(col);+ col_vec.w *= Alpha;+ col = ImGui::GetColorU32(col_vec);+ }+ return col;+ }+ const ImU32* Data;+ const int Count;+ const float Alpha;+};++//-----------------------------------------------------------------------------+// [SECTION] Size Getters+//-----------------------------------------------------------------------------++struct GetterConstSize {+ GetterConstSize(float size) : Size(size) { }+ template <typename I> IMPLOT_INLINE float operator[](I) const { return Size; }+ float Size;+};++struct GetterIdxSize {+ GetterIdxSize(const float* data, int count) : Data(data), Count(count) { }+ template <typename I> IMPLOT_INLINE float operator[](I idx) const {+ IM_ASSERT(idx >= 0 && idx < Count);+ return Data[idx];+ }+ const float* Data;+ const int Count;+};++//-----------------------------------------------------------------------------+// [SECTION] Fitters+//-----------------------------------------------------------------------------++template <typename _Getter1>+struct Fitter1 {+ Fitter1(const _Getter1& getter) : Getter(getter) { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ for (int i = 0; i < Getter.Count; ++i) {+ ImPlotPoint p = Getter[i];+ x_axis.ExtendFitWith(y_axis, p.x, p.y);+ y_axis.ExtendFitWith(x_axis, p.y, p.x);+ }+ }+ const _Getter1& Getter;+};++template <typename _Getter1>+struct FitterBubbles1 {+ FitterBubbles1(const _Getter1& getter) : Getter(getter) { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ for (int i = 0; i < Getter.Count; ++i) {+ ImPlotPoint3D p = Getter(i);+ double half_size = p.z;+ // Fit left and right edges+ x_axis.ExtendFitWith(y_axis, p.x - half_size, p.y);+ x_axis.ExtendFitWith(y_axis, p.x + half_size, p.y);+ // Fit top and bottom edges+ y_axis.ExtendFitWith(x_axis, p.y - half_size, p.x);+ y_axis.ExtendFitWith(x_axis, p.y + half_size, p.x);+ }+ }+ const _Getter1& Getter;+};++template <typename _Getter1>+struct FitterX {+ FitterX(const _Getter1& getter) : Getter(getter) { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis&) const {+ for (int i = 0; i < Getter.Count; ++i) {+ ImPlotPoint p = Getter[i];+ x_axis.ExtendFit(p.x);+ }+ }+ const _Getter1& Getter;+};++template <typename _Getter1>+struct FitterY {+ FitterY(const _Getter1& getter) : Getter(getter) { }+ void Fit(ImPlotAxis&, ImPlotAxis& y_axis) const {+ for (int i = 0; i < Getter.Count; ++i) {+ ImPlotPoint p = Getter[i];+ y_axis.ExtendFit(p.y);+ }+ }+ const _Getter1& Getter;+};++template <typename _Getter1, typename _Getter2>+struct Fitter2 {+ Fitter2(const _Getter1& getter1, const _Getter2& getter2) : Getter1(getter1), Getter2(getter2) { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ for (int i = 0; i < Getter1.Count; ++i) {+ ImPlotPoint p = Getter1[i];+ x_axis.ExtendFitWith(y_axis, p.x, p.y);+ y_axis.ExtendFitWith(x_axis, p.y, p.x);+ }+ for (int i = 0; i < Getter2.Count; ++i) {+ ImPlotPoint p = Getter2[i];+ x_axis.ExtendFitWith(y_axis, p.x, p.y);+ y_axis.ExtendFitWith(x_axis, p.y, p.x);+ }+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+};++template <typename _Getter1, typename _Getter2>+struct FitterBarV {+ FitterBarV(const _Getter1& getter1, const _Getter2& getter2, double width) :+ Getter1(getter1),+ Getter2(getter2),+ HalfWidth(width*0.5)+ { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ int count = ImMin(Getter1.Count, Getter2.Count);+ for (int i = 0; i < count; ++i) {+ ImPlotPoint p1 = Getter1[i]; p1.x -= HalfWidth;+ ImPlotPoint p2 = Getter2[i]; p2.x += HalfWidth;+ x_axis.ExtendFitWith(y_axis, p1.x, p1.y);+ y_axis.ExtendFitWith(x_axis, p1.y, p1.x);+ x_axis.ExtendFitWith(y_axis, p2.x, p2.y);+ y_axis.ExtendFitWith(x_axis, p2.y, p2.x);+ }+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const double HalfWidth;+};++template <typename _Getter1, typename _Getter2>+struct FitterBarH {+ FitterBarH(const _Getter1& getter1, const _Getter2& getter2, double height) :+ Getter1(getter1),+ Getter2(getter2),+ HalfHeight(height*0.5)+ { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ int count = ImMin(Getter1.Count, Getter2.Count);+ for (int i = 0; i < count; ++i) {+ ImPlotPoint p1 = Getter1[i]; p1.y -= HalfHeight;+ ImPlotPoint p2 = Getter2[i]; p2.y += HalfHeight;+ x_axis.ExtendFitWith(y_axis, p1.x, p1.y);+ y_axis.ExtendFitWith(x_axis, p1.y, p1.x);+ x_axis.ExtendFitWith(y_axis, p2.x, p2.y);+ y_axis.ExtendFitWith(x_axis, p2.y, p2.x);+ }+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const double HalfHeight;+};++struct FitterRect {+ FitterRect(const ImPlotPoint& pmin, const ImPlotPoint& pmax) :+ Pmin(pmin),+ Pmax(pmax)+ { }+ FitterRect(const ImPlotRect& rect) :+ FitterRect(rect.Min(), rect.Max())+ { }+ void Fit(ImPlotAxis& x_axis, ImPlotAxis& y_axis) const {+ x_axis.ExtendFitWith(y_axis, Pmin.x, Pmin.y);+ y_axis.ExtendFitWith(x_axis, Pmin.y, Pmin.x);+ x_axis.ExtendFitWith(y_axis, Pmax.x, Pmax.y);+ y_axis.ExtendFitWith(x_axis, Pmax.y, Pmax.x);+ }+ const ImPlotPoint Pmin;+ const ImPlotPoint Pmax;+};++//-----------------------------------------------------------------------------+// [SECTION] Transformers+//-----------------------------------------------------------------------------++struct Transformer1 {+ Transformer1(double pixMin, double pltMin, double pltMax, double m, double scaMin, double scaMax, ImPlotTransform fwd, void* data) :+ ScaMin(scaMin),+ ScaMax(scaMax),+ PltMin(pltMin),+ PltMax(pltMax),+ PixMin(pixMin),+ M(m),+ TransformFwd(fwd),+ TransformData(data)+ { }++ template <typename T> IMPLOT_INLINE float operator()(T p) const {+ if (TransformFwd != nullptr) {+ double s = TransformFwd(p, TransformData);+ double t = (s - ScaMin) / (ScaMax - ScaMin);+ p = PltMin + (PltMax - PltMin) * t;+ }+ return (float)(PixMin + M * (p - PltMin));+ }++ double ScaMin, ScaMax, PltMin, PltMax, PixMin, M;+ ImPlotTransform TransformFwd;+ void* TransformData;+};++struct Transformer2 {+ Transformer2(const ImPlotAxis& x_axis, const ImPlotAxis& y_axis) :+ Tx(x_axis.PixelMin,+ x_axis.Range.Min,+ x_axis.Range.Max,+ x_axis.ScaleToPixel,+ x_axis.ScaleMin,+ x_axis.ScaleMax,+ x_axis.TransformForward,+ x_axis.TransformData),+ Ty(y_axis.PixelMin,+ y_axis.Range.Min,+ y_axis.Range.Max,+ y_axis.ScaleToPixel,+ y_axis.ScaleMin,+ y_axis.ScaleMax,+ y_axis.TransformForward,+ y_axis.TransformData)+ { }++ Transformer2(const ImPlotPlot& plot) :+ Transformer2(plot.Axes[plot.CurrentX], plot.Axes[plot.CurrentY])+ { }++ Transformer2() :+ Transformer2(*GImPlot->CurrentPlot)+ { }++ template <typename P> IMPLOT_INLINE ImVec2 operator()(const P& plt) const {+ ImVec2 out;+ out.x = Tx(plt.x);+ out.y = Ty(plt.y);+ return out;+ }++ template <typename T> IMPLOT_INLINE ImVec2 operator()(T x, T y) const {+ ImVec2 out;+ out.x = Tx(x);+ out.y = Ty(y);+ return out;+ }++ Transformer1 Tx;+ Transformer1 Ty;+};++//-----------------------------------------------------------------------------+// [SECTION] Renderers+//-----------------------------------------------------------------------------++struct RendererBase {+ RendererBase(int prims, int idx_consumed, int vtx_consumed) :+ Prims(prims),+ IdxConsumed(idx_consumed),+ VtxConsumed(vtx_consumed)+ { }+ const int Prims;+ Transformer2 Transformer;+ const int IdxConsumed;+ const int VtxConsumed;+};++template <class _Getter, class _GetterColor>+struct RendererLineStrip : RendererBase {+ RendererLineStrip(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count - 1, 6, 4),+ Getter(getter),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ {+ P1 = this->Transformer(Getter[0]);+ }+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2)))) {+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimLine(draw_list,P1,P2,HalfWeight,col,UV0,UV1);+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 P1;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++template <class _Getter, class _GetterColor>+struct RendererLineStripSkip : RendererBase {+ RendererLineStripSkip(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count - 1, 6, 4),+ Getter(getter),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ {+ P1 = this->Transformer(Getter[0]);+ }+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2)))) {+ if (!ImNan(P2.x) && !ImNan(P2.y))+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimLine(draw_list,P1,P2,HalfWeight,col,UV0,UV1);+ if (!ImNan(P2.x) && !ImNan(P2.y))+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 P1;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++template <class _Getter, class _GetterColor>+struct RendererLineSegments1 : RendererBase {+ RendererLineSegments1(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count / 2, 6, 4),+ Getter(getter),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ { }+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P1 = this->Transformer(Getter[prim*2+0]);+ ImVec2 P2 = this->Transformer(Getter[prim*2+1]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2))))+ return false;+ ImU32 col = GetterColor[prim*2];+ PrimLine(draw_list,P1,P2,HalfWeight,col,UV0,UV1);+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererLineSegments2 : RendererBase {+ RendererLineSegments2(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color, float weight) :+ RendererBase(ImMin(getter1.Count, getter2.Count), 6, 4),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ {}+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P1 = this->Transformer(Getter1[prim]);+ ImVec2 P2 = this->Transformer(Getter2[prim]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2))))+ return false;+ ImU32 col = GetterColor[prim];+ PrimLine(draw_list,P1,P2,HalfWeight,col,UV0,UV1);+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererBarsFillV : RendererBase {+ RendererBarsFillV(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color, double width) :+ RendererBase(ImMin(getter1.Count, getter2.Count), 6, 4),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color),+ HalfWidth(width/2)+ {}+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint p1 = Getter1[prim];+ ImPlotPoint p2 = Getter2[prim];+ p1.x += HalfWidth;+ p2.x -= HalfWidth;+ ImVec2 P1 = this->Transformer(p1);+ ImVec2 P2 = this->Transformer(p2);+ float width_px = ImAbs(P1.x-P2.x);+ if (width_px < 1.0f) {+ P1.x += P1.x > P2.x ? (1-width_px) / 2 : (width_px-1) / 2;+ P2.x += P2.x > P1.x ? (1-width_px) / 2 : (width_px-1) / 2;+ }+ ImVec2 PMin = ImMin(P1, P2);+ ImVec2 PMax = ImMax(P1, P2);+ if (!cull_rect.Overlaps(ImRect(PMin, PMax)))+ return false;+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list,PMin,PMax,col,UV);+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ const double HalfWidth;+ mutable ImVec2 UV;+};++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererBarsFillH : RendererBase {+ RendererBarsFillH(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color, double height) :+ RendererBase(ImMin(getter1.Count, getter2.Count), 6, 4),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color),+ HalfHeight(height/2)+ {}+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint p1 = Getter1[prim];+ ImPlotPoint p2 = Getter2[prim];+ p1.y += HalfHeight;+ p2.y -= HalfHeight;+ ImVec2 P1 = this->Transformer(p1);+ ImVec2 P2 = this->Transformer(p2);+ float height_px = ImAbs(P1.y-P2.y);+ if (height_px < 1.0f) {+ P1.y += P1.y > P2.y ? (1-height_px) / 2 : (height_px-1) / 2;+ P2.y += P2.y > P1.y ? (1-height_px) / 2 : (height_px-1) / 2;+ }+ ImVec2 PMin = ImMin(P1, P2);+ ImVec2 PMax = ImMax(P1, P2);+ if (!cull_rect.Overlaps(ImRect(PMin, PMax)))+ return false;+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list,PMin,PMax,col,UV);+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ const double HalfHeight;+ mutable ImVec2 UV;+};++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererBarsLineV : RendererBase {+ RendererBarsLineV(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color, double width, float weight) :+ RendererBase(ImMin(getter1.Count, getter2.Count), 24, 8),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color),+ HalfWidth(width/2),+ Weight(weight)+ {}+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint p1 = Getter1[prim];+ ImPlotPoint p2 = Getter2[prim];+ p1.x += HalfWidth;+ p2.x -= HalfWidth;+ ImVec2 P1 = this->Transformer(p1);+ ImVec2 P2 = this->Transformer(p2);+ float width_px = ImAbs(P1.x-P2.x);+ if (width_px < 1.0f) {+ P1.x += P1.x > P2.x ? (1-width_px) / 2 : (width_px-1) / 2;+ P2.x += P2.x > P1.x ? (1-width_px) / 2 : (width_px-1) / 2;+ }+ ImVec2 PMin = ImMin(P1, P2);+ ImVec2 PMax = ImMax(P1, P2);+ if (!cull_rect.Overlaps(ImRect(PMin, PMax)))+ return false;+ ImU32 col = GetterColor[prim];+ PrimRectLine(draw_list,PMin,PMax,Weight,col,UV);+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ const double HalfWidth;+ const float Weight;+ mutable ImVec2 UV;+};++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererBarsLineH : RendererBase {+ RendererBarsLineH(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color, double height, float weight) :+ RendererBase(ImMin(getter1.Count, getter2.Count), 24, 8),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color),+ HalfHeight(height/2),+ Weight(weight)+ {}+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint p1 = Getter1[prim];+ ImPlotPoint p2 = Getter2[prim];+ p1.y += HalfHeight;+ p2.y -= HalfHeight;+ ImVec2 P1 = this->Transformer(p1);+ ImVec2 P2 = this->Transformer(p2);+ float height_px = ImAbs(P1.y-P2.y);+ if (height_px < 1.0f) {+ P1.y += P1.y > P2.y ? (1-height_px) / 2 : (height_px-1) / 2;+ P2.y += P2.y > P1.y ? (1-height_px) / 2 : (height_px-1) / 2;+ }+ ImVec2 PMin = ImMin(P1, P2);+ ImVec2 PMax = ImMax(P1, P2);+ if (!cull_rect.Overlaps(ImRect(PMin, PMax)))+ return false;+ ImU32 col = GetterColor[prim];+ PrimRectLine(draw_list,PMin,PMax,Weight,col,UV);+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ const double HalfHeight;+ const float Weight;+ mutable ImVec2 UV;+};+++template <class _Getter, class _GetterColor>+struct RendererStairsPre : RendererBase {+ RendererStairsPre(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count - 1, 12, 8),+ Getter(getter),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ {+ P1 = this->Transformer(Getter[0]);+ }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2)))) {+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list, ImVec2(P1.x - HalfWeight, P1.y), ImVec2(P1.x + HalfWeight, P2.y), col, UV);+ PrimRectFill(draw_list, ImVec2(P1.x, P2.y + HalfWeight), ImVec2(P2.x, P2.y - HalfWeight), col, UV);+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 P1;+ mutable ImVec2 UV;+};++template <class _Getter, class _GetterColor>+struct RendererStairsPost : RendererBase {+ RendererStairsPost(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count - 1, 12, 8),+ Getter(getter),+ GetterColor(getter_color),+ HalfWeight(ImMax(1.0f,weight) * 0.5f)+ {+ P1 = this->Transformer(Getter[0]);+ }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ if (!cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2)))) {+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list, ImVec2(P1.x, P1.y + HalfWeight), ImVec2(P2.x, P1.y - HalfWeight), col, UV);+ PrimRectFill(draw_list, ImVec2(P2.x - HalfWeight, P2.y), ImVec2(P2.x + HalfWeight, P1.y), col, UV);+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable float HalfWeight;+ mutable ImVec2 P1;+ mutable ImVec2 UV;+};++template <class _Getter, class _GetterColor>+struct RendererStairsPreShaded : RendererBase {+ RendererStairsPreShaded(const _Getter& getter, const _GetterColor& getter_color) :+ RendererBase(getter.Count - 1, 6, 4),+ Getter(getter),+ GetterColor(getter_color)+ {+ P1 = this->Transformer(Getter[0]);+ Y0 = this->Transformer(ImPlotPoint(0,0)).y;+ }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ ImVec2 PMin(ImMin(P1.x, P2.x), ImMin(Y0, P2.y));+ ImVec2 PMax(ImMax(P1.x, P2.x), ImMax(Y0, P2.y));+ if (!cull_rect.Overlaps(ImRect(PMin, PMax))) {+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list, PMin, PMax, col, UV);+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ float Y0;+ mutable ImVec2 P1;+ mutable ImVec2 UV;+};++template <class _Getter, class _GetterColor>+struct RendererStairsPostShaded : RendererBase {+ RendererStairsPostShaded(const _Getter& getter, const _GetterColor& getter_color) :+ RendererBase(getter.Count - 1, 6, 4),+ Getter(getter),+ GetterColor(getter_color)+ {+ P1 = this->Transformer(Getter[0]);+ Y0 = this->Transformer(ImPlotPoint(0,0)).y;+ }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P2 = this->Transformer(Getter[prim + 1]);+ ImVec2 PMin(ImMin(P1.x, P2.x), ImMin(P1.y, Y0));+ ImVec2 PMax(ImMax(P1.x, P2.x), ImMax(P1.y, Y0));+ if (!cull_rect.Overlaps(ImRect(PMin, PMax))) {+ P1 = P2;+ return false;+ }+ ImU32 col = GetterColor[prim];+ PrimRectFill(draw_list, PMin, PMax, col, UV);+ P1 = P2;+ return true;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ float Y0;+ mutable ImVec2 P1;+ mutable ImVec2 UV;+};++++template <class _Getter1, class _Getter2, class _GetterColor>+struct RendererShaded : RendererBase {+ RendererShaded(const _Getter1& getter1, const _Getter2& getter2, const _GetterColor& getter_color) :+ RendererBase(ImMin(getter1.Count, getter2.Count) - 1, 6, 5),+ Getter1(getter1),+ Getter2(getter2),+ GetterColor(getter_color)+ {+ P11 = this->Transformer(Getter1[0]);+ P12 = this->Transformer(Getter2[0]);+ }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 P21 = this->Transformer(Getter1[prim+1]);+ ImVec2 P22 = this->Transformer(Getter2[prim+1]);+ ImRect rect(ImMin(ImMin(ImMin(P11,P12),P21),P22), ImMax(ImMax(ImMax(P11,P12),P21),P22));+ if (!cull_rect.Overlaps(rect)) {+ P11 = P21;+ P12 = P22;+ return false;+ }+ ImU32 col = GetterColor[prim];+ const int intersect = (P11.y > P12.y && P22.y > P21.y) || (P12.y > P11.y && P21.y > P22.y);+ const ImVec2 intersection = intersect == 0 ? ImVec2(0,0) : Intersection(P11,P21,P12,P22);+ draw_list._VtxWritePtr[0].pos = P11;+ draw_list._VtxWritePtr[0].uv = UV;+ draw_list._VtxWritePtr[0].col = col;+ draw_list._VtxWritePtr[1].pos = P21;+ draw_list._VtxWritePtr[1].uv = UV;+ draw_list._VtxWritePtr[1].col = col;+ draw_list._VtxWritePtr[2].pos = intersection;+ draw_list._VtxWritePtr[2].uv = UV;+ draw_list._VtxWritePtr[2].col = col;+ draw_list._VtxWritePtr[3].pos = P12;+ draw_list._VtxWritePtr[3].uv = UV;+ draw_list._VtxWritePtr[3].col = col;+ draw_list._VtxWritePtr[4].pos = P22;+ draw_list._VtxWritePtr[4].uv = UV;+ draw_list._VtxWritePtr[4].col = col;+ draw_list._VtxWritePtr += 5;+ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1 + intersect);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3);+ draw_list._IdxWritePtr[3] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 1);+ draw_list._IdxWritePtr[4] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 4);+ draw_list._IdxWritePtr[5] = (ImDrawIdx)(draw_list._VtxCurrentIdx + 3 - intersect);+ draw_list._IdxWritePtr += 6;+ draw_list._VtxCurrentIdx += 5;+ P11 = P21;+ P12 = P22;+ return true;+ }+ const _Getter1& Getter1;+ const _Getter2& Getter2;+ const _GetterColor& GetterColor;+ mutable ImVec2 P11;+ mutable ImVec2 P12;+ mutable ImVec2 UV;+};++struct RectC {+ ImPlotPoint Pos;+ ImPlotPoint HalfSize;+ ImU32 Color;+};++template <typename _Getter>+struct RendererRectC : RendererBase {+ RendererRectC(const _Getter& getter) :+ RendererBase(getter.Count, 6, 4),+ Getter(getter)+ {}+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ RectC rect = Getter[prim];+ ImVec2 P1 = this->Transformer(rect.Pos.x - rect.HalfSize.x , rect.Pos.y - rect.HalfSize.y);+ ImVec2 P2 = this->Transformer(rect.Pos.x + rect.HalfSize.x , rect.Pos.y + rect.HalfSize.y);+ if ((rect.Color & IM_COL32_A_MASK) == 0 || !cull_rect.Overlaps(ImRect(ImMin(P1, P2), ImMax(P1, P2))))+ return false;+ PrimRectFill(draw_list,P1,P2,rect.Color,UV);+ return true;+ }+ const _Getter& Getter;+ mutable ImVec2 UV;+};++//-----------------------------------------------------------------------------+// [SECTION] RenderPrimitives+//-----------------------------------------------------------------------------++/// Renders primitive shapes in bulk as efficiently as possible.+template <class _Renderer>+void RenderPrimitivesEx(const _Renderer& renderer, ImDrawList& draw_list, const ImRect& cull_rect) {+ unsigned int prims = renderer.Prims;+ unsigned int prims_culled = 0;+ unsigned int idx = 0;+ renderer.Init(draw_list);+ while (prims) {+ // find how many can be reserved up to end of current draw command's limit+ unsigned int cnt = ImMin(prims, (MaxIdx<ImDrawIdx>::Value - draw_list._VtxCurrentIdx) / renderer.VtxConsumed);+ // make sure at least this many elements can be rendered to avoid situations where at the end of buffer this slow path is not taken all the time+ if (cnt >= ImMin(64u, prims)) {+ if (prims_culled >= cnt)+ prims_culled -= cnt; // reuse previous reservation+ else {+ // add more elements to previous reservation+ draw_list.PrimReserve((cnt - prims_culled) * renderer.IdxConsumed, (cnt - prims_culled) * renderer.VtxConsumed);+ prims_culled = 0;+ }+ }+ else+ {+ if (prims_culled > 0) {+ draw_list.PrimUnreserve(prims_culled * renderer.IdxConsumed, prims_culled * renderer.VtxConsumed);+ prims_culled = 0;+ }+ cnt = ImMin(prims, (MaxIdx<ImDrawIdx>::Value - 0/*draw_list._VtxCurrentIdx*/) / renderer.VtxConsumed);+ // reserve new draw command+ draw_list.PrimReserve(cnt * renderer.IdxConsumed, cnt * renderer.VtxConsumed);+ }+ prims -= cnt;+ for (unsigned int ie = idx + cnt; idx != ie; ++idx) {+ if (!renderer.Render(draw_list, cull_rect, idx))+ prims_culled++;+ }+ }+ if (prims_culled > 0)+ draw_list.PrimUnreserve(prims_culled * renderer.IdxConsumed, prims_culled * renderer.VtxConsumed);+}++template <template <class> class _Renderer, class _Getter, typename ...Args>+void RenderPrimitives1(const _Getter& getter, Args... args) {+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImRect& cull_rect = GetCurrentPlot()->PlotRect;+ RenderPrimitivesEx(_Renderer<_Getter>(getter,args...), draw_list, cull_rect);+}++template <template <class,class> class _Renderer, class _Getter1, class _Getter2, typename ...Args>+void RenderPrimitives2(const _Getter1& getter1, const _Getter2& getter2, Args... args) {+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImRect& cull_rect = GetCurrentPlot()->PlotRect;+ RenderPrimitivesEx(_Renderer<_Getter1,_Getter2>(getter1,getter2,args...), draw_list, cull_rect);+}++template <template <class,class,class> class _Renderer, class _Getter1, class _Getter2, class _Getter3, typename ...Args>+void RenderPrimitives3(const _Getter1& getter1, const _Getter2& getter2, const _Getter3& getter3, Args... args) {+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImRect& cull_rect = GetCurrentPlot()->PlotRect;+ RenderPrimitivesEx(_Renderer<_Getter1,_Getter2,_Getter3>(getter1,getter2,getter3,args...), draw_list, cull_rect);+}++//-----------------------------------------------------------------------------+// [SECTION] Markers+//-----------------------------------------------------------------------------++template <class _Getter, class _GetterColor, class _GetterSize>+struct RendererMarkersFill : RendererBase {+ RendererMarkersFill(const _Getter& getter, const _GetterColor& getter_color, const _GetterSize& getter_size, const ImVec2* marker, int count) :+ RendererBase(getter.Count, (count-2)*3, count),+ Getter(getter),+ GetterColor(getter_color),+ GetterSize(getter_size),+ Marker(marker),+ Count(count)+ { }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 p = this->Transformer(Getter[prim]);+ if (p.x >= cull_rect.Min.x && p.y >= cull_rect.Min.y && p.x <= cull_rect.Max.x && p.y <= cull_rect.Max.y) {+ ImU32 col = GetterColor[prim];+ float size = GetterSize[prim];+ for (int i = 0; i < Count; i++) {+ draw_list._VtxWritePtr[0].pos.x = p.x + Marker[i].x * size;+ draw_list._VtxWritePtr[0].pos.y = p.y + Marker[i].y * size;+ draw_list._VtxWritePtr[0].uv = UV;+ draw_list._VtxWritePtr[0].col = col;+ draw_list._VtxWritePtr++;+ }+ for (int i = 2; i < Count; i++) {+ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + i - 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + i);+ draw_list._IdxWritePtr += 3;+ }+ draw_list._VtxCurrentIdx += (ImDrawIdx)Count;+ return true;+ }+ return false;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ const _GetterSize& GetterSize;+ const ImVec2* Marker;+ const int Count;+ mutable ImVec2 UV;+};+++template <class _Getter, class _GetterColor, class _GetterSize>+struct RendererMarkersLine : RendererBase {+ RendererMarkersLine(const _Getter& getter, const _GetterColor& getter_color, const _GetterSize& getter_size, const ImVec2* marker, int count, float weight) :+ RendererBase(getter.Count, count/2*6, count/2*4),+ Getter(getter),+ GetterColor(getter_color),+ GetterSize(getter_size),+ Marker(marker),+ Count(count),+ HalfWeight(ImMax(1.0f,weight)*0.5f)+ { }+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImVec2 p = this->Transformer(Getter[prim]);+ if (p.x >= cull_rect.Min.x && p.y >= cull_rect.Min.y && p.x <= cull_rect.Max.x && p.y <= cull_rect.Max.y) {+ ImU32 col = GetterColor[prim];+ float size = GetterSize[prim];+ for (int i = 0; i < Count; i = i + 2) {+ ImVec2 p1(p.x + Marker[i].x * size, p.y + Marker[i].y * size);+ ImVec2 p2(p.x + Marker[i+1].x * size, p.y + Marker[i+1].y * size);+ PrimLine(draw_list, p1, p2, HalfWeight, col, UV0, UV1);+ }+ return true;+ }+ return false;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ const _GetterSize& GetterSize;+ const ImVec2* Marker;+ const int Count;+ mutable float HalfWeight;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++template <class _Getter, class _GetterColor>+struct RendererCircleFill : RendererBase {+ RendererCircleFill(const _Getter& getter, const _GetterColor& getter_color) :+ RendererBase(getter.Count, 62*3, 64),+ Getter(getter),+ GetterColor(getter_color)+ { }+ void Init(ImDrawList& draw_list) const {+ UV = draw_list._Data->TexUvWhitePixel;+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint3D p3D = Getter(prim);+ float size_in_plot_coords = (float)p3D.z;+ float radius_in_plot_coords = size_in_plot_coords;++ // Compute approximate radius in pixels for LOD+ float approx_radius_pixels = (float)ImAbs(radius_in_plot_coords * this->Transformer.Tx.M);+ int num_segments = ImClamp((int)(approx_radius_pixels), 10, 64);++ // Compute bounding box of the bubble in plot coordinates+ ImPlotPoint plot_min(p3D.x - radius_in_plot_coords, p3D.y - radius_in_plot_coords);+ ImPlotPoint plot_max(p3D.x + radius_in_plot_coords, p3D.y + radius_in_plot_coords);++ // Transform bounding box to pixel coordinates+ ImVec2 pixel_min = this->Transformer(plot_min);+ ImVec2 pixel_max = this->Transformer(plot_max);++ // Create bounding rectangle (handle axis inversion)+ ImRect bbox(ImMin(pixel_min, pixel_max), ImMax(pixel_min, pixel_max));++ // Check if bounding box overlaps with cull rectangle+ if (cull_rect.Overlaps(bbox)) {+ ImU32 col = GetterColor[prim];++ const float a_max = IM_PI * 2.0f;+ const float a_step = a_max / num_segments;++ ImDrawIdx vtx_base = (ImDrawIdx)draw_list._VtxCurrentIdx;++ for (int i = 0; i < num_segments; i++) {+ float angle = a_step * i;+ float cos_a = ImCos(angle);+ float sin_a = ImSin(angle);++ // Compute point in plot coordinates+ ImPlotPoint plot_point(p3D.x + cos_a * radius_in_plot_coords,+ p3D.y + sin_a * radius_in_plot_coords);+ // Transform to pixel coordinates+ ImVec2 pixel_pos = this->Transformer(plot_point);++ draw_list._VtxWritePtr[0].pos = pixel_pos;+ draw_list._VtxWritePtr[0].uv = UV;+ draw_list._VtxWritePtr[0].col = col;+ draw_list._VtxWritePtr++;+ }++ for (int i = 2; i < num_segments; i++) {+ draw_list._IdxWritePtr[0] = vtx_base;+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(vtx_base + i - 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(vtx_base + i);+ draw_list._IdxWritePtr += 3;+ }++ draw_list._VtxCurrentIdx += num_segments;++ int unused_vtx = 64 - num_segments;+ int unused_idx = (62 - (num_segments - 2)) * 3;+ if (unused_vtx > 0 || unused_idx > 0) {+ draw_list.PrimUnreserve(unused_idx, unused_vtx);+ }++ return true;+ }+ return false;+ }+ const _Getter& Getter;+ const _GetterColor& GetterColor;+ mutable ImVec2 UV;+};++template <class _Getter, class _GetterColor>+struct RendererCircleLine : RendererBase {+ RendererCircleLine(const _Getter& getter, const _GetterColor& getter_color, float weight) :+ RendererBase(getter.Count, 64*6, 64*4),+ Getter(getter),+ HalfWeight(ImMax(1.0f,weight)*0.5f),+ GetterColor(getter_color)+ { }+ void Init(ImDrawList& draw_list) const {+ GetLineRenderProps(draw_list, HalfWeight, UV0, UV1);+ }+ IMPLOT_INLINE bool Render(ImDrawList& draw_list, const ImRect& cull_rect, int prim) const {+ ImPlotPoint3D p3D = Getter(prim);+ float size_in_plot_coords = (float)p3D.z;+ float radius_in_plot_coords = size_in_plot_coords;++ // Compute approximate radius in pixels for LOD+ float approx_radius_pixels = (float)ImAbs(radius_in_plot_coords * this->Transformer.Tx.M);+ int num_segments = ImClamp((int)(approx_radius_pixels), 10, 64);++ // Compute bounding box of the bubble in plot coordinates+ ImPlotPoint plot_min(p3D.x - radius_in_plot_coords, p3D.y - radius_in_plot_coords);+ ImPlotPoint plot_max(p3D.x + radius_in_plot_coords, p3D.y + radius_in_plot_coords);++ // Transform bounding box to pixel coordinates+ ImVec2 pixel_min = this->Transformer(plot_min);+ ImVec2 pixel_max = this->Transformer(plot_max);++ // Create bounding rectangle (handle axis inversion)+ ImRect bbox(ImMin(pixel_min, pixel_max), ImMax(pixel_min, pixel_max));++ // Check if bounding box overlaps with cull rectangle+ if (cull_rect.Overlaps(bbox)) {+ ImU32 col = GetterColor[prim];++ const float a_max = IM_PI * 2.0f;+ const float a_step = a_max / num_segments;++ for (int i = 0; i < num_segments; i++) {+ float angle1 = a_step * i;+ float angle2 = a_step * ((i + 1) % num_segments);++ // Compute points in plot coordinates+ ImPlotPoint plot_point1(p3D.x + ImCos(angle1) * radius_in_plot_coords,+ p3D.y + ImSin(angle1) * radius_in_plot_coords);+ ImPlotPoint plot_point2(p3D.x + ImCos(angle2) * radius_in_plot_coords,+ p3D.y + ImSin(angle2) * radius_in_plot_coords);++ // Transform to pixel coordinates+ ImVec2 p1 = this->Transformer(plot_point1);+ ImVec2 p2 = this->Transformer(plot_point2);++ PrimLine(draw_list, p1, p2, HalfWeight, col, UV0, UV1);+ }++ int unused_vtx = (64 - num_segments) * 4;+ int unused_idx = (64 - num_segments) * 6;+ if (unused_vtx > 0 || unused_idx > 0) {+ draw_list.PrimUnreserve(unused_idx, unused_vtx);+ }++ return true;+ }+ return false;+ }+ const _Getter& Getter;+ mutable float HalfWeight;+ const _GetterColor& GetterColor;+ mutable ImVec2 UV0;+ mutable ImVec2 UV1;+};++static const ImVec2 MARKER_FILL_CIRCLE[10] = {ImVec2(1.0f, 0.0f), ImVec2(0.809017f, 0.58778524f),ImVec2(0.30901697f, 0.95105654f),ImVec2(-0.30901703f, 0.9510565f),ImVec2(-0.80901706f, 0.5877852f),ImVec2(-1.0f, 0.0f),ImVec2(-0.80901694f, -0.58778536f),ImVec2(-0.3090171f, -0.9510565f),ImVec2(0.30901712f, -0.9510565f),ImVec2(0.80901694f, -0.5877853f)};+static const ImVec2 MARKER_FILL_SQUARE[4] = {ImVec2(SQRT_1_2,SQRT_1_2), ImVec2(SQRT_1_2,-SQRT_1_2), ImVec2(-SQRT_1_2,-SQRT_1_2), ImVec2(-SQRT_1_2,SQRT_1_2)};+static const ImVec2 MARKER_FILL_DIAMOND[4] = {ImVec2(1, 0), ImVec2(0, -1), ImVec2(-1, 0), ImVec2(0, 1)};+static const ImVec2 MARKER_FILL_UP[3] = {ImVec2(SQRT_3_2,0.5f),ImVec2(0,-1),ImVec2(-SQRT_3_2,0.5f)};+static const ImVec2 MARKER_FILL_DOWN[3] = {ImVec2(SQRT_3_2,-0.5f),ImVec2(0,1),ImVec2(-SQRT_3_2,-0.5f)};+static const ImVec2 MARKER_FILL_LEFT[3] = {ImVec2(-1,0), ImVec2(0.5, SQRT_3_2), ImVec2(0.5, -SQRT_3_2)};+static const ImVec2 MARKER_FILL_RIGHT[3] = {ImVec2(1,0), ImVec2(-0.5, SQRT_3_2), ImVec2(-0.5, -SQRT_3_2)};++static const ImVec2 MARKER_LINE_CIRCLE[20] = {+ ImVec2(1.0f, 0.0f),+ ImVec2(0.809017f, 0.58778524f),+ ImVec2(0.809017f, 0.58778524f),+ ImVec2(0.30901697f, 0.95105654f),+ ImVec2(0.30901697f, 0.95105654f),+ ImVec2(-0.30901703f, 0.9510565f),+ ImVec2(-0.30901703f, 0.9510565f),+ ImVec2(-0.80901706f, 0.5877852f),+ ImVec2(-0.80901706f, 0.5877852f),+ ImVec2(-1.0f, 0.0f),+ ImVec2(-1.0f, 0.0f),+ ImVec2(-0.80901694f, -0.58778536f),+ ImVec2(-0.80901694f, -0.58778536f),+ ImVec2(-0.3090171f, -0.9510565f),+ ImVec2(-0.3090171f, -0.9510565f),+ ImVec2(0.30901712f, -0.9510565f),+ ImVec2(0.30901712f, -0.9510565f),+ ImVec2(0.80901694f, -0.5877853f),+ ImVec2(0.80901694f, -0.5877853f),+ ImVec2(1.0f, 0.0f)+};+constexpr ImVec2 MARKER_LINE_SQUARE[8] = {ImVec2(SQRT_1_2,SQRT_1_2), ImVec2(SQRT_1_2,-SQRT_1_2), ImVec2(SQRT_1_2,-SQRT_1_2), ImVec2(-SQRT_1_2,-SQRT_1_2), ImVec2(-SQRT_1_2,-SQRT_1_2), ImVec2(-SQRT_1_2,SQRT_1_2), ImVec2(-SQRT_1_2,SQRT_1_2), ImVec2(SQRT_1_2,SQRT_1_2)};+constexpr ImVec2 MARKER_LINE_DIAMOND[8] = {ImVec2(1, 0), ImVec2(0, -1), ImVec2(0, -1), ImVec2(-1, 0), ImVec2(-1, 0), ImVec2(0, 1), ImVec2(0, 1), ImVec2(1, 0)};+constexpr ImVec2 MARKER_LINE_UP[6] = {ImVec2(SQRT_3_2,0.5f), ImVec2(0,-1),ImVec2(0,-1),ImVec2(-SQRT_3_2,0.5f),ImVec2(-SQRT_3_2,0.5f),ImVec2(SQRT_3_2,0.5f)};+constexpr ImVec2 MARKER_LINE_DOWN[6] = {ImVec2(SQRT_3_2,-0.5f),ImVec2(0,1),ImVec2(0,1),ImVec2(-SQRT_3_2,-0.5f), ImVec2(-SQRT_3_2,-0.5f), ImVec2(SQRT_3_2,-0.5f)};+constexpr ImVec2 MARKER_LINE_LEFT[6] = {ImVec2(-1,0), ImVec2(0.5, SQRT_3_2), ImVec2(0.5, SQRT_3_2), ImVec2(0.5, -SQRT_3_2) , ImVec2(0.5, -SQRT_3_2) , ImVec2(-1,0) };+constexpr ImVec2 MARKER_LINE_RIGHT[6] = {ImVec2(1,0), ImVec2(-0.5, SQRT_3_2), ImVec2(-0.5, SQRT_3_2), ImVec2(-0.5, -SQRT_3_2), ImVec2(-0.5, -SQRT_3_2), ImVec2(1,0) };+constexpr ImVec2 MARKER_LINE_ASTERISK[6] = {ImVec2(-SQRT_3_2, -0.5f), ImVec2(SQRT_3_2, 0.5f), ImVec2(-SQRT_3_2, 0.5f), ImVec2(SQRT_3_2, -0.5f), ImVec2(0, -1), ImVec2(0, 1)};+constexpr ImVec2 MARKER_LINE_PLUS[4] = {ImVec2(-1, 0), ImVec2(1, 0), ImVec2(0, -1), ImVec2(0, 1)};+constexpr ImVec2 MARKER_LINE_CROSS[4] = {ImVec2(-SQRT_1_2,-SQRT_1_2),ImVec2(SQRT_1_2,SQRT_1_2),ImVec2(SQRT_1_2,-SQRT_1_2),ImVec2(-SQRT_1_2,SQRT_1_2)};+constexpr ImVec2 MARKER_LINE_VERTICAL[2] = {ImVec2(0, -1), ImVec2(0, 1)};+constexpr ImVec2 MARKER_LINE_HORIZONTAL[2] = {ImVec2(-1, 0), ImVec2(1, 0)};++template <typename _Getter, typename _GetterFillColor, typename _GetterLineColor, typename _GetterSize>+void RenderMarkers(const _Getter& getter, ImPlotMarker marker, bool rend_fill, const _GetterFillColor& col_fill_getter, bool rend_line, const _GetterLineColor& col_line_getter, const _GetterSize& size_getter, float weight) {+ if (rend_fill) {+ switch (marker) {+ case ImPlotMarker_Circle : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_CIRCLE,10); break;+ case ImPlotMarker_Square : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_SQUARE, 4); break;+ case ImPlotMarker_Diamond : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_DIAMOND,4); break;+ case ImPlotMarker_Up : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_UP, 3); break;+ case ImPlotMarker_Down : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_DOWN, 3); break;+ case ImPlotMarker_Left : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_LEFT, 3); break;+ case ImPlotMarker_Right : RenderPrimitives3<RendererMarkersFill>(getter,col_fill_getter,size_getter,MARKER_FILL_RIGHT, 3); break;+ }+ }+ if (rend_line) {+ switch (marker) {+ case ImPlotMarker_Circle : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_CIRCLE, 20,weight); break;+ case ImPlotMarker_Square : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_SQUARE, 8,weight); break;+ case ImPlotMarker_Diamond : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_DIAMOND, 8,weight); break;+ case ImPlotMarker_Up : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_UP, 6,weight); break;+ case ImPlotMarker_Down : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_DOWN, 6,weight); break;+ case ImPlotMarker_Left : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_LEFT, 6,weight); break;+ case ImPlotMarker_Right : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_RIGHT, 6,weight); break;+ case ImPlotMarker_Asterisk : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_ASTERISK,6,weight); break;+ case ImPlotMarker_Plus : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_PLUS, 4,weight); break;+ case ImPlotMarker_Cross : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_CROSS, 4,weight); break;+ case ImPlotMarker_Vertical : RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_VERTICAL,2,weight); break;+ case ImPlotMarker_Horizontal: RenderPrimitives3<RendererMarkersLine>(getter,col_line_getter,size_getter,MARKER_LINE_HORIZONTAL,2,weight); break;+ }+ }+}++template <typename _Getter>+void RenderColoredMarkers(const _Getter& getter, const ImPlotNextItemData& s) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.MarkerLineColor);+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.MarkerFillColor);++ if (s.Spec.MarkerSizes != nullptr) {+ GetterIdxSize size_getter(s.Spec.MarkerSizes, getter.Count);+ if (s.Spec.MarkerFillColors != nullptr && s.Spec.MarkerLineColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.MarkerFillColors, getter.Count, s.Spec.FillAlpha);+ GetterIdxColor line_getter(s.Spec.MarkerLineColors, getter.Count);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else if (s.Spec.MarkerFillColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.MarkerFillColors, getter.Count, s.Spec.FillAlpha);+ GetterConstColor line_getter(col_line);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else if (s.Spec.MarkerLineColors != nullptr) {+ GetterConstColor fill_getter(col_fill);+ GetterIdxColor line_getter(s.Spec.MarkerLineColors, getter.Count);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor fill_getter(col_fill);+ GetterConstColor line_getter(col_line);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ }+ } else {+ GetterConstSize size_getter(s.Spec.MarkerSize);+ if (s.Spec.MarkerFillColors != nullptr && s.Spec.MarkerLineColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.MarkerFillColors, getter.Count, s.Spec.FillAlpha);+ GetterIdxColor line_getter(s.Spec.MarkerLineColors, getter.Count);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else if (s.Spec.MarkerFillColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.MarkerFillColors, getter.Count, s.Spec.FillAlpha);+ GetterConstColor line_getter(col_line);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else if (s.Spec.MarkerLineColors != nullptr) {+ GetterConstColor fill_getter(col_fill);+ GetterIdxColor line_getter(s.Spec.MarkerLineColors, getter.Count);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor fill_getter(col_fill);+ GetterConstColor line_getter(col_line);+ RenderMarkers<_Getter>(getter, s.Spec.Marker, s.RenderMarkerFill, fill_getter, s.RenderMarkerLine, line_getter, size_getter, s.Spec.LineWeight);+ }+ }+}++//-----------------------------------------------------------------------------+// [SECTION] PlotLine+//-----------------------------------------------------------------------------++template <typename _Getter>+void PlotLineEx(const char* label_id, const _Getter& getter, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter1<_Getter>(getter), spec, spec.LineColor, spec.Marker)) {+ if (getter.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ if (getter.Count > 1) {+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_Shaded) && s.RenderFill) {+ GetterOverrideY<_Getter> getter2(getter, 0);+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.FillColors, getter.Count, s.Spec.FillAlpha);+ RenderPrimitives3<RendererShaded>(getter,getter2,color_getter);+ } else {+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ GetterConstColor color_getter(col_fill, s.Spec.FillAlpha);+ RenderPrimitives3<RendererShaded>(getter,getter2,color_getter);+ }+ }+ if (s.RenderLine) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (ImHasFlag(spec.Flags,ImPlotLineFlags_Segments)) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter.Count);+ RenderPrimitives2<RendererLineSegments1>(getter,color_getter,s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives2<RendererLineSegments1>(getter,color_getter,s.Spec.LineWeight);+ }+ }+ else if (ImHasFlag(spec.Flags, ImPlotLineFlags_Loop)) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter.Count);+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_SkipNaN))+ RenderPrimitives2<RendererLineStripSkip>(GetterLoop<_Getter>(getter),color_getter,s.Spec.LineWeight);+ else+ RenderPrimitives2<RendererLineStrip>(GetterLoop<_Getter>(getter),color_getter,s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_SkipNaN))+ RenderPrimitives2<RendererLineStripSkip>(GetterLoop<_Getter>(getter),color_getter,s.Spec.LineWeight);+ else+ RenderPrimitives2<RendererLineStrip>(GetterLoop<_Getter>(getter),color_getter,s.Spec.LineWeight);+ }+ }+ else {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter.Count);+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_SkipNaN))+ RenderPrimitives2<RendererLineStripSkip>(getter,color_getter,s.Spec.LineWeight);+ else+ RenderPrimitives2<RendererLineStrip>(getter,color_getter,s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_SkipNaN))+ RenderPrimitives2<RendererLineStripSkip>(getter,color_getter,s.Spec.LineWeight);+ else+ RenderPrimitives2<RendererLineStrip>(getter,color_getter,s.Spec.LineWeight);+ }+ }+ }+ }+ // render markers+ if (s.RenderMarkers) {+ if (ImHasFlag(spec.Flags, ImPlotLineFlags_NoClip)) {+ PopPlotClipRect();+ PushPlotClipRect(s.Spec.MarkerSize);+ }+ RenderColoredMarkers(getter, s);+ }+ EndItem();+ }+}++template <typename T>+void PlotLine(const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec) {+ GetterXY<IndexerLin,IndexerIdx<T>> getter(IndexerLin(xscale,x0),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ PlotLineEx(label_id, getter, spec);+}++template <typename T>+void PlotLine(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ PlotLineEx(label_id, getter, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotLine<T> (const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotLine<T>(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++// custom+void PlotLineG(const char* label_id, ImPlotGetter getter_func, void* data, int count, const ImPlotSpec& spec) {+ GetterFuncPtr getter(getter_func,data, count);+ PlotLineEx(label_id, getter, spec);+}++//-----------------------------------------------------------------------------+// [SECTION] PlotScatter+//-----------------------------------------------------------------------------++template <typename Getter>+void PlotScatterEx(const char* label_id, const Getter& getter, const ImPlotSpec& spec) {+ // force scatter to render a marker even if none+ ImPlotMarker marker = spec.Marker == ImPlotMarker_None ? ImPlotMarker_Auto: spec.Marker;+ if (BeginItemEx(label_id, Fitter1<Getter>(getter), spec, spec.MarkerLineColor, marker)) {+ if (getter.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ if (s.RenderMarkers) {+ if (ImHasFlag(spec.Flags,ImPlotScatterFlags_NoClip)) {+ PopPlotClipRect();+ PushPlotClipRect(s.Spec.MarkerSize);+ }+ RenderColoredMarkers(getter, s);+ }+ EndItem();+ }+}++template <typename T>+void PlotScatter(const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec) {+ GetterXY<IndexerLin,IndexerIdx<T>> getter(IndexerLin(xscale,x0),IndexerIdx<T>(values,count,spec.Offset, Stride<T>(spec)),count);+ PlotScatterEx(label_id, getter, spec);+}++template <typename T>+void PlotScatter(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset, Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset, Stride<T>(spec)),count);+ return PlotScatterEx(label_id, getter, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotScatter<T>(const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotScatter<T>(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++// custom+void PlotScatterG(const char* label_id, ImPlotGetter getter_func, void* data, int count, const ImPlotSpec& spec) {+ GetterFuncPtr getter(getter_func,data, count);+ return PlotScatterEx(label_id, getter, spec);+}++//-----------------------------------------------------------------------------+// [SECTION] PlotBubbles+//-----------------------------------------------------------------------------++template <typename Getter>+void PlotBubblesEx(const char* label_id, const Getter& getter, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, FitterBubbles1<Getter>(getter), spec, spec.FillColor, spec.Marker)) {+ if (getter.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();++ if (s.RenderFill) {+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.FillColors, getter.Count, s.Spec.FillAlpha);+ RenderPrimitives2<RendererCircleFill>(getter, fill_getter);+ } else {+ GetterConstColor fill_getter(col_fill);+ RenderPrimitives2<RendererCircleFill>(getter, fill_getter);+ }+ }+ if (s.RenderLine) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor line_getter(s.Spec.LineColors, getter.Count);+ RenderPrimitives2<RendererCircleLine>(getter, line_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor line_getter(col_line);+ RenderPrimitives2<RendererCircleLine>(getter, line_getter, s.Spec.LineWeight);+ }+ }++ EndItem();+ }+}++template <typename T>+void PlotBubbles(const char* label_id, const T* values, const T* szs, int count, double xscale, double x0, const ImPlotSpec& spec) {+ GetterXYZ<IndexerLin,IndexerIdx<T>,IndexerIdx<T>> getter(IndexerLin(xscale,x0), IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)), IndexerIdx<T>(szs,count,spec.Offset,Stride<T>(spec)),count);+ PlotBubblesEx(label_id, getter, spec);+}++template <typename T>+void PlotBubbles(const char* label_id, const T* xs, const T* ys, const T* szs, int count, const ImPlotSpec& spec) {+ GetterXYZ<IndexerIdx<T>,IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)), IndexerIdx<T>(szs,count,spec.Offset,Stride<T>(spec)),count);+ return PlotBubblesEx(label_id, getter, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotBubbles<T>(const char* label_id, const T* values, const T* szs, int count, double xscale, double x0, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotBubbles<T>(const char* label_id, const T* xs, const T* ys, const T* szs, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotPolygon+//-----------------------------------------------------------------------------++template <typename Getter>+void PlotPolygonEx(const char* label_id, const Getter& getter, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter1<Getter>(getter), spec, spec.FillColor, spec.Marker)) {+ if (getter.Count < 2) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ const bool is_concave = ImHasFlag(spec.Flags, ImPlotPolygonFlags_Concave);++ ImDrawList& draw_list = *GetPlotDrawList();+ const ImPlotAxis& x_axis = GetCurrentPlot()->Axes[GetCurrentPlot()->CurrentX];+ const ImPlotAxis& y_axis = GetCurrentPlot()->Axes[GetCurrentPlot()->CurrentY];+ Transformer2 transformer(x_axis, y_axis);++ // Flip points to make sure they are in counter-clockwise order for correct filling when one axis is inverted+ bool x_inv = ImHasFlag(x_axis.Flags, ImPlotAxisFlags_Invert);+ bool y_inv = ImHasFlag(y_axis.Flags, ImPlotAxisFlags_Invert);+ bool flip = !((x_inv ? 1 : 0) ^ (y_inv ? 1 : 0));++ // Transform all points to screen space+ ImVec2* points = (ImVec2*)IM_ALLOC(getter.Count * sizeof(ImVec2));+ for (int i = 0; i < getter.Count; ++i) {+ ImPlotPoint p = flip ? getter[getter.Count - 1 - i] : getter[i];+ points[i] = transformer(p);+ }++ if (s.RenderFill && getter.Count >= 3) {+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ if (is_concave)+ draw_list.AddConcavePolyFilled(points, getter.Count, col_fill);+ else+ draw_list.AddConvexPolyFilled(points, getter.Count, col_fill);+ }+ if (s.RenderLine && getter.Count >= 2) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+#if IMGUI_VERSION_NUM < 19276+ draw_list.AddPolyline(points, getter.Count, col_line, ImDrawFlags_Closed, s.Spec.LineWeight);+#else+ draw_list.AddPolyline(points, getter.Count, col_line, s.Spec.LineWeight, ImDrawFlags_Closed);+#endif+ }+ IM_FREE(points);++ EndItem();+ }+}++template <typename T>+void PlotPolygon(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ return PlotPolygonEx(label_id, getter, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotPolygon<T>(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotStairs+//-----------------------------------------------------------------------------++template <typename Getter>+void PlotStairsEx(const char* label_id, const Getter& getter, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter1<Getter>(getter), spec, spec.LineColor, spec.Marker)) {+ if (getter.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ if (getter.Count > 1) {+ if (s.RenderFill && ImHasFlag(spec.Flags,ImPlotStairsFlags_Shaded)) {+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ if (ImHasFlag(spec.Flags, ImPlotStairsFlags_PreStep)) {+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.FillColors, getter.Count, s.Spec.FillAlpha);+ RenderPrimitives2<RendererStairsPreShaded>(getter, color_getter);+ } else {+ GetterConstColor color_getter(col_fill, s.Spec.FillAlpha);+ RenderPrimitives2<RendererStairsPreShaded>(getter, color_getter);+ }+ } else {+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.FillColors, getter.Count, s.Spec.FillAlpha);+ RenderPrimitives2<RendererStairsPostShaded>(getter, color_getter);+ } else {+ GetterConstColor color_getter(col_fill, s.Spec.FillAlpha);+ RenderPrimitives2<RendererStairsPostShaded>(getter, color_getter);+ }+ }+ }+ if (s.RenderLine) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (ImHasFlag(spec.Flags, ImPlotStairsFlags_PreStep)) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter.Count);+ RenderPrimitives2<RendererStairsPre>(getter, color_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives2<RendererStairsPre>(getter, color_getter, s.Spec.LineWeight);+ }+ } else {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter.Count);+ RenderPrimitives2<RendererStairsPost>(getter, color_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives2<RendererStairsPost>(getter, color_getter, s.Spec.LineWeight);+ }+ }+ }+ }+ // render markers+ if (s.RenderMarkers) {+ PopPlotClipRect();+ PushPlotClipRect(s.Spec.MarkerSize);+ RenderColoredMarkers(getter, s);+ }+ EndItem();+ }+}++template <typename T>+void PlotStairs(const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec) {+ GetterXY<IndexerLin,IndexerIdx<T>> getter(IndexerLin(xscale,x0),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ PlotStairsEx(label_id, getter, spec);+}++template <typename T>+void PlotStairs(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ return PlotStairsEx(label_id, getter, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotStairs<T> (const char* label_id, const T* values, int count, double xscale, double x0, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotStairs<T>(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++// custom+void PlotStairsG(const char* label_id, ImPlotGetter getter_func, void* data, int count, const ImPlotSpec& spec) {+ GetterFuncPtr getter(getter_func,data, count);+ return PlotStairsEx(label_id, getter, spec);+}++//-----------------------------------------------------------------------------+// [SECTION] PlotShaded+//-----------------------------------------------------------------------------++template <typename Getter1, typename Getter2>+void PlotShadedEx(const char* label_id, const Getter1& getter1, const Getter2& getter2, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter2<Getter1,Getter2>(getter1,getter2), spec, spec.FillColor)) {+ if (getter1.Count <= 0 || getter2.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ if (s.RenderFill) {+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.FillColors, getter1.Count, s.Spec.FillAlpha);+ RenderPrimitives3<RendererShaded>(getter1,getter2,color_getter);+ } else {+ const ImU32 col = ImGui::GetColorU32(s.Spec.FillColor);+ GetterConstColor color_getter(col, s.Spec.FillAlpha);+ RenderPrimitives3<RendererShaded>(getter1,getter2,color_getter);+ }+ }+ EndItem();+ }+}++template <typename T>+void PlotShaded(const char* label_id, const T* values, int count, double y_ref, double xscale, double x0, const ImPlotSpec& spec) {+ if (!(y_ref > -DBL_MAX))+ y_ref = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO).Y.Min;+ if (!(y_ref < DBL_MAX))+ y_ref = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO).Y.Max;+ GetterXY<IndexerLin,IndexerIdx<T>> getter1(IndexerLin(xscale,x0),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerLin,IndexerConst> getter2(IndexerLin(xscale,x0),IndexerConst(y_ref),count);+ PlotShadedEx(label_id, getter1, getter2, spec);+}++template <typename T>+void PlotShaded(const char* label_id, const T* xs, const T* ys, int count, double y_ref, const ImPlotSpec& spec) {+ if (y_ref == -HUGE_VAL)+ y_ref = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO).Y.Min;+ if (y_ref == HUGE_VAL)+ y_ref = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO).Y.Max;+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter1(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerIdx<T>,IndexerConst> getter2(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerConst(y_ref),count);+ PlotShadedEx(label_id, getter1, getter2, spec);+}+++template <typename T>+void PlotShaded(const char* label_id, const T* xs, const T* ys1, const T* ys2, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter1(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys1,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter2(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys2,count,spec.Offset,Stride<T>(spec)),count);+ PlotShadedEx(label_id, getter1, getter2, spec);+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotShaded<T>(const char* label_id, const T* values, int count, double y_ref, double xscale, double x0, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotShaded<T>(const char* label_id, const T* xs, const T* ys, int count, double y_ref, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotShaded<T>(const char* label_id, const T* xs, const T* ys1, const T* ys2, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++// custom+void PlotShadedG(const char* label_id, ImPlotGetter getter_func1, void* data1, ImPlotGetter getter_func2, void* data2, int count, const ImPlotSpec& spec) {+ GetterFuncPtr getter1(getter_func1, data1, count);+ GetterFuncPtr getter2(getter_func2, data2, count);+ PlotShadedEx(label_id, getter1, getter2, spec);+}++//-----------------------------------------------------------------------------+// [SECTION] PlotBars+//-----------------------------------------------------------------------------++template <typename Getter1, typename Getter2>+void PlotBarsVEx(const char* label_id, const Getter1& getter1, const Getter2 getter2, double width, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, FitterBarV<Getter1,Getter2>(getter1,getter2,width), spec, spec.FillColor)) {+ if (getter1.Count <= 0 || getter2.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ bool rend_fill = s.RenderFill;+ bool rend_line = s.RenderLine;+ if (rend_fill) {+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.FillColors, getter1.Count, s.Spec.FillAlpha);+ RenderPrimitives3<RendererBarsFillV>(getter1, getter2, fill_getter, width);+ } else {+ GetterConstColor fill_getter(col_fill, s.Spec.FillAlpha);+ RenderPrimitives3<RendererBarsFillV>(getter1, getter2, fill_getter, width);+ }+ if (rend_line && col_fill == col_line)+ rend_line = false;+ }+ if (rend_line) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor line_getter(s.Spec.LineColors, getter1.Count);+ RenderPrimitives3<RendererBarsLineV>(getter1, getter2, line_getter, width, s.Spec.LineWeight);+ } else {+ GetterConstColor line_getter(col_line);+ RenderPrimitives3<RendererBarsLineV>(getter1, getter2, line_getter, width, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+}++template <typename Getter1, typename Getter2>+void PlotBarsHEx(const char* label_id, const Getter1& getter1, const Getter2& getter2, double height, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, FitterBarH<Getter1,Getter2>(getter1,getter2,height), spec, spec.FillColor)) {+ if (getter1.Count <= 0 || getter2.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ const ImU32 col_fill = ImGui::GetColorU32(s.Spec.FillColor);+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ bool rend_fill = s.RenderFill;+ bool rend_line = s.RenderLine;+ if (rend_fill) {+ if (s.Spec.FillColors != nullptr) {+ GetterIdxColor fill_getter(s.Spec.FillColors, getter1.Count, s.Spec.FillAlpha);+ RenderPrimitives3<RendererBarsFillH>(getter1, getter2, fill_getter, height);+ } else {+ GetterConstColor fill_getter(col_fill, s.Spec.FillAlpha);+ RenderPrimitives3<RendererBarsFillH>(getter1, getter2, fill_getter, height);+ }+ if (rend_line && col_fill == col_line)+ rend_line = false;+ }+ if (rend_line) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor line_getter(s.Spec.LineColors, getter1.Count);+ RenderPrimitives3<RendererBarsLineH>(getter1, getter2, line_getter, height, s.Spec.LineWeight);+ } else {+ GetterConstColor line_getter(col_line);+ RenderPrimitives3<RendererBarsLineH>(getter1, getter2, line_getter, height, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+}++template <typename T>+void PlotBars(const char* label_id, const T* values, int count, double bar_size, double shift, const ImPlotSpec& spec) {+ if (ImHasFlag(spec.Flags, ImPlotBarsFlags_Horizontal)) {+ GetterXY<IndexerIdx<T>,IndexerLin> getter1(IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),IndexerLin(1.0,shift),count);+ GetterXY<IndexerConst,IndexerLin> getter2(IndexerConst(0),IndexerLin(1.0,shift),count);+ PlotBarsHEx(label_id, getter1, getter2, bar_size, spec);+ }+ else {+ GetterXY<IndexerLin,IndexerIdx<T>> getter1(IndexerLin(1.0,shift),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerLin,IndexerConst> getter2(IndexerLin(1.0,shift),IndexerConst(0),count);+ PlotBarsVEx(label_id, getter1, getter2, bar_size, spec);+ }+}++template <typename T>+void PlotBars(const char* label_id, const T* xs, const T* ys, int count, double bar_size, const ImPlotSpec& spec) {+ if (ImHasFlag(spec.Flags, ImPlotBarsFlags_Horizontal)) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter1(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerConst, IndexerIdx<T>> getter2(IndexerConst(0),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ PlotBarsHEx(label_id, getter1, getter2, bar_size, spec);+ }+ else {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter1(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerIdx<T>,IndexerConst> getter2(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerConst(0),count);+ PlotBarsVEx(label_id, getter1, getter2, bar_size, spec);+ }+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotBars<T>(const char* label_id, const T* values, int count, double bar_size, double shift, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotBars<T>(const char* label_id, const T* xs, const T* ys, int count, double bar_size, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++void PlotBarsG(const char* label_id, ImPlotGetter getter_func, void* data, int count, double bar_size, const ImPlotSpec& spec) {+ if (ImHasFlag(spec.Flags, ImPlotBarsFlags_Horizontal)) {+ GetterFuncPtr getter1(getter_func, data, count);+ GetterOverrideX<GetterFuncPtr> getter2(getter1,0);+ PlotBarsHEx(label_id, getter1, getter2, bar_size, spec);+ }+ else {+ GetterFuncPtr getter1(getter_func, data, count);+ GetterOverrideY<GetterFuncPtr> getter2(getter1,0);+ PlotBarsVEx(label_id, getter1, getter2, bar_size, spec);+ }+}++//-----------------------------------------------------------------------------+// [SECTION] PlotBarGroups+//-----------------------------------------------------------------------------++template <typename T>+void PlotBarGroups(const char* const label_ids[], const T* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) {+ IndexerIdx<T> indexer(values,item_count*group_count,spec.Offset,Stride<T>(spec));+ const bool horz = ImHasFlag(spec.Flags, ImPlotBarGroupsFlags_Horizontal);+ const bool stack = ImHasFlag(spec.Flags, ImPlotBarGroupsFlags_Stacked);+ ImPlotSpec spec_bars = spec;+ spec_bars.Flags = 0;+ if (stack) {+ SetupLock();+ ImPlotContext& gp = *GImPlot;+ gp.TempDouble1.resize(4*group_count);+ double* temp = gp.TempDouble1.Data;+ double* neg = &temp[0];+ double* pos = &temp[group_count];+ double* curr_min = &temp[group_count*2];+ double* curr_max = &temp[group_count*3];+ for (int g = 0; g < group_count*2; ++g)+ temp[g] = 0;+ if (horz) {+ for (int i = 0; i < item_count; ++i) {+ if (!IsItemHidden(label_ids[i])) {+ for (int g = 0; g < group_count; ++g) {+ double v = indexer[i*group_count+g];+ if (v > 0) {+ curr_min[g] = pos[g];+ curr_max[g] = curr_min[g] + v;+ pos[g] += v;+ }+ else {+ curr_max[g] = neg[g];+ curr_min[g] = curr_max[g] + v;+ neg[g] += v;+ }+ }+ }+ GetterXY<IndexerIdx<double>,IndexerLin> getter1(IndexerIdx<double>(curr_min,group_count),IndexerLin(1.0,shift),group_count);+ GetterXY<IndexerIdx<double>,IndexerLin> getter2(IndexerIdx<double>(curr_max,group_count),IndexerLin(1.0,shift),group_count);+ PlotBarsHEx(label_ids[i],getter1,getter2,group_size,spec_bars);+ }+ }+ else {+ for (int i = 0; i < item_count; ++i) {+ if (!IsItemHidden(label_ids[i])) {+ for (int g = 0; g < group_count; ++g) {+ double v = indexer[i*group_count+g];+ if (v > 0) {+ curr_min[g] = pos[g];+ curr_max[g] = curr_min[g] + v;+ pos[g] += v;+ }+ else {+ curr_max[g] = neg[g];+ curr_min[g] = curr_max[g] + v;+ neg[g] += v;+ }+ }+ }+ GetterXY<IndexerLin,IndexerIdx<double>> getter1(IndexerLin(1.0,shift),IndexerIdx<double>(curr_min,group_count),group_count);+ GetterXY<IndexerLin,IndexerIdx<double>> getter2(IndexerLin(1.0,shift),IndexerIdx<double>(curr_max,group_count),group_count);+ PlotBarsVEx(label_ids[i],getter1,getter2,group_size,spec_bars);+ }+ }+ }+ else {+ const double subsize = group_size / item_count;+ if (horz) {+ spec_bars.Flags = ImPlotBarsFlags_Horizontal;+ for (int i = 0; i < item_count; ++i) {+ const double subshift = (i+0.5)*subsize - group_size/2;+ PlotBars(label_ids[i],&values[i*group_count],group_count,subsize,subshift+shift,spec_bars);+ }+ }+ else {+ for (int i = 0; i < item_count; ++i) {+ const double subshift = (i+0.5)*subsize - group_size/2;+ PlotBars(label_ids[i],&values[i*group_count],group_count,subsize,subshift+shift,spec_bars);+ }+ }+ }+}++#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotBarGroups<T>(const char* const label_ids[], const T* values, int items, int groups, double width, double shift, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotErrorBars+//-----------------------------------------------------------------------------++template <typename _GetterPos, typename _GetterNeg>+void PlotErrorBarsVEx(const char* label_id, const _GetterPos& getter_pos, const _GetterNeg& getter_neg, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter2<_GetterPos,_GetterNeg>(getter_pos, getter_neg), spec, IMPLOT_AUTO_COL)) {+ if (getter_pos.Count <= 0 || getter_neg.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImU32 col = ImGui::GetColorU32( IsColorAuto(spec.LineColor) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : s.Spec.LineColor );+ const bool rend_whisker = s.Spec.Size > 0;+ const float half_whisker = s.Spec.Size * 0.5f;+ for (int i = 0; i < getter_pos.Count; ++i) {+ ImVec2 p1 = PlotToPixels(getter_neg[i],IMPLOT_AUTO,IMPLOT_AUTO);+ ImVec2 p2 = PlotToPixels(getter_pos[i],IMPLOT_AUTO,IMPLOT_AUTO);+ draw_list.AddLine(p1, p2, col, s.Spec.LineWeight);+ if (rend_whisker) {+ AddLineH(&draw_list, p1.x - half_whisker, p1.x + half_whisker, p1.y, col, s.Spec.LineWeight);+ AddLineH(&draw_list, p2.x - half_whisker, p2.x + half_whisker, p2.y, col, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+}++template <typename _GetterPos, typename _GetterNeg>+void PlotErrorBarsHEx(const char* label_id, const _GetterPos& getter_pos, const _GetterNeg& getter_neg, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter2<_GetterPos,_GetterNeg>(getter_pos, getter_neg), spec, IMPLOT_AUTO_COL)) {+ if (getter_pos.Count <= 0 || getter_neg.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImU32 col = ImGui::GetColorU32( IsColorAuto(spec.LineColor) ? ImGui::GetStyleColorVec4(ImGuiCol_Text) : s.Spec.LineColor );+ const bool rend_whisker = s.Spec.Size > 0;+ const float half_whisker = s.Spec.Size * 0.5f;+ for (int i = 0; i < getter_pos.Count; ++i) {+ ImVec2 p1 = PlotToPixels(getter_neg[i],IMPLOT_AUTO,IMPLOT_AUTO);+ ImVec2 p2 = PlotToPixels(getter_pos[i],IMPLOT_AUTO,IMPLOT_AUTO);+ draw_list.AddLine(p1, p2, col, s.Spec.LineWeight);+ if (rend_whisker) {+ AddLineV(&draw_list, p1.x, p1.y - half_whisker, p1.y + half_whisker, col, s.Spec.LineWeight);+ AddLineV(&draw_list, p2.x, p2.y - half_whisker, p2.y + half_whisker, col, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+}++template <typename T>+void PlotErrorBars(const char* label_id, const T* xs, const T* ys, const T* err, int count, const ImPlotSpec& spec) {+ PlotErrorBars(label_id, xs, ys, err, err, count, spec);+}++template <typename T>+void PlotErrorBars(const char* label_id, const T* xs, const T* ys, const T* neg, const T* pos, int count, const ImPlotSpec& spec) {+ IndexerIdx<T> indexer_x(xs, count,spec.Offset,Stride<T>(spec));+ IndexerIdx<T> indexer_y(ys, count,spec.Offset,Stride<T>(spec));+ IndexerIdx<T> indexer_n(neg,count,spec.Offset,Stride<T>(spec));+ IndexerIdx<T> indexer_p(pos,count,spec.Offset,Stride<T>(spec));+ GetterError<T> getter(xs, ys, neg, pos, count, spec.Offset, Stride<T>(spec));+ if (ImHasFlag(spec.Flags, ImPlotErrorBarsFlags_Horizontal)) {+ IndexerAdd<IndexerIdx<T>,IndexerIdx<T>> indexer_xp(indexer_x, indexer_p, 1, 1);+ IndexerAdd<IndexerIdx<T>,IndexerIdx<T>> indexer_xn(indexer_x, indexer_n, 1, -1);+ GetterXY<IndexerAdd<IndexerIdx<T>,IndexerIdx<T>>,IndexerIdx<T>> getter_p(indexer_xp, indexer_y, count);+ GetterXY<IndexerAdd<IndexerIdx<T>,IndexerIdx<T>>,IndexerIdx<T>> getter_n(indexer_xn, indexer_y, count);+ PlotErrorBarsHEx(label_id, getter_p, getter_n, spec);+ }+ else {+ IndexerAdd<IndexerIdx<T>,IndexerIdx<T>> indexer_yp(indexer_y, indexer_p, 1, 1);+ IndexerAdd<IndexerIdx<T>,IndexerIdx<T>> indexer_yn(indexer_y, indexer_n, 1, -1);+ GetterXY<IndexerIdx<T>,IndexerAdd<IndexerIdx<T>,IndexerIdx<T>>> getter_p(indexer_x, indexer_yp, count);+ GetterXY<IndexerIdx<T>,IndexerAdd<IndexerIdx<T>,IndexerIdx<T>>> getter_n(indexer_x, indexer_yn, count);+ PlotErrorBarsVEx(label_id, getter_p, getter_n, spec);+ }+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotErrorBars<T>(const char* label_id, const T* xs, const T* ys, const T* err, int count, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotErrorBars<T>(const char* label_id, const T* xs, const T* ys, const T* neg, const T* pos, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotStems+//-----------------------------------------------------------------------------++template <typename _GetterM, typename _GetterB>+void PlotStemsEx(const char* label_id, const _GetterM& getter_mark, const _GetterB& getter_base, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, Fitter2<_GetterM,_GetterB>(getter_mark,getter_base), spec, spec.LineColor, spec.Marker)) {+ if (getter_mark.Count <= 0 || getter_base.Count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ // render stems+ if (s.RenderLine) {+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, getter_mark.Count);+ RenderPrimitives3<RendererLineSegments2>(getter_mark, getter_base, color_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives3<RendererLineSegments2>(getter_mark, getter_base, color_getter, s.Spec.LineWeight);+ }+ }+ // render markers+ if (s.RenderMarkers) {+ PopPlotClipRect();+ PushPlotClipRect(s.Spec.MarkerSize);+ RenderColoredMarkers(getter_mark, s);+ }+ EndItem();+ }+}++template <typename T>+void PlotStems(const char* label_id, const T* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) {+ if (ImHasFlag(spec.Flags, ImPlotStemsFlags_Horizontal)) {+ GetterXY<IndexerIdx<T>,IndexerLin> get_mark(IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),IndexerLin(scale,start),count);+ GetterXY<IndexerConst,IndexerLin> get_base(IndexerConst(ref),IndexerLin(scale,start),count);+ PlotStemsEx(label_id, get_mark, get_base, spec);+ }+ else {+ GetterXY<IndexerLin,IndexerIdx<T>> get_mark(IndexerLin(scale,start),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerLin,IndexerConst> get_base(IndexerLin(scale,start),IndexerConst(ref),count);+ PlotStemsEx(label_id, get_mark, get_base, spec);+ }+}++template <typename T>+void PlotStems(const char* label_id, const T* xs, const T* ys, int count, double ref, const ImPlotSpec& spec) {+ if (ImHasFlag(spec.Flags, ImPlotStemsFlags_Horizontal)) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> get_mark(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerConst,IndexerIdx<T>> get_base(IndexerConst(ref),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ PlotStemsEx(label_id, get_mark, get_base, spec);+ }+ else {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> get_mark(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerIdx<T>,IndexerConst> get_base(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerConst(ref),count);+ PlotStemsEx(label_id, get_mark, get_base, spec);+ }+}++#define INSTANTIATE_MACRO(T) \+ template IMPLOT_API void PlotStems<T>(const char* label_id, const T* values, int count, double ref, double scale, double start, const ImPlotSpec& spec); \+ template IMPLOT_API void PlotStems<T>(const char* label_id, const T* xs, const T* ys, int count, double ref, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO+++//-----------------------------------------------------------------------------+// [SECTION] PlotInfLines+//-----------------------------------------------------------------------------++template <typename T>+void PlotInfLines(const char* label_id, const T* values, int count, const ImPlotSpec& spec) {+ const ImPlotRect lims = GetPlotLimits(IMPLOT_AUTO,IMPLOT_AUTO);+ if (ImHasFlag(spec.Flags, ImPlotInfLinesFlags_Horizontal)) {+ GetterXY<IndexerConst,IndexerIdx<T>> getter_min(IndexerConst(lims.X.Min),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ GetterXY<IndexerConst,IndexerIdx<T>> getter_max(IndexerConst(lims.X.Max),IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),count);+ if (BeginItemEx(label_id, FitterY<GetterXY<IndexerConst,IndexerIdx<T>>>(getter_min), spec, spec.LineColor)) {+ if (count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (s.RenderLine) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, count);+ RenderPrimitives3<RendererLineSegments2>(getter_min, getter_max, color_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives3<RendererLineSegments2>(getter_min, getter_max, color_getter, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+ }+ else {+ GetterXY<IndexerIdx<T>,IndexerConst> get_min(IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),IndexerConst(lims.Y.Min),count);+ GetterXY<IndexerIdx<T>,IndexerConst> get_max(IndexerIdx<T>(values,count,spec.Offset,Stride<T>(spec)),IndexerConst(lims.Y.Max),count);+ if (BeginItemEx(label_id, FitterX<GetterXY<IndexerIdx<T>,IndexerConst>>(get_min), spec, spec.LineColor)) {+ if (count <= 0) {+ EndItem();+ return;+ }+ const ImPlotNextItemData& s = GetItemData();+ const ImU32 col_line = ImGui::GetColorU32(s.Spec.LineColor);+ if (s.RenderLine) {+ if (s.Spec.LineColors != nullptr) {+ GetterIdxColor color_getter(s.Spec.LineColors, count);+ RenderPrimitives3<RendererLineSegments2>(get_min, get_max, color_getter, s.Spec.LineWeight);+ } else {+ GetterConstColor color_getter(col_line);+ RenderPrimitives3<RendererLineSegments2>(get_min, get_max, color_getter, s.Spec.LineWeight);+ }+ }+ EndItem();+ }+ }+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotInfLines<T>(const char* label_id, const T* xs, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotPieChart+//-----------------------------------------------------------------------------++IMPLOT_INLINE void PrimPieSliceFill(ImDrawList& draw_list, const ImVec2* points, int count, ImU32 col, const ImVec2& uv) {+ // Write vertices+ for (int i = 0; i < count; ++i) {+ draw_list._VtxWritePtr[i].pos = points[i];+ draw_list._VtxWritePtr[i].uv = uv;+ draw_list._VtxWritePtr[i].col = col;+ }+ draw_list._VtxWritePtr += count;++ // Write indices as a triangle fan (all triangles share first vertex - the center)+ for (int i = 2; i < count; ++i) {+ draw_list._IdxWritePtr[0] = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[1] = (ImDrawIdx)(draw_list._VtxCurrentIdx + i - 1);+ draw_list._IdxWritePtr[2] = (ImDrawIdx)(draw_list._VtxCurrentIdx + i);+ draw_list._IdxWritePtr += 3;+ }+ draw_list._VtxCurrentIdx += count;+}++IMPLOT_INLINE void PrimPieSliceLine(ImDrawList& draw_list, const ImVec2* points, int count, ImU32 col, float half_weight, const ImVec2& tex_uv0, const ImVec2& tex_uv1) {+ // Create a thick polyline by drawing quads between each segment+ const int segments = count - 1;++ for (int i = 0; i < segments; ++i) {+ const ImVec2& p1 = points[i];+ const ImVec2& p2 = points[i + 1];++ // Calculate perpendicular vector for line thickness (same as PrimLine)+ float dx = p2.x - p1.x;+ float dy = p2.y - p1.y;+ IMPLOT_NORMALIZE2F_OVER_ZERO(dx, dy);+ dx *= half_weight;+ dy *= half_weight;++ // Four vertices for the quad (same layout as PrimLine)+ draw_list._VtxWritePtr[0].pos.x = p1.x + dy;+ draw_list._VtxWritePtr[0].pos.y = p1.y - dx;+ draw_list._VtxWritePtr[0].uv = tex_uv0;+ draw_list._VtxWritePtr[0].col = col;++ draw_list._VtxWritePtr[1].pos.x = p2.x + dy;+ draw_list._VtxWritePtr[1].pos.y = p2.y - dx;+ draw_list._VtxWritePtr[1].uv = tex_uv0;+ draw_list._VtxWritePtr[1].col = col;++ draw_list._VtxWritePtr[2].pos.x = p2.x - dy;+ draw_list._VtxWritePtr[2].pos.y = p2.y + dx;+ draw_list._VtxWritePtr[2].uv = tex_uv1;+ draw_list._VtxWritePtr[2].col = col;++ draw_list._VtxWritePtr[3].pos.x = p1.x - dy;+ draw_list._VtxWritePtr[3].pos.y = p1.y + dx;+ draw_list._VtxWritePtr[3].uv = tex_uv1;+ draw_list._VtxWritePtr[3].col = col;++ draw_list._VtxWritePtr += 4;++ // Two triangles for the quad+ const ImDrawIdx vtx_idx = (ImDrawIdx)(draw_list._VtxCurrentIdx);+ draw_list._IdxWritePtr[0] = vtx_idx;+ draw_list._IdxWritePtr[1] = vtx_idx + 1;+ draw_list._IdxWritePtr[2] = vtx_idx + 2;+ draw_list._IdxWritePtr[3] = vtx_idx;+ draw_list._IdxWritePtr[4] = vtx_idx + 2;+ draw_list._IdxWritePtr[5] = vtx_idx + 3;+ draw_list._IdxWritePtr += 6;++ draw_list._VtxCurrentIdx += 4;+ }+}++IMPLOT_INLINE void RenderPieSliceFill(ImDrawList& draw_list, ImVec2* buffer, int count, ImU32 col) {+ const ImVec2 uv = draw_list._Data->TexUvWhitePixel;+ // Reserve space for vertices and indices+ // Triangle fan: n-2 triangles for n vertices, so (n-2)*3 indices+ const int idx_count = (count - 2) * 3;+ draw_list.PrimReserve(idx_count, count);+ PrimPieSliceFill(draw_list, buffer, count, col, uv);+}++IMPLOT_INLINE void RenderPieSliceLine(ImDrawList& draw_list, ImVec2* buffer, int count, ImU32 col) {+ float half_weight = 1.0f; // Weight of 2.0f -> half_weight of 1.0f+ ImVec2 tex_uv0, tex_uv1;+ GetLineRenderProps(draw_list, half_weight, tex_uv0, tex_uv1);++ // Polyline with n points has n-1 segments, each needs 4 vertices and 6 indices+ const int segments = count - 1;+ const int vtx_count = segments * 4;+ const int idx_count = segments * 6;+ draw_list.PrimReserve(idx_count, vtx_count);+ PrimPieSliceLine(draw_list, buffer, count, col, half_weight, tex_uv0, tex_uv1);+}++IMPLOT_INLINE void RenderPieSlice(ImDrawList& draw_list, const ImPlotPoint& center, double radius, double a0, double a1, ImU32 col, ImPlotPieChartFlags flags, bool detached = false) {+ const float resolution = 50 / (2 * IM_PI);+ ImVec2 buffer[52];++ int n = ImMax(3, (int)((a1 - a0) * resolution));+ double da = (a1 - a0) / (n - 1);+ int i = 0;++ if (detached) {+ const double offset = 0.08; // Offset of the detached slice+ const double width_scale = 0.95; // Scale factor for the width of the detached slice++ double a_mid = (a0 + a1) / 2;+ double new_a0 = a_mid - (a1 - a0) * width_scale / 2;+ double new_a1 = a_mid + (a1 - a0) * width_scale / 2;+ double new_da = (new_a1 - new_a0) / (n - 1);++ ImPlotPoint offsetCenter(center.x + offset * cos(a_mid), center.y + offset * sin(a_mid));++ // Start point (center of the offset)+ buffer[0] = PlotToPixels(offsetCenter, IMPLOT_AUTO, IMPLOT_AUTO);++ for (; i < n; ++i) {+ double a = new_a0 + i * new_da;+ buffer[i + 1] = PlotToPixels(+ offsetCenter.x + (radius + offset/2) * cos(a),+ offsetCenter.y + (radius + offset/2) * sin(a),+ IMPLOT_AUTO, IMPLOT_AUTO+ );+ }++ } else {+ buffer[0] = PlotToPixels(center, IMPLOT_AUTO, IMPLOT_AUTO);+ for (; i < n; ++i) {+ double a = a0 + i * da;+ buffer[i + 1] = PlotToPixels(+ center.x + radius * cos(a),+ center.y + radius * sin(a),+ IMPLOT_AUTO, IMPLOT_AUTO);+ }+ }+ // Close the shape+ buffer[i + 1] = buffer[0];++ // fill+ RenderPieSliceFill(draw_list, buffer, n + 2, col);++ // border (for AA)+ if (!ImHasFlag(flags, ImPlotPieChartFlags_NoSliceBorder))+ RenderPieSliceLine(draw_list, buffer, n + 2, col);+}++template <typename T>+double PieChartSum(IndexerIdx<T> indexer, bool ignore_hidden) {+ double sum = 0;+ if (ignore_hidden) {+ ImPlotContext& gp = *GImPlot;+ ImPlotItemGroup& Items = *gp.CurrentItems;+ for (int i = 0; i < indexer.Count; ++i) {+ if (i >= Items.GetItemCount())+ break;++ ImPlotItem* item = Items.GetItemByIndex(i);+ IM_ASSERT(item != nullptr);+ if (item->Show) {+ sum += (double)indexer[i];+ }+ }+ }+ else {+ for (int i = 0; i < indexer.Count; ++i) {+ sum += (double)indexer[i];+ }+ }+ return sum;+}++template <typename T>+void PlotPieChartEx(const char* const label_ids[], IndexerIdx<T> indexer, ImPlotPoint center, double radius, double angle0, const ImPlotSpec& spec) {+ ImDrawList& draw_list = *GetPlotDrawList();++ const bool ignore_hidden = ImHasFlag(spec.Flags, ImPlotPieChartFlags_IgnoreHidden);+ const double sum = PieChartSum(indexer, ignore_hidden);+ const bool normalize = ImHasFlag(spec.Flags, ImPlotPieChartFlags_Normalize) || sum > 1.0;++ double a0 = angle0 * 2 * IM_PI / 360.0;+ double a1 = angle0 * 2 * IM_PI / 360.0;+ ImPlotPoint Pmin = ImPlotPoint(center.x - radius, center.y - radius);+ ImPlotPoint Pmax = ImPlotPoint(center.x + radius, center.y + radius);+ for (int i = 0; i < indexer.Count; ++i) {+ ImPlotItem* item = GetItem(label_ids[i]);++ const double percent = normalize ? (double)indexer[i] / sum : (double)indexer[i];+ const bool skip = sum <= 0.0 || (ignore_hidden && item != nullptr && !item->Show);+ if (!skip)+ a1 = a0 + 2 * IM_PI * percent;++ if (BeginItemEx(label_ids[i], FitterRect(Pmin, Pmax), spec)) {+ const bool hovered = ImPlot::IsLegendEntryHovered(label_ids[i]) && ImHasFlag(spec.Flags, ImPlotPieChartFlags_Exploding);+ if (sum > 0.0) {+ ImU32 col = GetCurrentItem()->Color;+ if (percent < 0.5) {+ RenderPieSlice(draw_list, center, radius, a0, a1, col, spec.Flags, hovered);+ }+ else {+ RenderPieSlice(draw_list, center, radius, a0, a0 + (a1 - a0) * 0.5, col, spec.Flags, hovered);+ RenderPieSlice(draw_list, center, radius, a0 + (a1 - a0) * 0.5, a1, col, spec.Flags, hovered);+ }+ }+ EndItem();+ }+ if (!skip)+ a0 = a1;+ }+}++int PieChartFormatter(double value, char* buff, int size, void* data) {+ const char* fmt = (const char*)data;+ return snprintf(buff, size, fmt, value);+}++template <typename T>+void PlotPieChart(const char* const label_ids[], const T* values, int count, double x, double y, double radius, const char* fmt, double angle0, const ImPlotSpec& spec) {+ PlotPieChart<T>(label_ids, values, count, x, y, radius, PieChartFormatter, (void*)fmt, angle0, spec);+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotPieChart<T>(const char* const label_ids[], const T* values, int count, double x, double y, double radius, const char* fmt, double angle0, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++template <typename T>+void PlotPieChart(const char* const label_ids[], const T* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) {+ IM_ASSERT_USER_ERROR(GImPlot->CurrentPlot != nullptr, "PlotPieChart() needs to be called between BeginPlot() and EndPlot()!");+ ImDrawList& draw_list = *GetPlotDrawList();++ IndexerIdx<T> indexer(values,count,spec.Offset,Stride<T>(spec));++ const bool ignore_hidden = ImHasFlag(spec.Flags, ImPlotPieChartFlags_IgnoreHidden);+ const double sum = PieChartSum(indexer, ignore_hidden);+ const bool normalize = ImHasFlag(spec.Flags, ImPlotPieChartFlags_Normalize) || sum > 1.0;+ ImPlotPoint center(x, y);++ PushPlotClipRect();+ PlotPieChartEx(label_ids, indexer, center, radius, angle0, spec);+ if (fmt != nullptr) {+ double a0 = angle0 * 2 * IM_PI / 360.0;+ double a1 = angle0 * 2 * IM_PI / 360.0;+ char buffer[32];+ for (int i = 0; i < count; ++i) {+ ImPlotItem* item = GetItem(label_ids[i]);+ IM_ASSERT(item != nullptr);++ const double percent = normalize ? (double)indexer[i] / sum : (double)indexer[i];+ const bool skip = ignore_hidden && item != nullptr && !item->Show;++ if (!skip) {+ a1 = a0 + 2 * IM_PI * percent;+ if (item->Show) {+ fmt((double)indexer[i], buffer, 32, fmt_data);+ ImVec2 size = ImGui::CalcTextSize(buffer);+ double angle = a0 + (a1 - a0) * 0.5;+ const bool hovered = ImPlot::IsLegendEntryHovered(label_ids[i]) && ImHasFlag(spec.Flags, ImPlotPieChartFlags_Exploding);+ const double offset = (hovered ? 0.6 : 0.5) * radius;+ ImVec2 pos = PlotToPixels(center.x + offset * cos(angle), center.y + offset * sin(angle), IMPLOT_AUTO, IMPLOT_AUTO);+ ImU32 col = CalcTextColor(ImGui::ColorConvertU32ToFloat4(item->Color));+ draw_list.AddText(pos - size * 0.5f, col, buffer);+ }+ a0 = a1;+ }+ }+ }+ PopPlotClipRect();+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotPieChart(const char* const label_ids[], const T* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotHeatmap+//-----------------------------------------------------------------------------++template <typename _Indexer>+struct GetterHeatmapRowMaj {+ GetterHeatmapRowMaj(_Indexer indexer, int rows, int cols, double scale_min, double scale_max, double width, double height, double xref, double yref, double ydir) :+ Indexer(indexer),+ Count(rows*cols),+ Rows(rows),+ Cols(cols),+ ScaleMin(scale_min),+ ScaleMax(scale_max),+ Width(width),+ Height(height),+ XRef(xref),+ YRef(yref),+ YDir(ydir),+ HalfSize(Width*0.5, Height*0.5)+ { }+ template <typename I> IMPLOT_INLINE RectC operator[](I idx) const {+ double val = (double)Indexer[idx];+ const int r = idx / Cols;+ const int c = idx % Cols;+ const ImPlotPoint p(XRef + HalfSize.x + c*Width, YRef + YDir * (HalfSize.y + r*Height));+ RectC rect;+ rect.Pos = p;+ rect.HalfSize = HalfSize;+ const float t = ImClamp((float)ImRemap01(val, ScaleMin, ScaleMax),0.0f,1.0f);+ ImPlotContext& gp = *GImPlot;+ rect.Color = gp.ColormapData.LerpTable(gp.Style.Colormap, t);+ return rect;+ }+ const _Indexer Indexer;+ const int Count, Rows, Cols;+ const double ScaleMin, ScaleMax, Width, Height, XRef, YRef, YDir;+ const ImPlotPoint HalfSize;+ typedef RectC value_type;+};++template <typename _Indexer>+struct GetterHeatmapColMaj {+ GetterHeatmapColMaj(_Indexer indexer, int rows, int cols, double scale_min, double scale_max, double width, double height, double xref, double yref, double ydir) :+ Indexer(indexer),+ Count(rows*cols),+ Rows(rows),+ Cols(cols),+ ScaleMin(scale_min),+ ScaleMax(scale_max),+ Width(width),+ Height(height),+ XRef(xref),+ YRef(yref),+ YDir(ydir),+ HalfSize(Width*0.5, Height*0.5)+ { }+ template <typename I> IMPLOT_INLINE RectC operator[](I idx) const {+ double val = (double)Indexer[idx];+ const int r = idx % Rows;+ const int c = idx / Rows;+ const ImPlotPoint p(XRef + HalfSize.x + c*Width, YRef + YDir * (HalfSize.y + r*Height));+ RectC rect;+ rect.Pos = p;+ rect.HalfSize = HalfSize;+ const float t = ImClamp((float)ImRemap01(val, ScaleMin, ScaleMax),0.0f,1.0f);+ ImPlotContext& gp = *GImPlot;+ rect.Color = gp.ColormapData.LerpTable(gp.Style.Colormap, t);+ return rect;+ }+ // const T* const Values;+ const _Indexer Indexer;+ const int Count, Rows, Cols;+ const double ScaleMin, ScaleMax, Width, Height, XRef, YRef, YDir;+ const ImPlotPoint HalfSize;+ typedef RectC value_type;+};++template <typename T>+void RenderHeatmap(ImDrawList& draw_list, IndexerIdx<T> indexer, int rows, int cols, double scale_min, double scale_max, const char* fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, bool reverse_y, bool col_maj) {+ ImPlotContext& gp = *GImPlot;+ Transformer2 transformer;+ if (scale_min == 0 && scale_max == 0) {+ ImMinMaxIndexer(indexer,rows*cols,&scale_min,&scale_max);+ }+ if (scale_min == scale_max) {+ ImVec2 a = transformer(bounds_min);+ ImVec2 b = transformer(bounds_max);+ ImU32 col = GetColormapColorU32(0,gp.Style.Colormap);+ draw_list.AddRectFilled(a, b, col);+ return;+ }+ const double yref = reverse_y ? bounds_max.y : bounds_min.y;+ const double ydir = reverse_y ? -1 : 1;+ if (col_maj) {+ GetterHeatmapColMaj<IndexerIdx<T>> getter(indexer, rows, cols, scale_min, scale_max, (bounds_max.x - bounds_min.x) / cols, (bounds_max.y - bounds_min.y) / rows, bounds_min.x, yref, ydir);+ RenderPrimitives1<RendererRectC>(getter);+ }+ else {+ GetterHeatmapRowMaj<IndexerIdx<T>> getter(indexer, rows, cols, scale_min, scale_max, (bounds_max.x - bounds_min.x) / cols, (bounds_max.y - bounds_min.y) / rows, bounds_min.x, yref, ydir);+ RenderPrimitives1<RendererRectC>(getter);+ }+ // labels+ if (fmt != nullptr) {+ const double w = (bounds_max.x - bounds_min.x) / cols;+ const double h = (bounds_max.y - bounds_min.y) / rows;+ const ImPlotPoint half_size(w*0.5,h*0.5);+ int i = 0;+ if (col_maj) {+ for (int c = 0; c < cols; ++c) {+ for (int r = 0; r < rows; ++r) {+ ImPlotPoint p;+ p.x = bounds_min.x + 0.5*w + c*w;+ p.y = yref + ydir * (0.5*h + r*h);+ ImVec2 px = transformer(p);+ char buff[32];+ ImFormatString(buff, 32, fmt, indexer[i]);+ ImVec2 size = ImGui::CalcTextSize(buff);+ double t = ImClamp(ImRemap01((double)indexer[i], scale_min, scale_max),0.0,1.0);+ ImVec4 color = SampleColormap((float)t);+ ImU32 col = CalcTextColor(color);+ draw_list.AddText(px - size * 0.5f, col, buff);+ i++;+ }+ }+ }+ else {+ for (int r = 0; r < rows; ++r) {+ for (int c = 0; c < cols; ++c) {+ ImPlotPoint p;+ p.x = bounds_min.x + 0.5*w + c*w;+ p.y = yref + ydir * (0.5*h + r*h);+ ImVec2 px = transformer(p);+ char buff[32];+ ImFormatString(buff, 32, fmt, indexer[i]);+ ImVec2 size = ImGui::CalcTextSize(buff);+ double t = ImClamp(ImRemap01((double)indexer[i], scale_min, scale_max),0.0,1.0);+ ImVec4 color = SampleColormap((float)t);+ ImU32 col = CalcTextColor(color);+ draw_list.AddText(px - size * 0.5f, col, buff);+ i++;+ }+ }+ }+ }+}++template <typename T>+void PlotHeatmap(const char* label_id, const T* values, int rows, int cols, double scale_min, double scale_max, const char* fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) {+ if (BeginItemEx(label_id, FitterRect(bounds_min, bounds_max), spec)) {+ if (rows <= 0 || cols <= 0) {+ EndItem();+ return;+ }+ ImDrawList& draw_list = *GetPlotDrawList();+ const bool col_maj = ImHasFlag(spec.Flags, ImPlotHeatmapFlags_ColMajor);+ IndexerIdx<T> indexer(values,rows*cols,spec.Offset,Stride<T>(spec));+ RenderHeatmap(draw_list, indexer, rows, cols, scale_min, scale_max, fmt, bounds_min, bounds_max, true, col_maj);+ EndItem();+ }+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotHeatmap<T>(const char* label_id, const T* values, int rows, int cols, double scale_min, double scale_max, const char* fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotHistogram+//-----------------------------------------------------------------------------++template <typename T>+double PlotHistogram(const char* label_id, const T* values, int count, int bins, double bar_scale, ImPlotRange range, const ImPlotSpec& spec) {++ const bool cumulative = ImHasFlag(spec.Flags, ImPlotHistogramFlags_Cumulative);+ const bool density = ImHasFlag(spec.Flags, ImPlotHistogramFlags_Density);+ const bool outliers = !ImHasFlag(spec.Flags, ImPlotHistogramFlags_NoOutliers);++ IndexerIdx<T> indexer(values,count,spec.Offset,Stride<T>(spec));++ if (count <= 0 || bins == 0)+ return 0;++ if (range.Min == 0 && range.Max == 0) {+ ImMinMaxIndexer(indexer, count, &range.Min, &range.Max);+ }++ double width;+ if (bins < 0)+ CalculateBins(indexer, count, bins, range, bins, width);+ else+ width = range.Size() / bins;++ ImPlotContext& gp = *GImPlot;+ ImVector<double>& bin_centers = gp.TempDouble1;+ ImVector<double>& bin_counts = gp.TempDouble2;+ bin_centers.resize(bins);+ bin_counts.resize(bins);+ int below = 0;++ for (int b = 0; b < bins; ++b) {+ bin_centers[b] = range.Min + b * width + width * 0.5;+ bin_counts[b] = 0;+ }+ int counted = 0;+ double max_count = 0;+ for (int i = 0; i < count; ++i) {+ double val = indexer[i];+ if (range.Contains(val)) {+ const int b = ImClamp((int)((val - range.Min) / width), 0, bins - 1);+ bin_counts[b] += 1.0;+ if (bin_counts[b] > max_count)+ max_count = bin_counts[b];+ counted++;+ }+ else if (val < range.Min) {+ below++;+ }+ }+ if (cumulative && density) {+ if (outliers)+ bin_counts[0] += below;+ for (int b = 1; b < bins; ++b)+ bin_counts[b] += bin_counts[b-1];+ double scale = 1.0 / (outliers ? count : counted);+ for (int b = 0; b < bins; ++b)+ bin_counts[b] *= scale;+ max_count = bin_counts[bins-1];+ }+ else if (cumulative) {+ if (outliers)+ bin_counts[0] += below;+ for (int b = 1; b < bins; ++b)+ bin_counts[b] += bin_counts[b-1];+ max_count = bin_counts[bins-1];+ }+ else if (density) {+ double scale = 1.0 / ((outliers ? count : counted) * width);+ for (int b = 0; b < bins; ++b)+ bin_counts[b] *= scale;+ max_count *= scale;+ }+ ImPlotSpec spec_bars = spec;+ if (ImHasFlag(spec.Flags, ImPlotHistogramFlags_Horizontal)) {+ spec_bars.Flags = ImPlotBarsFlags_Horizontal;+ PlotBars(label_id, &bin_counts.Data[0], &bin_centers.Data[0], bins, bar_scale*width, spec_bars);+ }+ else {+ spec_bars.Flags = 0;+ PlotBars(label_id, &bin_centers.Data[0], &bin_counts.Data[0], bins, bar_scale*width, spec_bars);+ }+ return max_count;+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API double PlotHistogram<T>(const char* label_id, const T* values, int count, int bins, double bar_scale, ImPlotRange range, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotHistogram2D+//-----------------------------------------------------------------------------++template <typename T>+double PlotHistogram2D(const char* label_id, const T* xs, const T* ys, int count, int x_bins, int y_bins, ImPlotRect range, const ImPlotSpec& spec) {++ // const bool cumulative = ImHasFlag(flags, ImPlotHistogramFlags_Cumulative); NOT SUPPORTED+ const bool density = ImHasFlag(spec.Flags, ImPlotHistogramFlags_Density);+ const bool outliers = !ImHasFlag(spec.Flags, ImPlotHistogramFlags_NoOutliers);+ const bool col_maj = ImHasFlag(spec.Flags, ImPlotHistogramFlags_ColMajor);++ IndexerIdx<T> indexer_x(xs,count,spec.Offset,Stride<T>(spec));+ IndexerIdx<T> indexer_y(ys,count,spec.Offset,Stride<T>(spec));++ if (count <= 0 || x_bins == 0 || y_bins == 0)+ return 0;++ if (range.X.Min == 0 && range.X.Max == 0) {+ ImMinMaxIndexer(indexer_x, count, &range.X.Min, &range.X.Min);+ }+ if (range.Y.Min == 0 && range.Y.Max == 0) {+ ImMinMaxIndexer(indexer_y, count, &range.Y.Min, &range.Y.Max);+ }++ double width, height;+ if (x_bins < 0)+ CalculateBins(indexer_x, count, x_bins, range.X, x_bins, width);+ else+ width = range.X.Size() / x_bins;+ if (y_bins < 0)+ CalculateBins(indexer_y, count, y_bins, range.Y, y_bins, height);+ else+ height = range.Y.Size() / y_bins;++ const int bins = x_bins * y_bins;++ ImPlotContext& gp = *GImPlot;+ ImVector<double>& bin_counts = gp.TempDouble1;+ bin_counts.resize(bins);++ for (int b = 0; b < bins; ++b)+ bin_counts[b] = 0;++ int counted = 0;+ double max_count = 0;+ for (int i = 0; i < count; ++i) {+ if (range.Contains(indexer_x[i], indexer_y[i])) {+ const int xb = ImClamp( (int)((indexer_x[i] - range.X.Min) / width) , 0, x_bins - 1);+ const int yb = ImClamp( (int)((indexer_y[i] - range.Y.Min) / height) , 0, y_bins - 1);+ const int b = yb * x_bins + xb;+ bin_counts[b] += 1.0;+ if (bin_counts[b] > max_count)+ max_count = bin_counts[b];+ counted++;+ }+ }+ if (density) {+ double scale = 1.0 / ((outliers ? count : counted) * width * height);+ for (int b = 0; b < bins; ++b)+ bin_counts[b] *= scale;+ max_count *= scale;+ }++ if (BeginItemEx(label_id, FitterRect(range), spec)) {+ if (y_bins <= 0 || x_bins <= 0) {+ EndItem();+ return max_count;+ }+ ImDrawList& draw_list = *GetPlotDrawList();+ IndexerIdx<double> indexer_bin(bin_counts.begin(), y_bins*x_bins, 0, sizeof(double));+ RenderHeatmap(draw_list, indexer_bin, y_bins, x_bins, 0, max_count, nullptr, range.Min(), range.Max(), false, col_maj);+ EndItem();+ }+ return max_count;+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API double PlotHistogram2D<T>(const char* label_id, const T* xs, const T* ys, int count, int x_bins, int y_bins, ImPlotRect range, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++//-----------------------------------------------------------------------------+// [SECTION] PlotDigital+//-----------------------------------------------------------------------------++// TODO: Make this behave like all the other plot types (.e. not fixed in y axis)+// TODO: Currently broken if x or y axis is inverted! (what should happen in this case, anyway?)++template <typename Getter>+void PlotDigitalEx(const char* label_id, Getter getter, const ImPlotSpec& spec) {+ if (BeginItem(label_id, spec, spec.FillColor)) {+ ImPlotContext& gp = *GImPlot;+ ImDrawList& draw_list = *GetPlotDrawList();+ const ImPlotNextItemData& s = GetItemData();+ if (getter.Count > 1 && s.RenderFill) {+ ImPlotPlot& plot = *gp.CurrentPlot;+ ImPlotAxis& x_axis = plot.Axes[plot.CurrentX];+ ImPlotAxis& y_axis = plot.Axes[plot.CurrentY];++ int pixYMax = 0;+ ImPlotPoint itemData1 = getter[0];+ for (int i = 0; i < getter.Count; ++i) {+ ImPlotPoint itemData2 = getter[i];+ if (ImNanOrInf(itemData1.y)) {+ itemData1 = itemData2;+ continue;+ }+ if (ImNanOrInf(itemData2.y)) {+ itemData2.y = ImConstrainNan(ImConstrainInf(itemData2.y));+ }+ int pixY_0 = (int)(s.Spec.LineWeight);+ itemData1.y = ImMax(0.0, itemData1.y);+ const float pixY_1 = s.Spec.Size * (float)itemData1.y;+ const int pixY_chPosOffset = (int)(ImMax(s.Spec.Size, pixY_1) + gp.Style.DigitalSpacing);+ pixYMax = ImMax(pixYMax, pixY_chPosOffset);+ ImVec2 pMin = PlotToPixels(itemData1,IMPLOT_AUTO,IMPLOT_AUTO);+ ImVec2 pMax = PlotToPixels(itemData2,IMPLOT_AUTO,IMPLOT_AUTO);+ const int pixY_Offset = (int)gp.Style.DigitalPadding;+ const float y_ref = y_axis.IsInverted() ? y_axis.PixelMax : y_axis.PixelMin;+ pMin.y = y_ref - (gp.DigitalPlotOffset + pixY_Offset);+ pMax.y = y_ref - (gp.DigitalPlotOffset + pixY_0 + (int)pixY_1 + pixY_Offset);+ //plot only one rectangle for same digital state+ while (((i+2) < getter.Count) && (itemData1.y == itemData2.y)) {+ const int in = (i + 1);+ itemData2 = getter[in];+ if (ImNanOrInf(itemData2.y)) break;+ pMax.x = PlotToPixels(itemData2,IMPLOT_AUTO,IMPLOT_AUTO).x;+ i++;+ }+ // do not extend plot outside plot range+ pMin.x = ImClamp(pMin.x, !x_axis.IsInverted() ? x_axis.PixelMin : x_axis.PixelMax, !x_axis.IsInverted() ? x_axis.PixelMax - 1 : x_axis.PixelMin - 1);+ pMax.x = ImClamp(pMax.x, !x_axis.IsInverted() ? x_axis.PixelMin : x_axis.PixelMax, !x_axis.IsInverted() ? x_axis.PixelMax - 1 : x_axis.PixelMin - 1);+ //plot a rectangle that extends up to x2 with y1 height+ if ((gp.CurrentPlot->PlotRect.Contains(pMin) || gp.CurrentPlot->PlotRect.Contains(pMax))) {+ // ImVec4 colAlpha = item->Color;+ // colAlpha.w = item->Highlight ? 1.0f : 0.9f;+ draw_list.AddRectFilled(pMin, pMax, ImGui::GetColorU32(s.Spec.FillColor));+ }+ itemData1 = itemData2;+ }+ gp.DigitalPlotItemCnt++;+ gp.DigitalPlotOffset += pixYMax;+ }+ EndItem();+ }+}+++template <typename T>+void PlotDigital(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec) {+ GetterXY<IndexerIdx<T>,IndexerIdx<T>> getter(IndexerIdx<T>(xs,count,spec.Offset,Stride<T>(spec)),IndexerIdx<T>(ys,count,spec.Offset,Stride<T>(spec)),count);+ return PlotDigitalEx(label_id, getter, spec);+}+#define INSTANTIATE_MACRO(T) template IMPLOT_API void PlotDigital<T>(const char* label_id, const T* xs, const T* ys, int count, const ImPlotSpec& spec);+CALL_INSTANTIATE_FOR_NUMERIC_TYPES()+#undef INSTANTIATE_MACRO++// custom+void PlotDigitalG(const char* label_id, ImPlotGetter getter_func, void* data, int count, const ImPlotSpec& spec) {+ GetterFuncPtr getter(getter_func,data,count);+ return PlotDigitalEx(label_id, getter, spec);+}++//-----------------------------------------------------------------------------+// [SECTION] PlotImage+//-----------------------------------------------------------------------------++#ifdef IMGUI_HAS_TEXTURES+void PlotImage(const char* label_id, ImTextureRef tex_ref, const ImPlotPoint& bmin, const ImPlotPoint& bmax, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImPlotSpec& spec) {+#else+void PlotImage(const char* label_id, ImTextureID tex_ref, const ImPlotPoint& bmin, const ImPlotPoint& bmax, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImPlotSpec& spec) {+#endif+ if (BeginItemEx(label_id, FitterRect(bmin,bmax), spec)) {+ ImU32 tint_col32 = ImGui::ColorConvertFloat4ToU32(tint_col);+ GetCurrentItem()->Color = tint_col32;+ ImDrawList& draw_list = *GetPlotDrawList();+ ImVec2 p1 = PlotToPixels(bmin.x, bmax.y,IMPLOT_AUTO,IMPLOT_AUTO);+ ImVec2 p2 = PlotToPixels(bmax.x, bmin.y,IMPLOT_AUTO,IMPLOT_AUTO);+ PushPlotClipRect();+ draw_list.AddImage(tex_ref, p1, p2, uv0, uv1, tint_col32);+ PopPlotClipRect();+ EndItem();+ }+}++//-----------------------------------------------------------------------------+// [SECTION] PlotText+//-----------------------------------------------------------------------------++void PlotText(const char* text, double x, double y, const ImVec2& pixel_offset, const ImPlotSpec& spec) {+ IM_ASSERT_USER_ERROR(GImPlot->CurrentPlot != nullptr, "PlotText() needs to be called between BeginPlot() and EndPlot()!");+ SetupLock();+ ImDrawList & draw_list = *GetPlotDrawList();+ PushPlotClipRect();+ ImU32 colTxt = GetStyleColorU32(ImPlotCol_InlayText);+ if (ImHasFlag(spec.Flags,ImPlotTextFlags_Vertical)) {+ ImVec2 siz = CalcTextSizeVertical(text) * 0.5f;+ ImVec2 ctr = siz * 0.5f;+ ImVec2 pos = PlotToPixels(ImPlotPoint(x,y),IMPLOT_AUTO,IMPLOT_AUTO) + ImVec2(-ctr.x, ctr.y) + pixel_offset;+ if (FitThisFrame() && !ImHasFlag(spec.Flags, ImPlotItemFlags_NoFit)) {+ FitPoint(PixelsToPlot(pos));+ FitPoint(PixelsToPlot(pos.x + siz.x, pos.y - siz.y));+ }+ AddTextVertical(&draw_list, pos, colTxt, text);+ }+ else {+ ImVec2 siz = ImGui::CalcTextSize(text);+ ImVec2 pos = PlotToPixels(ImPlotPoint(x,y),IMPLOT_AUTO,IMPLOT_AUTO) - siz * 0.5f + pixel_offset;+ if (FitThisFrame() && !ImHasFlag(spec.Flags, ImPlotItemFlags_NoFit)) {+ FitPoint(PixelsToPlot(pos));+ FitPoint(PixelsToPlot(pos+siz));+ }+ draw_list.AddText(pos, colTxt, text);+ }+ PopPlotClipRect();+}++//-----------------------------------------------------------------------------+// [SECTION] PlotDummy+//-----------------------------------------------------------------------------++void PlotDummy(const char* label_id, const ImPlotSpec& spec) {+ // Pick the first non-auto color from the spec to override the legend icon color+ ImVec4 item_col = spec.LineColor;+ if (IsColorAuto(item_col))+ item_col = spec.FillColor;+ if (IsColorAuto(item_col))+ item_col = spec.MarkerLineColor;+ if (IsColorAuto(item_col))+ item_col = spec.MarkerFillColor;+ if (BeginItem(label_id, spec, item_col, spec.Marker))+ EndItem();+}++} // namespace ImPlot++#endif // #ifndef IMGUI_DISABLE
+ cbits/implot_shim.cpp view
@@ -0,0 +1,269 @@+// THIS FILE HAS BEEN AUTO-GENERATED BY scripts/generate-implot-shim.py.+// **DO NOT EDIT DIRECTLY** -- regen via scripts/refresh-generated-in.sh.++#include "implot_shim.h"++namespace ImPlot {++void PlotLine_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImS8>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImU8>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImS16>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImU16>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImS32>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImU32>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImS64>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<ImU64>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<float>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotLine<double>(label_id, values, count, xscale, xstart, spec); }+void PlotLine_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec) { PlotLine<ImS8>(label_id, xs, ys, count, spec); }+void PlotLine_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec) { PlotLine<ImU8>(label_id, xs, ys, count, spec); }+void PlotLine_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec) { PlotLine<ImS16>(label_id, xs, ys, count, spec); }+void PlotLine_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec) { PlotLine<ImU16>(label_id, xs, ys, count, spec); }+void PlotLine_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec) { PlotLine<ImS32>(label_id, xs, ys, count, spec); }+void PlotLine_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec) { PlotLine<ImU32>(label_id, xs, ys, count, spec); }+void PlotLine_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec) { PlotLine<ImS64>(label_id, xs, ys, count, spec); }+void PlotLine_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec) { PlotLine<ImU64>(label_id, xs, ys, count, spec); }+void PlotLine_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec) { PlotLine<float>(label_id, xs, ys, count, spec); }+void PlotLine_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec) { PlotLine<double>(label_id, xs, ys, count, spec); }+void PlotScatter_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImS8>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImU8>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImS16>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImU16>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImS32>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImU32>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImS64>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<ImU64>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<float>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotScatter<double>(label_id, values, count, xscale, xstart, spec); }+void PlotScatter_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImS8>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImU8>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImS16>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImU16>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImS32>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImU32>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImS64>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec) { PlotScatter<ImU64>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec) { PlotScatter<float>(label_id, xs, ys, count, spec); }+void PlotScatter_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec) { PlotScatter<double>(label_id, xs, ys, count, spec); }+void PlotBubbles_S8(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImS8>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_U8(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImU8>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_S16(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImS16>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_U16(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImU16>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_S32(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImS32>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_U32(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImU32>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_S64(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImS64>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_U64(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<ImU64>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_F32(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<float>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_F64(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotBubbles<double>(label_id, values, szs, count, xscale, xstart, spec); }+void PlotBubbles_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImS8>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImU8>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImS16>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImU16>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImS32>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImU32>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImS64>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, const ImPlotSpec& spec) { PlotBubbles<ImU64>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_F32(const char* label_id, const float* xs, const float* ys, const float* szs, int count, const ImPlotSpec& spec) { PlotBubbles<float>(label_id, xs, ys, szs, count, spec); }+void PlotBubbles_xy_F64(const char* label_id, const double* xs, const double* ys, const double* szs, int count, const ImPlotSpec& spec) { PlotBubbles<double>(label_id, xs, ys, szs, count, spec); }+void PlotPolygon_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImS8>(label_id, xs, ys, count, spec); }+void PlotPolygon_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImU8>(label_id, xs, ys, count, spec); }+void PlotPolygon_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImS16>(label_id, xs, ys, count, spec); }+void PlotPolygon_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImU16>(label_id, xs, ys, count, spec); }+void PlotPolygon_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImS32>(label_id, xs, ys, count, spec); }+void PlotPolygon_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImU32>(label_id, xs, ys, count, spec); }+void PlotPolygon_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImS64>(label_id, xs, ys, count, spec); }+void PlotPolygon_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec) { PlotPolygon<ImU64>(label_id, xs, ys, count, spec); }+void PlotPolygon_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec) { PlotPolygon<float>(label_id, xs, ys, count, spec); }+void PlotPolygon_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec) { PlotPolygon<double>(label_id, xs, ys, count, spec); }+void PlotStairs_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImS8>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImU8>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImS16>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImU16>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImS32>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImU32>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImS64>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<ImU64>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<float>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec) { PlotStairs<double>(label_id, values, count, xscale, xstart, spec); }+void PlotStairs_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImS8>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImU8>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImS16>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImU16>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImS32>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImU32>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImS64>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec) { PlotStairs<ImU64>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec) { PlotStairs<float>(label_id, xs, ys, count, spec); }+void PlotStairs_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec) { PlotStairs<double>(label_id, xs, ys, count, spec); }+void PlotShaded_S8(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImS8>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_U8(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImU8>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_S16(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImS16>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_U16(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImU16>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_S32(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImS32>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_U32(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImU32>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_S64(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImS64>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_U64(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<ImU64>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_F32(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<float>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_F64(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec) { PlotShaded<double>(label_id, values, count, yref, xscale, xstart, spec); }+void PlotShaded_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImS8>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImU8>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImS16>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImU16>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImS32>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImU32>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImS64>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<ImU64>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<float>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double yref, const ImPlotSpec& spec) { PlotShaded<double>(label_id, xs, ys, count, yref, spec); }+void PlotShaded_xyy_S8(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImS8>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_U8(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImU8>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_S16(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImS16>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_U16(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImU16>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_S32(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImS32>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_U32(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImU32>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_S64(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImS64>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_U64(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, const ImPlotSpec& spec) { PlotShaded<ImU64>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_F32(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, const ImPlotSpec& spec) { PlotShaded<float>(label_id, xs, ys1, ys2, count, spec); }+void PlotShaded_xyy_F64(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, const ImPlotSpec& spec) { PlotShaded<double>(label_id, xs, ys1, ys2, count, spec); }+void PlotBars_S8(const char* label_id, const ImS8* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImS8>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_U8(const char* label_id, const ImU8* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImU8>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_S16(const char* label_id, const ImS16* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImS16>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_U16(const char* label_id, const ImU16* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImU16>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_S32(const char* label_id, const ImS32* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImS32>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_U32(const char* label_id, const ImU32* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImU32>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_S64(const char* label_id, const ImS64* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImS64>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_U64(const char* label_id, const ImU64* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<ImU64>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_F32(const char* label_id, const float* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<float>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_F64(const char* label_id, const double* values, int count, double bar_size, double shift, const ImPlotSpec& spec) { PlotBars<double>(label_id, values, count, bar_size, shift, spec); }+void PlotBars_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImS8>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImU8>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImS16>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImU16>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImS32>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImU32>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImS64>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<ImU64>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<float>(label_id, xs, ys, count, bar_size, spec); }+void PlotBars_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double bar_size, const ImPlotSpec& spec) { PlotBars<double>(label_id, xs, ys, count, bar_size, spec); }+void PlotBarGroups_S8(const char* const label_ids[], const ImS8* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImS8>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_U8(const char* const label_ids[], const ImU8* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImU8>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_S16(const char* const label_ids[], const ImS16* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImS16>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_U16(const char* const label_ids[], const ImU16* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImU16>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_S32(const char* const label_ids[], const ImS32* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImS32>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_U32(const char* const label_ids[], const ImU32* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImU32>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_S64(const char* const label_ids[], const ImS64* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImS64>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_U64(const char* const label_ids[], const ImU64* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<ImU64>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_F32(const char* const label_ids[], const float* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<float>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotBarGroups_F64(const char* const label_ids[], const double* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec) { PlotBarGroups<double>(label_ids, values, item_count, group_count, group_size, shift, spec); }+void PlotErrorBars_xye_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS8>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU8>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS16>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU16>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS32>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU32>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS64>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU64>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_F32(const char* label_id, const float* xs, const float* ys, const float* err, int count, const ImPlotSpec& spec) { PlotErrorBars<float>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xye_F64(const char* label_id, const double* xs, const double* ys, const double* err, int count, const ImPlotSpec& spec) { PlotErrorBars<double>(label_id, xs, ys, err, count, spec); }+void PlotErrorBars_xynp_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS8>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU8>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS16>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU16>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS32>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU32>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImS64>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<ImU64>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_F32(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<float>(label_id, xs, ys, neg, pos, count, spec); }+void PlotErrorBars_xynp_F64(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, const ImPlotSpec& spec) { PlotErrorBars<double>(label_id, xs, ys, neg, pos, count, spec); }+void PlotStems_S8(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImS8>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_U8(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImU8>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_S16(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImS16>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_U16(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImU16>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_S32(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImS32>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_U32(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImU32>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_S64(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImS64>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_U64(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<ImU64>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_F32(const char* label_id, const float* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<float>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_F64(const char* label_id, const double* values, int count, double ref, double scale, double start, const ImPlotSpec& spec) { PlotStems<double>(label_id, values, count, ref, scale, start, spec); }+void PlotStems_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImS8>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImU8>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImS16>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImU16>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImS32>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImU32>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImS64>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<ImU64>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<float>(label_id, xs, ys, count, ref, spec); }+void PlotStems_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double ref, const ImPlotSpec& spec) { PlotStems<double>(label_id, xs, ys, count, ref, spec); }+void PlotInfLines_S8(const char* label_id, const ImS8* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImS8>(label_id, values, count, spec); }+void PlotInfLines_U8(const char* label_id, const ImU8* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImU8>(label_id, values, count, spec); }+void PlotInfLines_S16(const char* label_id, const ImS16* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImS16>(label_id, values, count, spec); }+void PlotInfLines_U16(const char* label_id, const ImU16* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImU16>(label_id, values, count, spec); }+void PlotInfLines_S32(const char* label_id, const ImS32* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImS32>(label_id, values, count, spec); }+void PlotInfLines_U32(const char* label_id, const ImU32* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImU32>(label_id, values, count, spec); }+void PlotInfLines_S64(const char* label_id, const ImS64* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImS64>(label_id, values, count, spec); }+void PlotInfLines_U64(const char* label_id, const ImU64* values, int count, const ImPlotSpec& spec) { PlotInfLines<ImU64>(label_id, values, count, spec); }+void PlotInfLines_F32(const char* label_id, const float* values, int count, const ImPlotSpec& spec) { PlotInfLines<float>(label_id, values, count, spec); }+void PlotInfLines_F64(const char* label_id, const double* values, int count, const ImPlotSpec& spec) { PlotInfLines<double>(label_id, values, count, spec); }+void PlotPieChart_fmt_S8(const char* const label_ids[], const ImS8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS8>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_U8(const char* const label_ids[], const ImU8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU8>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_S16(const char* const label_ids[], const ImS16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS16>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_U16(const char* const label_ids[], const ImU16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU16>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_S32(const char* const label_ids[], const ImS32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS32>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_U32(const char* const label_ids[], const ImU32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU32>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_S64(const char* const label_ids[], const ImS64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS64>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_U64(const char* const label_ids[], const ImU64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU64>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_F32(const char* const label_ids[], const float* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<float>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_fmt_F64(const char* const label_ids[], const double* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec) { PlotPieChart<double>(label_ids, values, count, x, y, radius, fmt, fmt_data, angle0, spec); }+void PlotPieChart_S8(const char* const label_ids[], const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS8>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_U8(const char* const label_ids[], const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU8>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_S16(const char* const label_ids[], const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS16>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_U16(const char* const label_ids[], const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU16>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_S32(const char* const label_ids[], const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS32>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_U32(const char* const label_ids[], const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU32>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_S64(const char* const label_ids[], const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImS64>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_U64(const char* const label_ids[], const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<ImU64>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_F32(const char* const label_ids[], const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<float>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotPieChart_F64(const char* const label_ids[], const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec) { PlotPieChart<double>(label_ids, values, count, x, y, radius, label_fmt, angle0, spec); }+void PlotHeatmap_S8(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImS8>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_U8(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImU8>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_S16(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImS16>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_U16(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImU16>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_S32(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImS32>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_U32(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImU32>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_S64(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImS64>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_U64(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<ImU64>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_F32(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<float>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+void PlotHeatmap_F64(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec) { PlotHeatmap<double>(label_id, values, rows, cols, scale_min, scale_max, label_fmt, bounds_min, bounds_max, spec); }+double PlotHistogram_S8(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImS8>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_U8(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImU8>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_S16(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImS16>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_U16(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImU16>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_S32(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImS32>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_U32(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImU32>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_S64(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImS64>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_U64(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<ImU64>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_F32(const char* label_id, const float* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<float>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram_F64(const char* label_id, const double* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec) { return PlotHistogram<double>(label_id, values, count, bins, bar_scale, range, spec); }+double PlotHistogram2D_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImS8>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImU8>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImS16>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImU16>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImS32>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImU32>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImS64>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<ImU64>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_F32(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<float>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+double PlotHistogram2D_F64(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec) { return PlotHistogram2D<double>(label_id, xs, ys, count, x_bins, y_bins, range, spec); }+void PlotDigital_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImS8>(label_id, xs, ys, count, spec); }+void PlotDigital_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImU8>(label_id, xs, ys, count, spec); }+void PlotDigital_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImS16>(label_id, xs, ys, count, spec); }+void PlotDigital_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImU16>(label_id, xs, ys, count, spec); }+void PlotDigital_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImS32>(label_id, xs, ys, count, spec); }+void PlotDigital_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImU32>(label_id, xs, ys, count, spec); }+void PlotDigital_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImS64>(label_id, xs, ys, count, spec); }+void PlotDigital_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec) { PlotDigital<ImU64>(label_id, xs, ys, count, spec); }+void PlotDigital_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec) { PlotDigital<float>(label_id, xs, ys, count, spec); }+void PlotDigital_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec) { PlotDigital<double>(label_id, xs, ys, count, spec); }++} // namespace ImPlot
+ cbits/implot_shim.h view
@@ -0,0 +1,281 @@+// THIS FILE HAS BEEN AUTO-GENERATED BY scripts/generate-implot-shim.py.+// **DO NOT EDIT DIRECTLY** -- regen via scripts/refresh-generated-in.sh.+//+// Monomorphized shim for implot's templated public API. Each+// IMPLOT_TMP-fronted PlotXxx<T> in upstream's implot.h becomes+// 10 concrete entry points here, one per scalar type that+// implot_items.cpp explicitly instantiates. Disambiguation infix:+// <Name>_<Tag> single-overload functions+// <Name>_xy_<Tag> (xs, ys) form+// <Name>_xyy_<Tag> (xs, ys1, ys2) form+// <Name>_xye_<Tag> (xs, ys, err) form+// <Name>_xynp_<Tag> (xs, ys, neg, pos) form+// PlotPieChart_fmt_<Tag> formatter-callback overload++#pragma once+#include "implot.h"++namespace ImPlot {++IMPLOT_API void PlotLine_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotLine_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotScatter_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_S8(const char* label_id, const ImS8* values, const ImS8* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_U8(const char* label_id, const ImU8* values, const ImU8* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_S16(const char* label_id, const ImS16* values, const ImS16* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_U16(const char* label_id, const ImU16* values, const ImU16* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_S32(const char* label_id, const ImS32* values, const ImS32* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_U32(const char* label_id, const ImU32* values, const ImU32* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_S64(const char* label_id, const ImS64* values, const ImS64* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_U64(const char* label_id, const ImU64* values, const ImU64* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_F32(const char* label_id, const float* values, const float* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_F64(const char* label_id, const double* values, const double* szs, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_F32(const char* label_id, const float* xs, const float* ys, const float* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBubbles_xy_F64(const char* label_id, const double* xs, const double* ys, const double* szs, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPolygon_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_S8(const char* label_id, const ImS8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_U8(const char* label_id, const ImU8* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_S16(const char* label_id, const ImS16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_U16(const char* label_id, const ImU16* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_S32(const char* label_id, const ImS32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_U32(const char* label_id, const ImU32* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_S64(const char* label_id, const ImS64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_U64(const char* label_id, const ImU64* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_F32(const char* label_id, const float* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_F64(const char* label_id, const double* values, int count, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStairs_xy_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_S8(const char* label_id, const ImS8* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_U8(const char* label_id, const ImU8* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_S16(const char* label_id, const ImS16* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_U16(const char* label_id, const ImU16* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_S32(const char* label_id, const ImS32* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_U32(const char* label_id, const ImU32* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_S64(const char* label_id, const ImS64* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_U64(const char* label_id, const ImU64* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_F32(const char* label_id, const float* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_F64(const char* label_id, const double* values, int count, double yref, double xscale, double xstart, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double yref, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_S8(const char* label_id, const ImS8* xs, const ImS8* ys1, const ImS8* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_U8(const char* label_id, const ImU8* xs, const ImU8* ys1, const ImU8* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_S16(const char* label_id, const ImS16* xs, const ImS16* ys1, const ImS16* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_U16(const char* label_id, const ImU16* xs, const ImU16* ys1, const ImU16* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_S32(const char* label_id, const ImS32* xs, const ImS32* ys1, const ImS32* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_U32(const char* label_id, const ImU32* xs, const ImU32* ys1, const ImU32* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_S64(const char* label_id, const ImS64* xs, const ImS64* ys1, const ImS64* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_U64(const char* label_id, const ImU64* xs, const ImU64* ys1, const ImU64* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_F32(const char* label_id, const float* xs, const float* ys1, const float* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotShaded_xyy_F64(const char* label_id, const double* xs, const double* ys1, const double* ys2, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_S8(const char* label_id, const ImS8* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_U8(const char* label_id, const ImU8* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_S16(const char* label_id, const ImS16* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_U16(const char* label_id, const ImU16* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_S32(const char* label_id, const ImS32* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_U32(const char* label_id, const ImU32* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_S64(const char* label_id, const ImS64* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_U64(const char* label_id, const ImU64* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_F32(const char* label_id, const float* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_F64(const char* label_id, const double* values, int count, double bar_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBars_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double bar_size, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_S8(const char* const label_ids[], const ImS8* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_U8(const char* const label_ids[], const ImU8* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_S16(const char* const label_ids[], const ImS16* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_U16(const char* const label_ids[], const ImU16* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_S32(const char* const label_ids[], const ImS32* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_U32(const char* const label_ids[], const ImU32* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_S64(const char* const label_ids[], const ImS64* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_U64(const char* const label_ids[], const ImU64* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_F32(const char* const label_ids[], const float* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotBarGroups_F64(const char* const label_ids[], const double* values, int item_count, int group_count, double group_size, double shift, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_F32(const char* label_id, const float* xs, const float* ys, const float* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xye_F64(const char* label_id, const double* xs, const double* ys, const double* err, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_S8(const char* label_id, const ImS8* xs, const ImS8* ys, const ImS8* neg, const ImS8* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_U8(const char* label_id, const ImU8* xs, const ImU8* ys, const ImU8* neg, const ImU8* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_S16(const char* label_id, const ImS16* xs, const ImS16* ys, const ImS16* neg, const ImS16* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_U16(const char* label_id, const ImU16* xs, const ImU16* ys, const ImU16* neg, const ImU16* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_S32(const char* label_id, const ImS32* xs, const ImS32* ys, const ImS32* neg, const ImS32* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_U32(const char* label_id, const ImU32* xs, const ImU32* ys, const ImU32* neg, const ImU32* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_S64(const char* label_id, const ImS64* xs, const ImS64* ys, const ImS64* neg, const ImS64* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_U64(const char* label_id, const ImU64* xs, const ImU64* ys, const ImU64* neg, const ImU64* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_F32(const char* label_id, const float* xs, const float* ys, const float* neg, const float* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotErrorBars_xynp_F64(const char* label_id, const double* xs, const double* ys, const double* neg, const double* pos, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_S8(const char* label_id, const ImS8* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_U8(const char* label_id, const ImU8* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_S16(const char* label_id, const ImS16* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_U16(const char* label_id, const ImU16* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_S32(const char* label_id, const ImS32* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_U32(const char* label_id, const ImU32* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_S64(const char* label_id, const ImS64* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_U64(const char* label_id, const ImU64* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_F32(const char* label_id, const float* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_F64(const char* label_id, const double* values, int count, double ref, double scale, double start, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_F32(const char* label_id, const float* xs, const float* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotStems_xy_F64(const char* label_id, const double* xs, const double* ys, int count, double ref, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_S8(const char* label_id, const ImS8* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_U8(const char* label_id, const ImU8* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_S16(const char* label_id, const ImS16* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_U16(const char* label_id, const ImU16* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_S32(const char* label_id, const ImS32* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_U32(const char* label_id, const ImU32* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_S64(const char* label_id, const ImS64* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_U64(const char* label_id, const ImU64* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_F32(const char* label_id, const float* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotInfLines_F64(const char* label_id, const double* values, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_S8(const char* const label_ids[], const ImS8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_U8(const char* const label_ids[], const ImU8* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_S16(const char* const label_ids[], const ImS16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_U16(const char* const label_ids[], const ImU16* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_S32(const char* const label_ids[], const ImS32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_U32(const char* const label_ids[], const ImU32* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_S64(const char* const label_ids[], const ImS64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_U64(const char* const label_ids[], const ImU64* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_F32(const char* const label_ids[], const float* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_fmt_F64(const char* const label_ids[], const double* values, int count, double x, double y, double radius, ImPlotFormatter fmt, void* fmt_data, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_S8(const char* const label_ids[], const ImS8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_U8(const char* const label_ids[], const ImU8* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_S16(const char* const label_ids[], const ImS16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_U16(const char* const label_ids[], const ImU16* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_S32(const char* const label_ids[], const ImS32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_U32(const char* const label_ids[], const ImU32* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_S64(const char* const label_ids[], const ImS64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_U64(const char* const label_ids[], const ImU64* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_F32(const char* const label_ids[], const float* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotPieChart_F64(const char* const label_ids[], const double* values, int count, double x, double y, double radius, const char* label_fmt, double angle0, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_S8(const char* label_id, const ImS8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_U8(const char* label_id, const ImU8* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_S16(const char* label_id, const ImS16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_U16(const char* label_id, const ImU16* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_S32(const char* label_id, const ImS32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_U32(const char* label_id, const ImU32* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_S64(const char* label_id, const ImS64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_U64(const char* label_id, const ImU64* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_F32(const char* label_id, const float* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API void PlotHeatmap_F64(const char* label_id, const double* values, int rows, int cols, double scale_min, double scale_max, const char* label_fmt, const ImPlotPoint& bounds_min, const ImPlotPoint& bounds_max, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_S8(const char* label_id, const ImS8* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_U8(const char* label_id, const ImU8* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_S16(const char* label_id, const ImS16* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_U16(const char* label_id, const ImU16* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_S32(const char* label_id, const ImS32* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_U32(const char* label_id, const ImU32* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_S64(const char* label_id, const ImS64* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_U64(const char* label_id, const ImU64* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_F32(const char* label_id, const float* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram_F64(const char* label_id, const double* values, int count, int bins, double bar_scale, const ImPlotRange& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_F32(const char* label_id, const float* xs, const float* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API double PlotHistogram2D_F64(const char* label_id, const double* xs, const double* ys, int count, int x_bins, int y_bins, const ImPlotRect& range, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_S8(const char* label_id, const ImS8* xs, const ImS8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_U8(const char* label_id, const ImU8* xs, const ImU8* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_S16(const char* label_id, const ImS16* xs, const ImS16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_U16(const char* label_id, const ImU16* xs, const ImU16* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_S32(const char* label_id, const ImS32* xs, const ImS32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_U32(const char* label_id, const ImU32* xs, const ImU32* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_S64(const char* label_id, const ImS64* xs, const ImS64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_U64(const char* label_id, const ImU64* xs, const ImU64* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_F32(const char* label_id, const float* xs, const float* ys, int count, const ImPlotSpec& spec);+IMPLOT_API void PlotDigital_F64(const char* label_id, const double* xs, const double* ys, int count, const ImPlotSpec& spec);++} // namespace ImPlot
+ dear-imgui-raw-implot.cabal view
@@ -0,0 +1,108 @@+cabal-version: 2.2++-- This file has been generated from package.yaml by hpack version 0.39.6.+--+-- see: https://github.com/sol/hpack++name: dear-imgui-raw-implot+version: 1.0.0+synopsis: Raw FFI bindings to implot (epezent/implot) for dear-imgui-raw.+description: Generated with dear_bindings from the bundled implot sources, compiled against the Dear ImGui build in dear-imgui-raw.+category: GUI+maintainer: IC Rainbow <aenor.realm@gmail.com>+license: BSD-3-Clause+license-file: LICENSE+build-type: Simple+extra-doc-files:+ README.md+ CHANGELOG.md++library+ exposed-modules:+ DearImGui.ImPlot.Context+ DearImGui.Raw.ImPlot+ DearImGui.Raw.ImPlot.Context+ DearImGui.Raw.ImPlot.Enums.AxisFlags+ DearImGui.Raw.ImPlot.Enums.BarGroupsFlags+ DearImGui.Raw.ImPlot.Enums.BarsFlags+ DearImGui.Raw.ImPlot.Enums.Bin+ DearImGui.Raw.ImPlot.Enums.BubblesFlags+ DearImGui.Raw.ImPlot.Enums.Col+ DearImGui.Raw.ImPlot.Enums.Colormap+ DearImGui.Raw.ImPlot.Enums.ColormapScaleFlags+ DearImGui.Raw.ImPlot.Enums.Cond+ DearImGui.Raw.ImPlot.Enums.DigitalFlags+ DearImGui.Raw.ImPlot.Enums.DragToolFlags+ DearImGui.Raw.ImPlot.Enums.DummyFlags+ DearImGui.Raw.ImPlot.Enums.ErrorBarsFlags+ DearImGui.Raw.ImPlot.Enums.Flags+ DearImGui.Raw.ImPlot.Enums.HeatmapFlags+ DearImGui.Raw.ImPlot.Enums.HistogramFlags+ DearImGui.Raw.ImPlot.Enums.ImageFlags+ DearImGui.Raw.ImPlot.Enums.ImAxis+ DearImGui.Raw.ImPlot.Enums.InfLinesFlags+ DearImGui.Raw.ImPlot.Enums.ItemFlags+ DearImGui.Raw.ImPlot.Enums.LegendFlags+ DearImGui.Raw.ImPlot.Enums.LineFlags+ DearImGui.Raw.ImPlot.Enums.Location+ DearImGui.Raw.ImPlot.Enums.Marker+ DearImGui.Raw.ImPlot.Enums.MouseTextFlags+ DearImGui.Raw.ImPlot.Enums.PieChartFlags+ DearImGui.Raw.ImPlot.Enums.PolygonFlags+ DearImGui.Raw.ImPlot.Enums.Prop+ DearImGui.Raw.ImPlot.Enums.Scale+ DearImGui.Raw.ImPlot.Enums.ScatterFlags+ DearImGui.Raw.ImPlot.Enums.ShadedFlags+ DearImGui.Raw.ImPlot.Enums.StairsFlags+ DearImGui.Raw.ImPlot.Enums.StemsFlags+ DearImGui.Raw.ImPlot.Enums.StyleVar+ DearImGui.Raw.ImPlot.Enums.SubplotFlags+ DearImGui.Raw.ImPlot.Enums.TextFlags+ DearImGui.Raw.ImPlot.InputMap+ DearImGui.Raw.ImPlot.Point+ DearImGui.Raw.ImPlot.Range+ DearImGui.Raw.ImPlot.Rect+ DearImGui.Raw.ImPlot.Spec+ DearImGui.Raw.ImPlot.Style+ other-modules:+ Paths_dear_imgui_raw_implot+ autogen-modules:+ Paths_dear_imgui_raw_implot+ hs-source-dirs:+ src+ default-extensions:+ BlockArguments+ DataKinds+ DuplicateRecordFields+ LambdaCase+ NoFieldSelectors+ OverloadedRecordDot+ OverloadedStrings+ StrictData+ ghc-options: -Wall -optc-Wno-discarded-qualifiers -optc-Wno-incompatible-pointer-types+ cxx-options: -std=c++11 -fpermissive+ include-dirs:+ cbits+ cbits/implot+ install-includes:+ dcimgui_implot.h+ implot_shim.h+ implot/implot.h+ implot/implot_internal.h+ DearImGuiWrappers.h+ cxx-sources:+ cbits/dcimgui_implot.cpp+ cbits/implot_shim.cpp+ cbits/implot/implot.cpp+ cbits/implot/implot_items.cpp+ cbits/DearImGuiWrappers.cpp+ cbits/DearImGuiCtors.cpp+ extra-libraries:+ stdc+++ build-tool-depends:+ hsc2hs:hsc2hs+ build-depends:+ base >=4.16 && <5+ , dear-imgui-raw ==1.0.*+ , unliftio-core+ default-language: GHC2021
+ src/DearImGui/ImPlot/Context.hs view
@@ -0,0 +1,12 @@+-- | Exception-safe scope around 'ImPlot.createContext' / 'ImPlot.destroyContext'.+module DearImGui.ImPlot.Context+ ( withContext+ ) where++import Control.Monad.IO.Unlift (MonadUnliftIO)++import DearImGui.Bracket (withCreated)+import DearImGui.Raw.ImPlot qualified as ImPlot++withContext :: (MonadUnliftIO m) => m a -> m a+withContext = withCreated ImPlot.createContext ImPlot.destroyContext
+ src/DearImGui/Raw/ImPlot.hsc view
@@ -0,0 +1,7579 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot+ ( Formatter+ , Getter+ , Transform+ , addColormap+ , addColormapImU32Ptr+ , annotation+ , annotationStrUnformatted+ , beginAlignedPlots+ , beginDragDropSourceAxis+ , beginDragDropSourceItem+ , beginDragDropSourcePlot+ , beginDragDropTargetAxis+ , beginDragDropTargetLegend+ , beginDragDropTargetPlot+ , beginLegendPopup+ , beginPlot+ , beginSubplots+ , bustColorCache+ , c_annotation+ , c_annotationStrUnformatted+ , c_beginPlot+ , c_beginSubplots+ , c_colormapButton+ , c_colormapScale+ , c_dragLineX+ , c_dragLineY+ , c_dragPoint+ , c_dragRect+ , c_getColormapColor+ , c_getLastItemColor+ , c_getPlotPos+ , c_getPlotSize+ , c_itemIcon+ , c_nextColormapColor+ , c_plotBarGroups_F32+ , c_plotBarGroups_F64+ , c_plotBarGroups_S16+ , c_plotBarGroups_S32+ , c_plotBarGroups_S64+ , c_plotBarGroups_S8+ , c_plotBarGroups_U16+ , c_plotBarGroups_U32+ , c_plotBarGroups_U64+ , c_plotBarGroups_U8+ , c_plotBarsG+ , c_plotBars_F32+ , c_plotBars_F64+ , c_plotBars_S16+ , c_plotBars_S32+ , c_plotBars_S64+ , c_plotBars_S8+ , c_plotBars_U16+ , c_plotBars_U32+ , c_plotBars_U64+ , c_plotBars_U8+ , c_plotBars_xy_F32+ , c_plotBars_xy_F64+ , c_plotBars_xy_S16+ , c_plotBars_xy_S32+ , c_plotBars_xy_S64+ , c_plotBars_xy_S8+ , c_plotBars_xy_U16+ , c_plotBars_xy_U32+ , c_plotBars_xy_U64+ , c_plotBars_xy_U8+ , c_plotBubbles_F32+ , c_plotBubbles_F64+ , c_plotBubbles_S16+ , c_plotBubbles_S32+ , c_plotBubbles_S64+ , c_plotBubbles_S8+ , c_plotBubbles_U16+ , c_plotBubbles_U32+ , c_plotBubbles_U64+ , c_plotBubbles_U8+ , c_plotBubbles_xy_F32+ , c_plotBubbles_xy_F64+ , c_plotBubbles_xy_S16+ , c_plotBubbles_xy_S32+ , c_plotBubbles_xy_S64+ , c_plotBubbles_xy_S8+ , c_plotBubbles_xy_U16+ , c_plotBubbles_xy_U32+ , c_plotBubbles_xy_U64+ , c_plotBubbles_xy_U8+ , c_plotDigitalG+ , c_plotDigital_F32+ , c_plotDigital_F64+ , c_plotDigital_S16+ , c_plotDigital_S32+ , c_plotDigital_S64+ , c_plotDigital_S8+ , c_plotDigital_U16+ , c_plotDigital_U32+ , c_plotDigital_U64+ , c_plotDigital_U8+ , c_plotDummy+ , c_plotErrorBars_xye_F32+ , c_plotErrorBars_xye_F64+ , c_plotErrorBars_xye_S16+ , c_plotErrorBars_xye_S32+ , c_plotErrorBars_xye_S64+ , c_plotErrorBars_xye_S8+ , c_plotErrorBars_xye_U16+ , c_plotErrorBars_xye_U32+ , c_plotErrorBars_xye_U64+ , c_plotErrorBars_xye_U8+ , c_plotErrorBars_xynp_F32+ , c_plotErrorBars_xynp_F64+ , c_plotErrorBars_xynp_S16+ , c_plotErrorBars_xynp_S32+ , c_plotErrorBars_xynp_S64+ , c_plotErrorBars_xynp_S8+ , c_plotErrorBars_xynp_U16+ , c_plotErrorBars_xynp_U32+ , c_plotErrorBars_xynp_U64+ , c_plotErrorBars_xynp_U8+ , c_plotHeatmap_F32+ , c_plotHeatmap_F64+ , c_plotHeatmap_S16+ , c_plotHeatmap_S32+ , c_plotHeatmap_S64+ , c_plotHeatmap_S8+ , c_plotHeatmap_U16+ , c_plotHeatmap_U32+ , c_plotHeatmap_U64+ , c_plotHeatmap_U8+ , c_plotHistogram2D_F32+ , c_plotHistogram2D_F64+ , c_plotHistogram2D_S16+ , c_plotHistogram2D_S32+ , c_plotHistogram2D_S64+ , c_plotHistogram2D_S8+ , c_plotHistogram2D_U16+ , c_plotHistogram2D_U32+ , c_plotHistogram2D_U64+ , c_plotHistogram2D_U8+ , c_plotHistogram_F32+ , c_plotHistogram_F64+ , c_plotHistogram_S16+ , c_plotHistogram_S32+ , c_plotHistogram_S64+ , c_plotHistogram_S8+ , c_plotHistogram_U16+ , c_plotHistogram_U32+ , c_plotHistogram_U64+ , c_plotHistogram_U8+ , c_plotImage+ , c_plotInfLines_F32+ , c_plotInfLines_F64+ , c_plotInfLines_S16+ , c_plotInfLines_S32+ , c_plotInfLines_S64+ , c_plotInfLines_S8+ , c_plotInfLines_U16+ , c_plotInfLines_U32+ , c_plotInfLines_U64+ , c_plotInfLines_U8+ , c_plotLineG+ , c_plotLine_F32+ , c_plotLine_F64+ , c_plotLine_S16+ , c_plotLine_S32+ , c_plotLine_S64+ , c_plotLine_S8+ , c_plotLine_U16+ , c_plotLine_U32+ , c_plotLine_U64+ , c_plotLine_U8+ , c_plotLine_xy_F32+ , c_plotLine_xy_F64+ , c_plotLine_xy_S16+ , c_plotLine_xy_S32+ , c_plotLine_xy_S64+ , c_plotLine_xy_S8+ , c_plotLine_xy_U16+ , c_plotLine_xy_U32+ , c_plotLine_xy_U64+ , c_plotLine_xy_U8+ , c_plotPieChart_F32+ , c_plotPieChart_F64+ , c_plotPieChart_S16+ , c_plotPieChart_S32+ , c_plotPieChart_S64+ , c_plotPieChart_S8+ , c_plotPieChart_U16+ , c_plotPieChart_U32+ , c_plotPieChart_U64+ , c_plotPieChart_U8+ , c_plotPieChart_fmt_F32+ , c_plotPieChart_fmt_F64+ , c_plotPieChart_fmt_S16+ , c_plotPieChart_fmt_S32+ , c_plotPieChart_fmt_S64+ , c_plotPieChart_fmt_S8+ , c_plotPieChart_fmt_U16+ , c_plotPieChart_fmt_U32+ , c_plotPieChart_fmt_U64+ , c_plotPieChart_fmt_U8+ , c_plotPolygon_F32+ , c_plotPolygon_F64+ , c_plotPolygon_S16+ , c_plotPolygon_S32+ , c_plotPolygon_S64+ , c_plotPolygon_S8+ , c_plotPolygon_U16+ , c_plotPolygon_U32+ , c_plotPolygon_U64+ , c_plotPolygon_U8+ , c_plotScatterG+ , c_plotScatter_F32+ , c_plotScatter_F64+ , c_plotScatter_S16+ , c_plotScatter_S32+ , c_plotScatter_S64+ , c_plotScatter_S8+ , c_plotScatter_U16+ , c_plotScatter_U32+ , c_plotScatter_U64+ , c_plotScatter_U8+ , c_plotScatter_xy_F32+ , c_plotScatter_xy_F64+ , c_plotScatter_xy_S16+ , c_plotScatter_xy_S32+ , c_plotScatter_xy_S64+ , c_plotScatter_xy_S8+ , c_plotScatter_xy_U16+ , c_plotScatter_xy_U32+ , c_plotScatter_xy_U64+ , c_plotScatter_xy_U8+ , c_plotShadedG+ , c_plotShaded_F32+ , c_plotShaded_F64+ , c_plotShaded_S16+ , c_plotShaded_S32+ , c_plotShaded_S64+ , c_plotShaded_S8+ , c_plotShaded_U16+ , c_plotShaded_U32+ , c_plotShaded_U64+ , c_plotShaded_U8+ , c_plotShaded_xy_F32+ , c_plotShaded_xy_F64+ , c_plotShaded_xy_S16+ , c_plotShaded_xy_S32+ , c_plotShaded_xy_S64+ , c_plotShaded_xy_S8+ , c_plotShaded_xy_U16+ , c_plotShaded_xy_U32+ , c_plotShaded_xy_U64+ , c_plotShaded_xy_U8+ , c_plotShaded_xyy_F32+ , c_plotShaded_xyy_F64+ , c_plotShaded_xyy_S16+ , c_plotShaded_xyy_S32+ , c_plotShaded_xyy_S64+ , c_plotShaded_xyy_S8+ , c_plotShaded_xyy_U16+ , c_plotShaded_xyy_U32+ , c_plotShaded_xyy_U64+ , c_plotShaded_xyy_U8+ , c_plotStairsG+ , c_plotStairs_F32+ , c_plotStairs_F64+ , c_plotStairs_S16+ , c_plotStairs_S32+ , c_plotStairs_S64+ , c_plotStairs_S8+ , c_plotStairs_U16+ , c_plotStairs_U32+ , c_plotStairs_U64+ , c_plotStairs_U8+ , c_plotStairs_xy_F32+ , c_plotStairs_xy_F64+ , c_plotStairs_xy_S16+ , c_plotStairs_xy_S32+ , c_plotStairs_xy_S64+ , c_plotStairs_xy_S8+ , c_plotStairs_xy_U16+ , c_plotStairs_xy_U32+ , c_plotStairs_xy_U64+ , c_plotStairs_xy_U8+ , c_plotStems_F32+ , c_plotStems_F64+ , c_plotStems_S16+ , c_plotStems_S32+ , c_plotStems_S64+ , c_plotStems_S8+ , c_plotStems_U16+ , c_plotStems_U32+ , c_plotStems_U64+ , c_plotStems_U8+ , c_plotStems_xy_F32+ , c_plotStems_xy_F64+ , c_plotStems_xy_S16+ , c_plotStems_xy_S32+ , c_plotStems_xy_S64+ , c_plotStems_xy_S8+ , c_plotStems_xy_U16+ , c_plotStems_xy_U32+ , c_plotStems_xy_U64+ , c_plotStems_xy_U8+ , c_plotText+ , c_plotToPixels+ , c_plotToPixelsDouble+ , c_pushStyleColorImVec4+ , c_pushStyleVarImVec2+ , c_sampleColormap+ , c_tagX+ , c_tagXStrUnformatted+ , c_tagY+ , c_tagYStrUnformatted+ , cancelPlotSelection+ , colormapButton+ , colormapIcon+ , colormapScale+ , colormapSlider+ , createContext+ , destroyContext+ , dragLineX+ , dragLineY+ , dragPoint+ , dragRect+ , endAlignedPlots+ , endDragDropSource+ , endDragDropTarget+ , endLegendPopup+ , endPlot+ , endSubplots+ , getColormapColor+ , getColormapCount+ , getColormapIndex+ , getColormapName+ , getColormapSize+ , getCurrentContext+ , getInputMap+ , getLastItemColor+ , getMarkerName+ , getPlotDrawList+ , getPlotPos+ , getPlotSize+ , getStyle+ , getStyleColorName+ , hideNextItem+ , isAxisHovered+ , isLegendEntryHovered+ , isPlotHovered+ , isPlotSelected+ , isSubplotsHovered+ , itemIcon+ , itemIconImU32+ , mapInputDefault+ , mapInputReverse+ , nextColormapColor+ , nextMarker+ , pattern IMPLOT_VERSION_NUM+ , plotBarGroups_F32+ , plotBarGroups_F64+ , plotBarGroups_S16+ , plotBarGroups_S32+ , plotBarGroups_S64+ , plotBarGroups_S8+ , plotBarGroups_U16+ , plotBarGroups_U32+ , plotBarGroups_U64+ , plotBarGroups_U8+ , plotBarsG+ , plotBars_F32+ , plotBars_F64+ , plotBars_S16+ , plotBars_S32+ , plotBars_S64+ , plotBars_S8+ , plotBars_U16+ , plotBars_U32+ , plotBars_U64+ , plotBars_U8+ , plotBars_xy_F32+ , plotBars_xy_F64+ , plotBars_xy_S16+ , plotBars_xy_S32+ , plotBars_xy_S64+ , plotBars_xy_S8+ , plotBars_xy_U16+ , plotBars_xy_U32+ , plotBars_xy_U64+ , plotBars_xy_U8+ , plotBubbles_F32+ , plotBubbles_F64+ , plotBubbles_S16+ , plotBubbles_S32+ , plotBubbles_S64+ , plotBubbles_S8+ , plotBubbles_U16+ , plotBubbles_U32+ , plotBubbles_U64+ , plotBubbles_U8+ , plotBubbles_xy_F32+ , plotBubbles_xy_F64+ , plotBubbles_xy_S16+ , plotBubbles_xy_S32+ , plotBubbles_xy_S64+ , plotBubbles_xy_S8+ , plotBubbles_xy_U16+ , plotBubbles_xy_U32+ , plotBubbles_xy_U64+ , plotBubbles_xy_U8+ , plotDigitalG+ , plotDigital_F32+ , plotDigital_F64+ , plotDigital_S16+ , plotDigital_S32+ , plotDigital_S64+ , plotDigital_S8+ , plotDigital_U16+ , plotDigital_U32+ , plotDigital_U64+ , plotDigital_U8+ , plotDummy+ , plotErrorBars_xye_F32+ , plotErrorBars_xye_F64+ , plotErrorBars_xye_S16+ , plotErrorBars_xye_S32+ , plotErrorBars_xye_S64+ , plotErrorBars_xye_S8+ , plotErrorBars_xye_U16+ , plotErrorBars_xye_U32+ , plotErrorBars_xye_U64+ , plotErrorBars_xye_U8+ , plotErrorBars_xynp_F32+ , plotErrorBars_xynp_F64+ , plotErrorBars_xynp_S16+ , plotErrorBars_xynp_S32+ , plotErrorBars_xynp_S64+ , plotErrorBars_xynp_S8+ , plotErrorBars_xynp_U16+ , plotErrorBars_xynp_U32+ , plotErrorBars_xynp_U64+ , plotErrorBars_xynp_U8+ , plotHeatmap_F32+ , plotHeatmap_F64+ , plotHeatmap_S16+ , plotHeatmap_S32+ , plotHeatmap_S64+ , plotHeatmap_S8+ , plotHeatmap_U16+ , plotHeatmap_U32+ , plotHeatmap_U64+ , plotHeatmap_U8+ , plotHistogram2D_F32+ , plotHistogram2D_F64+ , plotHistogram2D_S16+ , plotHistogram2D_S32+ , plotHistogram2D_S64+ , plotHistogram2D_S8+ , plotHistogram2D_U16+ , plotHistogram2D_U32+ , plotHistogram2D_U64+ , plotHistogram2D_U8+ , plotHistogram_F32+ , plotHistogram_F64+ , plotHistogram_S16+ , plotHistogram_S32+ , plotHistogram_S64+ , plotHistogram_S8+ , plotHistogram_U16+ , plotHistogram_U32+ , plotHistogram_U64+ , plotHistogram_U8+ , plotImage+ , plotInfLines_F32+ , plotInfLines_F64+ , plotInfLines_S16+ , plotInfLines_S32+ , plotInfLines_S64+ , plotInfLines_S8+ , plotInfLines_U16+ , plotInfLines_U32+ , plotInfLines_U64+ , plotInfLines_U8+ , plotLineG+ , plotLine_F32+ , plotLine_F64+ , plotLine_S16+ , plotLine_S32+ , plotLine_S64+ , plotLine_S8+ , plotLine_U16+ , plotLine_U32+ , plotLine_U64+ , plotLine_U8+ , plotLine_xy_F32+ , plotLine_xy_F64+ , plotLine_xy_S16+ , plotLine_xy_S32+ , plotLine_xy_S64+ , plotLine_xy_S8+ , plotLine_xy_U16+ , plotLine_xy_U32+ , plotLine_xy_U64+ , plotLine_xy_U8+ , plotPieChart_F32+ , plotPieChart_F64+ , plotPieChart_S16+ , plotPieChart_S32+ , plotPieChart_S64+ , plotPieChart_S8+ , plotPieChart_U16+ , plotPieChart_U32+ , plotPieChart_U64+ , plotPieChart_U8+ , plotPieChart_fmt_F32+ , plotPieChart_fmt_F64+ , plotPieChart_fmt_S16+ , plotPieChart_fmt_S32+ , plotPieChart_fmt_S64+ , plotPieChart_fmt_S8+ , plotPieChart_fmt_U16+ , plotPieChart_fmt_U32+ , plotPieChart_fmt_U64+ , plotPieChart_fmt_U8+ , plotPolygon_F32+ , plotPolygon_F64+ , plotPolygon_S16+ , plotPolygon_S32+ , plotPolygon_S64+ , plotPolygon_S8+ , plotPolygon_U16+ , plotPolygon_U32+ , plotPolygon_U64+ , plotPolygon_U8+ , plotScatterG+ , plotScatter_F32+ , plotScatter_F64+ , plotScatter_S16+ , plotScatter_S32+ , plotScatter_S64+ , plotScatter_S8+ , plotScatter_U16+ , plotScatter_U32+ , plotScatter_U64+ , plotScatter_U8+ , plotScatter_xy_F32+ , plotScatter_xy_F64+ , plotScatter_xy_S16+ , plotScatter_xy_S32+ , plotScatter_xy_S64+ , plotScatter_xy_S8+ , plotScatter_xy_U16+ , plotScatter_xy_U32+ , plotScatter_xy_U64+ , plotScatter_xy_U8+ , plotShadedG+ , plotShaded_F32+ , plotShaded_F64+ , plotShaded_S16+ , plotShaded_S32+ , plotShaded_S64+ , plotShaded_S8+ , plotShaded_U16+ , plotShaded_U32+ , plotShaded_U64+ , plotShaded_U8+ , plotShaded_xy_F32+ , plotShaded_xy_F64+ , plotShaded_xy_S16+ , plotShaded_xy_S32+ , plotShaded_xy_S64+ , plotShaded_xy_S8+ , plotShaded_xy_U16+ , plotShaded_xy_U32+ , plotShaded_xy_U64+ , plotShaded_xy_U8+ , plotShaded_xyy_F32+ , plotShaded_xyy_F64+ , plotShaded_xyy_S16+ , plotShaded_xyy_S32+ , plotShaded_xyy_S64+ , plotShaded_xyy_S8+ , plotShaded_xyy_U16+ , plotShaded_xyy_U32+ , plotShaded_xyy_U64+ , plotShaded_xyy_U8+ , plotStairsG+ , plotStairs_F32+ , plotStairs_F64+ , plotStairs_S16+ , plotStairs_S32+ , plotStairs_S64+ , plotStairs_S8+ , plotStairs_U16+ , plotStairs_U32+ , plotStairs_U64+ , plotStairs_U8+ , plotStairs_xy_F32+ , plotStairs_xy_F64+ , plotStairs_xy_S16+ , plotStairs_xy_S32+ , plotStairs_xy_S64+ , plotStairs_xy_S8+ , plotStairs_xy_U16+ , plotStairs_xy_U32+ , plotStairs_xy_U64+ , plotStairs_xy_U8+ , plotStems_F32+ , plotStems_F64+ , plotStems_S16+ , plotStems_S32+ , plotStems_S64+ , plotStems_S8+ , plotStems_U16+ , plotStems_U32+ , plotStems_U64+ , plotStems_U8+ , plotStems_xy_F32+ , plotStems_xy_F64+ , plotStems_xy_S16+ , plotStems_xy_S32+ , plotStems_xy_S64+ , plotStems_xy_S8+ , plotStems_xy_U16+ , plotStems_xy_U32+ , plotStems_xy_U64+ , plotStems_xy_U8+ , plotText+ , plotToPixels+ , plotToPixelsDouble+ , popColormap+ , popPlotClipRect+ , popStyleColor+ , popStyleVar+ , pushColormap+ , pushColormapStr+ , pushPlotClipRect+ , pushStyleColor+ , pushStyleColorImVec4+ , pushStyleVar+ , pushStyleVarImVec2+ , pushStyleVarInt+ , sampleColormap+ , setAxes+ , setAxis+ , setCurrentContext+ , setImGuiContext+ , setNextAxesLimits+ , setNextAxesToFit+ , setNextAxisLimits+ , setNextAxisLinks+ , setNextAxisToFit+ , setupAxes+ , setupAxesLimits+ , setupAxis+ , setupAxisFormat+ , setupAxisFormatImPlotFormatter+ , setupAxisLimits+ , setupAxisLimitsConstraints+ , setupAxisLinks+ , setupAxisScale+ , setupAxisScaleImPlotTransform+ , setupAxisTicks+ , setupAxisTicksDouble+ , setupAxisZoomConstraints+ , setupFinish+ , setupLegend+ , setupMouseText+ , showColormapSelector+ , showInputMapSelector+ , showMetricsWindow+ , showStyleEditor+ , showStyleSelector+ , showUserGuide+ , styleColorsAuto+ , styleColorsClassic+ , styleColorsDark+ , styleColorsLight+ , tagX+ , tagXStrUnformatted+ , tagY+ , tagYStrUnformatted+ ) where++import DearImGui.Raw (ImS16, ImS32, ImS64, ImS8, ImU16, ImU32, ImU64, ImU8)+import DearImGui.Raw.Enums.ImGuiDragDropFlags (ImGuiDragDropFlags)+import DearImGui.Raw.Enums.ImGuiMouseButton (ImGuiMouseButton)+import DearImGui.Raw.ImDrawList (ImDrawList)+import DearImGui.Raw.ImGuiContext (ImGuiContext)+import DearImGui.Raw.ImPlot.Context (Context)+import DearImGui.Raw.ImPlot.Enums.AxisFlags (AxisFlags)+import DearImGui.Raw.ImPlot.Enums.Col (Col)+import DearImGui.Raw.ImPlot.Enums.Colormap (Colormap)+import DearImGui.Raw.ImPlot.Enums.ColormapScaleFlags (ColormapScaleFlags)+import DearImGui.Raw.ImPlot.Enums.Cond (Cond)+import DearImGui.Raw.ImPlot.Enums.DragToolFlags (DragToolFlags)+import DearImGui.Raw.ImPlot.Enums.Flags (Flags)+import DearImGui.Raw.ImPlot.Enums.ImAxis (ImAxis)+import DearImGui.Raw.ImPlot.Enums.LegendFlags (LegendFlags)+import DearImGui.Raw.ImPlot.Enums.Location (Location)+import DearImGui.Raw.ImPlot.Enums.Marker (Marker)+import DearImGui.Raw.ImPlot.Enums.MouseTextFlags (MouseTextFlags)+import DearImGui.Raw.ImPlot.Enums.Scale (Scale)+import DearImGui.Raw.ImPlot.Enums.StyleVar (StyleVar)+import DearImGui.Raw.ImPlot.Enums.SubplotFlags (SubplotFlags)+import DearImGui.Raw.ImPlot.InputMap (InputMap)+import DearImGui.Raw.ImPlot.Point (Point)+import DearImGui.Raw.ImPlot.Range (Range)+import DearImGui.Raw.ImPlot.Rect (Rect)+import DearImGui.Raw.ImPlot.Spec (Spec)+import DearImGui.Raw.ImPlot.Style (Style)+import DearImGui.Raw.ImTextureRef (ImTextureRef)+import DearImGui.Raw.ImVec2 (ImVec2)+import DearImGui.Raw.ImVec4 (ImVec4)+import Foreign.C.String (CString)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Marshal.Utils (with)+import Foreign.Ptr (FunPtr, Ptr)+import Foreign.Storable (Storable (..))++#include "dcimgui_implot.h"++-- typedefs++-- | Callback signature for axis tick label formatter.+type Formatter = FunPtr (Double -> (Ptr CChar) -> CInt -> (Ptr ()) -> IO CInt)++-- | Callback signature for data getter.+type Getter = FunPtr (CInt -> (Ptr ()) -> IO Point)++-- | Callback signature for axis transform.+type Transform = FunPtr (Double -> (Ptr ()) -> IO Double)++-- defines++pattern IMPLOT_VERSION_NUM :: (Eq a, Num a) => a+pattern IMPLOT_VERSION_NUM = #{const IMPLOT_VERSION_NUM}++-- functions++-- C: ImPlotColormap ImPlot::AddColormap(const char* name, const ImVec4* cols, int size, bool qual)+foreign import capi unsafe "dcimgui_implot.h ImPlotAddColormap"+ addColormap+ :: CString -- ^ name+ -> (Ptr ImVec4) -- ^ cols+ -> CInt -- ^ size+ -> CBool -- ^ qual+ -> IO Colormap++-- C: ImPlotColormap ImPlot::AddColormap(const char* name, const ImU32* cols, int size, bool qual)+foreign import capi unsafe "dcimgui_implot.h ImPlotAddColormapImU32Ptr"+ addColormapImU32Ptr+ :: CString -- ^ name+ -> (Ptr ImU32) -- ^ cols+ -> CInt -- ^ size+ -> CBool -- ^ qual+ -> IO Colormap++foreign import capi unsafe "DearImGuiWrappers.h ImPlotAnnotation_wrap"+ c_annotation+ :: Double -- ^ x+ -> Double -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> (Ptr ImVec2) -- ^ pix_offset+ -> CBool -- ^ clamp+ -> CBool -- ^ round+ -> IO ()++annotation+ :: Double -- ^ x+ -> Double -- ^ y+ -> ImVec4 -- ^ col+ -> ImVec2 -- ^ pix_offset+ -> CBool -- ^ clamp+ -> CBool -- ^ round+ -> IO ()+annotation x y col pix_offset clamp round =+ with col $ \colPtr -> with pix_offset $ \pix_offsetPtr -> c_annotation x y colPtr pix_offsetPtr clamp round++foreign import capi unsafe "DearImGuiWrappers.h ImPlotAnnotationStrUnformatted_wrap"+ c_annotationStrUnformatted+ :: Double -- ^ x+ -> Double -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> (Ptr ImVec2) -- ^ pix_offset+ -> CBool -- ^ clamp+ -> CString -- ^ text+ -> IO ()++annotationStrUnformatted+ :: Double -- ^ x+ -> Double -- ^ y+ -> ImVec4 -- ^ col+ -> ImVec2 -- ^ pix_offset+ -> CBool -- ^ clamp+ -> CString -- ^ text+ -> IO ()+annotationStrUnformatted x y col pix_offset clamp text =+ with col $ \colPtr -> with pix_offset $ \pix_offsetPtr -> c_annotationStrUnformatted x y colPtr pix_offsetPtr clamp text++-- C: bool ImPlot::BeginAlignedPlots(const char* group_id, bool vertical)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginAlignedPlots"+ beginAlignedPlots+ :: CString -- ^ group_id+ -> CBool -- ^ vertical+ -> IO CBool++-- C: bool ImPlot::BeginDragDropSourceAxis(ImAxis axis, ImGuiDragDropFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropSourceAxis"+ beginDragDropSourceAxis+ :: ImAxis -- ^ axis+ -> ImGuiDragDropFlags -- ^ flags+ -> IO CBool++-- C: bool ImPlot::BeginDragDropSourceItem(const char* label_id, ImGuiDragDropFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropSourceItem"+ beginDragDropSourceItem+ :: CString -- ^ label_id+ -> ImGuiDragDropFlags -- ^ flags+ -> IO CBool++-- C: bool ImPlot::BeginDragDropSourcePlot(ImGuiDragDropFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropSourcePlot"+ beginDragDropSourcePlot+ :: ImGuiDragDropFlags -- ^ flags+ -> IO CBool++-- C: bool ImPlot::BeginDragDropTargetAxis(ImAxis axis)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropTargetAxis"+ beginDragDropTargetAxis+ :: ImAxis -- ^ axis+ -> IO CBool++-- C: bool ImPlot::BeginDragDropTargetLegend()+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropTargetLegend"+ beginDragDropTargetLegend :: IO CBool++-- C: bool ImPlot::BeginDragDropTargetPlot()+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginDragDropTargetPlot"+ beginDragDropTargetPlot :: IO CBool++-- C: bool ImPlot::BeginLegendPopup(const char* label_id, ImGuiMouseButton mouse_button)+foreign import capi unsafe "dcimgui_implot.h ImPlotBeginLegendPopup"+ beginLegendPopup+ :: CString -- ^ label_id+ -> ImGuiMouseButton -- ^ mouse_button+ -> IO CBool++foreign import capi unsafe "DearImGuiWrappers.h ImPlotBeginPlot_wrap"+ c_beginPlot+ :: CString -- ^ title_id+ -> (Ptr ImVec2) -- ^ size+ -> Flags -- ^ flags+ -> IO CBool++beginPlot+ :: CString -- ^ title_id+ -> ImVec2 -- ^ size+ -> Flags -- ^ flags+ -> IO CBool+beginPlot title_id size flags =+ with size $ \sizePtr -> c_beginPlot title_id sizePtr flags++foreign import capi unsafe "DearImGuiWrappers.h ImPlotBeginSubplots_wrap"+ c_beginSubplots+ :: CString -- ^ title_id+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> (Ptr ImVec2) -- ^ size+ -> SubplotFlags -- ^ flags+ -> (Ptr Float) -- ^ row_ratios+ -> (Ptr Float) -- ^ col_ratios+ -> IO CBool++beginSubplots+ :: CString -- ^ title_id+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> ImVec2 -- ^ size+ -> SubplotFlags -- ^ flags+ -> (Ptr Float) -- ^ row_ratios+ -> (Ptr Float) -- ^ col_ratios+ -> IO CBool+beginSubplots title_id rows cols size flags row_ratios col_ratios =+ with size $ \sizePtr -> c_beginSubplots title_id rows cols sizePtr flags row_ratios col_ratios++-- C: void ImPlot::BustColorCache(const char* plot_title_id)+foreign import capi unsafe "dcimgui_implot.h ImPlotBustColorCache"+ bustColorCache+ :: CString -- ^ plot_title_id+ -> IO ()++-- C: void ImPlot::CancelPlotSelection()+foreign import capi unsafe "dcimgui_implot.h ImPlotCancelPlotSelection"+ cancelPlotSelection :: IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotColormapButton_wrap"+ c_colormapButton+ :: CString -- ^ label+ -> (Ptr ImVec2) -- ^ size+ -> Colormap -- ^ cmap+ -> IO CBool++colormapButton+ :: CString -- ^ label+ -> ImVec2 -- ^ size+ -> Colormap -- ^ cmap+ -> IO CBool+colormapButton label size cmap =+ with size $ \sizePtr -> c_colormapButton label sizePtr cmap++-- C: void ImPlot::ColormapIcon(ImPlotColormap cmap)+foreign import capi unsafe "dcimgui_implot.h ImPlotColormapIcon"+ colormapIcon+ :: Colormap -- ^ cmap+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotColormapScale_wrap"+ c_colormapScale+ :: CString -- ^ label+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> (Ptr ImVec2) -- ^ size+ -> CString -- ^ format+ -> ColormapScaleFlags -- ^ flags+ -> Colormap -- ^ cmap+ -> IO ()++colormapScale+ :: CString -- ^ label+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> ImVec2 -- ^ size+ -> CString -- ^ format+ -> ColormapScaleFlags -- ^ flags+ -> Colormap -- ^ cmap+ -> IO ()+colormapScale label scale_min scale_max size format flags cmap =+ with size $ \sizePtr -> c_colormapScale label scale_min scale_max sizePtr format flags cmap++-- C: bool ImPlot::ColormapSlider(const char* label, float* t, ImVec4* out, const char* format, ImPlotColormap cmap)+foreign import capi unsafe "dcimgui_implot.h ImPlotColormapSlider"+ colormapSlider+ :: CString -- ^ label+ -> (Ptr Float) -- ^ t+ -> (Ptr ImVec4) -- ^ out+ -> CString -- ^ format+ -> Colormap -- ^ cmap+ -> IO CBool++-- C: ImPlotContext* ImPlot::CreateContext()+foreign import capi unsafe "dcimgui_implot.h ImPlotCreateContext"+ createContext :: IO (Ptr Context)++-- C: void ImPlot::DestroyContext(ImPlotContext* ctx)+foreign import capi unsafe "dcimgui_implot.h ImPlotDestroyContext"+ destroyContext+ :: (Ptr Context) -- ^ ctx+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotDragLineX_wrap"+ c_dragLineX+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x+ -> (Ptr ImVec4) -- ^ col+ -> Float -- ^ thickness+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool++dragLineX+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x+ -> ImVec4 -- ^ col+ -> Float -- ^ thickness+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool+dragLineX id_ x col thickness flags out_clicked out_hovered out_held =+ with col $ \colPtr -> c_dragLineX id_ x colPtr thickness flags out_clicked out_hovered out_held++foreign import capi unsafe "DearImGuiWrappers.h ImPlotDragLineY_wrap"+ c_dragLineY+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> Float -- ^ thickness+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool++dragLineY+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ y+ -> ImVec4 -- ^ col+ -> Float -- ^ thickness+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool+dragLineY id_ y col thickness flags out_clicked out_hovered out_held =+ with col $ \colPtr -> c_dragLineY id_ y colPtr thickness flags out_clicked out_hovered out_held++foreign import capi unsafe "DearImGuiWrappers.h ImPlotDragPoint_wrap"+ c_dragPoint+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x+ -> (Ptr Double) -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> Float -- ^ size+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool++dragPoint+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x+ -> (Ptr Double) -- ^ y+ -> ImVec4 -- ^ col+ -> Float -- ^ size+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool+dragPoint id_ x y col size flags out_clicked out_hovered out_held =+ with col $ \colPtr -> c_dragPoint id_ x y colPtr size flags out_clicked out_hovered out_held++foreign import capi unsafe "DearImGuiWrappers.h ImPlotDragRect_wrap"+ c_dragRect+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x1+ -> (Ptr Double) -- ^ y1+ -> (Ptr Double) -- ^ x2+ -> (Ptr Double) -- ^ y2+ -> (Ptr ImVec4) -- ^ col+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool++dragRect+ :: CInt -- ^ id+ -> (Ptr Double) -- ^ x1+ -> (Ptr Double) -- ^ y1+ -> (Ptr Double) -- ^ x2+ -> (Ptr Double) -- ^ y2+ -> ImVec4 -- ^ col+ -> DragToolFlags -- ^ flags+ -> (Ptr CBool) -- ^ out_clicked+ -> (Ptr CBool) -- ^ out_hovered+ -> (Ptr CBool) -- ^ out_held+ -> IO CBool+dragRect id_ x1 y1 x2 y2 col flags out_clicked out_hovered out_held =+ with col $ \colPtr -> c_dragRect id_ x1 y1 x2 y2 colPtr flags out_clicked out_hovered out_held++-- C: void ImPlot::EndAlignedPlots()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndAlignedPlots"+ endAlignedPlots :: IO ()++-- C: void ImPlot::EndDragDropSource()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndDragDropSource"+ endDragDropSource :: IO ()++-- C: void ImPlot::EndDragDropTarget()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndDragDropTarget"+ endDragDropTarget :: IO ()++-- C: void ImPlot::EndLegendPopup()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndLegendPopup"+ endLegendPopup :: IO ()++-- C: void ImPlot::EndPlot()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndPlot"+ endPlot :: IO ()++-- C: void ImPlot::EndSubplots()+foreign import capi unsafe "dcimgui_implot.h ImPlotEndSubplots"+ endSubplots :: IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotGetColormapColor_wrap"+ c_getColormapColor+ :: CInt -- ^ idx+ -> Colormap -- ^ cmap+ -> (Ptr ImVec4) -- ^ out+ -> IO ()++getColormapColor+ :: CInt -- ^ idx+ -> Colormap -- ^ cmap+ -> IO ImVec4+getColormapColor idx cmap =+ alloca $ \outPtr -> c_getColormapColor idx cmap outPtr >> peek outPtr++-- C: int ImPlot::GetColormapCount()+foreign import capi unsafe "dcimgui_implot.h ImPlotGetColormapCount"+ getColormapCount :: IO CInt++-- C: ImPlotColormap ImPlot::GetColormapIndex(const char* name)+foreign import capi unsafe "dcimgui_implot.h ImPlotGetColormapIndex"+ getColormapIndex+ :: CString -- ^ name+ -> IO Colormap++-- C: const char* ImPlot::GetColormapName(ImPlotColormap cmap)+foreign import capi unsafe "dcimgui_implot.h ImPlotGetColormapName"+ getColormapName+ :: Colormap -- ^ cmap+ -> IO CString++-- C: int ImPlot::GetColormapSize(ImPlotColormap cmap)+foreign import capi unsafe "dcimgui_implot.h ImPlotGetColormapSize"+ getColormapSize+ :: Colormap -- ^ cmap+ -> IO CInt++-- C: ImPlotContext* ImPlot::GetCurrentContext()+foreign import capi unsafe "dcimgui_implot.h ImPlotGetCurrentContext"+ getCurrentContext :: IO (Ptr Context)++-- C: ImPlotInputMap* ImPlot::GetInputMap()+foreign import capi unsafe "dcimgui_implot.h ImPlotGetInputMap"+ getInputMap :: IO (Ptr InputMap)++foreign import capi unsafe "DearImGuiWrappers.h ImPlotGetLastItemColor_wrap"+ c_getLastItemColor+ :: (Ptr ImVec4) -- ^ out+ -> IO ()++getLastItemColor :: IO ImVec4+getLastItemColor =+ alloca $ \outPtr -> c_getLastItemColor outPtr >> peek outPtr++-- C: const char* ImPlot::GetMarkerName(ImPlotMarker idx)+foreign import capi unsafe "dcimgui_implot.h ImPlotGetMarkerName"+ getMarkerName+ :: Marker -- ^ idx+ -> IO CString++-- C: ImDrawList* ImPlot::GetPlotDrawList()+foreign import capi unsafe "dcimgui_implot.h ImPlotGetPlotDrawList"+ getPlotDrawList :: IO (Ptr ImDrawList)++foreign import capi unsafe "DearImGuiWrappers.h ImPlotGetPlotPos_wrap"+ c_getPlotPos+ :: (Ptr ImVec2) -- ^ out+ -> IO ()++getPlotPos :: IO ImVec2+getPlotPos =+ alloca $ \outPtr -> c_getPlotPos outPtr >> peek outPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotGetPlotSize_wrap"+ c_getPlotSize+ :: (Ptr ImVec2) -- ^ out+ -> IO ()++getPlotSize :: IO ImVec2+getPlotSize =+ alloca $ \outPtr -> c_getPlotSize outPtr >> peek outPtr++-- C: ImPlotStyle* ImPlot::GetStyle()+foreign import capi unsafe "dcimgui_implot.h ImPlotGetStyle"+ getStyle :: IO (Ptr Style)++-- C: const char* ImPlot::GetStyleColorName(ImPlotCol idx)+foreign import capi unsafe "dcimgui_implot.h ImPlotGetStyleColorName"+ getStyleColorName+ :: Col -- ^ idx+ -> IO CString++-- C: void ImPlot::HideNextItem(bool hidden, ImPlotCond cond)+foreign import capi unsafe "dcimgui_implot.h ImPlotHideNextItem"+ hideNextItem+ :: CBool -- ^ hidden+ -> Cond -- ^ cond+ -> IO ()++-- C: bool ImPlot::IsAxisHovered(ImAxis axis)+foreign import capi unsafe "dcimgui_implot.h ImPlotIsAxisHovered"+ isAxisHovered+ :: ImAxis -- ^ axis+ -> IO CBool++-- C: bool ImPlot::IsLegendEntryHovered(const char* label_id)+foreign import capi unsafe "dcimgui_implot.h ImPlotIsLegendEntryHovered"+ isLegendEntryHovered+ :: CString -- ^ label_id+ -> IO CBool++-- C: bool ImPlot::IsPlotHovered()+foreign import capi unsafe "dcimgui_implot.h ImPlotIsPlotHovered"+ isPlotHovered :: IO CBool++-- C: bool ImPlot::IsPlotSelected()+foreign import capi unsafe "dcimgui_implot.h ImPlotIsPlotSelected"+ isPlotSelected :: IO CBool++-- C: bool ImPlot::IsSubplotsHovered()+foreign import capi unsafe "dcimgui_implot.h ImPlotIsSubplotsHovered"+ isSubplotsHovered :: IO CBool++foreign import capi unsafe "DearImGuiWrappers.h ImPlotItemIcon_wrap"+ c_itemIcon+ :: (Ptr ImVec4) -- ^ col+ -> IO ()++itemIcon+ :: ImVec4 -- ^ col+ -> IO ()+itemIcon col =+ with col $ \colPtr -> c_itemIcon colPtr++-- C: void ImPlot::ItemIcon(ImU32 col)+foreign import capi unsafe "dcimgui_implot.h ImPlotItemIconImU32"+ itemIconImU32+ :: ImU32 -- ^ col+ -> IO ()++-- C: void ImPlot::MapInputDefault(ImPlotInputMap* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotMapInputDefault"+ mapInputDefault+ :: (Ptr InputMap) -- ^ dst+ -> IO ()++-- C: void ImPlot::MapInputReverse(ImPlotInputMap* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotMapInputReverse"+ mapInputReverse+ :: (Ptr InputMap) -- ^ dst+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotNextColormapColor_wrap"+ c_nextColormapColor+ :: (Ptr ImVec4) -- ^ out+ -> IO ()++nextColormapColor :: IO ImVec4+nextColormapColor =+ alloca $ \outPtr -> c_nextColormapColor outPtr >> peek outPtr++-- C: ImPlotMarker ImPlot::NextMarker()+foreign import capi unsafe "dcimgui_implot.h ImPlotNextMarker"+ nextMarker :: IO Marker++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_F32_wrap"+ c_plotBarGroups_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_F32 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_F32 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_F64_wrap"+ c_plotBarGroups_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_F64 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_F64 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_S16_wrap"+ c_plotBarGroups_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_S16 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_S16 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_S32_wrap"+ c_plotBarGroups_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_S32 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_S32 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_S64_wrap"+ c_plotBarGroups_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_S64 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_S64 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_S8_wrap"+ c_plotBarGroups_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_S8 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_S8 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_U16_wrap"+ c_plotBarGroups_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_U16 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_U16 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_U32_wrap"+ c_plotBarGroups_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_U32 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_U32 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_U64_wrap"+ c_plotBarGroups_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_U64 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_U64 label_ids values item_count group_count group_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBarGroups_U8_wrap"+ c_plotBarGroups_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarGroups_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ item_count+ -> CInt -- ^ group_count+ -> Double -- ^ group_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBarGroups_U8 label_ids values item_count group_count group_size shift spec =+ with spec $ \specPtr -> c_plotBarGroups_U8 label_ids values item_count group_count group_size shift specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotBarsG_wrap"+ c_plotBarsG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBarsG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBarsG label_id getter data_ count bar_size spec =+ with spec $ \specPtr -> c_plotBarsG label_id getter data_ count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_F32_wrap"+ c_plotBars_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_F32 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_F32 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_F64_wrap"+ c_plotBars_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_F64 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_F64 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_S16_wrap"+ c_plotBars_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_S16 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_S16 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_S32_wrap"+ c_plotBars_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_S32 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_S32 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_S64_wrap"+ c_plotBars_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_S64 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_S64 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_S8_wrap"+ c_plotBars_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_S8 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_S8 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_U16_wrap"+ c_plotBars_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_U16 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_U16 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_U32_wrap"+ c_plotBars_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_U32 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_U32 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_U64_wrap"+ c_plotBars_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_U64 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_U64 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_U8_wrap"+ c_plotBars_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Double -- ^ shift+ -> Spec -- ^ spec+ -> IO ()+plotBars_U8 label_id values count bar_size shift spec =+ with spec $ \specPtr -> c_plotBars_U8 label_id values count bar_size shift specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_F32_wrap"+ c_plotBars_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_F32 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_F32 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_F64_wrap"+ c_plotBars_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_F64 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_F64 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_S16_wrap"+ c_plotBars_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_S16 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_S16 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_S32_wrap"+ c_plotBars_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_S32 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_S32 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_S64_wrap"+ c_plotBars_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_S64 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_S64 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_S8_wrap"+ c_plotBars_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_S8 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_S8 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_U16_wrap"+ c_plotBars_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_U16 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_U16 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_U32_wrap"+ c_plotBars_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_U32 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_U32 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_U64_wrap"+ c_plotBars_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_U64 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_U64 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBars_xy_U8_wrap"+ c_plotBars_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBars_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ bar_size+ -> Spec -- ^ spec+ -> IO ()+plotBars_xy_U8 label_id xs ys count bar_size spec =+ with spec $ \specPtr -> c_plotBars_xy_U8 label_id xs ys count bar_size specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_F32_wrap"+ c_plotBubbles_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> (Ptr Float) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> (Ptr Float) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_F32 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_F32 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_F64_wrap"+ c_plotBubbles_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> (Ptr Double) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> (Ptr Double) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_F64 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_F64 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_S16_wrap"+ c_plotBubbles_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> (Ptr ImS16) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> (Ptr ImS16) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_S16 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_S16 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_S32_wrap"+ c_plotBubbles_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> (Ptr ImS32) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> (Ptr ImS32) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_S32 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_S32 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_S64_wrap"+ c_plotBubbles_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> (Ptr ImS64) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> (Ptr ImS64) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_S64 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_S64 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_S8_wrap"+ c_plotBubbles_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> (Ptr ImS8) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> (Ptr ImS8) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_S8 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_S8 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_U16_wrap"+ c_plotBubbles_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> (Ptr ImU16) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> (Ptr ImU16) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_U16 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_U16 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_U32_wrap"+ c_plotBubbles_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> (Ptr ImU32) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> (Ptr ImU32) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_U32 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_U32 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_U64_wrap"+ c_plotBubbles_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> (Ptr ImU64) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> (Ptr ImU64) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_U64 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_U64 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_U8_wrap"+ c_plotBubbles_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> (Ptr ImU8) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> (Ptr ImU8) -- ^ szs+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_U8 label_id values szs count xscale xstart spec =+ with spec $ \specPtr -> c_plotBubbles_U8 label_id values szs count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_F32_wrap"+ c_plotBubbles_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_F32 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_F32 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_F64_wrap"+ c_plotBubbles_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_F64 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_F64 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_S16_wrap"+ c_plotBubbles_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_S16 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_S16 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_S32_wrap"+ c_plotBubbles_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_S32 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_S32 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_S64_wrap"+ c_plotBubbles_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_S64 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_S64 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_S8_wrap"+ c_plotBubbles_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_S8 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_S8 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_U16_wrap"+ c_plotBubbles_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_U16 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_U16 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_U32_wrap"+ c_plotBubbles_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_U32 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_U32 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_U64_wrap"+ c_plotBubbles_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_U64 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_U64 label_id xs ys szs count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotBubbles_xy_U8_wrap"+ c_plotBubbles_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ szs+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotBubbles_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ szs+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotBubbles_xy_U8 label_id xs ys szs count spec =+ with spec $ \specPtr -> c_plotBubbles_xy_U8 label_id xs ys szs count specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotDigitalG_wrap"+ c_plotDigitalG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigitalG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigitalG label_id getter data_ count spec =+ with spec $ \specPtr -> c_plotDigitalG label_id getter data_ count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_F32_wrap"+ c_plotDigital_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_F32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_F32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_F64_wrap"+ c_plotDigital_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_F64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_F64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_S16_wrap"+ c_plotDigital_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_S16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_S16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_S32_wrap"+ c_plotDigital_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_S32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_S32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_S64_wrap"+ c_plotDigital_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_S64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_S64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_S8_wrap"+ c_plotDigital_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_S8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_S8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_U16_wrap"+ c_plotDigital_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_U16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_U16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_U32_wrap"+ c_plotDigital_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_U32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_U32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_U64_wrap"+ c_plotDigital_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_U64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_U64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDigital_U8_wrap"+ c_plotDigital_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDigital_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotDigital_U8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotDigital_U8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotDummy_wrap"+ c_plotDummy+ :: CString -- ^ label_id+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotDummy+ :: CString -- ^ label_id+ -> Spec -- ^ spec+ -> IO ()+plotDummy label_id spec =+ with spec $ \specPtr -> c_plotDummy label_id specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_F32_wrap"+ c_plotErrorBars_xye_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_F32 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_F32 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_F64_wrap"+ c_plotErrorBars_xye_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_F64 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_F64 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_S16_wrap"+ c_plotErrorBars_xye_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_S16 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_S16 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_S32_wrap"+ c_plotErrorBars_xye_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_S32 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_S32 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_S64_wrap"+ c_plotErrorBars_xye_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_S64 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_S64 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_S8_wrap"+ c_plotErrorBars_xye_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_S8 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_S8 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_U16_wrap"+ c_plotErrorBars_xye_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_U16 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_U16 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_U32_wrap"+ c_plotErrorBars_xye_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_U32 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_U32 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_U64_wrap"+ c_plotErrorBars_xye_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_U64 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_U64 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xye_U8_wrap"+ c_plotErrorBars_xye_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ err+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xye_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ err+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xye_U8 label_id xs ys err count spec =+ with spec $ \specPtr -> c_plotErrorBars_xye_U8 label_id xs ys err count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_F32_wrap"+ c_plotErrorBars_xynp_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ neg+ -> (Ptr Float) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> (Ptr Float) -- ^ neg+ -> (Ptr Float) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_F32 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_F32 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_F64_wrap"+ c_plotErrorBars_xynp_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ neg+ -> (Ptr Double) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> (Ptr Double) -- ^ neg+ -> (Ptr Double) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_F64 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_F64 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_S16_wrap"+ c_plotErrorBars_xynp_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ neg+ -> (Ptr ImS16) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> (Ptr ImS16) -- ^ neg+ -> (Ptr ImS16) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_S16 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_S16 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_S32_wrap"+ c_plotErrorBars_xynp_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ neg+ -> (Ptr ImS32) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> (Ptr ImS32) -- ^ neg+ -> (Ptr ImS32) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_S32 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_S32 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_S64_wrap"+ c_plotErrorBars_xynp_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ neg+ -> (Ptr ImS64) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> (Ptr ImS64) -- ^ neg+ -> (Ptr ImS64) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_S64 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_S64 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_S8_wrap"+ c_plotErrorBars_xynp_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ neg+ -> (Ptr ImS8) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> (Ptr ImS8) -- ^ neg+ -> (Ptr ImS8) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_S8 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_S8 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_U16_wrap"+ c_plotErrorBars_xynp_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ neg+ -> (Ptr ImU16) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> (Ptr ImU16) -- ^ neg+ -> (Ptr ImU16) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_U16 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_U16 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_U32_wrap"+ c_plotErrorBars_xynp_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ neg+ -> (Ptr ImU32) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> (Ptr ImU32) -- ^ neg+ -> (Ptr ImU32) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_U32 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_U32 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_U64_wrap"+ c_plotErrorBars_xynp_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ neg+ -> (Ptr ImU64) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> (Ptr ImU64) -- ^ neg+ -> (Ptr ImU64) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_U64 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_U64 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotErrorBars_xynp_U8_wrap"+ c_plotErrorBars_xynp_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ neg+ -> (Ptr ImU8) -- ^ pos+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotErrorBars_xynp_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> (Ptr ImU8) -- ^ neg+ -> (Ptr ImU8) -- ^ pos+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotErrorBars_xynp_U8 label_id xs ys neg pos count spec =+ with spec $ \specPtr -> c_plotErrorBars_xynp_U8 label_id xs ys neg pos count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_F32_wrap"+ c_plotHeatmap_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_F32 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_F32 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_F64_wrap"+ c_plotHeatmap_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_F64 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_F64 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_S16_wrap"+ c_plotHeatmap_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_S16 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_S16 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_S32_wrap"+ c_plotHeatmap_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_S32 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_S32 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_S64_wrap"+ c_plotHeatmap_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_S64 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_S64 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_S8_wrap"+ c_plotHeatmap_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_S8 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_S8 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_U16_wrap"+ c_plotHeatmap_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_U16 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_U16 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_U32_wrap"+ c_plotHeatmap_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_U32 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_U32 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_U64_wrap"+ c_plotHeatmap_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_U64 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_U64 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHeatmap_U8_wrap"+ c_plotHeatmap_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotHeatmap_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ rows+ -> CInt -- ^ cols+ -> Double -- ^ scale_min+ -> Double -- ^ scale_max+ -> CString -- ^ label_fmt+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> Spec -- ^ spec+ -> IO ()+plotHeatmap_U8 label_id values rows cols scale_min scale_max label_fmt bounds_min bounds_max spec =+ with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with spec $ \specPtr -> c_plotHeatmap_U8 label_id values rows cols scale_min scale_max label_fmt bounds_minPtr bounds_maxPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_F32_wrap"+ c_plotHistogram2D_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_F32 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_F32 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_F64_wrap"+ c_plotHistogram2D_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_F64 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_F64 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_S16_wrap"+ c_plotHistogram2D_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_S16 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_S16 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_S32_wrap"+ c_plotHistogram2D_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_S32 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_S32 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_S64_wrap"+ c_plotHistogram2D_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_S64 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_S64 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_S8_wrap"+ c_plotHistogram2D_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_S8 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_S8 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_U16_wrap"+ c_plotHistogram2D_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_U16 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_U16 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_U32_wrap"+ c_plotHistogram2D_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_U32 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_U32 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_U64_wrap"+ c_plotHistogram2D_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_U64 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_U64 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram2D_U8_wrap"+ c_plotHistogram2D_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> (Ptr Rect) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram2D_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> CInt -- ^ x_bins+ -> CInt -- ^ y_bins+ -> Rect -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram2D_U8 label_id xs ys count x_bins y_bins range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram2D_U8 label_id xs ys count x_bins y_bins rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_F32_wrap"+ c_plotHistogram_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_F32 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_F32 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_F64_wrap"+ c_plotHistogram_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_F64 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_F64 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_S16_wrap"+ c_plotHistogram_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_S16 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_S16 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_S32_wrap"+ c_plotHistogram_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_S32 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_S32 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_S64_wrap"+ c_plotHistogram_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_S64 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_S64 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_S8_wrap"+ c_plotHistogram_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_S8 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_S8 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_U16_wrap"+ c_plotHistogram_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_U16 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_U16 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_U32_wrap"+ c_plotHistogram_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_U32 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_U32 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_U64_wrap"+ c_plotHistogram_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_U64 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_U64 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotHistogram_U8_wrap"+ c_plotHistogram_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> (Ptr Range) -- ^ range+ -> (Ptr Spec) -- ^ spec+ -> IO Double++plotHistogram_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> CInt -- ^ bins+ -> Double -- ^ bar_scale+ -> Range -- ^ range+ -> Spec -- ^ spec+ -> IO Double+plotHistogram_U8 label_id values count bins bar_scale range spec =+ with range $ \rangePtr -> with spec $ \specPtr -> c_plotHistogram_U8 label_id values count bins bar_scale rangePtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotImage_wrap"+ c_plotImage+ :: CString -- ^ label_id+ -> (Ptr ImTextureRef) -- ^ tex_ref+ -> (Ptr Point) -- ^ bounds_min+ -> (Ptr Point) -- ^ bounds_max+ -> (Ptr ImVec2) -- ^ uv0+ -> (Ptr ImVec2) -- ^ uv1+ -> (Ptr ImVec4) -- ^ tint_col+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotImage+ :: CString -- ^ label_id+ -> ImTextureRef -- ^ tex_ref+ -> Point -- ^ bounds_min+ -> Point -- ^ bounds_max+ -> ImVec2 -- ^ uv0+ -> ImVec2 -- ^ uv1+ -> ImVec4 -- ^ tint_col+ -> Spec -- ^ spec+ -> IO ()+plotImage label_id tex_ref bounds_min bounds_max uv0 uv1 tint_col spec =+ with tex_ref $ \tex_refPtr -> with bounds_min $ \bounds_minPtr -> with bounds_max $ \bounds_maxPtr -> with uv0 $ \uv0Ptr -> with uv1 $ \uv1Ptr -> with tint_col $ \tint_colPtr -> with spec $ \specPtr -> c_plotImage label_id tex_refPtr bounds_minPtr bounds_maxPtr uv0Ptr uv1Ptr tint_colPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_F32_wrap"+ c_plotInfLines_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_F32 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_F32 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_F64_wrap"+ c_plotInfLines_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_F64 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_F64 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_S16_wrap"+ c_plotInfLines_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_S16 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_S16 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_S32_wrap"+ c_plotInfLines_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_S32 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_S32 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_S64_wrap"+ c_plotInfLines_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_S64 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_S64 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_S8_wrap"+ c_plotInfLines_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_S8 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_S8 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_U16_wrap"+ c_plotInfLines_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_U16 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_U16 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_U32_wrap"+ c_plotInfLines_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_U32 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_U32 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_U64_wrap"+ c_plotInfLines_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_U64 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_U64 label_id values count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotInfLines_U8_wrap"+ c_plotInfLines_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotInfLines_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotInfLines_U8 label_id values count spec =+ with spec $ \specPtr -> c_plotInfLines_U8 label_id values count specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotLineG_wrap"+ c_plotLineG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLineG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLineG label_id getter data_ count spec =+ with spec $ \specPtr -> c_plotLineG label_id getter data_ count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_F32_wrap"+ c_plotLine_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_F32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_F32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_F64_wrap"+ c_plotLine_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_F64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_F64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_S16_wrap"+ c_plotLine_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_S16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_S16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_S32_wrap"+ c_plotLine_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_S32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_S32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_S64_wrap"+ c_plotLine_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_S64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_S64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_S8_wrap"+ c_plotLine_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_S8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_S8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_U16_wrap"+ c_plotLine_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_U16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_U16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_U32_wrap"+ c_plotLine_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_U32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_U32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_U64_wrap"+ c_plotLine_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_U64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_U64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_U8_wrap"+ c_plotLine_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotLine_U8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotLine_U8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_F32_wrap"+ c_plotLine_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_F32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_F32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_F64_wrap"+ c_plotLine_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_F64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_F64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_S16_wrap"+ c_plotLine_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_S16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_S16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_S32_wrap"+ c_plotLine_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_S32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_S32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_S64_wrap"+ c_plotLine_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_S64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_S64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_S8_wrap"+ c_plotLine_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_S8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_S8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_U16_wrap"+ c_plotLine_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_U16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_U16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_U32_wrap"+ c_plotLine_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_U32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_U32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_U64_wrap"+ c_plotLine_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_U64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_U64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotLine_xy_U8_wrap"+ c_plotLine_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotLine_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotLine_xy_U8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotLine_xy_U8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_F32_wrap"+ c_plotPieChart_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_F32 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_F32 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_F64_wrap"+ c_plotPieChart_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_F64 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_F64 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_S16_wrap"+ c_plotPieChart_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_S16 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_S16 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_S32_wrap"+ c_plotPieChart_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_S32 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_S32 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_S64_wrap"+ c_plotPieChart_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_S64 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_S64 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_S8_wrap"+ c_plotPieChart_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_S8 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_S8 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_U16_wrap"+ c_plotPieChart_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_U16 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_U16 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_U32_wrap"+ c_plotPieChart_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_U32 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_U32 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_U64_wrap"+ c_plotPieChart_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_U64 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_U64 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPieChart_U8_wrap"+ c_plotPieChart_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> CString -- ^ label_fmt+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_U8 label_ids values count x y radius label_fmt angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_U8 label_ids values count x y radius label_fmt angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_F32_wrap"+ c_plotPieChart_fmt_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_F32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_F32 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_F32 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_F64_wrap"+ c_plotPieChart_fmt_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_F64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_F64 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_F64 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_S16_wrap"+ c_plotPieChart_fmt_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_S16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_S16 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_S16 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_S32_wrap"+ c_plotPieChart_fmt_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_S32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_S32 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_S32 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_S64_wrap"+ c_plotPieChart_fmt_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_S64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_S64 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_S64 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_S8_wrap"+ c_plotPieChart_fmt_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_S8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_S8 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_S8 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_U16_wrap"+ c_plotPieChart_fmt_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_U16+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_U16 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_U16 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_U32_wrap"+ c_plotPieChart_fmt_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_U32+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_U32 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_U32 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_U64_wrap"+ c_plotPieChart_fmt_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_U64+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_U64 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_U64 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotPieChart_fmt_U8_wrap"+ c_plotPieChart_fmt_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPieChart_fmt_U8+ :: (Ptr CString) -- ^ label_ids+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ x+ -> Double -- ^ y+ -> Double -- ^ radius+ -> Formatter -- ^ fmt+ -> (Ptr ()) -- ^ fmt_data+ -> Double -- ^ angle0+ -> Spec -- ^ spec+ -> IO ()+plotPieChart_fmt_U8 label_ids values count x y radius fmt fmt_data angle0 spec =+ with spec $ \specPtr -> c_plotPieChart_fmt_U8 label_ids values count x y radius fmt fmt_data angle0 specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_F32_wrap"+ c_plotPolygon_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_F32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_F32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_F64_wrap"+ c_plotPolygon_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_F64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_F64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_S16_wrap"+ c_plotPolygon_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_S16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_S16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_S32_wrap"+ c_plotPolygon_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_S32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_S32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_S64_wrap"+ c_plotPolygon_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_S64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_S64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_S8_wrap"+ c_plotPolygon_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_S8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_S8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_U16_wrap"+ c_plotPolygon_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_U16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_U16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_U32_wrap"+ c_plotPolygon_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_U32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_U32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_U64_wrap"+ c_plotPolygon_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_U64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_U64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotPolygon_U8_wrap"+ c_plotPolygon_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotPolygon_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotPolygon_U8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotPolygon_U8 label_id xs ys count specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotScatterG_wrap"+ c_plotScatterG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatterG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatterG label_id getter data_ count spec =+ with spec $ \specPtr -> c_plotScatterG label_id getter data_ count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_F32_wrap"+ c_plotScatter_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_F32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_F32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_F64_wrap"+ c_plotScatter_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_F64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_F64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_S16_wrap"+ c_plotScatter_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_S16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_S16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_S32_wrap"+ c_plotScatter_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_S32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_S32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_S64_wrap"+ c_plotScatter_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_S64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_S64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_S8_wrap"+ c_plotScatter_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_S8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_S8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_U16_wrap"+ c_plotScatter_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_U16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_U16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_U32_wrap"+ c_plotScatter_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_U32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_U32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_U64_wrap"+ c_plotScatter_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_U64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_U64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_U8_wrap"+ c_plotScatter_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotScatter_U8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotScatter_U8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_F32_wrap"+ c_plotScatter_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_F32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_F32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_F64_wrap"+ c_plotScatter_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_F64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_F64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_S16_wrap"+ c_plotScatter_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_S16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_S16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_S32_wrap"+ c_plotScatter_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_S32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_S32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_S64_wrap"+ c_plotScatter_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_S64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_S64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_S8_wrap"+ c_plotScatter_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_S8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_S8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_U16_wrap"+ c_plotScatter_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_U16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_U16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_U32_wrap"+ c_plotScatter_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_U32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_U32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_U64_wrap"+ c_plotScatter_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_U64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_U64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotScatter_xy_U8_wrap"+ c_plotScatter_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotScatter_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotScatter_xy_U8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotScatter_xy_U8 label_id xs ys count specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotShadedG_wrap"+ c_plotShadedG+ :: CString -- ^ label_id+ -> Getter -- ^ getter1+ -> (Ptr ()) -- ^ data1+ -> Getter -- ^ getter2+ -> (Ptr ()) -- ^ data2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShadedG+ :: CString -- ^ label_id+ -> Getter -- ^ getter1+ -> (Ptr ()) -- ^ data1+ -> Getter -- ^ getter2+ -> (Ptr ()) -- ^ data2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShadedG label_id getter1 data1 getter2 data2 count spec =+ with spec $ \specPtr -> c_plotShadedG label_id getter1 data1 getter2 data2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_F32_wrap"+ c_plotShaded_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_F32 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_F32 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_F64_wrap"+ c_plotShaded_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_F64 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_F64 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_S16_wrap"+ c_plotShaded_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_S16 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_S16 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_S32_wrap"+ c_plotShaded_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_S32 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_S32 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_S64_wrap"+ c_plotShaded_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_S64 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_S64 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_S8_wrap"+ c_plotShaded_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_S8 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_S8 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_U16_wrap"+ c_plotShaded_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_U16 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_U16 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_U32_wrap"+ c_plotShaded_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_U32 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_U32 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_U64_wrap"+ c_plotShaded_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_U64 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_U64 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_U8_wrap"+ c_plotShaded_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotShaded_U8 label_id values count yref xscale xstart spec =+ with spec $ \specPtr -> c_plotShaded_U8 label_id values count yref xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_F32_wrap"+ c_plotShaded_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_F32 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_F32 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_F64_wrap"+ c_plotShaded_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_F64 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_F64 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_S16_wrap"+ c_plotShaded_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_S16 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_S16 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_S32_wrap"+ c_plotShaded_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_S32 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_S32 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_S64_wrap"+ c_plotShaded_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_S64 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_S64 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_S8_wrap"+ c_plotShaded_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_S8 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_S8 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_U16_wrap"+ c_plotShaded_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_U16 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_U16 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_U32_wrap"+ c_plotShaded_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_U32 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_U32 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_U64_wrap"+ c_plotShaded_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_U64 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_U64 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xy_U8_wrap"+ c_plotShaded_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ yref+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xy_U8 label_id xs ys count yref spec =+ with spec $ \specPtr -> c_plotShaded_xy_U8 label_id xs ys count yref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_F32_wrap"+ c_plotShaded_xyy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys1+ -> (Ptr Float) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys1+ -> (Ptr Float) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_F32 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_F32 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_F64_wrap"+ c_plotShaded_xyy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys1+ -> (Ptr Double) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys1+ -> (Ptr Double) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_F64 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_F64 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_S16_wrap"+ c_plotShaded_xyy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys1+ -> (Ptr ImS16) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys1+ -> (Ptr ImS16) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_S16 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_S16 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_S32_wrap"+ c_plotShaded_xyy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys1+ -> (Ptr ImS32) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys1+ -> (Ptr ImS32) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_S32 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_S32 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_S64_wrap"+ c_plotShaded_xyy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys1+ -> (Ptr ImS64) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys1+ -> (Ptr ImS64) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_S64 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_S64 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_S8_wrap"+ c_plotShaded_xyy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys1+ -> (Ptr ImS8) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys1+ -> (Ptr ImS8) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_S8 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_S8 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_U16_wrap"+ c_plotShaded_xyy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys1+ -> (Ptr ImU16) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys1+ -> (Ptr ImU16) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_U16 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_U16 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_U32_wrap"+ c_plotShaded_xyy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys1+ -> (Ptr ImU32) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys1+ -> (Ptr ImU32) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_U32 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_U32 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_U64_wrap"+ c_plotShaded_xyy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys1+ -> (Ptr ImU64) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys1+ -> (Ptr ImU64) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_U64 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_U64 label_id xs ys1 ys2 count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotShaded_xyy_U8_wrap"+ c_plotShaded_xyy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys1+ -> (Ptr ImU8) -- ^ ys2+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotShaded_xyy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys1+ -> (Ptr ImU8) -- ^ ys2+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotShaded_xyy_U8 label_id xs ys1 ys2 count spec =+ with spec $ \specPtr -> c_plotShaded_xyy_U8 label_id xs ys1 ys2 count specPtr++foreign import capi safe "DearImGuiWrappers.h ImPlotPlotStairsG_wrap"+ c_plotStairsG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairsG+ :: CString -- ^ label_id+ -> Getter -- ^ getter+ -> (Ptr ()) -- ^ data+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairsG label_id getter data_ count spec =+ with spec $ \specPtr -> c_plotStairsG label_id getter data_ count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_F32_wrap"+ c_plotStairs_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_F32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_F32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_F64_wrap"+ c_plotStairs_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_F64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_F64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_S16_wrap"+ c_plotStairs_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_S16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_S16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_S32_wrap"+ c_plotStairs_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_S32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_S32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_S64_wrap"+ c_plotStairs_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_S64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_S64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_S8_wrap"+ c_plotStairs_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_S8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_S8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_U16_wrap"+ c_plotStairs_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_U16 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_U16 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_U32_wrap"+ c_plotStairs_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_U32 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_U32 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_U64_wrap"+ c_plotStairs_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_U64 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_U64 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_U8_wrap"+ c_plotStairs_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ xscale+ -> Double -- ^ xstart+ -> Spec -- ^ spec+ -> IO ()+plotStairs_U8 label_id values count xscale xstart spec =+ with spec $ \specPtr -> c_plotStairs_U8 label_id values count xscale xstart specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_F32_wrap"+ c_plotStairs_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_F32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_F32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_F64_wrap"+ c_plotStairs_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_F64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_F64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_S16_wrap"+ c_plotStairs_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_S16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_S16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_S32_wrap"+ c_plotStairs_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_S32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_S32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_S64_wrap"+ c_plotStairs_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_S64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_S64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_S8_wrap"+ c_plotStairs_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_S8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_S8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_U16_wrap"+ c_plotStairs_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_U16 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_U16 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_U32_wrap"+ c_plotStairs_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_U32 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_U32 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_U64_wrap"+ c_plotStairs_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_U64 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_U64 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStairs_xy_U8_wrap"+ c_plotStairs_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStairs_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Spec -- ^ spec+ -> IO ()+plotStairs_xy_U8 label_id xs ys count spec =+ with spec $ \specPtr -> c_plotStairs_xy_U8 label_id xs ys count specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_F32_wrap"+ c_plotStems_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_F32 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_F32 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_F64_wrap"+ c_plotStems_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_F64 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_F64 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_S16_wrap"+ c_plotStems_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_S16 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_S16 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_S32_wrap"+ c_plotStems_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_S32 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_S32 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_S64_wrap"+ c_plotStems_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_S64 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_S64 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_S8_wrap"+ c_plotStems_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_S8 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_S8 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_U16_wrap"+ c_plotStems_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_U16 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_U16 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_U32_wrap"+ c_plotStems_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_U32 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_U32 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_U64_wrap"+ c_plotStems_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_U64 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_U64 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_U8_wrap"+ c_plotStems_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ values+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Double -- ^ scale+ -> Double -- ^ start+ -> Spec -- ^ spec+ -> IO ()+plotStems_U8 label_id values count ref scale start spec =+ with spec $ \specPtr -> c_plotStems_U8 label_id values count ref scale start specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_F32_wrap"+ c_plotStems_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_F32+ :: CString -- ^ label_id+ -> (Ptr Float) -- ^ xs+ -> (Ptr Float) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_F32 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_F32 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_F64_wrap"+ c_plotStems_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_F64+ :: CString -- ^ label_id+ -> (Ptr Double) -- ^ xs+ -> (Ptr Double) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_F64 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_F64 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_S16_wrap"+ c_plotStems_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_S16+ :: CString -- ^ label_id+ -> (Ptr ImS16) -- ^ xs+ -> (Ptr ImS16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_S16 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_S16 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_S32_wrap"+ c_plotStems_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_S32+ :: CString -- ^ label_id+ -> (Ptr ImS32) -- ^ xs+ -> (Ptr ImS32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_S32 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_S32 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_S64_wrap"+ c_plotStems_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_S64+ :: CString -- ^ label_id+ -> (Ptr ImS64) -- ^ xs+ -> (Ptr ImS64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_S64 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_S64 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_S8_wrap"+ c_plotStems_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_S8+ :: CString -- ^ label_id+ -> (Ptr ImS8) -- ^ xs+ -> (Ptr ImS8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_S8 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_S8 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_U16_wrap"+ c_plotStems_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_U16+ :: CString -- ^ label_id+ -> (Ptr ImU16) -- ^ xs+ -> (Ptr ImU16) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_U16 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_U16 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_U32_wrap"+ c_plotStems_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_U32+ :: CString -- ^ label_id+ -> (Ptr ImU32) -- ^ xs+ -> (Ptr ImU32) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_U32 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_U32 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_U64_wrap"+ c_plotStems_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_U64+ :: CString -- ^ label_id+ -> (Ptr ImU64) -- ^ xs+ -> (Ptr ImU64) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_U64 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_U64 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotStems_xy_U8_wrap"+ c_plotStems_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotStems_xy_U8+ :: CString -- ^ label_id+ -> (Ptr ImU8) -- ^ xs+ -> (Ptr ImU8) -- ^ ys+ -> CInt -- ^ count+ -> Double -- ^ ref+ -> Spec -- ^ spec+ -> IO ()+plotStems_xy_U8 label_id xs ys count ref spec =+ with spec $ \specPtr -> c_plotStems_xy_U8 label_id xs ys count ref specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotText_wrap"+ c_plotText+ :: CString -- ^ text+ -> Double -- ^ x+ -> Double -- ^ y+ -> (Ptr ImVec2) -- ^ pix_offset+ -> (Ptr Spec) -- ^ spec+ -> IO ()++plotText+ :: CString -- ^ text+ -> Double -- ^ x+ -> Double -- ^ y+ -> ImVec2 -- ^ pix_offset+ -> Spec -- ^ spec+ -> IO ()+plotText text x y pix_offset spec =+ with pix_offset $ \pix_offsetPtr -> with spec $ \specPtr -> c_plotText text x y pix_offsetPtr specPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotToPixels_wrap"+ c_plotToPixels+ :: (Ptr Point) -- ^ plt+ -> ImAxis -- ^ x_axis+ -> ImAxis -- ^ y_axis+ -> (Ptr ImVec2) -- ^ out+ -> IO ()++plotToPixels+ :: Point -- ^ plt+ -> ImAxis -- ^ x_axis+ -> ImAxis -- ^ y_axis+ -> IO ImVec2+plotToPixels plt x_axis y_axis =+ with plt $ \pltPtr -> alloca $ \outPtr -> c_plotToPixels pltPtr x_axis y_axis outPtr >> peek outPtr++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPlotToPixelsDouble_wrap"+ c_plotToPixelsDouble+ :: Double -- ^ x+ -> Double -- ^ y+ -> ImAxis -- ^ x_axis+ -> ImAxis -- ^ y_axis+ -> (Ptr ImVec2) -- ^ out+ -> IO ()++plotToPixelsDouble+ :: Double -- ^ x+ -> Double -- ^ y+ -> ImAxis -- ^ x_axis+ -> ImAxis -- ^ y_axis+ -> IO ImVec2+plotToPixelsDouble x y x_axis y_axis =+ alloca $ \outPtr -> c_plotToPixelsDouble x y x_axis y_axis outPtr >> peek outPtr++-- C: void ImPlot::PopColormap(int count)+foreign import capi unsafe "dcimgui_implot.h ImPlotPopColormap"+ popColormap+ :: CInt -- ^ count+ -> IO ()++-- C: void ImPlot::PopPlotClipRect()+foreign import capi unsafe "dcimgui_implot.h ImPlotPopPlotClipRect"+ popPlotClipRect :: IO ()++-- C: void ImPlot::PopStyleColor(int count)+foreign import capi unsafe "dcimgui_implot.h ImPlotPopStyleColor"+ popStyleColor+ :: CInt -- ^ count+ -> IO ()++-- C: void ImPlot::PopStyleVar(int count)+foreign import capi unsafe "dcimgui_implot.h ImPlotPopStyleVar"+ popStyleVar+ :: CInt -- ^ count+ -> IO ()++-- C: void ImPlot::PushColormap(ImPlotColormap cmap)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushColormap"+ pushColormap+ :: Colormap -- ^ cmap+ -> IO ()++-- C: void ImPlot::PushColormap(const char* name)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushColormapStr"+ pushColormapStr+ :: CString -- ^ name+ -> IO ()++-- C: void ImPlot::PushPlotClipRect(float expand)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushPlotClipRect"+ pushPlotClipRect+ :: Float -- ^ expand+ -> IO ()++-- C: void ImPlot::PushStyleColor(ImPlotCol idx, ImU32 col)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushStyleColor"+ pushStyleColor+ :: Col -- ^ idx+ -> ImU32 -- ^ col+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPushStyleColorImVec4_wrap"+ c_pushStyleColorImVec4+ :: Col -- ^ idx+ -> (Ptr ImVec4) -- ^ col+ -> IO ()++pushStyleColorImVec4+ :: Col -- ^ idx+ -> ImVec4 -- ^ col+ -> IO ()+pushStyleColorImVec4 idx col =+ with col $ \colPtr -> c_pushStyleColorImVec4 idx colPtr++-- C: void ImPlot::PushStyleVar(ImPlotStyleVar idx, float val)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushStyleVar"+ pushStyleVar+ :: StyleVar -- ^ idx+ -> Float -- ^ val+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPushStyleVarImVec2_wrap"+ c_pushStyleVarImVec2+ :: StyleVar -- ^ idx+ -> (Ptr ImVec2) -- ^ val+ -> IO ()++pushStyleVarImVec2+ :: StyleVar -- ^ idx+ -> ImVec2 -- ^ val+ -> IO ()+pushStyleVarImVec2 idx val =+ with val $ \valPtr -> c_pushStyleVarImVec2 idx valPtr++-- C: void ImPlot::PushStyleVar(ImPlotStyleVar idx, int val)+foreign import capi unsafe "dcimgui_implot.h ImPlotPushStyleVarInt"+ pushStyleVarInt+ :: StyleVar -- ^ idx+ -> CInt -- ^ val+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotSampleColormap_wrap"+ c_sampleColormap+ :: Float -- ^ t+ -> Colormap -- ^ cmap+ -> (Ptr ImVec4) -- ^ out+ -> IO ()++sampleColormap+ :: Float -- ^ t+ -> Colormap -- ^ cmap+ -> IO ImVec4+sampleColormap t cmap =+ alloca $ \outPtr -> c_sampleColormap t cmap outPtr >> peek outPtr++-- C: void ImPlot::SetAxes(ImAxis x_axis, ImAxis y_axis)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetAxes"+ setAxes+ :: ImAxis -- ^ x_axis+ -> ImAxis -- ^ y_axis+ -> IO ()++-- C: void ImPlot::SetAxis(ImAxis axis)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetAxis"+ setAxis+ :: ImAxis -- ^ axis+ -> IO ()++-- C: void ImPlot::SetCurrentContext(ImPlotContext* ctx)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetCurrentContext"+ setCurrentContext+ :: (Ptr Context) -- ^ ctx+ -> IO ()++-- C: void ImPlot::SetImGuiContext(ImGuiContext* ctx)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetImGuiContext"+ setImGuiContext+ :: (Ptr ImGuiContext) -- ^ ctx+ -> IO ()++-- C: void ImPlot::SetNextAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetNextAxesLimits"+ setNextAxesLimits+ :: Double -- ^ x_min+ -> Double -- ^ x_max+ -> Double -- ^ y_min+ -> Double -- ^ y_max+ -> Cond -- ^ cond+ -> IO ()++-- C: void ImPlot::SetNextAxesToFit()+foreign import capi unsafe "dcimgui_implot.h ImPlotSetNextAxesToFit"+ setNextAxesToFit :: IO ()++-- C: void ImPlot::SetNextAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetNextAxisLimits"+ setNextAxisLimits+ :: ImAxis -- ^ axis+ -> Double -- ^ v_min+ -> Double -- ^ v_max+ -> Cond -- ^ cond+ -> IO ()++-- C: void ImPlot::SetNextAxisLinks(ImAxis axis, double* link_min, double* link_max)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetNextAxisLinks"+ setNextAxisLinks+ :: ImAxis -- ^ axis+ -> (Ptr Double) -- ^ link_min+ -> (Ptr Double) -- ^ link_max+ -> IO ()++-- C: void ImPlot::SetNextAxisToFit(ImAxis axis)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetNextAxisToFit"+ setNextAxisToFit+ :: ImAxis -- ^ axis+ -> IO ()++-- C: void ImPlot::SetupAxes(const char* x_label, const char* y_label, ImPlotAxisFlags x_flags, ImPlotAxisFlags y_flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxes"+ setupAxes+ :: CString -- ^ x_label+ -> CString -- ^ y_label+ -> AxisFlags -- ^ x_flags+ -> AxisFlags -- ^ y_flags+ -> IO ()++-- C: void ImPlot::SetupAxesLimits(double x_min, double x_max, double y_min, double y_max, ImPlotCond cond)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxesLimits"+ setupAxesLimits+ :: Double -- ^ x_min+ -> Double -- ^ x_max+ -> Double -- ^ y_min+ -> Double -- ^ y_max+ -> Cond -- ^ cond+ -> IO ()++-- C: void ImPlot::SetupAxis(ImAxis axis, const char* label, ImPlotAxisFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxis"+ setupAxis+ :: ImAxis -- ^ axis+ -> CString -- ^ label+ -> AxisFlags -- ^ flags+ -> IO ()++-- C: void ImPlot::SetupAxisFormat(ImAxis axis, const char* fmt)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisFormat"+ setupAxisFormat+ :: ImAxis -- ^ axis+ -> CString -- ^ fmt+ -> IO ()++-- C: void ImPlot::SetupAxisFormat(ImAxis axis, ImPlotFormatter formatter, void* data)+foreign import capi safe "dcimgui_implot.h ImPlotSetupAxisFormatImPlotFormatter"+ setupAxisFormatImPlotFormatter+ :: ImAxis -- ^ axis+ -> Formatter -- ^ formatter+ -> (Ptr ()) -- ^ data+ -> IO ()++-- C: void ImPlot::SetupAxisLimits(ImAxis axis, double v_min, double v_max, ImPlotCond cond)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisLimits"+ setupAxisLimits+ :: ImAxis -- ^ axis+ -> Double -- ^ v_min+ -> Double -- ^ v_max+ -> Cond -- ^ cond+ -> IO ()++-- C: void ImPlot::SetupAxisLimitsConstraints(ImAxis axis, double v_min, double v_max)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisLimitsConstraints"+ setupAxisLimitsConstraints+ :: ImAxis -- ^ axis+ -> Double -- ^ v_min+ -> Double -- ^ v_max+ -> IO ()++-- C: void ImPlot::SetupAxisLinks(ImAxis axis, double* link_min, double* link_max)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisLinks"+ setupAxisLinks+ :: ImAxis -- ^ axis+ -> (Ptr Double) -- ^ link_min+ -> (Ptr Double) -- ^ link_max+ -> IO ()++-- C: void ImPlot::SetupAxisScale(ImAxis axis, ImPlotScale scale)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisScale"+ setupAxisScale+ :: ImAxis -- ^ axis+ -> Scale -- ^ scale+ -> IO ()++-- C: void ImPlot::SetupAxisScale(ImAxis axis, ImPlotTransform forward, ImPlotTransform inverse, void* data)+foreign import capi safe "dcimgui_implot.h ImPlotSetupAxisScaleImPlotTransform"+ setupAxisScaleImPlotTransform+ :: ImAxis -- ^ axis+ -> Transform -- ^ forward+ -> Transform -- ^ inverse+ -> (Ptr ()) -- ^ data+ -> IO ()++-- C: void ImPlot::SetupAxisTicks(ImAxis axis, const double* values, int n_ticks, const char*const[] labels, bool keep_default)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisTicks"+ setupAxisTicks+ :: ImAxis -- ^ axis+ -> (Ptr Double) -- ^ values+ -> CInt -- ^ n_ticks+ -> (Ptr CString) -- ^ labels+ -> CBool -- ^ keep_default+ -> IO ()++-- C: void ImPlot::SetupAxisTicks(ImAxis axis, double v_min, double v_max, int n_ticks, const char*const[] labels, bool keep_default)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisTicksDouble"+ setupAxisTicksDouble+ :: ImAxis -- ^ axis+ -> Double -- ^ v_min+ -> Double -- ^ v_max+ -> CInt -- ^ n_ticks+ -> (Ptr CString) -- ^ labels+ -> CBool -- ^ keep_default+ -> IO ()++-- C: void ImPlot::SetupAxisZoomConstraints(ImAxis axis, double z_min, double z_max)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupAxisZoomConstraints"+ setupAxisZoomConstraints+ :: ImAxis -- ^ axis+ -> Double -- ^ z_min+ -> Double -- ^ z_max+ -> IO ()++-- C: void ImPlot::SetupFinish()+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupFinish"+ setupFinish :: IO ()++-- C: void ImPlot::SetupLegend(ImPlotLocation location, ImPlotLegendFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupLegend"+ setupLegend+ :: Location -- ^ location+ -> LegendFlags -- ^ flags+ -> IO ()++-- C: void ImPlot::SetupMouseText(ImPlotLocation location, ImPlotMouseTextFlags flags)+foreign import capi unsafe "dcimgui_implot.h ImPlotSetupMouseText"+ setupMouseText+ :: Location -- ^ location+ -> MouseTextFlags -- ^ flags+ -> IO ()++-- C: bool ImPlot::ShowColormapSelector(const char* label)+foreign import capi unsafe "dcimgui_implot.h ImPlotShowColormapSelector"+ showColormapSelector+ :: CString -- ^ label+ -> IO CBool++-- C: bool ImPlot::ShowInputMapSelector(const char* label)+foreign import capi unsafe "dcimgui_implot.h ImPlotShowInputMapSelector"+ showInputMapSelector+ :: CString -- ^ label+ -> IO CBool++-- C: void ImPlot::ShowMetricsWindow(bool* p_popen)+foreign import capi unsafe "dcimgui_implot.h ImPlotShowMetricsWindow"+ showMetricsWindow+ :: (Ptr CBool) -- ^ p_popen+ -> IO ()++-- C: void ImPlot::ShowStyleEditor(ImPlotStyle* ref)+foreign import capi unsafe "dcimgui_implot.h ImPlotShowStyleEditor"+ showStyleEditor+ :: (Ptr Style) -- ^ ref+ -> IO ()++-- C: bool ImPlot::ShowStyleSelector(const char* label)+foreign import capi unsafe "dcimgui_implot.h ImPlotShowStyleSelector"+ showStyleSelector+ :: CString -- ^ label+ -> IO CBool++-- C: void ImPlot::ShowUserGuide()+foreign import capi unsafe "dcimgui_implot.h ImPlotShowUserGuide"+ showUserGuide :: IO ()++-- C: void ImPlot::StyleColorsAuto(ImPlotStyle* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotStyleColorsAuto"+ styleColorsAuto+ :: (Ptr Style) -- ^ dst+ -> IO ()++-- C: void ImPlot::StyleColorsClassic(ImPlotStyle* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotStyleColorsClassic"+ styleColorsClassic+ :: (Ptr Style) -- ^ dst+ -> IO ()++-- C: void ImPlot::StyleColorsDark(ImPlotStyle* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotStyleColorsDark"+ styleColorsDark+ :: (Ptr Style) -- ^ dst+ -> IO ()++-- C: void ImPlot::StyleColorsLight(ImPlotStyle* dst)+foreign import capi unsafe "dcimgui_implot.h ImPlotStyleColorsLight"+ styleColorsLight+ :: (Ptr Style) -- ^ dst+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotTagX_wrap"+ c_tagX+ :: Double -- ^ x+ -> (Ptr ImVec4) -- ^ col+ -> CBool -- ^ round+ -> IO ()++tagX+ :: Double -- ^ x+ -> ImVec4 -- ^ col+ -> CBool -- ^ round+ -> IO ()+tagX x col round =+ with col $ \colPtr -> c_tagX x colPtr round++foreign import capi unsafe "DearImGuiWrappers.h ImPlotTagXStrUnformatted_wrap"+ c_tagXStrUnformatted+ :: Double -- ^ x+ -> (Ptr ImVec4) -- ^ col+ -> CString -- ^ text+ -> IO ()++tagXStrUnformatted+ :: Double -- ^ x+ -> ImVec4 -- ^ col+ -> CString -- ^ text+ -> IO ()+tagXStrUnformatted x col text =+ with col $ \colPtr -> c_tagXStrUnformatted x colPtr text++foreign import capi unsafe "DearImGuiWrappers.h ImPlotTagY_wrap"+ c_tagY+ :: Double -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> CBool -- ^ round+ -> IO ()++tagY+ :: Double -- ^ y+ -> ImVec4 -- ^ col+ -> CBool -- ^ round+ -> IO ()+tagY y col round =+ with col $ \colPtr -> c_tagY y colPtr round++foreign import capi unsafe "DearImGuiWrappers.h ImPlotTagYStrUnformatted_wrap"+ c_tagYStrUnformatted+ :: Double -- ^ y+ -> (Ptr ImVec4) -- ^ col+ -> CString -- ^ text+ -> IO ()++tagYStrUnformatted+ :: Double -- ^ y+ -> ImVec4 -- ^ col+ -> CString -- ^ text+ -> IO ()+tagYStrUnformatted y col text =+ with col $ \colPtr -> c_tagYStrUnformatted y colPtr text
+ src/DearImGui/Raw/ImPlot/Context.hsc view
@@ -0,0 +1,14 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Context+ ( Context+ ) where++#include "dcimgui_implot.h"++-- structs (opaque)++data Context
+ src/DearImGui/Raw/ImPlot/Enums/AxisFlags.hsc view
@@ -0,0 +1,116 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.AxisFlags+ ( AxisFlags+ , pattern AutoFit+ , pattern AuxDefault+ , pattern Foreground+ , pattern Invert+ , pattern Lock+ , pattern LockMax+ , pattern LockMin+ , pattern NoDecorations+ , pattern NoGridLines+ , pattern NoHighlight+ , pattern NoInitialFit+ , pattern NoLabel+ , pattern NoMenus+ , pattern NoSideSwitch+ , pattern NoTickLabels+ , pattern NoTickMarks+ , pattern None+ , pattern Opposite+ , pattern PanStretch+ , pattern RangeFit+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for plot axes (see SetupAxis).+type AxisFlags = CInt++-- enums++-- | default+pattern None :: AxisFlags+pattern None = #{const ImPlotAxisFlags_None}++-- | the axis label will not be displayed (axis labels are also hidden if the supplied string name is nullptr)+pattern NoLabel :: AxisFlags+pattern NoLabel = #{const ImPlotAxisFlags_NoLabel}++-- | no grid lines will be displayed+pattern NoGridLines :: AxisFlags+pattern NoGridLines = #{const ImPlotAxisFlags_NoGridLines}++-- | no tick marks will be displayed+pattern NoTickMarks :: AxisFlags+pattern NoTickMarks = #{const ImPlotAxisFlags_NoTickMarks}++-- | no text labels will be displayed+pattern NoTickLabels :: AxisFlags+pattern NoTickLabels = #{const ImPlotAxisFlags_NoTickLabels}++-- | axis will not be initially fit to data extents on the first rendered frame+pattern NoInitialFit :: AxisFlags+pattern NoInitialFit = #{const ImPlotAxisFlags_NoInitialFit}++-- | the user will not be able to open context menus with right-click+pattern NoMenus :: AxisFlags+pattern NoMenus = #{const ImPlotAxisFlags_NoMenus}++-- | the user will not be able to switch the axis side by dragging it+pattern NoSideSwitch :: AxisFlags+pattern NoSideSwitch = #{const ImPlotAxisFlags_NoSideSwitch}++-- | the axis will not have its background highlighted when hovered or held+pattern NoHighlight :: AxisFlags+pattern NoHighlight = #{const ImPlotAxisFlags_NoHighlight}++-- | axis ticks and labels will be rendered on the conventionally opposite side (i.e, right or top)+pattern Opposite :: AxisFlags+pattern Opposite = #{const ImPlotAxisFlags_Opposite}++-- | grid lines will be displayed in the foreground (i.e. on top of data) instead of the background+pattern Foreground :: AxisFlags+pattern Foreground = #{const ImPlotAxisFlags_Foreground}++-- | the axis will be inverted+pattern Invert :: AxisFlags+pattern Invert = #{const ImPlotAxisFlags_Invert}++-- | axis will be auto-fitting to data extents+pattern AutoFit :: AxisFlags+pattern AutoFit = #{const ImPlotAxisFlags_AutoFit}++-- | axis will only fit points if the point is in the visible range of the **orthogonal** axis+pattern RangeFit :: AxisFlags+pattern RangeFit = #{const ImPlotAxisFlags_RangeFit}++-- | panning in a locked or constrained state will cause the axis to stretch if possible+pattern PanStretch :: AxisFlags+pattern PanStretch = #{const ImPlotAxisFlags_PanStretch}++-- | the axis minimum value will be locked when panning/zooming+pattern LockMin :: AxisFlags+pattern LockMin = #{const ImPlotAxisFlags_LockMin}++-- | the axis maximum value will be locked when panning/zooming+pattern LockMax :: AxisFlags+pattern LockMax = #{const ImPlotAxisFlags_LockMax}++pattern Lock :: AxisFlags+pattern Lock = #{const ImPlotAxisFlags_Lock}++pattern NoDecorations :: AxisFlags+pattern NoDecorations = #{const ImPlotAxisFlags_NoDecorations}++pattern AuxDefault :: AxisFlags+pattern AuxDefault = #{const ImPlotAxisFlags_AuxDefault}
+ src/DearImGui/Raw/ImPlot/Enums/BarGroupsFlags.hsc view
@@ -0,0 +1,34 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.BarGroupsFlags+ ( BarGroupsFlags+ , pattern Horizontal+ , pattern None+ , pattern Stacked+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotBarGroups. Used by setting ImPlotSpec::Flags.+type BarGroupsFlags = CInt++-- enums++-- | default+pattern None :: BarGroupsFlags+pattern None = #{const ImPlotBarGroupsFlags_None}++-- | bar groups will be rendered horizontally on the current y-axis+pattern Horizontal :: BarGroupsFlags+pattern Horizontal = #{const ImPlotBarGroupsFlags_Horizontal}++-- | items in a group will be stacked on top of each other+pattern Stacked :: BarGroupsFlags+pattern Stacked = #{const ImPlotBarGroupsFlags_Stacked}
+ src/DearImGui/Raw/ImPlot/Enums/BarsFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.BarsFlags+ ( BarsFlags+ , pattern Horizontal+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotBars. Used by setting ImPlotSpec::Flags.+type BarsFlags = CInt++-- enums++-- | default+pattern None :: BarsFlags+pattern None = #{const ImPlotBarsFlags_None}++-- | bars will be rendered horizontally on the current y-axis+pattern Horizontal :: BarsFlags+pattern Horizontal = #{const ImPlotBarsFlags_Horizontal}
+ src/DearImGui/Raw/ImPlot/Enums/Bin.hsc view
@@ -0,0 +1,39 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Bin+ ( Bin+ , pattern Rice+ , pattern Scott+ , pattern Sqrt+ , pattern Sturges+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Enums for different automatic histogram binning methods (k = bin count or w = bin width)+type Bin = CInt++-- enums++-- | k = sqrt(n)+pattern Sqrt :: Bin+pattern Sqrt = #{const ImPlotBin_Sqrt}++-- | k = 1 + log2(n)+pattern Sturges :: Bin+pattern Sturges = #{const ImPlotBin_Sturges}++-- | k = 2 * cbrt(n)+pattern Rice :: Bin+pattern Rice = #{const ImPlotBin_Rice}++-- | w = 3.49 * sigma / cbrt(n)+pattern Scott :: Bin+pattern Scott = #{const ImPlotBin_Scott}
+ src/DearImGui/Raw/ImPlot/Enums/BubblesFlags.hsc view
@@ -0,0 +1,24 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.BubblesFlags+ ( BubblesFlags+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotBubbles. Used by setting ImPlotSpec::Flags.+type BubblesFlags = CInt++-- enums++-- | default+pattern None :: BubblesFlags+pattern None = #{const ImPlotBubblesFlags_None}
+ src/DearImGui/Raw/ImPlot/Enums/Col.hsc view
@@ -0,0 +1,103 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Col+ ( Col+ , pattern AxisBg+ , pattern AxisBgActive+ , pattern AxisBgHovered+ , pattern AxisGrid+ , pattern AxisText+ , pattern AxisTick+ , pattern COUNT+ , pattern Crosshairs+ , pattern FrameBg+ , pattern InlayText+ , pattern LegendBg+ , pattern LegendBorder+ , pattern LegendText+ , pattern PlotBg+ , pattern PlotBorder+ , pattern Selection+ , pattern TitleText+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Plot styling colors.+type Col = CInt++-- enums++-- | plot frame background color (defaults to ImGuiCol_FrameBg)+pattern FrameBg :: Col+pattern FrameBg = #{const ImPlotCol_FrameBg}++-- | plot area background color (defaults to ImGuiCol_WindowBg)+pattern PlotBg :: Col+pattern PlotBg = #{const ImPlotCol_PlotBg}++-- | plot area border color (defaults to ImGuiCol_Border)+pattern PlotBorder :: Col+pattern PlotBorder = #{const ImPlotCol_PlotBorder}++-- | legend background color (defaults to ImGuiCol_PopupBg)+pattern LegendBg :: Col+pattern LegendBg = #{const ImPlotCol_LegendBg}++-- | legend border color (defaults to ImPlotCol_PlotBorder)+pattern LegendBorder :: Col+pattern LegendBorder = #{const ImPlotCol_LegendBorder}++-- | legend text color (defaults to ImPlotCol_InlayText)+pattern LegendText :: Col+pattern LegendText = #{const ImPlotCol_LegendText}++-- | plot title text color (defaults to ImGuiCol_Text)+pattern TitleText :: Col+pattern TitleText = #{const ImPlotCol_TitleText}++-- | color of text appearing inside of plots (defaults to ImGuiCol_Text)+pattern InlayText :: Col+pattern InlayText = #{const ImPlotCol_InlayText}++-- | axis label and tick labels color (defaults to ImGuiCol_Text)+pattern AxisText :: Col+pattern AxisText = #{const ImPlotCol_AxisText}++-- | axis grid color (defaults to 25% ImPlotCol_AxisText)+pattern AxisGrid :: Col+pattern AxisGrid = #{const ImPlotCol_AxisGrid}++-- | axis tick color (defaults to AxisGrid)+pattern AxisTick :: Col+pattern AxisTick = #{const ImPlotCol_AxisTick}++-- | background color of axis hover region (defaults to transparent)+pattern AxisBg :: Col+pattern AxisBg = #{const ImPlotCol_AxisBg}++-- | axis hover color (defaults to ImGuiCol_ButtonHovered)+pattern AxisBgHovered :: Col+pattern AxisBgHovered = #{const ImPlotCol_AxisBgHovered}++-- | axis active color (defaults to ImGuiCol_ButtonActive)+pattern AxisBgActive :: Col+pattern AxisBgActive = #{const ImPlotCol_AxisBgActive}++-- | box-selection color (defaults to yellow)+pattern Selection :: Col+pattern Selection = #{const ImPlotCol_Selection}++-- | crosshairs color (defaults to ImPlotCol_PlotBorder)+pattern Crosshairs :: Col+pattern Crosshairs = #{const ImPlotCol_Crosshairs}++pattern COUNT :: Col+pattern COUNT = #{const ImPlotCol_COUNT}
+ src/DearImGui/Raw/ImPlot/Enums/Colormap.hsc view
@@ -0,0 +1,99 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Colormap+ ( Colormap+ , pattern BrBG+ , pattern Cool+ , pattern Dark+ , pattern Deep+ , pattern Greys+ , pattern Hot+ , pattern Jet+ , pattern Paired+ , pattern Pastel+ , pattern PiYG+ , pattern Pink+ , pattern Plasma+ , pattern RdBu+ , pattern Spectral+ , pattern Twilight+ , pattern Viridis+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Built-in colormaps+type Colormap = CInt++-- enums++-- | a.k.a. seaborn deep (qual=true, n=10) (default)+pattern Deep :: Colormap+pattern Deep = #{const ImPlotColormap_Deep}++-- | a.k.a. matplotlib "Set1" (qual=true, n=9 )+pattern Dark :: Colormap+pattern Dark = #{const ImPlotColormap_Dark}++-- | a.k.a. matplotlib "Pastel1" (qual=true, n=9 )+pattern Pastel :: Colormap+pattern Pastel = #{const ImPlotColormap_Pastel}++-- | a.k.a. matplotlib "Paired" (qual=true, n=12)+pattern Paired :: Colormap+pattern Paired = #{const ImPlotColormap_Paired}++-- | a.k.a. matplotlib "viridis" (qual=false, n=11)+pattern Viridis :: Colormap+pattern Viridis = #{const ImPlotColormap_Viridis}++-- | a.k.a. matplotlib "plasma" (qual=false, n=11)+pattern Plasma :: Colormap+pattern Plasma = #{const ImPlotColormap_Plasma}++-- | a.k.a. matplotlib/MATLAB "hot" (qual=false, n=11)+pattern Hot :: Colormap+pattern Hot = #{const ImPlotColormap_Hot}++-- | a.k.a. matplotlib/MATLAB "cool" (qual=false, n=11)+pattern Cool :: Colormap+pattern Cool = #{const ImPlotColormap_Cool}++-- | a.k.a. matplotlib/MATLAB "pink" (qual=false, n=11)+pattern Pink :: Colormap+pattern Pink = #{const ImPlotColormap_Pink}++-- | a.k.a. MATLAB "jet" (qual=false, n=11)+pattern Jet :: Colormap+pattern Jet = #{const ImPlotColormap_Jet}++-- | a.k.a. matplotlib "twilight" (qual=false, n=11)+pattern Twilight :: Colormap+pattern Twilight = #{const ImPlotColormap_Twilight}++-- | red/blue, Color Brewer (qual=false, n=11)+pattern RdBu :: Colormap+pattern RdBu = #{const ImPlotColormap_RdBu}++-- | brown/blue-green, Color Brewer (qual=false, n=11)+pattern BrBG :: Colormap+pattern BrBG = #{const ImPlotColormap_BrBG}++-- | pink/yellow-green, Color Brewer (qual=false, n=11)+pattern PiYG :: Colormap+pattern PiYG = #{const ImPlotColormap_PiYG}++-- | color spectrum, Color Brewer (qual=false, n=11)+pattern Spectral :: Colormap+pattern Spectral = #{const ImPlotColormap_Spectral}++-- | white/black (qual=false, n=2 )+pattern Greys :: Colormap+pattern Greys = #{const ImPlotColormap_Greys}
+ src/DearImGui/Raw/ImPlot/Enums/ColormapScaleFlags.hsc view
@@ -0,0 +1,39 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ColormapScaleFlags+ ( ColormapScaleFlags+ , pattern Invert+ , pattern NoLabel+ , pattern None+ , pattern Opposite+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for ColormapScale+type ColormapScaleFlags = CInt++-- enums++-- | default+pattern None :: ColormapScaleFlags+pattern None = #{const ImPlotColormapScaleFlags_None}++-- | the colormap axis label will not be displayed+pattern NoLabel :: ColormapScaleFlags+pattern NoLabel = #{const ImPlotColormapScaleFlags_NoLabel}++-- | render the colormap label and tick labels on the opposite side+pattern Opposite :: ColormapScaleFlags+pattern Opposite = #{const ImPlotColormapScaleFlags_Opposite}++-- | invert the colormap bar and axis scale (this only affects rendering; if you only want to reverse the scale mapping, make scale_min > scale_max)+pattern Invert :: ColormapScaleFlags+pattern Invert = #{const ImPlotColormapScaleFlags_Invert}
+ src/DearImGui/Raw/ImPlot/Enums/Cond.hsc view
@@ -0,0 +1,34 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Cond+ ( Cond+ , pattern Always+ , pattern None+ , pattern Once+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Represents a condition for SetupAxisLimits etc. (same as ImGuiCond, but we only support a subset of those enums)+type Cond = CInt++-- enums++-- | No condition (always set the variable), same as _Always+pattern None :: Cond+pattern None = #{const ImPlotCond_None}++-- | No condition (always set the variable)+pattern Always :: Cond+pattern Always = #{const ImPlotCond_Always}++-- | Set the variable once per runtime session (only the first call will succeed)+pattern Once :: Cond+pattern Once = #{const ImPlotCond_Once}
+ src/DearImGui/Raw/ImPlot/Enums/DigitalFlags.hsc view
@@ -0,0 +1,24 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.DigitalFlags+ ( DigitalFlags+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotDigital (placeholder). Used by setting ImPlotSpec::Flags.+type DigitalFlags = CInt++-- enums++-- | default+pattern None :: DigitalFlags+pattern None = #{const ImPlotDigitalFlags_None}
+ src/DearImGui/Raw/ImPlot/Enums/DragToolFlags.hsc view
@@ -0,0 +1,44 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.DragToolFlags+ ( DragToolFlags+ , pattern Delayed+ , pattern NoCursors+ , pattern NoFit+ , pattern NoInputs+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for DragPoint, DragLine, DragRect+type DragToolFlags = CInt++-- enums++-- | default+pattern None :: DragToolFlags+pattern None = #{const ImPlotDragToolFlags_None}++-- | drag tools won't change cursor icons when hovered or held+pattern NoCursors :: DragToolFlags+pattern NoCursors = #{const ImPlotDragToolFlags_NoCursors}++-- | the drag tool won't be considered for plot fits+pattern NoFit :: DragToolFlags+pattern NoFit = #{const ImPlotDragToolFlags_NoFit}++-- | lock the tool from user inputs+pattern NoInputs :: DragToolFlags+pattern NoInputs = #{const ImPlotDragToolFlags_NoInputs}++-- | tool rendering will be delayed one frame; useful when applying position-constraints+pattern Delayed :: DragToolFlags+pattern Delayed = #{const ImPlotDragToolFlags_Delayed}
+ src/DearImGui/Raw/ImPlot/Enums/DummyFlags.hsc view
@@ -0,0 +1,24 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.DummyFlags+ ( DummyFlags+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotDummy (placeholder). Used by setting ImPlotSpec::Flags.+type DummyFlags = CInt++-- enums++-- | default+pattern None :: DummyFlags+pattern None = #{const ImPlotDummyFlags_None}
+ src/DearImGui/Raw/ImPlot/Enums/ErrorBarsFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ErrorBarsFlags+ ( ErrorBarsFlags+ , pattern Horizontal+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotErrorBars. Used by setting ImPlotSpec::Flags.+type ErrorBarsFlags = CInt++-- enums++-- | default+pattern None :: ErrorBarsFlags+pattern None = #{const ImPlotErrorBarsFlags_None}++-- | error bars will be rendered horizontally on the current y-axis+pattern Horizontal :: ErrorBarsFlags+pattern Horizontal = #{const ImPlotErrorBarsFlags_Horizontal}
+ src/DearImGui/Raw/ImPlot/Enums/Flags.hsc view
@@ -0,0 +1,73 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Flags+ ( Flags+ , pattern CanvasOnly+ , pattern Crosshairs+ , pattern Equal+ , pattern NoBoxSelect+ , pattern NoFrame+ , pattern NoInputs+ , pattern NoLegend+ , pattern NoMenus+ , pattern NoMouseText+ , pattern NoTitle+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for plots (see BeginPlot).+type Flags = CInt++-- enums++-- | default+pattern None :: Flags+pattern None = #{const ImPlotFlags_None}++-- | the plot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MyPlot")+pattern NoTitle :: Flags+pattern NoTitle = #{const ImPlotFlags_NoTitle}++-- | the legend will not be displayed+pattern NoLegend :: Flags+pattern NoLegend = #{const ImPlotFlags_NoLegend}++-- | the mouse position, in plot coordinates, will not be displayed inside of the plot+pattern NoMouseText :: Flags+pattern NoMouseText = #{const ImPlotFlags_NoMouseText}++-- | the user will not be able to interact with the plot+pattern NoInputs :: Flags+pattern NoInputs = #{const ImPlotFlags_NoInputs}++-- | the user will not be able to open context menus+pattern NoMenus :: Flags+pattern NoMenus = #{const ImPlotFlags_NoMenus}++-- | the user will not be able to box-select+pattern NoBoxSelect :: Flags+pattern NoBoxSelect = #{const ImPlotFlags_NoBoxSelect}++-- | the ImGui frame will not be rendered+pattern NoFrame :: Flags+pattern NoFrame = #{const ImPlotFlags_NoFrame}++-- | x and y axes pairs will be constrained to have the same units/pixel+pattern Equal :: Flags+pattern Equal = #{const ImPlotFlags_Equal}++-- | the default mouse cursor will be replaced with a crosshair when hovered+pattern Crosshairs :: Flags+pattern Crosshairs = #{const ImPlotFlags_Crosshairs}++pattern CanvasOnly :: Flags+pattern CanvasOnly = #{const ImPlotFlags_CanvasOnly}
+ src/DearImGui/Raw/ImPlot/Enums/HeatmapFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.HeatmapFlags+ ( HeatmapFlags+ , pattern ColMajor+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotHeatmap. Used by setting ImPlotSpec::Flags.+type HeatmapFlags = CInt++-- enums++-- | default+pattern None :: HeatmapFlags+pattern None = #{const ImPlotHeatmapFlags_None}++-- | data will be read in column major order+pattern ColMajor :: HeatmapFlags+pattern ColMajor = #{const ImPlotHeatmapFlags_ColMajor}
+ src/DearImGui/Raw/ImPlot/Enums/HistogramFlags.hsc view
@@ -0,0 +1,49 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.HistogramFlags+ ( HistogramFlags+ , pattern ColMajor+ , pattern Cumulative+ , pattern Density+ , pattern Horizontal+ , pattern NoOutliers+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotHistogram and PlotHistogram2D. Used by setting ImPlotSpec::Flags.+type HistogramFlags = CInt++-- enums++-- | default+pattern None :: HistogramFlags+pattern None = #{const ImPlotHistogramFlags_None}++-- | histogram bars will be rendered horizontally (not supported by PlotHistogram2D)+pattern Horizontal :: HistogramFlags+pattern Horizontal = #{const ImPlotHistogramFlags_Horizontal}++-- | each bin will contain its count plus the counts of all previous bins (not supported by PlotHistogram2D)+pattern Cumulative :: HistogramFlags+pattern Cumulative = #{const ImPlotHistogramFlags_Cumulative}++-- | counts will be normalized, i.e. the PDF will be visualized, or the CDF will be visualized if Cumulative is also set+pattern Density :: HistogramFlags+pattern Density = #{const ImPlotHistogramFlags_Density}++-- | exclude values outside the specified histogram range from the count toward normalizing and cumulative counts+pattern NoOutliers :: HistogramFlags+pattern NoOutliers = #{const ImPlotHistogramFlags_NoOutliers}++-- | data will be read in column major order (not supported by PlotHistogram)+pattern ColMajor :: HistogramFlags+pattern ColMajor = #{const ImPlotHistogramFlags_ColMajor}
+ src/DearImGui/Raw/ImPlot/Enums/ImAxis.hsc view
@@ -0,0 +1,56 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ImAxis+ ( ImAxis+ , pattern COUNT+ , pattern X1+ , pattern X2+ , pattern X3+ , pattern Y1+ , pattern Y2+ , pattern Y3+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Axis indices. The values assigned may change; NEVER hardcode these.+type ImAxis = CInt++-- enums++-- | horizontal axes+-- enabled by default+pattern X1 :: ImAxis+pattern X1 = #{const ImAxis_X1}++-- | disabled by default+pattern X2 :: ImAxis+pattern X2 = #{const ImAxis_X2}++-- | disabled by default+pattern X3 :: ImAxis+pattern X3 = #{const ImAxis_X3}++-- | vertical axes+-- enabled by default+pattern Y1 :: ImAxis+pattern Y1 = #{const ImAxis_Y1}++-- | disabled by default+pattern Y2 :: ImAxis+pattern Y2 = #{const ImAxis_Y2}++-- | disabled by default+pattern Y3 :: ImAxis+pattern Y3 = #{const ImAxis_Y3}++-- | bookkeeping+pattern COUNT :: ImAxis+pattern COUNT = #{const ImAxis_COUNT}
+ src/DearImGui/Raw/ImPlot/Enums/ImageFlags.hsc view
@@ -0,0 +1,24 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ImageFlags+ ( ImageFlags+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotImage (placeholder). Used by setting ImPlotSpec::Flags.+type ImageFlags = CInt++-- enums++-- | default+pattern None :: ImageFlags+pattern None = #{const ImPlotImageFlags_None}
+ src/DearImGui/Raw/ImPlot/Enums/InfLinesFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.InfLinesFlags+ ( InfLinesFlags+ , pattern Horizontal+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotInfLines. Used by setting ImPlotSpec::Flags.+type InfLinesFlags = CInt++-- enums++-- | default+pattern None :: InfLinesFlags+pattern None = #{const ImPlotInfLinesFlags_None}++-- | lines will be rendered horizontally on the current y-axis+pattern Horizontal :: InfLinesFlags+pattern Horizontal = #{const ImPlotInfLinesFlags_Horizontal}
+ src/DearImGui/Raw/ImPlot/Enums/ItemFlags.hsc view
@@ -0,0 +1,33 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ItemFlags+ ( ItemFlags+ , pattern NoFit+ , pattern NoLegend+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for ANY PlotX function. Used by setting ImPlotSpec::Flags.+type ItemFlags = CInt++-- enums++pattern None :: ItemFlags+pattern None = #{const ImPlotItemFlags_None}++-- | the item won't have a legend entry displayed+pattern NoLegend :: ItemFlags+pattern NoLegend = #{const ImPlotItemFlags_NoLegend}++-- | the item won't be considered for plot fits+pattern NoFit :: ItemFlags+pattern NoFit = #{const ImPlotItemFlags_NoFit}
+ src/DearImGui/Raw/ImPlot/Enums/LegendFlags.hsc view
@@ -0,0 +1,64 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.LegendFlags+ ( LegendFlags+ , pattern Horizontal+ , pattern NoButtons+ , pattern NoHighlightAxis+ , pattern NoHighlightItem+ , pattern NoMenus+ , pattern None+ , pattern Outside+ , pattern Reverse+ , pattern Sort+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for legends (see SetupLegend)+type LegendFlags = CInt++-- enums++-- | default+pattern None :: LegendFlags+pattern None = #{const ImPlotLegendFlags_None}++-- | legend icons will not function as hide/show buttons+pattern NoButtons :: LegendFlags+pattern NoButtons = #{const ImPlotLegendFlags_NoButtons}++-- | plot items will not be highlighted when their legend entry is hovered+pattern NoHighlightItem :: LegendFlags+pattern NoHighlightItem = #{const ImPlotLegendFlags_NoHighlightItem}++-- | axes will not be highlighted when legend entries are hovered (only relevant if x/y-axis count > 1)+pattern NoHighlightAxis :: LegendFlags+pattern NoHighlightAxis = #{const ImPlotLegendFlags_NoHighlightAxis}++-- | the user will not be able to open context menus with right-click+pattern NoMenus :: LegendFlags+pattern NoMenus = #{const ImPlotLegendFlags_NoMenus}++-- | legend will be rendered outside of the plot area+pattern Outside :: LegendFlags+pattern Outside = #{const ImPlotLegendFlags_Outside}++-- | legend entries will be displayed horizontally+pattern Horizontal :: LegendFlags+pattern Horizontal = #{const ImPlotLegendFlags_Horizontal}++-- | legend entries will be displayed in alphabetical order+pattern Sort :: LegendFlags+pattern Sort = #{const ImPlotLegendFlags_Sort}++-- | legend entries will be displayed in reverse order+pattern Reverse :: LegendFlags+pattern Reverse = #{const ImPlotLegendFlags_Reverse}
+ src/DearImGui/Raw/ImPlot/Enums/LineFlags.hsc view
@@ -0,0 +1,49 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.LineFlags+ ( LineFlags+ , pattern Loop+ , pattern NoClip+ , pattern None+ , pattern Segments+ , pattern Shaded+ , pattern SkipNaN+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotLine. Used by setting ImPlotSpec::Flags.+type LineFlags = CInt++-- enums++-- | default+pattern None :: LineFlags+pattern None = #{const ImPlotLineFlags_None}++-- | a line segment will be rendered from every two consecutive points+pattern Segments :: LineFlags+pattern Segments = #{const ImPlotLineFlags_Segments}++-- | the last and first point will be connected to form a closed loop+pattern Loop :: LineFlags+pattern Loop = #{const ImPlotLineFlags_Loop}++-- | NaNs values will be skipped instead of rendered as missing data+pattern SkipNaN :: LineFlags+pattern SkipNaN = #{const ImPlotLineFlags_SkipNaN}++-- | markers (if displayed) on the edge of a plot will not be clipped+pattern NoClip :: LineFlags+pattern NoClip = #{const ImPlotLineFlags_NoClip}++-- | a filled region between the line and horizontal origin will be rendered; use PlotShaded for more advanced cases+pattern Shaded :: LineFlags+pattern Shaded = #{const ImPlotLineFlags_Shaded}
+ src/DearImGui/Raw/ImPlot/Enums/Location.hsc view
@@ -0,0 +1,64 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Location+ ( Location+ , pattern Center+ , pattern East+ , pattern North+ , pattern NorthEast+ , pattern NorthWest+ , pattern South+ , pattern SouthEast+ , pattern SouthWest+ , pattern West+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Used to position items on a plot (e.g. legends, labels, etc.)+type Location = CInt++-- enums++-- | center-center+pattern Center :: Location+pattern Center = #{const ImPlotLocation_Center}++-- | top-center+pattern North :: Location+pattern North = #{const ImPlotLocation_North}++-- | bottom-center+pattern South :: Location+pattern South = #{const ImPlotLocation_South}++-- | center-left+pattern West :: Location+pattern West = #{const ImPlotLocation_West}++-- | center-right+pattern East :: Location+pattern East = #{const ImPlotLocation_East}++-- | top-left+pattern NorthWest :: Location+pattern NorthWest = #{const ImPlotLocation_NorthWest}++-- | top-right+pattern NorthEast :: Location+pattern NorthEast = #{const ImPlotLocation_NorthEast}++-- | bottom-left+pattern SouthWest :: Location+pattern SouthWest = #{const ImPlotLocation_SouthWest}++-- | bottom-right+pattern SouthEast :: Location+pattern SouthEast = #{const ImPlotLocation_SouthEast}
+ src/DearImGui/Raw/ImPlot/Enums/Marker.hsc view
@@ -0,0 +1,94 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Marker+ ( Marker+ , pattern Asterisk+ , pattern Auto+ , pattern COUNT+ , pattern Circle+ , pattern Cross+ , pattern Diamond+ , pattern Down+ , pattern Horizontal+ , pattern Left+ , pattern None+ , pattern Plus+ , pattern Right+ , pattern Square+ , pattern Up+ , pattern Vertical+ ) where++import Foreign.C.Types+import Prelude hiding (Left, Right)++#include "dcimgui_implot.h"++-- typedefs++-- | Marker specifications.+type Marker = CInt++-- enums++-- | no marker+pattern None :: Marker+pattern None = #{const ImPlotMarker_None}++-- | automatic marker selection+pattern Auto :: Marker+pattern Auto = #{const ImPlotMarker_Auto}++-- | a circle marker (default)+pattern Circle :: Marker+pattern Circle = #{const ImPlotMarker_Circle}++-- | a square maker+pattern Square :: Marker+pattern Square = #{const ImPlotMarker_Square}++-- | a diamond marker+pattern Diamond :: Marker+pattern Diamond = #{const ImPlotMarker_Diamond}++-- | an upward-pointing triangle marker+pattern Up :: Marker+pattern Up = #{const ImPlotMarker_Up}++-- | an downward-pointing triangle marker+pattern Down :: Marker+pattern Down = #{const ImPlotMarker_Down}++-- | an leftward-pointing triangle marker+pattern Left :: Marker+pattern Left = #{const ImPlotMarker_Left}++-- | an rightward-pointing triangle marker+pattern Right :: Marker+pattern Right = #{const ImPlotMarker_Right}++-- | a cross marker (not fill-able)+pattern Cross :: Marker+pattern Cross = #{const ImPlotMarker_Cross}++-- | a plus marker (not fill-able)+pattern Plus :: Marker+pattern Plus = #{const ImPlotMarker_Plus}++-- | a asterisk marker (not fill-able)+pattern Asterisk :: Marker+pattern Asterisk = #{const ImPlotMarker_Asterisk}++-- | a vertical line marker (not fill-able)+pattern Vertical :: Marker+pattern Vertical = #{const ImPlotMarker_Vertical}++-- | a horizontal line marker (not fill-able)+pattern Horizontal :: Marker+pattern Horizontal = #{const ImPlotMarker_Horizontal}++pattern COUNT :: Marker+pattern COUNT = #{const ImPlotMarker_COUNT}
+ src/DearImGui/Raw/ImPlot/Enums/MouseTextFlags.hsc view
@@ -0,0 +1,39 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.MouseTextFlags+ ( MouseTextFlags+ , pattern NoAuxAxes+ , pattern NoFormat+ , pattern None+ , pattern ShowAlways+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for mouse hover text (see SetupMouseText)+type MouseTextFlags = CInt++-- enums++-- | default+pattern None :: MouseTextFlags+pattern None = #{const ImPlotMouseTextFlags_None}++-- | only show the mouse position for primary axes+pattern NoAuxAxes :: MouseTextFlags+pattern NoAuxAxes = #{const ImPlotMouseTextFlags_NoAuxAxes}++-- | axes label formatters won't be used to render text+pattern NoFormat :: MouseTextFlags+pattern NoFormat = #{const ImPlotMouseTextFlags_NoFormat}++-- | always display mouse position even if plot not hovered+pattern ShowAlways :: MouseTextFlags+pattern ShowAlways = #{const ImPlotMouseTextFlags_ShowAlways}
+ src/DearImGui/Raw/ImPlot/Enums/PieChartFlags.hsc view
@@ -0,0 +1,44 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.PieChartFlags+ ( PieChartFlags+ , pattern Exploding+ , pattern IgnoreHidden+ , pattern NoSliceBorder+ , pattern None+ , pattern Normalize+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotPieChart. Used by setting ImPlotSpec::Flags.+type PieChartFlags = CInt++-- enums++-- | default+pattern None :: PieChartFlags+pattern None = #{const ImPlotPieChartFlags_None}++-- | force normalization of pie chart values (i.e. always make a full circle if sum < 0)+pattern Normalize :: PieChartFlags+pattern Normalize = #{const ImPlotPieChartFlags_Normalize}++-- | ignore hidden slices when drawing the pie chart (as if they were not there)+pattern IgnoreHidden :: PieChartFlags+pattern IgnoreHidden = #{const ImPlotPieChartFlags_IgnoreHidden}++-- | explode legend-hovered slice+pattern Exploding :: PieChartFlags+pattern Exploding = #{const ImPlotPieChartFlags_Exploding}++-- | do not draw slice borders+pattern NoSliceBorder :: PieChartFlags+pattern NoSliceBorder = #{const ImPlotPieChartFlags_NoSliceBorder}
+ src/DearImGui/Raw/ImPlot/Enums/PolygonFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.PolygonFlags+ ( PolygonFlags+ , pattern Concave+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotPolygon. Used by setting ImPlotSpec::Flags.+type PolygonFlags = CInt++-- enums++-- | default (closed, convex polygon)+pattern None :: PolygonFlags+pattern None = #{const ImPlotPolygonFlags_None}++-- | use concave polygon filling (slower but supports concave shapes)+pattern Concave :: PolygonFlags+pattern Concave = #{const ImPlotPolygonFlags_Concave}
+ src/DearImGui/Raw/ImPlot/Enums/Prop.hsc view
@@ -0,0 +1,104 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Prop+ ( Prop+ , pattern FillAlpha+ , pattern FillColor+ , pattern FillColors+ , pattern Flags+ , pattern LineColor+ , pattern LineColors+ , pattern LineWeight+ , pattern Marker+ , pattern MarkerFillColor+ , pattern MarkerFillColors+ , pattern MarkerLineColor+ , pattern MarkerLineColors+ , pattern MarkerSize+ , pattern MarkerSizes+ , pattern Offset+ , pattern Size+ , pattern Stride+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Plotting properties. These provide syntactic sugar for creating ImPlotSpecs from (ImPlotProp,value) pairs. See ImPlotSpec documentation.+type Prop = CInt++-- enums++-- | line color (applies to lines, bar edges); IMPLOT_AUTO_COL will use next Colormap color or current item color+pattern LineColor :: Prop+pattern LineColor = #{const ImPlotProp_LineColor}++-- | array of colors for each line; if nullptr, use LineColor for all lines+pattern LineColors :: Prop+pattern LineColors = #{const ImPlotProp_LineColors}++-- | line weight in pixels (applies to lines, bar edges, marker edges)+pattern LineWeight :: Prop+pattern LineWeight = #{const ImPlotProp_LineWeight}++-- | fill color (applies to shaded regions, bar faces); IMPLOT_AUTO_COL will use next Colormap color or current item color+pattern FillColor :: Prop+pattern FillColor = #{const ImPlotProp_FillColor}++-- | array of colors for each fill; if nullptr, use FillColor for all fills+pattern FillColors :: Prop+pattern FillColors = #{const ImPlotProp_FillColors}++-- | alpha multiplier (applies to FillColor, FillColors, MarkerFillColor, and MarkerFillColors)+pattern FillAlpha :: Prop+pattern FillAlpha = #{const ImPlotProp_FillAlpha}++-- | marker type; specify ImPlotMarker_Auto to use the next unused marker+pattern Marker :: Prop+pattern Marker = #{const ImPlotProp_Marker}++-- | size of markers (radius) *in pixels*+pattern MarkerSize :: Prop+pattern MarkerSize = #{const ImPlotProp_MarkerSize}++-- | array of sizes for each marker; if nullptr, use MarkerSize for all markers+pattern MarkerSizes :: Prop+pattern MarkerSizes = #{const ImPlotProp_MarkerSizes}++-- | marker edge color; IMPLOT_AUTO_COL will use LineColor+pattern MarkerLineColor :: Prop+pattern MarkerLineColor = #{const ImPlotProp_MarkerLineColor}++-- | array of colors for each marker edge; if nullptr, use MarkerLineColor for all markers+pattern MarkerLineColors :: Prop+pattern MarkerLineColors = #{const ImPlotProp_MarkerLineColors}++-- | marker face color; IMPLOT_AUTO_COL will use LineColor+pattern MarkerFillColor :: Prop+pattern MarkerFillColor = #{const ImPlotProp_MarkerFillColor}++-- | array of colors for each marker face; if nullptr, use MarkerFillColor for all markers+pattern MarkerFillColors :: Prop+pattern MarkerFillColors = #{const ImPlotProp_MarkerFillColors}++-- | size of error bar whiskers (width or height), and digital bars (height) *in pixels*+pattern Size :: Prop+pattern Size = #{const ImPlotProp_Size}++-- | data index offset+pattern Offset :: Prop+pattern Offset = #{const ImPlotProp_Offset}++-- | data stride in bytes; IMPLOT_AUTO will result in sizeof(T) where T is the type passed to PlotX+pattern Stride :: Prop+pattern Stride = #{const ImPlotProp_Stride}++-- | optional item flags; can be composed from common ImPlotItemFlags and/or specialized ImPlotXFlags+pattern Flags :: Prop+pattern Flags = #{const ImPlotProp_Flags}
+ src/DearImGui/Raw/ImPlot/Enums/Scale.hsc view
@@ -0,0 +1,39 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.Scale+ ( Scale+ , pattern Linear+ , pattern Log10+ , pattern SymLog+ , pattern Time+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Axis scale+type Scale = CInt++-- enums++-- | default linear scale+pattern Linear :: Scale+pattern Linear = #{const ImPlotScale_Linear}++-- | date/time scale+pattern Time :: Scale+pattern Time = #{const ImPlotScale_Time}++-- | base 10 logarithmic scale+pattern Log10 :: Scale+pattern Log10 = #{const ImPlotScale_Log10}++-- | symmetric log scale+pattern SymLog :: Scale+pattern SymLog = #{const ImPlotScale_SymLog}
+ src/DearImGui/Raw/ImPlot/Enums/ScatterFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ScatterFlags+ ( ScatterFlags+ , pattern NoClip+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotScatter. Used by setting ImPlotSpec::Flags.+type ScatterFlags = CInt++-- enums++-- | default+pattern None :: ScatterFlags+pattern None = #{const ImPlotScatterFlags_None}++-- | markers on the edge of a plot will not be clipped+pattern NoClip :: ScatterFlags+pattern NoClip = #{const ImPlotScatterFlags_NoClip}
+ src/DearImGui/Raw/ImPlot/Enums/ShadedFlags.hsc view
@@ -0,0 +1,24 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.ShadedFlags+ ( ShadedFlags+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotShaded (placeholder). Used by setting ImPlotSpec::Flags.+type ShadedFlags = CInt++-- enums++-- | default+pattern None :: ShadedFlags+pattern None = #{const ImPlotShadedFlags_None}
+ src/DearImGui/Raw/ImPlot/Enums/StairsFlags.hsc view
@@ -0,0 +1,34 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.StairsFlags+ ( StairsFlags+ , pattern None+ , pattern PreStep+ , pattern Shaded+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotStairs. Used by setting ImPlotSpec::Flags.+type StairsFlags = CInt++-- enums++-- | default+pattern None :: StairsFlags+pattern None = #{const ImPlotStairsFlags_None}++-- | the y value is continued constantly to the left from every x position, i.e. the interval (x[i-1], x[i]] has the value y[i]+pattern PreStep :: StairsFlags+pattern PreStep = #{const ImPlotStairsFlags_PreStep}++-- | a filled region between the stairs and horizontal origin will be rendered; use PlotShaded for more advanced cases+pattern Shaded :: StairsFlags+pattern Shaded = #{const ImPlotStairsFlags_Shaded}
+ src/DearImGui/Raw/ImPlot/Enums/StemsFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.StemsFlags+ ( StemsFlags+ , pattern Horizontal+ , pattern None+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotStems. Used by setting ImPlotSpec::Flags.+type StemsFlags = CInt++-- enums++-- | default+pattern None :: StemsFlags+pattern None = #{const ImPlotStemsFlags_None}++-- | stems will be rendered horizontally on the current y-axis+pattern Horizontal :: StemsFlags+pattern Horizontal = #{const ImPlotStemsFlags_Horizontal}
+ src/DearImGui/Raw/ImPlot/Enums/StyleVar.hsc view
@@ -0,0 +1,123 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.StyleVar+ ( StyleVar+ , pattern AnnotationPadding+ , pattern COUNT+ , pattern DigitalPadding+ , pattern DigitalSpacing+ , pattern FitPadding+ , pattern LabelPadding+ , pattern LegendInnerPadding+ , pattern LegendPadding+ , pattern LegendSpacing+ , pattern MajorGridSize+ , pattern MajorTickLen+ , pattern MajorTickSize+ , pattern MinorAlpha+ , pattern MinorGridSize+ , pattern MinorTickLen+ , pattern MinorTickSize+ , pattern MousePosPadding+ , pattern PlotBorderSize+ , pattern PlotDefaultSize+ , pattern PlotMinSize+ , pattern PlotPadding+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Plot styling variables.+type StyleVar = CInt++-- enums++-- | ImVec2, default size used when ImVec2(0,0) is passed to BeginPlot+pattern PlotDefaultSize :: StyleVar+pattern PlotDefaultSize = #{const ImPlotStyleVar_PlotDefaultSize}++-- | ImVec2, minimum size plot frame can be when shrunk+pattern PlotMinSize :: StyleVar+pattern PlotMinSize = #{const ImPlotStyleVar_PlotMinSize}++-- | float, thickness of border around plot area+pattern PlotBorderSize :: StyleVar+pattern PlotBorderSize = #{const ImPlotStyleVar_PlotBorderSize}++-- | float, alpha multiplier applied to minor axis grid lines+pattern MinorAlpha :: StyleVar+pattern MinorAlpha = #{const ImPlotStyleVar_MinorAlpha}++-- | ImVec2, major tick lengths for X and Y axes+pattern MajorTickLen :: StyleVar+pattern MajorTickLen = #{const ImPlotStyleVar_MajorTickLen}++-- | ImVec2, minor tick lengths for X and Y axes+pattern MinorTickLen :: StyleVar+pattern MinorTickLen = #{const ImPlotStyleVar_MinorTickLen}++-- | ImVec2, line thickness of major ticks+pattern MajorTickSize :: StyleVar+pattern MajorTickSize = #{const ImPlotStyleVar_MajorTickSize}++-- | ImVec2, line thickness of minor ticks+pattern MinorTickSize :: StyleVar+pattern MinorTickSize = #{const ImPlotStyleVar_MinorTickSize}++-- | ImVec2, line thickness of major grid lines+pattern MajorGridSize :: StyleVar+pattern MajorGridSize = #{const ImPlotStyleVar_MajorGridSize}++-- | ImVec2, line thickness of minor grid lines+pattern MinorGridSize :: StyleVar+pattern MinorGridSize = #{const ImPlotStyleVar_MinorGridSize}++-- | ImVec2, padding between widget frame and plot area, labels, or outside legends (i.e. main padding)+pattern PlotPadding :: StyleVar+pattern PlotPadding = #{const ImPlotStyleVar_PlotPadding}++-- | ImVec2, padding between axes labels, tick labels, and plot edge+pattern LabelPadding :: StyleVar+pattern LabelPadding = #{const ImPlotStyleVar_LabelPadding}++-- | ImVec2, legend padding from plot edges+pattern LegendPadding :: StyleVar+pattern LegendPadding = #{const ImPlotStyleVar_LegendPadding}++-- | ImVec2, legend inner padding from legend edges+pattern LegendInnerPadding :: StyleVar+pattern LegendInnerPadding = #{const ImPlotStyleVar_LegendInnerPadding}++-- | ImVec2, spacing between legend entries+pattern LegendSpacing :: StyleVar+pattern LegendSpacing = #{const ImPlotStyleVar_LegendSpacing}++-- | ImVec2, padding between plot edge and interior info text+pattern MousePosPadding :: StyleVar+pattern MousePosPadding = #{const ImPlotStyleVar_MousePosPadding}++-- | ImVec2, text padding around annotation labels+pattern AnnotationPadding :: StyleVar+pattern AnnotationPadding = #{const ImPlotStyleVar_AnnotationPadding}++-- | ImVec2, additional fit padding as a percentage of the fit extents (e.g. ImVec2(0.1f,0.1f) adds 10% to the fit extents of X and Y)+pattern FitPadding :: StyleVar+pattern FitPadding = #{const ImPlotStyleVar_FitPadding}++-- | float, digital plot padding from bottom in pixels+pattern DigitalPadding :: StyleVar+pattern DigitalPadding = #{const ImPlotStyleVar_DigitalPadding}++-- | float, digital plot spacing gap in pixels+pattern DigitalSpacing :: StyleVar+pattern DigitalSpacing = #{const ImPlotStyleVar_DigitalSpacing}++pattern COUNT :: StyleVar+pattern COUNT = #{const ImPlotStyleVar_COUNT}
+ src/DearImGui/Raw/ImPlot/Enums/SubplotFlags.hsc view
@@ -0,0 +1,79 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.SubplotFlags+ ( SubplotFlags+ , pattern ColMajor+ , pattern LinkAllX+ , pattern LinkAllY+ , pattern LinkCols+ , pattern LinkRows+ , pattern NoAlign+ , pattern NoLegend+ , pattern NoMenus+ , pattern NoResize+ , pattern NoTitle+ , pattern None+ , pattern ShareItems+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Options for subplots (see BeginSubplot)+type SubplotFlags = CInt++-- enums++-- | default+pattern None :: SubplotFlags+pattern None = #{const ImPlotSubplotFlags_None}++-- | the subplot title will not be displayed (titles are also hidden if preceded by double hashes, e.g. "##MySubplot")+pattern NoTitle :: SubplotFlags+pattern NoTitle = #{const ImPlotSubplotFlags_NoTitle}++-- | the legend will not be displayed (only applicable if ImPlotSubplotFlags_ShareItems is enabled)+pattern NoLegend :: SubplotFlags+pattern NoLegend = #{const ImPlotSubplotFlags_NoLegend}++-- | the user will not be able to open context menus with right-click+pattern NoMenus :: SubplotFlags+pattern NoMenus = #{const ImPlotSubplotFlags_NoMenus}++-- | resize splitters between subplot cells will be not be provided+pattern NoResize :: SubplotFlags+pattern NoResize = #{const ImPlotSubplotFlags_NoResize}++-- | subplot edges will not be aligned vertically or horizontally+pattern NoAlign :: SubplotFlags+pattern NoAlign = #{const ImPlotSubplotFlags_NoAlign}++-- | items across all subplots will be shared and rendered into a single legend entry+pattern ShareItems :: SubplotFlags+pattern ShareItems = #{const ImPlotSubplotFlags_ShareItems}++-- | link the y-axis limits of all plots in each row (does not apply to auxiliary axes)+pattern LinkRows :: SubplotFlags+pattern LinkRows = #{const ImPlotSubplotFlags_LinkRows}++-- | link the x-axis limits of all plots in each column (does not apply to auxiliary axes)+pattern LinkCols :: SubplotFlags+pattern LinkCols = #{const ImPlotSubplotFlags_LinkCols}++-- | link the x-axis limits in every plot in the subplot (does not apply to auxiliary axes)+pattern LinkAllX :: SubplotFlags+pattern LinkAllX = #{const ImPlotSubplotFlags_LinkAllX}++-- | link the y-axis limits in every plot in the subplot (does not apply to auxiliary axes)+pattern LinkAllY :: SubplotFlags+pattern LinkAllY = #{const ImPlotSubplotFlags_LinkAllY}++-- | subplots are added in column major order instead of the default row major order+pattern ColMajor :: SubplotFlags+pattern ColMajor = #{const ImPlotSubplotFlags_ColMajor}
+ src/DearImGui/Raw/ImPlot/Enums/TextFlags.hsc view
@@ -0,0 +1,29 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Enums.TextFlags+ ( TextFlags+ , pattern None+ , pattern Vertical+ ) where++import Foreign.C.Types++#include "dcimgui_implot.h"++-- typedefs++-- | Flags for PlotText. Used by setting ImPlotSpec::Flags.+type TextFlags = CInt++-- enums++-- | default+pattern None :: TextFlags+pattern None = #{const ImPlotTextFlags_None}++-- | text will be rendered vertically+pattern Vertical :: TextFlags+pattern Vertical = #{const ImPlotTextFlags_Vertical}
+ src/DearImGui/Raw/ImPlot/InputMap.hsc view
@@ -0,0 +1,106 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.InputMap+ ( InputMap (..)+ , destroy+ , init+ , withDefault+ ) where++import Control.Exception (bracket_)+import DearImGui.Raw.Enums.ImGuiMouseButton (ImGuiMouseButton)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++data {-# CTYPE "dcimgui_implot.h" "ImPlotInputMap" #-} InputMap = InputMap+ { pan :: ImGuiMouseButton+ , panMod :: CInt+ , fit :: ImGuiMouseButton+ , select :: ImGuiMouseButton+ , selectCancel :: ImGuiMouseButton+ , selectMod :: CInt+ , selectHorzMod :: CInt+ , selectVertMod :: CInt+ , menu :: ImGuiMouseButton+ , overrideMod :: CInt+ , zoomMod :: CInt+ , zoomRate :: Float+ }+ deriving (Eq, Show)+instance Storable InputMap where+ sizeOf _ = #{size ImPlotInputMap}+ alignment _ = #{alignment ImPlotInputMap}+ peek p = InputMap <$> #{peek ImPlotInputMap, Pan} p <*> #{peek ImPlotInputMap, PanMod} p <*> #{peek ImPlotInputMap, Fit} p <*> #{peek ImPlotInputMap, Select} p <*> #{peek ImPlotInputMap, SelectCancel} p <*> #{peek ImPlotInputMap, SelectMod} p <*> #{peek ImPlotInputMap, SelectHorzMod} p <*> #{peek ImPlotInputMap, SelectVertMod} p <*> #{peek ImPlotInputMap, Menu} p <*> #{peek ImPlotInputMap, OverrideMod} p <*> #{peek ImPlotInputMap, ZoomMod} p <*> #{peek ImPlotInputMap, ZoomRate} p+ poke p v = do+ #{poke ImPlotInputMap, Pan} p v.pan+ #{poke ImPlotInputMap, PanMod} p v.panMod+ #{poke ImPlotInputMap, Fit} p v.fit+ #{poke ImPlotInputMap, Select} p v.select+ #{poke ImPlotInputMap, SelectCancel} p v.selectCancel+ #{poke ImPlotInputMap, SelectMod} p v.selectMod+ #{poke ImPlotInputMap, SelectHorzMod} p v.selectHorzMod+ #{poke ImPlotInputMap, SelectVertMod} p v.selectVertMod+ #{poke ImPlotInputMap, Menu} p v.menu+ #{poke ImPlotInputMap, OverrideMod} p v.overrideMod+ #{poke ImPlotInputMap, ZoomMod} p v.zoomMod+ #{poke ImPlotInputMap, ZoomRate} p v.zoomRate++instance HasField "pan" (Ptr InputMap) (Ptr ImGuiMouseButton) where+ getField = #{ptr ImPlotInputMap, Pan}++instance HasField "panMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, PanMod}++instance HasField "fit" (Ptr InputMap) (Ptr ImGuiMouseButton) where+ getField = #{ptr ImPlotInputMap, Fit}++instance HasField "select" (Ptr InputMap) (Ptr ImGuiMouseButton) where+ getField = #{ptr ImPlotInputMap, Select}++instance HasField "selectCancel" (Ptr InputMap) (Ptr ImGuiMouseButton) where+ getField = #{ptr ImPlotInputMap, SelectCancel}++instance HasField "selectMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, SelectMod}++instance HasField "selectHorzMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, SelectHorzMod}++instance HasField "selectVertMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, SelectVertMod}++instance HasField "menu" (Ptr InputMap) (Ptr ImGuiMouseButton) where+ getField = #{ptr ImPlotInputMap, Menu}++instance HasField "overrideMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, OverrideMod}++instance HasField "zoomMod" (Ptr InputMap) (Ptr CInt) where+ getField = #{ptr ImPlotInputMap, ZoomMod}++instance HasField "zoomRate" (Ptr InputMap) (Ptr Float) where+ getField = #{ptr ImPlotInputMap, ZoomRate}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotInputMap_Init_wrap"+ init+ :: Ptr InputMap+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotInputMap_Destroy_wrap"+ destroy+ :: Ptr InputMap+ -> IO ()++withDefault :: (Ptr InputMap -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)
+ src/DearImGui/Raw/ImPlot/Point.hsc view
@@ -0,0 +1,55 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Point+ ( Point (..)+ , destroy+ , init+ , withDefault+ ) where++import Control.Exception (bracket_)+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++-- by-value+data {-# CTYPE "dcimgui_implot.h" "ImPlotPoint" #-} Point = Point+ { x :: Double+ , y :: Double+ }+ deriving (Eq, Show)+instance Storable Point where+ sizeOf _ = #{size ImPlotPoint}+ alignment _ = #{alignment ImPlotPoint}+ peek p = Point <$> #{peek ImPlotPoint, x} p <*> #{peek ImPlotPoint, y} p+ poke p v = do+ #{poke ImPlotPoint, x} p v.x+ #{poke ImPlotPoint, y} p v.y++instance HasField "x" (Ptr Point) (Ptr Double) where+ getField = #{ptr ImPlotPoint, x}++instance HasField "y" (Ptr Point) (Ptr Double) where+ getField = #{ptr ImPlotPoint, y}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPoint_Init_wrap"+ init+ :: Ptr Point+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotPoint_Destroy_wrap"+ destroy+ :: Ptr Point+ -> IO ()++withDefault :: (Ptr Point -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)
+ src/DearImGui/Raw/ImPlot/Range.hsc view
@@ -0,0 +1,81 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Range+ ( Range (..)+ , clamp+ , contains+ , destroy+ , init+ , size+ , withDefault+ ) where++import Control.Exception (bracket_)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++-- by-value+data {-# CTYPE "dcimgui_implot.h" "ImPlotRange" #-} Range = Range+ { min :: Double+ , max :: Double+ }+ deriving (Eq, Show)+instance Storable Range where+ sizeOf _ = #{size ImPlotRange}+ alignment _ = #{alignment ImPlotRange}+ peek p = Range <$> #{peek ImPlotRange, Min} p <*> #{peek ImPlotRange, Max} p+ poke p v = do+ #{poke ImPlotRange, Min} p v.min+ #{poke ImPlotRange, Max} p v.max++instance HasField "min" (Ptr Range) (Ptr Double) where+ getField = #{ptr ImPlotRange, Min}++instance HasField "max" (Ptr Range) (Ptr Double) where+ getField = #{ptr ImPlotRange, Max}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotRange_Init_wrap"+ init+ :: Ptr Range+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotRange_Destroy_wrap"+ destroy+ :: Ptr Range+ -> IO ()++withDefault :: (Ptr Range -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)++-- functions++-- C: double Clamp(const ImPlotRange* self, double value)+foreign import capi unsafe "dcimgui_implot.h ImPlotRange_Clamp"+ clamp+ :: (Ptr Range) -- ^ self+ -> Double -- ^ value+ -> IO Double++-- C: bool Contains(const ImPlotRange* self, double value)+foreign import capi unsafe "dcimgui_implot.h ImPlotRange_Contains"+ contains+ :: (Ptr Range) -- ^ self+ -> Double -- ^ value+ -> IO CBool++-- C: double Size(const ImPlotRange* self)+foreign import capi unsafe "dcimgui_implot.h ImPlotRange_Size"+ size+ :: (Ptr Range) -- ^ self+ -> IO Double
+ src/DearImGui/Raw/ImPlot/Rect.hsc view
@@ -0,0 +1,85 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Rect+ ( Rect (..)+ , c_contains+ , contains+ , containsDouble+ , destroy+ , init+ , withDefault+ ) where++import Control.Exception (bracket_)+import DearImGui.Raw.ImPlot.Point (Point)+import DearImGui.Raw.ImPlot.Range (Range)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Marshal.Utils (with)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++-- by-value+data {-# CTYPE "dcimgui_implot.h" "ImPlotRect" #-} Rect = Rect+ { x :: Range+ , y :: Range+ }+ deriving (Eq, Show)+instance Storable Rect where+ sizeOf _ = #{size ImPlotRect}+ alignment _ = #{alignment ImPlotRect}+ peek p = Rect <$> #{peek ImPlotRect, X} p <*> #{peek ImPlotRect, Y} p+ poke p v = do+ #{poke ImPlotRect, X} p v.x+ #{poke ImPlotRect, Y} p v.y++instance HasField "x" (Ptr Rect) (Ptr Range) where+ getField = #{ptr ImPlotRect, X}++instance HasField "y" (Ptr Rect) (Ptr Range) where+ getField = #{ptr ImPlotRect, Y}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotRect_Init_wrap"+ init+ :: Ptr Rect+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotRect_Destroy_wrap"+ destroy+ :: Ptr Rect+ -> IO ()++withDefault :: (Ptr Rect -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)++-- functions++foreign import capi unsafe "DearImGuiWrappers.h ImPlotRect_Contains_wrap"+ c_contains+ :: (Ptr Rect) -- ^ self+ -> (Ptr Point) -- ^ p+ -> IO CBool++contains+ :: (Ptr Rect) -- ^ self+ -> Point -- ^ p+ -> IO CBool+contains self p =+ with p $ \pPtr -> c_contains self pPtr++-- C: bool Contains(const ImPlotRect* self, double x, double y)+foreign import capi unsafe "dcimgui_implot.h ImPlotRect_ContainsDouble"+ containsDouble+ :: (Ptr Rect) -- ^ self+ -> Double -- ^ x+ -> Double -- ^ y+ -> IO CBool
+ src/DearImGui/Raw/ImPlot/Spec.hsc view
@@ -0,0 +1,135 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Spec+ ( Spec (..)+ , destroy+ , init+ , withDefault+ ) where++import Control.Exception (bracket_)+import DearImGui.Raw (ImU32)+import DearImGui.Raw.ImPlot.Enums.ItemFlags (ItemFlags)+import DearImGui.Raw.ImPlot.Enums.Marker (Marker)+import DearImGui.Raw.ImVec4 (ImVec4)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++-- by-value+data {-# CTYPE "dcimgui_implot.h" "ImPlotSpec" #-} Spec = Spec+ { lineColor :: ImVec4+ , lineColors :: Ptr ImU32+ , lineWeight :: Float+ , fillColor :: ImVec4+ , fillColors :: Ptr ImU32+ , fillAlpha :: Float+ , marker :: Marker+ , markerSize :: Float+ , markerSizes :: Ptr Float+ , markerLineColor :: ImVec4+ , markerLineColors :: Ptr ImU32+ , markerFillColor :: ImVec4+ , markerFillColors :: Ptr ImU32+ , size :: Float+ , offset :: CInt+ , stride :: CInt+ , flags :: ItemFlags+ }+ deriving (Eq, Show)+instance Storable Spec where+ sizeOf _ = #{size ImPlotSpec}+ alignment _ = #{alignment ImPlotSpec}+ peek p = Spec <$> #{peek ImPlotSpec, LineColor} p <*> #{peek ImPlotSpec, LineColors} p <*> #{peek ImPlotSpec, LineWeight} p <*> #{peek ImPlotSpec, FillColor} p <*> #{peek ImPlotSpec, FillColors} p <*> #{peek ImPlotSpec, FillAlpha} p <*> #{peek ImPlotSpec, Marker} p <*> #{peek ImPlotSpec, MarkerSize} p <*> #{peek ImPlotSpec, MarkerSizes} p <*> #{peek ImPlotSpec, MarkerLineColor} p <*> #{peek ImPlotSpec, MarkerLineColors} p <*> #{peek ImPlotSpec, MarkerFillColor} p <*> #{peek ImPlotSpec, MarkerFillColors} p <*> #{peek ImPlotSpec, Size} p <*> #{peek ImPlotSpec, Offset} p <*> #{peek ImPlotSpec, Stride} p <*> #{peek ImPlotSpec, Flags} p+ poke p v = do+ #{poke ImPlotSpec, LineColor} p v.lineColor+ #{poke ImPlotSpec, LineColors} p v.lineColors+ #{poke ImPlotSpec, LineWeight} p v.lineWeight+ #{poke ImPlotSpec, FillColor} p v.fillColor+ #{poke ImPlotSpec, FillColors} p v.fillColors+ #{poke ImPlotSpec, FillAlpha} p v.fillAlpha+ #{poke ImPlotSpec, Marker} p v.marker+ #{poke ImPlotSpec, MarkerSize} p v.markerSize+ #{poke ImPlotSpec, MarkerSizes} p v.markerSizes+ #{poke ImPlotSpec, MarkerLineColor} p v.markerLineColor+ #{poke ImPlotSpec, MarkerLineColors} p v.markerLineColors+ #{poke ImPlotSpec, MarkerFillColor} p v.markerFillColor+ #{poke ImPlotSpec, MarkerFillColors} p v.markerFillColors+ #{poke ImPlotSpec, Size} p v.size+ #{poke ImPlotSpec, Offset} p v.offset+ #{poke ImPlotSpec, Stride} p v.stride+ #{poke ImPlotSpec, Flags} p v.flags++instance HasField "lineColor" (Ptr Spec) (Ptr ImVec4) where+ getField = #{ptr ImPlotSpec, LineColor}++instance HasField "lineColors" (Ptr Spec) (Ptr (Ptr ImU32)) where+ getField = #{ptr ImPlotSpec, LineColors}++instance HasField "lineWeight" (Ptr Spec) (Ptr Float) where+ getField = #{ptr ImPlotSpec, LineWeight}++instance HasField "fillColor" (Ptr Spec) (Ptr ImVec4) where+ getField = #{ptr ImPlotSpec, FillColor}++instance HasField "fillColors" (Ptr Spec) (Ptr (Ptr ImU32)) where+ getField = #{ptr ImPlotSpec, FillColors}++instance HasField "fillAlpha" (Ptr Spec) (Ptr Float) where+ getField = #{ptr ImPlotSpec, FillAlpha}++instance HasField "marker" (Ptr Spec) (Ptr Marker) where+ getField = #{ptr ImPlotSpec, Marker}++instance HasField "markerSize" (Ptr Spec) (Ptr Float) where+ getField = #{ptr ImPlotSpec, MarkerSize}++instance HasField "markerSizes" (Ptr Spec) (Ptr (Ptr Float)) where+ getField = #{ptr ImPlotSpec, MarkerSizes}++instance HasField "markerLineColor" (Ptr Spec) (Ptr ImVec4) where+ getField = #{ptr ImPlotSpec, MarkerLineColor}++instance HasField "markerLineColors" (Ptr Spec) (Ptr (Ptr ImU32)) where+ getField = #{ptr ImPlotSpec, MarkerLineColors}++instance HasField "markerFillColor" (Ptr Spec) (Ptr ImVec4) where+ getField = #{ptr ImPlotSpec, MarkerFillColor}++instance HasField "markerFillColors" (Ptr Spec) (Ptr (Ptr ImU32)) where+ getField = #{ptr ImPlotSpec, MarkerFillColors}++instance HasField "size" (Ptr Spec) (Ptr Float) where+ getField = #{ptr ImPlotSpec, Size}++instance HasField "offset" (Ptr Spec) (Ptr CInt) where+ getField = #{ptr ImPlotSpec, Offset}++instance HasField "stride" (Ptr Spec) (Ptr CInt) where+ getField = #{ptr ImPlotSpec, Stride}++instance HasField "flags" (Ptr Spec) (Ptr ItemFlags) where+ getField = #{ptr ImPlotSpec, Flags}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotSpec_Init_wrap"+ init+ :: Ptr Spec+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotSpec_Destroy_wrap"+ destroy+ :: Ptr Spec+ -> IO ()++withDefault :: (Ptr Spec -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)
+ src/DearImGui/Raw/ImPlot/Style.hsc view
@@ -0,0 +1,125 @@+{-# LANGUAGE CApiFFI #-}+{-# LANGUAGE PatternSynonyms #-}++-- This file was generated by dear-bindings-ffi. Do not edit by hand.++module DearImGui.Raw.ImPlot.Style+ ( Style+ , colorsLength+ , destroy+ , init+ , withDefault+ ) where++import Control.Exception (bracket_)+import DearImGui.Raw.ImPlot.Enums.Colormap (Colormap)+import DearImGui.Raw.ImVec2 (ImVec2)+import DearImGui.Raw.ImVec4 (ImVec4)+import Foreign.C.Types+import Foreign.Marshal.Alloc (alloca)+import Foreign.Ptr (Ptr, plusPtr)+import Foreign.Storable (Storable (..))+import GHC.Records (HasField (..))+import Prelude hiding (init)++#include "dcimgui_implot.h"++-- structs (opaque)++data Style+instance Storable Style where+ sizeOf _ = #{size ImPlotStyle}+ alignment _ = #{alignment ImPlotStyle}+ peek _ = error "Style: opaque struct, peek not supported in v0"+ poke _ _ = error "Style: opaque struct, poke not supported in v0"++instance HasField "plotDefaultSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, PlotDefaultSize}++instance HasField "plotMinSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, PlotMinSize}++instance HasField "plotBorderSize" (Ptr Style) (Ptr Float) where+ getField = #{ptr ImPlotStyle, PlotBorderSize}++instance HasField "minorAlpha" (Ptr Style) (Ptr Float) where+ getField = #{ptr ImPlotStyle, MinorAlpha}++instance HasField "majorTickLen" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MajorTickLen}++instance HasField "minorTickLen" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MinorTickLen}++instance HasField "majorTickSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MajorTickSize}++instance HasField "minorTickSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MinorTickSize}++instance HasField "majorGridSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MajorGridSize}++instance HasField "minorGridSize" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MinorGridSize}++instance HasField "plotPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, PlotPadding}++instance HasField "labelPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, LabelPadding}++instance HasField "legendPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, LegendPadding}++instance HasField "legendInnerPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, LegendInnerPadding}++instance HasField "legendSpacing" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, LegendSpacing}++instance HasField "mousePosPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, MousePosPadding}++instance HasField "annotationPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, AnnotationPadding}++instance HasField "fitPadding" (Ptr Style) (Ptr ImVec2) where+ getField = #{ptr ImPlotStyle, FitPadding}++instance HasField "digitalPadding" (Ptr Style) (Ptr Float) where+ getField = #{ptr ImPlotStyle, DigitalPadding}++instance HasField "digitalSpacing" (Ptr Style) (Ptr Float) where+ getField = #{ptr ImPlotStyle, DigitalSpacing}++instance HasField "colors" (Ptr Style) (Ptr ImVec4) where+ getField = #{ptr ImPlotStyle, Colors}++colorsLength :: Int+colorsLength = #{const ImPlotCol_COUNT}++instance HasField "colormap" (Ptr Style) (Ptr Colormap) where+ getField = #{ptr ImPlotStyle, Colormap}++instance HasField "useLocalTime" (Ptr Style) (Ptr CBool) where+ getField = #{ptr ImPlotStyle, UseLocalTime}++instance HasField "useISO8601" (Ptr Style) (Ptr CBool) where+ getField = #{ptr ImPlotStyle, UseISO8601}++instance HasField "use24HourClock" (Ptr Style) (Ptr CBool) where+ getField = #{ptr ImPlotStyle, Use24HourClock}++foreign import capi unsafe "DearImGuiWrappers.h ImPlotStyle_Init_wrap"+ init+ :: Ptr Style+ -> IO ()++foreign import capi unsafe "DearImGuiWrappers.h ImPlotStyle_Destroy_wrap"+ destroy+ :: Ptr Style+ -> IO ()++withDefault :: (Ptr Style -> IO a) -> IO a+withDefault k = alloca $ \p -> bracket_ (init p) (destroy p) (k p)