From 05a14b17ce0a77de03f6f86414c162146be69fbc Mon Sep 17 00:00:00 2001 From: Sammy Fatnassi Date: Fri, 30 Sep 2022 22:40:21 +0900 Subject: [PATCH 01/10] Fixed FreeType linking error --- Source/NetImgui.Build.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/NetImgui.Build.cs b/Source/NetImgui.Build.cs index 4a5550a..494572a 100644 --- a/Source/NetImgui.Build.cs +++ b/Source/NetImgui.Build.cs @@ -156,6 +156,8 @@ public NetImgui(TargetInfo Target) bFreeType_Enabled &= bNetImgui_Enabled; if (bFreeType_Enabled){ + AddEngineThirdPartyPrivateStaticDependencies(Target, "UElibPNG"); + AddEngineThirdPartyPrivateStaticDependencies(Target, "zlib"); AddEngineThirdPartyPrivateStaticDependencies(Target, "FreeType2"); } From 26286f58e6e70ad510c143efeb0fabfcdf357663 Mon Sep 17 00:00:00 2001 From: Sammy Fatnassi Date: Sat, 1 Oct 2022 18:39:13 +0900 Subject: [PATCH 02/10] Fixed drawing without FreeType enabled - Without Freetype and all font enabled, resulting texture was 19000+ pixels high. more than can be created on the GPU. - By changing the default 4k width to 8k, we can now fit the glyph in a texture --- Source/Private/NetImguiModule.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Source/Private/NetImguiModule.cpp b/Source/Private/NetImguiModule.cpp index aeb3cbe..bfe0a9e 100644 --- a/Source/Private/NetImguiModule.cpp +++ b/Source/Private/NetImguiModule.cpp @@ -133,7 +133,7 @@ void TryListeningForServer(const FString& ListeningPort) //================================================================================================= void AddFontGroup(FString name, float pxSize, const uint32_t* pFontData, uint32_t FontDataSize, bool extraIconGlyphs, bool appendJapanese=false, const ImWchar* pGlyphRange=nullptr ) { - ImFontConfig Config; + ImFontConfig Config; #if NETIMGUI_FREETYPE_ENABLED Config.FontBuilderFlags |= ImGuiFreeTypeBuilderFlags_LightHinting; // Without this, kanji character looks wrong in smaller font size #endif @@ -393,10 +393,11 @@ void FNetImguiModule::StartupModule() { #if NETIMGUI_ENABLED NetImgui::Startup(); - mpContext = ImGui::CreateContext(); - ImGuiIO& io = ImGui::GetIO(); - io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; - io.Fonts->Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight; + mpContext = ImGui::CreateContext(); + ImGuiIO& io = ImGui::GetIO(); + io.ConfigFlags |= ImGuiConfigFlags_DockingEnable; + io.Fonts->Flags |= ImFontAtlasFlags_NoPowerOfTwoHeight; + io.Fonts->TexDesiredWidth = 8*1024; ImGui::SetCurrentContext(mpContext); //--------------------------------------------------------------------------------------------- From 2de9446ca69dfb87b0d7aa1ac2e0e4ae531ed126 Mon Sep 17 00:00:00 2001 From: phil-vela <93980148+phil-vela@users.noreply.github.com> Date: Wed, 4 Jan 2023 14:08:54 +0000 Subject: [PATCH 03/10] Fix linux build issues with demo actor --- Source/Sample/NetImguiDemoActor.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Sample/NetImguiDemoActor.cpp b/Source/Sample/NetImguiDemoActor.cpp index 7f1901b..160ec88 100644 --- a/Source/Sample/NetImguiDemoActor.cpp +++ b/Source/Sample/NetImguiDemoActor.cpp @@ -136,7 +136,7 @@ void MethodA_DrawImgui_FrameCallback() //--- Showcase using a FString to mix icon and text together --- ImGui::NewLine(); FString titleKenney = FString::Format(TEXT("{0} Game Kenney Icons"), {UTF8_TO_TCHAR(ICON_KI_INFO_CIRCLE)}); - ImGui::TextColored(kColorHighlight, TCHAR_TO_UTF8(*titleKenney)); + ImGui::TextColored(kColorHighlight, "%s", TCHAR_TO_UTF8(*titleKenney)); //--- Showcase using multiple strings that includes normal text and icons, merged together in 1 utf8 string constant --- ImGui::TextUnformatted("I " ICON_KI_HEART " icons in my text."); @@ -150,7 +150,7 @@ void MethodA_DrawImgui_FrameCallback() #if NETIMGUI_FONT_ICON_AWESOME //--- Showcase using a FString to mix icon and text together --- FString titleAwesome = FString::Format(TEXT("{0} Font Awesome Icons"), {UTF8_TO_TCHAR(ICON_FA_CIRCLE_INFO)}); - ImGui::TextColored(kColorHighlight, TCHAR_TO_UTF8(*titleAwesome)); + ImGui::TextColored(kColorHighlight, "%s", TCHAR_TO_UTF8(*titleAwesome)); //--- Showcase using a utf8 string with icons inserted in it as a regular printf string constant --- ImGui::Text(u8"I %s icons in my text.", ICON_FA_HEART); @@ -291,7 +291,7 @@ void ANetImguiDemoActor::MethodC_DrawImgui_ActorTick() //----------------------------------------------------------------------------------------- // Every 'ANetImguiDemoActor' display the following content //----------------------------------------------------------------------------------------- - FString windowName = FString::Format(TEXT("NetImguiDemoActor Tick###{0}"), {reinterpret_cast(this)}); // '###+IntegerID' Generates a unique Window ID so each actor have their own window + FString windowName = FString::Format(TEXT("NetImguiDemoActor Tick###{0}"), {GetTypeHash(this)}); // '###+IntegerID' Generates a unique Window ID so each actor have their own window ImGui::SetNextWindowSize(ImVec2(400.f, 200.f), ImGuiCond_Once); if (ImGui::Begin(TCHAR_TO_UTF8(*windowName))) { From 631a0b851bcdfd0cede284e9f5773d9b12ae5bef Mon Sep 17 00:00:00 2001 From: Sammy Fatnassi Date: Thu, 4 May 2023 20:37:09 +0900 Subject: [PATCH 04/10] Typos --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f5fdac2..b9908df 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,10 @@ This plugins comes with ***Imgui Unreal Commands***, adding Unreal Commands brow - **Dear ImGui's** menu content created in your code, will be displayed and controlled in it (after a connection is established). - The client list comes pre-configured with 3 clients configuration (game, editor, server) that will be automatically connected to when detected. For remote PCs, game consoles or others, create a new client configuration with proper address settings. -6. You can now invoke **Dear ImGui** drawing functions to generate your GUI every frame. - - Any code running on the Game Thread can now invoke make drawing calls (as long as `NetImguiHelper::IsDrawing()` is true) +6. You can now use **Dear ImGui's** drawing functions to generate your GUI every frame. + - Any code running on the Game Thread can make drawing calls (as long as `NetImguiHelper::IsDrawing()` is true) - You can also add a callback to `FNetImguiModule::OnDrawImgui` to be invoked by **UnrealNetImgui** when some drawing is expected. - - The define `NETIMGUI_ENABLED` allows to selectively disable code if planning to remove **NetImgui** on certain game configurations (shipping, ...) + - The define `#if NETIMGUI_ENABLED` allows to selectively disable code if planning to remove **NetImgui** on certain game configurations (shipping, ...) 7. The Unreal build file `NetImgui.Build.cs` contains many option to toggle features/fonts. @@ -108,7 +108,7 @@ void AMyImGuiActor::Tick(float DeltaTime) #if NETIMGUI_ENABLED //--------------------------------------------------------------------------------------------- // Avoid drawing ImGui menus when not expecting a new frame, reducing CPU cost. - // Mandatary when 'bSupportFrameSkip' is emabled in 'NetImgui.Build.cs', otherwise + // Mandatary when 'bSupportFrameSkip' is enabled in 'NetImgui.Build.cs', otherwise // 'Dear ImGui' will assert on a missing 'ImGui::NewFrame()' //--------------------------------------------------------------------------------------------- if( NetImguiHelper::IsDrawing() ) From a22de462aca56aa8599e38ea864b6edb6067c652 Mon Sep 17 00:00:00 2001 From: Sammy Fatnassi Date: Sun, 14 May 2023 18:44:08 +0900 Subject: [PATCH 05/10] Update NetImgui and added ImPlot / NodeEditor - Minor update of NetImgui 1.18 -> 1.19 - Added support for ImPlot library (more indepth data vizualizer possible) - Added support for NodeEditor library (Nodegraph support) - Added samples for NodeEditor --- NetImguiServer/netImguiServer.exe | Bin 940544 -> 939008 bytes Source/NetImgui.Build.cs | 69 +- Source/Private/NetImguiModule.cpp | 41 +- Source/Private/ThirdParty/ImPlot/LICENSE | 21 + Source/Private/ThirdParty/ImPlot/README.md | 178 + Source/Private/ThirdParty/ImPlot/TODO.md | 100 + Source/Private/ThirdParty/ImPlot/implot.cpp | 5756 ++++++++++++++++ .../Private/ThirdParty/ImPlot/implot_demo.cpp | 2454 +++++++ .../ThirdParty/ImPlot/implot_internal.h | 1667 +++++ .../ThirdParty/ImPlot/implot_items.cpp | 2696 ++++++++ .../Private/ThirdParty/NetImgui/LICENSE.txt | 2 +- .../ThirdParty/NetImgui/NetImgui_Api.h | 66 +- .../ThirdParty/NetImgui/NetImgui_Config.h | 11 +- .../NetImgui/Private/NetImgui_Api.cpp | 32 +- .../NetImgui/Private/NetImgui_Client.cpp | 3 +- .../NetImgui/Private/NetImgui_CmdPackets.h | 60 +- .../Private/NetImgui_CmdPackets_DrawFrame.cpp | 2 +- .../Private/NetImgui_NetworkPosix.cpp | 4 +- .../NetImgui/Private/NetImgui_NetworkUE4.cpp | 2 + .../Private/NetImgui_NetworkWin32.cpp | 2 + .../NetImgui/Private/NetImgui_Shared.h | 13 +- .../NetImgui/Private/NetImgui_Shared.inl | 12 +- .../Private/NetImgui_WarningDisable.h | 1 + .../ThirdParty/imgui-node-editor/.gitignore | 11 + .../ThirdParty/imgui-node-editor/LICENSE | 21 + .../imgui-node-editor/crude_json.cpp | 894 +++ .../ThirdParty/imgui-node-editor/crude_json.h | 250 + .../imgui-node-editor/docs/CHANGELOG.txt | 223 + .../imgui-node-editor/docs/README.md | 169 + .../ThirdParty/imgui-node-editor/docs/TODO.md | 14 + .../examples/basic-interaction-example.cpp | 252 + .../examples/netimgui-interaction-example.cpp | 262 + .../examples/widgets-example.cpp | 468 ++ .../imgui-node-editor/imgui_bezier_math.h | 144 + .../imgui-node-editor/imgui_bezier_math.inl | 675 ++ .../imgui-node-editor/imgui_canvas.cpp | 555 ++ .../imgui-node-editor/imgui_canvas.h | 268 + .../imgui-node-editor/imgui_extra_math.h | 73 + .../imgui-node-editor/imgui_extra_math.inl | 189 + .../imgui-node-editor/imgui_node_editor.cpp | 5813 +++++++++++++++++ .../imgui_node_editor_api.cpp | 765 +++ .../imgui_node_editor_internal.h | 1556 +++++ .../imgui_node_editor_internal.inl | 65 + .../Fonts/Cousine_Regular.cpp | 0 .../{Private => Public}/Fonts/Droid_Sans.cpp | 0 .../Fonts/FontAwesome6/fa-brands-400.cpp | 0 .../Fonts/FontAwesome6/fa-regular-400.cpp | 0 .../Fonts/FontAwesome6/fa-solid-900.cpp | 0 .../IPA_Font_License_Agreement_v1.0.txt | 0 .../Fonts/FontIPAexMincho/IPAexMincho.cpp | 0 .../FontIPAexMincho/Readme_ipaexm00102.txt | 0 .../Fonts/FontKenney/CHANGELOG.md | 0 .../Fonts/FontKenney/KenneyIcon.cpp | 0 .../Fonts/FontKenney/LICENSE.md | 0 .../Fonts/FontKenney/README.md | 0 .../Fonts/FontKenney/previewA.png | Bin .../Fonts/FontKenney/previewExpansion.png | Bin .../Fonts/FontMaterialDesign/LICENSE | 0 .../MaterialIcons_Regular.cpp | 0 .../Fonts/FontMaterialDesign/README.md | 0 .../IconFontCppHeader/IconsFontAwesome6.h | 0 .../IconsFontAwesome6Brands.h | 0 .../Fonts/IconFontCppHeader/IconsKenney.h | 0 .../IconFontCppHeader/IconsMaterialDesign.h | 0 .../Fonts/IconFontCppHeader/README.md | 0 .../Fonts/IconFontCppHeader/licence.txt | 0 .../Fonts/Karla_Regular.cpp | 0 .../{Private => Public}/Fonts/Proggy_Tiny.cpp | 0 .../Fonts/Roboto_Medium.cpp | 0 Source/Public/NetImguiModule.h | 32 +- .../DearImgui => Public}/imconfig.h | 14 +- .../ThirdParty/DearImgui => Public}/imgui.h | 0 Source/Public/imgui_node_editor.h | 513 ++ Source/Public/implot.h | 1292 ++++ Source/Sample/NetImguiDemoActor.cpp | 28 + Source/Sample/NetImguiDemoNodeEditor.cpp | 120 + Source/Sample/NetImguiDemoNodeEditor.h | 31 + Source/Sample/Readme.txt | 13 +- 78 files changed, 27781 insertions(+), 121 deletions(-) create mode 100644 Source/Private/ThirdParty/ImPlot/LICENSE create mode 100644 Source/Private/ThirdParty/ImPlot/README.md create mode 100644 Source/Private/ThirdParty/ImPlot/TODO.md create mode 100644 Source/Private/ThirdParty/ImPlot/implot.cpp create mode 100644 Source/Private/ThirdParty/ImPlot/implot_demo.cpp create mode 100644 Source/Private/ThirdParty/ImPlot/implot_internal.h create mode 100644 Source/Private/ThirdParty/ImPlot/implot_items.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/.gitignore create mode 100644 Source/Private/ThirdParty/imgui-node-editor/LICENSE create mode 100644 Source/Private/ThirdParty/imgui-node-editor/crude_json.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/crude_json.h create mode 100644 Source/Private/ThirdParty/imgui-node-editor/docs/CHANGELOG.txt create mode 100644 Source/Private/ThirdParty/imgui-node-editor/docs/README.md create mode 100644 Source/Private/ThirdParty/imgui-node-editor/docs/TODO.md create mode 100644 Source/Private/ThirdParty/imgui-node-editor/examples/basic-interaction-example.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/examples/netimgui-interaction-example.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/examples/widgets-example.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_bezier_math.h create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_bezier_math.inl create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_canvas.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_canvas.h create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_extra_math.h create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_extra_math.inl create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_node_editor.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_node_editor_api.cpp create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_node_editor_internal.h create mode 100644 Source/Private/ThirdParty/imgui-node-editor/imgui_node_editor_internal.inl rename Source/{Private => Public}/Fonts/Cousine_Regular.cpp (100%) rename Source/{Private => Public}/Fonts/Droid_Sans.cpp (100%) rename Source/{Private => Public}/Fonts/FontAwesome6/fa-brands-400.cpp (100%) rename Source/{Private => Public}/Fonts/FontAwesome6/fa-regular-400.cpp (100%) rename Source/{Private => Public}/Fonts/FontAwesome6/fa-solid-900.cpp (100%) rename Source/{Private => Public}/Fonts/FontIPAexMincho/IPA_Font_License_Agreement_v1.0.txt (100%) rename Source/{Private => Public}/Fonts/FontIPAexMincho/IPAexMincho.cpp (100%) rename Source/{Private => Public}/Fonts/FontIPAexMincho/Readme_ipaexm00102.txt (100%) rename Source/{Private => Public}/Fonts/FontKenney/CHANGELOG.md (100%) rename Source/{Private => Public}/Fonts/FontKenney/KenneyIcon.cpp (100%) rename Source/{Private => Public}/Fonts/FontKenney/LICENSE.md (100%) rename Source/{Private => Public}/Fonts/FontKenney/README.md (100%) rename Source/{Private => Public}/Fonts/FontKenney/previewA.png (100%) rename Source/{Private => Public}/Fonts/FontKenney/previewExpansion.png (100%) rename Source/{Private => Public}/Fonts/FontMaterialDesign/LICENSE (100%) rename Source/{Private => Public}/Fonts/FontMaterialDesign/MaterialIcons_Regular.cpp (100%) rename Source/{Private => Public}/Fonts/FontMaterialDesign/README.md (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/IconsFontAwesome6.h (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/IconsFontAwesome6Brands.h (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/IconsKenney.h (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/IconsMaterialDesign.h (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/README.md (100%) rename Source/{Private => Public}/Fonts/IconFontCppHeader/licence.txt (100%) rename Source/{Private => Public}/Fonts/Karla_Regular.cpp (100%) rename Source/{Private => Public}/Fonts/Proggy_Tiny.cpp (100%) rename Source/{Private => Public}/Fonts/Roboto_Medium.cpp (100%) rename Source/{Private/ThirdParty/DearImgui => Public}/imconfig.h (93%) rename Source/{Private/ThirdParty/DearImgui => Public}/imgui.h (100%) create mode 100644 Source/Public/imgui_node_editor.h create mode 100644 Source/Public/implot.h create mode 100644 Source/Sample/NetImguiDemoNodeEditor.cpp create mode 100644 Source/Sample/NetImguiDemoNodeEditor.h diff --git a/NetImguiServer/netImguiServer.exe b/NetImguiServer/netImguiServer.exe index 013a11d9b3303499d4ea7c86e75309bbc0d89682..25acc11bcea9127ef44bdc70b97309a2e4287f87 100644 GIT binary patch literal 939008 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�|DY&KR~_o%W9l9RBuo*YO8;Z!|} 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≧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 {hk;&agpuCxE7P0_|!* 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

a5#NH)xK>z^N9@;Vov+fZbMG~T?>_BZ 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�*ES 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

TIdSno)g$3|V9|WBf+w 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

m{-ON)r1|GKsr6^D{~8 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

p1tg& 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%0DgX`D+~e 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 diff --git a/Source/NetImgui.Build.cs b/Source/NetImgui.Build.cs index 494572a..215d12b 100644 --- a/Source/NetImgui.Build.cs +++ b/Source/NetImgui.Build.cs @@ -64,63 +64,94 @@ public NetImgui(TargetInfo Target) List PublicDefinitions = Definitions; #endif - //--------------------------------------------------------------------- + //========================================================================================= // User Configuration: Basic settings - //--------------------------------------------------------------------- + //========================================================================================= + // Toggle NetImgui support here bool bNetImgui_Enabled = true; - + //--------------------------------------------------------------------- + // When true, only redraw Dear ImGui when needed, saving processing. // When enabled, user must check "NetImguiHelper::IsDrawing()" before emiting ImGui draws bool bFrameSkip_Enabled = true; + //--------------------------------------------------------------------- // When true, the plugin will automatically start listening for a connection from the NetImguiServer // You can disable it, and rely on launching the game with netimgui commandline options // or using a UnrealCommand to connect/start listening bool bAutoWaitConnection_Enabled = true; + //--------------------------------------------------------------------- // When true, use the 'FreeType' library to generate the font texture // This means including the Freetype library (already included with editor) in the build // Generates sligthly better result than the default stb_truetype default code bool bFreeType_Enabled = true; + //--------------------------------------------------------------------- // When true, the Dear ImGui demo window will be available in the NetImgui mainmenu bar. // Usefull as a reference on what programmer can do with Dear ImGui bool bDemoImgui_Enabled = true; + //--------------------------------------------------------------------- // When true, the demo actor 'ANetImguiDemoActor' will be available to use in your game. // Can be found in 'NetImguiDemoActor.cpp', demonstrating how to use NetImgui in your own project bool bDemoActor_Enabled = true; + //========================================================================================= + // User Configuration: Dear Imgui extensions + //========================================================================================= + + // When true, enable the Dear Imgui 'ImPlot' library extension. + // Usefull to generates real time plot of data + // See https://github.com/epezent/implot for more info + // Note: Plugin user code can rely on the 'NETIMGUI_IMPLOT_ENABLED' + // define to know if this extension is active + bool bImPlot_Enabled = true; //--------------------------------------------------------------------- + + // When true, enable the Dear Imgui 'Node-Editor' library extension. + // Usefull to generate node based editors + // See https://github.com/thedmd/imgui-node-editor for more info + // Note: Plugin user code can rely on the 'NETIMGUI_NODE_EDITOR_ENABLED' + // define to know if this extension is active + bool bNodeEditor_Enabled = true; + + //========================================================================================= // User Configuration: Fonts - //--------------------------------------------------------------------- + //========================================================================================= // See 'NetImguiModule.h' for more details // Note: Can either have IconAwesome or IconMaterialDesign enabled, not both + //--------------------------------------------------------------------- // Will load Japanese font // Note: If not using Japanese, set this to false, saves on memory (avoids 6MB font data table source include) bool bFontJapanese_Enabled = true; + //--------------------------------------------------------------------- // Will load the 'Kenney Game Icons' font // Gaming oriented icons bool bFontIconGameKenney_Enabled = true; + //--------------------------------------------------------------------- // Will load the 'FontAwesome 6' font ('free' subset) // Contains various icons for every use bool bFontIconAwesome_Enabled = true; + //--------------------------------------------------------------------- // Will load 'Google Material Designs icons' font // Contains various icons for every use bool bFontIconMaterialDesign_Enabled = false; - //--------------------------------------------------------------------- + //========================================================================================= // User Configuration: Network - //--------------------------------------------------------------------- + //========================================================================================= + // Com Port used by this client, to try connecting to the remote NetImgui Server (8888 by default) // Used when engine is launched with command line parameter 'netimguiserver' to request a connection // attempt, instead of waiting for server to reach the game string kRemoteConnectPort = "(NetImgui::kDefaultServerPort)"; + //--------------------------------------------------------------------- // Com Port used by Game exe to wait for a connection from netImgui Server (8889 by default) // NetImgui Server will try to find running game client on this port and connect to them @@ -130,18 +161,20 @@ public NetImgui(TargetInfo Target) // Alternatively, you can modify the connection code in 'FNetImguiModule::StartupModule()' // to let the client connect directly to NetImGui server using 'NetImgui::ConnectToApp(ServerIP)' string kGameListenPort = "(NetImgui::kDefaultClientPort)"; + //--------------------------------------------------------------------- // Com Port used by Editor exe to wait for a connection from netImgui Server (8890 by default) // NetImgui Server will try to find running editor client on this port and connect to them string kEditorListenPort = "(NetImgui::kDefaultClientPort+1)"; + //--------------------------------------------------------------------- // Com Port used by Dedicated Server exe to wait for a connection from netImgui Server (8891 by default) // NetImgui Server will try to find running dedicaed server client on this port and connect to them string kDedicatedServerListenPort = "(NetImgui::kDefaultClientPort+2)"; - - //--------------------------------------------------------------------- + + //========================================================================================= // Plugin setup (no edit should be needed) - //--------------------------------------------------------------------- + //========================================================================================= // Developer modules are automatically loaded only in editor builds but can be stripped out from other builds. // Enable runtime loader, if you want this module to be automatically loaded in runtime builds (monolithic). @@ -172,9 +205,11 @@ public NetImgui(TargetInfo Target) PublicDefinitions.Add(string.Format("NETIMGUI_ENABLED={0}", bNetImgui_Enabled ? 1 : 0)); PublicDefinitions.Add(string.Format("NETIMGUI_FRAMESKIP_ENABLED={0}", bFrameSkip_Enabled ? 1 : 0)); PublicDefinitions.Add(string.Format("NETIMGUI_WAITCONNECTION_AUTO_ENABLED={0}", bAutoWaitConnection_Enabled ? 1 : 0)); - PublicDefinitions.Add(string.Format("NETIMGUI_FREETYPE_ENABLED={0}", bFreeType_Enabled ? 1 : 0)); - PublicDefinitions.Add(string.Format("NETIMGUI_DEMO_IMGUI_ENABLED={0}", bDemoImgui_Enabled ? 1 : 0)); - PublicDefinitions.Add(string.Format("NETIMGUI_DEMO_ACTOR_ENABLED={0}", bDemoActor_Enabled ? 1 : 0)); + PublicDefinitions.Add(string.Format("NETIMGUI_FREETYPE_ENABLED={0}", bNetImgui_Enabled && bFreeType_Enabled ? 1 : 0)); + PublicDefinitions.Add(string.Format("NETIMGUI_IMPLOT_ENABLED={0}", bNetImgui_Enabled && bImPlot_Enabled ? 1 : 0)); + PublicDefinitions.Add(string.Format("NETIMGUI_NODE_EDITOR_ENABLED={0}", bNetImgui_Enabled && bNodeEditor_Enabled ? 1 : 0)); + PublicDefinitions.Add(string.Format("NETIMGUI_DEMO_IMGUI_ENABLED={0}", bNetImgui_Enabled && bDemoImgui_Enabled ? 1 : 0)); + PublicDefinitions.Add(string.Format("NETIMGUI_DEMO_ACTOR_ENABLED={0}", bNetImgui_Enabled && bDemoActor_Enabled ? 1 : 0)); // Fonts support PublicDefinitions.Add(string.Format("NETIMGUI_FONT_JAPANESE={0}", bFontJapanese_Enabled ? 1 : 0)); @@ -191,6 +226,16 @@ public NetImgui(TargetInfo Target) // Misc PrivateDefinitions.Add("NETIMGUI_WINSOCKET_ENABLED=0"); // Using Unreal sockets, no need for built-in sockets PrivateDefinitions.Add("NETIMGUI_POSIX_SOCKETS_ENABLED=0"); // Using Unreal sockets, no need for built-in sockets + + PublicDefinitions.Add("IMGUI_API=NETIMGUI_API"); + PublicDefinitions.Add("IMPLOT_API=NETIMGUI_API"); + PublicDefinitions.Add("IM_NODE_EDITOR_API=NETIMGUI_API"); + + if (bFreeType_Enabled) + { + PublicDefinitions.Add("IMGUI_ENABLE_FREETYPE"); + } + PrivateDefinitions.Add(string.Format("RUNTIME_LOADER_ENABLED={0}", bEnableRuntimeLoader ? 1 : 0)); } } diff --git a/Source/Private/NetImguiModule.cpp b/Source/Private/NetImguiModule.cpp index bfe0a9e..f6a340b 100644 --- a/Source/Private/NetImguiModule.cpp +++ b/Source/Private/NetImguiModule.cpp @@ -47,6 +47,7 @@ // Misc //================================================================================================= #include "ImUnrealCommand.h" +#include "Sample\NetImguiDemoNodeEditor.h" #if IMGUI_UNREAL_COMMAND_ENABLED static ImUnrealCommand::CommandContext* spImUnrealCommandContext = nullptr; #endif @@ -297,20 +298,36 @@ void FNetImguiModule::Update() //---------------------------------------------------------------------------- #if NETIMGUI_DEMO_IMGUI_ENABLED static bool sbShowDemoImgui = false; + if( sbShowDemoImgui ){ + ImGui::ShowDemoWindow(&sbShowDemoImgui); + } + #if NETIMGUI_IMPLOT_ENABLED + static bool sbShowDemoImPlot = false; + if( sbShowDemoImPlot ){ + ImPlot::ShowDemoWindow(&sbShowDemoImPlot); + } + #endif + #if NETIMGUI_NODE_EDITOR_ENABLED + static bool sbShowDemoNodeEditor = false; + NodeEditorDemo::ShowDemo(sbShowDemoNodeEditor); + #endif if (ImGui::BeginMainMenuBar()) { if( ImGui::BeginMenu("NetImgui") ){ ImGui::MenuItem("Demo: Dear Imgui", nullptr, &sbShowDemoImgui); + #if NETIMGUI_IMPLOT_ENABLED + ImGui::MenuItem("Demo: ImPlot", nullptr, &sbShowDemoImPlot); + #endif + #if NETIMGUI_NODE_EDITOR_ENABLED + ImGui::MenuItem("Demo: Node Editor", nullptr, &sbShowDemoNodeEditor); + #endif ImGui::EndMenu(); } ImGui::EndMainMenuBar(); } - - if( sbShowDemoImgui ){ - ImGui::ShowDemoWindow(&sbShowDemoImgui); - } - #endif + #endif // NETIMGUI_DEMO_IMGUI_ENABLED + //---------------------------------------------------------------------------- // Ask all listener to draw their Dear ImGui content //---------------------------------------------------------------------------- @@ -318,6 +335,7 @@ void FNetImguiModule::Update() } } } + //================================================================================================= // SetDefaultFont //------------------------------------------------------------------------------------------------- @@ -400,6 +418,10 @@ void FNetImguiModule::StartupModule() io.Fonts->TexDesiredWidth = 8*1024; ImGui::SetCurrentContext(mpContext); +#if NETIMGUI_IMPLOT_ENABLED + mpImPlotContext = ImPlot::CreateContext(); +#endif + //--------------------------------------------------------------------------------------------- // Load our Font // IMPORTANT: Must be added in same order as enum 'FNetImguiModule::eFont' @@ -476,6 +498,15 @@ void FNetImguiModule::ShutdownModule() NetImgui::EndFrame(); NetImgui::Shutdown(); +#if NETIMGUI_IMPLOT_ENABLED + ImPlot::DestroyContext(mpImPlotContext); + mpImPlotContext = nullptr; +#endif + +#if NETIMGUI_NODE_EDITOR_ENABLED + NodeEditorDemo::Release(); +#endif + ImGui::DestroyContext(mpContext); mpContext = nullptr; diff --git a/Source/Private/ThirdParty/ImPlot/LICENSE b/Source/Private/ThirdParty/ImPlot/LICENSE new file mode 100644 index 0000000..3995ef7 --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Evan Pezent + +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. diff --git a/Source/Private/ThirdParty/ImPlot/README.md b/Source/Private/ThirdParty/ImPlot/README.md new file mode 100644 index 0000000..ce82e90 --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/README.md @@ -0,0 +1,178 @@ +# ImPlot +ImPlot is an immediate mode, GPU accelerated plotting library for [Dear ImGui](https://github.com/ocornut/imgui). It aims to provide a first-class API that ImGui fans will love. ImPlot is well suited for visualizing program data in real-time or creating interactive plots, and requires minimal code to integrate. Just like ImGui, it does not burden the end user with GUI state management, avoids STL containers and C++ headers, and has no external dependencies except for ImGui itself. + + + + + + + + + + + + +## Features + +- GPU accelerated rendering +- multiple plot types: + - line plots + - shaded plots + - scatter plots + - vertical/horizontal/stacked bars graphs + - vertical/horizontal error bars + - stem plots + - stair plots + - pie charts + - heatmap charts + - 1D/2D histograms + - images + - and more likely to come +- mix/match multiple plot items on a single plot +- configurable axes ranges and scaling (linear/log) +- subplots +- time formatted x-axes (US formatted or ISO 8601) +- reversible and lockable axes +- multiple x-axes and y-axes +- controls for zooming, panning, box selection, and auto-fitting data +- controls for creating persistent query ranges (see demo) +- several plot styling options: 10 marker types, adjustable marker sizes, line weights, outline colors, fill colors, etc. +- 16 built-in colormaps and support for and user-added colormaps +- optional plot titles, axis labels, and grid labels +- optional and configurable legends with toggle buttons to quickly show/hide plot items +- default styling based on current ImGui theme, or completely custom plot styles +- customizable data getters and data striding (just like ImGui:PlotLine) +- accepts data as float, double, and 8, 16, 32, and 64-bit signed/unsigned integral types +- and more! (see Announcements [2022](https://github.com/epezent/implot/discussions/370)/[2021](https://github.com/epezent/implot/issues/168)/[2020](https://github.com/epezent/implot/issues/48)) + +## Usage + +The API is used just like any other ImGui `BeginX`/`EndX` pair. First, start a new plot with `ImPlot::BeginPlot()`. Next, plot as many items as you want with the provided `PlotX` functions (e.g. `PlotLine()`, `PlotBars()`, `PlotScatter()`, etc). Finally, wrap things up with a call to `ImPlot::EndPlot()`. That's it! + +```cpp +int bar_data[11] = ...; +float x_data[1000] = ...; +float y_data[1000] = ...; + +ImGui::Begin("My Window"); +if (ImPlot::BeginPlot("My Plot")) { + ImPlot::PlotBars("My Bar Plot", bar_data, 11); + ImPlot::PlotLine("My Line Plot", x_data, y_data, 1000); + ... + ImPlot::EndPlot(); +} +ImGui::End(); +``` + +![Usage](https://raw.githubusercontent.com/wiki/epezent/implot/screenshots3/example.PNG) + + +Of course, there's much more you can do with ImPlot... + +## Demos + +A comprehensive example of ImPlot's features can be found in `implot_demo.cpp`. Add this file to your sources and call `ImPlot::ShowDemoWindow()` somewhere in your update loop. You are encouraged to use this file as a reference when needing to implement various plot types. The demo is always updated to show new plot types and features as they are added, so check back with each release! + +An online version of the demo is hosted [here](https://traineq.org/implot_demo/src/implot_demo.html). You can view the plots and the source code that generated them. Note that this demo may not always be up to date and is not as performant as a desktop implementation, but it should give you a general taste of what's possible with ImPlot. Special thanks to [pthom](https://github.com/pthom) for creating and hosting this! + +More sophisticated demos requiring lengthier code and/or third-party libraries can be found in a separate repository: [implot_demos](https://github.com/epezent/implot_demos). Here, you will find advanced signal processing and ImPlot usage in action. Please read the `Contributing` section of that repository if you have an idea for a new demo! + +## Integration + +0) Set up an [ImGui](https://github.com/ocornut/imgui) environment if you don't already have one. +1) Add `implot.h`, `implot_internal.h`, `implot.cpp`, `implot_items.cpp` and optionally `implot_demo.cpp` to your sources. Alternatively, you can get ImPlot using [vcpkg](https://github.com/microsoft/vcpkg/tree/master/ports/implot). +2) Create and destroy an `ImPlotContext` wherever you do so for your `ImGuiContext`: + +```cpp +ImGui::CreateContext(); +ImPlot::CreateContext(); +... +ImPlot::DestroyContext(); +ImGui::DestroyContext(); +``` + +You should be good to go! + +## Installing ImPlot using vcpkg + +You can download and install ImPlot using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: + +```bash +git clone https://github.com/Microsoft/vcpkg.git +cd vcpkg +./bootstrap-vcpkg.sh +./vcpkg integrate install +./vcpkg install implot +``` + +The ImPlot port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +## Extremely Important Note + +Dear ImGui uses **16-bit indexing by default**, so high-density ImPlot widgets like `ImPlot::PlotHeatmap()` may produce too many vertices into `ImDrawList`, which causes an assertion failure and will result in data truncation and/or visual glitches. Therefore, it is **HIGHLY** recommended that you EITHER: + +- **Option 1:** Enable 32-bit indices by uncommenting `#define ImDrawIdx unsigned int` in your ImGui [`imconfig.h`](https://github.com/ocornut/imgui/blob/master/imconfig.h#L89) file. +- **Option 2:** Handle the `ImGuiBackendFlags_RendererHasVtxOffset` flag in your renderer if you must use 16-bit indices. Many of the default ImGui rendering backends already support `ImGuiBackendFlags_RendererHasVtxOffset`. Refer to [this issue](https://github.com/ocornut/imgui/issues/2591) for more information. + +## FAQ + +**Q: Why?** + +A: ImGui is an incredibly powerful tool for rapid prototyping and development, but provides only limited mechanisms for data visualization. Two dimensional plots are ubiquitous and useful to almost any application. Being able to visualize your data in real-time will give you insight and better understanding of your application. + +**Q: Is ImPlot the right plotting library for me?** + +A: If you're looking to generate publication quality plots and/or export plots to a file, ImPlot is NOT the library for you! ImPlot is geared toward plotting application data at realtime speeds with high levels of interactivity. ImPlot does its best to create pretty plots (indeed, there are quite a few styling options available), but it will always favor function over form. + +**Q: Where is the documentation?** + +A: The API is thoroughly commented in `implot.h`, and the demo in `implot_demo.cpp` should be more than enough to get you started. Also take a look at the [implot_demos](https://github.com/epezent/implot_demos) repository. + +**Q: Is ImPlot suitable for plotting large datasets?** + +A: Yes, within reason. You can plot tens to hundreds of thousands of points without issue, but don't expect millions to be a buttery smooth experience. That said, you can always downsample extremely large datasets by telling ImPlot to stride your data at larger intervals if needed. Also try the experimental `backends` branch which aims to provide GPU acceleration support. + +**Q: What data types can I plot?** + +A: ImPlot plotting functions accept most scalar types: +`float`, `double`, `int8`, `uint8`, `int16`, `uint16`, `int32`, `uint32`, `int64`, `uint64`. Arrays of custom structs or classes (e.g. `Vector2f` or similar) are easily passed to ImPlot functions using the built-in striding features (see `implot.h` for documentation), and many plotters provide a "getter" overload which accepts data generating callbacks. You can fully customize the list of accepted types by defining `IMPLOT_CUSTOM_NUMERIC_TYPES` at compile time: see doc in `implot_items.cpp`. + +**Q: Can plot styles be modified?** + +A: Yes. Data colormaps and various styling colors and variables can be pushed/popped or modified permanently on startup. Three default styles are available, as well as an automatic style that attempts to match you ImGui style. + +**Q: Does ImPlot support logarithmic scaling or time formatting?** + +A: Yep! Both logscale and timescale are supported. + +**Q: Does ImPlot support multiple y-axes? x-axes?** + +A: Yes. Up to three x-axes and three y-axes can be enabled. + +**Q: Does ImPlot support [insert plot type]?** + +A: Maybe. Check the demo, gallery, or Announcements ([2020](https://github.com/epezent/implot/issues/48)/[2021](https://github.com/epezent/implot/issues/168))to see if your desired plot type is shown. If not, consider submitting an issue or better yet, a PR! + +**Q: Does ImPlot support 3D plots?** + +A: No, and likely never will since ImGui only deals in 2D rendering. + +**Q: My plot lines look like crap!** + +A: By default, no anti-aliasing is done on line plots for performance gains. If you use at least 4x MSAA, then you likely won't even notice. However, you can enable software AA per-plot with the `ImPlotFlags_AntiAliased` flag, or globally with `ImPlot::GetStyle().AntiAliasedLines = true;`. + +**Q: Does ImPlot provide analytic tools?** + +A: Not exactly, but it does give you the ability to query plot sub-ranges, with which you can process your data however you like. + +**Q: Can plots be exported/saved to image?** + +A: Not currently. Use your OS's screen capturing mechanisms if you need to capture a plot. ImPlot is not suitable for rendering publication quality plots; it is only intended to be used as a visualization tool. Post-process your data with MATLAB or matplotlib for these purposes. + +**Q: Can I compile ImPlot as a dynamic library?** + +A: Like ImGui, it is recommended that you compile and link ImPlot as a *static* library or directly as a part of your sources. However, if you must and are compiling ImPlot and ImGui as separate DLLs, make sure you set the current *ImGui* context with `ImPlot::SetImGuiContext(ImGuiContext* ctx)`. This ensures that global ImGui variables are correctly shared across the DLL boundary. + +**Q: Can ImPlot be used with other languages/bindings?** + +A: Yes, you can use the generated C binding, [cimplot](https://github.com/cimgui/cimplot) with most high level languages. [DearPyGui](https://github.com/hoffstadt/DearPyGui) provides a Python wrapper, among other things. [imgui-java](https://github.com/SpaiR/imgui-java) provides bindings for Java. A Rust binding, [implot-rs](https://github.com/4bb4/implot-rs), is currently in the works. An example using Emscripten can be found [here](https://github.com/pthom/implot_demo). diff --git a/Source/Private/ThirdParty/ImPlot/TODO.md b/Source/Private/ThirdParty/ImPlot/TODO.md new file mode 100644 index 0000000..2b6fcdc --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/TODO.md @@ -0,0 +1,100 @@ +The list below represents a combination of high-priority work, nice-to-have features, and random ideas. We make no guarantees that all of this work will be completed or even started. If you see something that you need or would like to have, let us know, or better yet consider submitting a PR for the feature. + +## API + +## Axes + +- add flag to remove weekends on Time axis +- pixel space scale (`ImPlotTransform_Display`), normalized space scale (`ImPlotTransform_Axes`), data space scale (`ImPlotTransform_Data`) +- make ImPlotFlags_Equal not a flag -> `SetupEqual(ImPlotAxis x, ImPlotAxis y)` +- allow inverted arguments `SetAxes` to transpose data? +- `SetupAxisColors()` +- `SetupAxisHome()` + +## Plot Items + +- add `PlotBubbles` (see MATLAB bubble chart) +- add non-zero references for `PlotBars` etc. +- add exploding to `PlotPieChart` (on hover-highlight?) +- fix appearance of `PlotBars` spacing + +## Styling + +- support gradient and/or colormap sampled fills (e.g. ImPlotFillStyle_) +- API for setting different fonts for plot elements + +## Colormaps + +- gradient editing tool +- `RemoveColormap` +- `enum ImPlotColorRule_ { Solid, Faded, XValue, YValue, ZValue }` + +## Legend + +- `ImPlotLegendFlags_Scroll` +- improve legend icons (e.g. adopt markers, gradients, etc) +- make legend frame use ButtonBehavior (maybe impossible) + +## Tools / Misc. + +- add `IsPlotChanging` to detect change in limits +- add ability to extend plot/axis context menus +- add LTTB downsampling for lines +- add box selection to axes +- first frame render delay might fix "fit pop" effect +- move some code to new `implot_tools.cpp` +- ColormapSlider (see metrics) +- FillAlpha should not affect markers? +- fix mouse text for time axes + +## Optimizations + +- find faster way to buffer data into ImDrawList (very slow) +- reduce number of calls to `PushClipRect` +- explore SIMD operations for high density plot items + +## Plotter Pipeline + +Ideally every `PlotX` function should use our faster rendering pipeline when it is applicable. + +` User Data > Getter > Fitter > Renderer > RenderPrimitives` + +|Plotter|Getter|Fitter|Renderer|RenderPrimitives| +|---|:-:|:-:|:-:|:-:| +|PlotLine|Yes|Yes|Yes|Yes| +|PlotScatter|Yes|Yes|Yes|Yes| +|PlotStairs|Yes|Yes|Yes|Yes| +|PlotShaded|Yes|Yes|Yes|Yes| +|PlotBars|Yes|Yes|Yes|Yes| +|PlotBarGroups|:|:|:|:| +|PlotHistogram|:|:|:|:| +|PlotErrorBars|Yes|Yes|No|No| +|PlotStems|Yes|Yes|Yes|Yes| +|PlotInfLines|Yes|Yes|Yes|Yes| +|PlotPieChart|No|No|No|No| +|PlotHeatmap|Yes|No|Yes|Mixed| +|PlotHistogram2D|:|:|:|:| +|PlotDigital|Yes|No|No|No| +|PlotImage|-|-|-|-| +|PlotText|-|-|-|-| +|PlotDummy|-|-|-|-| + +## Completed +- make BeginPlot take fewer args: +- make query a tool -> `DragRect` +- rework DragLine/Point to use ButtonBehavior +- add support for multiple x-axes and don't limit count to 3 +- make axis side configurable (top/left, right/bottom) via new flag `ImPlotAxisFlags_Opposite` +- add support for setting tick label strings via callback +- give each axis an ID, remove ad-hoc DND solution +- allow axis to be drag to opposite side (ala ImGui Table headers) +- legend items can be hovered even if plot is not +- fix frame delay on DragX tools +- remove tag from drag line/point -> add `Tag` tool +- add shortcut/legacy overloads for BeginPlot +- `SetupAxisConstraints()` +- `SetupAxisScale()` +- add `ImPlotLineFlags`, `ImPlotBarsFlags`, etc. for each plot type +- add `PlotBarGroups` wrapper that makes rendering groups of bars easier, with stacked bar support +- `PlotBars` restore outlines +- add hover/active color for plot axes diff --git a/Source/Private/ThirdParty/ImPlot/implot.cpp b/Source/Private/ThirdParty/ImPlot/implot.cpp new file mode 100644 index 0000000..4a1f5fd --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/implot.cpp @@ -0,0 +1,5756 @@ +// MIT License + +// Copyright (c) 2022 Evan Pezent + +// 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 v0.14 + +/* + +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. + +- 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 unecessary 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. + +*/ + +#if NETIMGUI_IMPLOT_ENABLED // @EDIT to avoid compiling this library when not requested + +#define IMGUI_DEFINE_MATH_OPERATORS +#include "implot.h" +#include "implot_internal.h" + +#include + +// 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 + +// 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 +#elif defined(__GNUC__) +#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked +#endif + +// Global plot context +#ifndef GImPlot +ImPlotContext* GImPlot = nullptr; +#endif + +//----------------------------------------------------------------------------- +// Struct Implementations +//----------------------------------------------------------------------------- + +ImPlotInputMap::ImPlotInputMap() { + ImPlot::MapInputDefault(this); +} + +ImPlotStyle::ImPlotStyle() { + + LineWeight = 1; + Marker = ImPlotMarker_None; + MarkerSize = 4; + MarkerWeight = 1; + FillAlpha = 1; + ErrorBarSize = 5; + ErrorBarWeight = 1.5f; + DigitalBitHeight = 8; + DigitalBitGap = 4; + + 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); + PlotDefaultSize = ImVec2(400,300); + PlotMinSize = ImVec2(200,150); + + 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] = { + "Line", + "Fill", + "MarkerOutline", + "MarkerFill", + "ErrorBar", + "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_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"; + default: return ""; + } +} + +ImVec4 GetAutoColor(ImPlotCol idx) { + ImVec4 col(0,0,0,1); + switch(idx) { + case ImPlotCol_Line: return col; // these are plot dependent! + case ImPlotCol_Fill: return col; // these are plot dependent! + case ImPlotCol_MarkerOutline: return col; // these are plot dependent! + case ImPlotCol_MarkerFill: return col; // these are plot dependent! + case ImPlotCol_ErrorBar: return ImGui::GetStyleColorVec4(ImGuiCol_Text); + 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, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, LineWeight) }, // ImPlotStyleVar_LineWeight + { ImGuiDataType_S32, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, Marker) }, // ImPlotStyleVar_Marker + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, MarkerSize) }, // ImPlotStyleVar_MarkerSize + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, MarkerWeight) }, // ImPlotStyleVar_MarkerWeight + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, FillAlpha) }, // ImPlotStyleVar_FillAlpha + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, ErrorBarSize) }, // ImPlotStyleVar_ErrorBarSize + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, ErrorBarWeight) }, // ImPlotStyleVar_ErrorBarWeight + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, DigitalBitHeight) }, // ImPlotStyleVar_DigitalBitHeight + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, DigitalBitGap) }, // ImPlotStyleVar_DigitalBitGap + + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, PlotBorderSize) }, // ImPlotStyleVar_PlotBorderSize + { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImPlotStyle, MinorAlpha) }, // ImPlotStyleVar_MinorAlpha + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MajorTickLen) }, // ImPlotStyleVar_MajorTickLen + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MinorTickLen) }, // ImPlotStyleVar_MinorTickLen + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MajorTickSize) }, // ImPlotStyleVar_MajorTickSize + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MinorTickSize) }, // ImPlotStyleVar_MinorTickSize + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MajorGridSize) }, // ImPlotStyleVar_MajorGridSize + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MinorGridSize) }, // ImPlotStyleVar_MinorGridSize + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, PlotPadding) }, // ImPlotStyleVar_PlotPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, LabelPadding) }, // ImPlotStyleVar_LabelPaddine + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, LegendPadding) }, // ImPlotStyleVar_LegendPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, LegendInnerPadding) }, // ImPlotStyleVar_LegendInnerPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, LegendSpacing) }, // ImPlotStyleVar_LegendSpacing + + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, MousePosPadding) }, // ImPlotStyleVar_MousePosPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, AnnotationPadding) }, // ImPlotStyleVar_AnnotationPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, FitPadding) }, // ImPlotStyleVar_FitPadding + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, PlotDefaultSize) }, // ImPlotStyleVar_PlotDefaultSize + { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImPlotStyle, PlotMinSize) } // ImPlotStyleVar_PlotMinSize +}; + +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; + ImFont* font = g.Font; + // Align to be pixel perfect + pos.x = IM_FLOOR(pos.x); + pos.y = IM_FLOOR(pos.y); + const float scale = g.FontSize / font->FontSize; + 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[] = {4289753676, 4283598045, 4285048917, 4283584196, 4289950337, 4284512403, 4291005402, 4287401100, 4285839820, 4291671396 }; + const ImU32 Dark[] = {4280031972, 4290281015, 4283084621, 4288892568, 4278222847, 4281597951, 4280833702, 4290740727, 4288256409 }; + const ImU32 Pastel[] = {4289639675, 4293119411, 4291161036, 4293184478, 4289124862, 4291624959, 4290631909, 4293712637, 4294111986 }; + const ImU32 Paired[] = {4293119554, 4290017311, 4287291314, 4281114675, 4288256763, 4280031971, 4285513725, 4278222847, 4292260554, 4288298346, 4288282623, 4280834481}; + const ImU32 Viridis[] = {4283695428, 4285867080, 4287054913, 4287455029, 4287526954, 4287402273, 4286883874, 4285579076, 4283552122, 4280737725, 4280674301 }; + const ImU32 Plasma[] = {4287039501, 4288480321, 4289200234, 4288941455, 4287638193, 4286072780, 4284638433, 4283139314, 4281771772, 4280667900, 4280416752 }; + const ImU32 Hot[] = {4278190144, 4278190208, 4278190271, 4278190335, 4278206719, 4278223103, 4278239231, 4278255615, 4283826175, 4289396735, 4294967295 }; + const ImU32 Cool[] = {4294967040, 4294960666, 4294954035, 4294947661, 4294941030, 4294934656, 4294928025, 4294921651, 4294915020, 4294908646, 4294902015 }; + const ImU32 Pink[] = {4278190154, 4282532475, 4284308894, 4285690554, 4286879686, 4287870160, 4288794330, 4289651940, 4291685869, 4293392118, 4294967295 }; + const ImU32 Jet[] = {4289331200, 4294901760, 4294923520, 4294945280, 4294967040, 4289396565, 4283826090, 4278255615, 4278233855, 4278212095, 4278190335 }; + 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) { + // end child window if it was made + if (ctx->ChildWindowMade) + ImGui::EndChild(); + ctx->ChildWindowMade = false; + // 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; +} + +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& 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 = 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 +//----------------------------------------------------------------------------- + +static const float TICK_FILL_X = 0.8f; +static const 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? +static const double TimeUnitSpans[ImPlotTimeUnit_COUNT] = { + 0.000001, + 0.001, + 1, + 60, + 3600, + 86400, + 2629800, + 31557600 +}; + +inline ImPlotTimeUnit GetUnitForRange(double range) { + static 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) { + static const int step[] = {500,250,200,100,50,25,20,10,5,2,1}; + static const 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) { + static const int step[] = {30,15,10,5,1}; + static const int divs[] = {2,4,6,12,60}; + return LowerBoundStep(max_divs, divs, step, 5); + } + else if (unit == ImPlotTimeUnit_Hr) { + static const int step[] = {12,6,3,2,1}; + static const int divs[] = {2,4,8,12,24}; + return LowerBoundStep(max_divs, divs, step, 5); + } + else if (unit == ImPlotTimeUnit_Day) { + static const int step[] = {14,7,2,1}; + static const int divs[] = {2,4,14,28}; + return LowerBoundStep(max_divs, divs, step, 4); + } + else if (unit == ImPlotTimeUnit_Mo) { + static const int step[] = {6,3,2,1}; + static const 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 +} + +inline ImPlotTime MkTime(struct tm *ptm) { + if (GetStyle().UseLocalTime) + return MkLocTime(ptm); + else + return MkGmtTime(ptm); +} + +inline tm* GetTime(const ImPlotTime& t, tm* ptm) { + if (GetStyle().UseLocalTime) + return GetLocTime(t,ptm); + else + return GetGmtTime(t,ptm); +} + +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; +} + +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 +bool DragFloat(const char*, F*, float, F, F) { + return false; +} + +template <> +bool DragFloat(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, "%.3f", 1); +} + +template <> +bool DragFloat(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, "%.3f", 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.CurrentPlot->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) + pad_T += T + 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) + pad_B += T + 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) + DrawList.AddLine(ImVec2(xt.PixelPos, rect.Min.y), ImVec2(xt.PixelPos, rect.Max.y), col_maj, size_maj); + else if (density < 0.2f) + DrawList.AddLine(ImVec2(xt.PixelPos, rect.Min.y), ImVec2(xt.PixelPos, 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) + DrawList.AddLine(ImVec2(rect.Min.x, yt.PixelPos), ImVec2(rect.Max.x, yt.PixelPos), col_maj, size_maj); + else if (density < 0.2f) + DrawList.AddLine(ImVec2(rect.Min.x, yt.PixelPos), ImVec2(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 +//----------------------------------------------------------------------------- + +static const float MOUSE_CURSOR_DRAG_THRESHOLD = 5.0f; +static const 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_AllowItemOverlap + | 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); + ImGui::SetItemAllowOverlap(); + + 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 && IO.MouseWheel != 0 && ImHasFlag(IO.KeyMods, gp.InputMap.ZoomMod)) { + + float zoom_rate = gp.InputMap.ZoomRate; + 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); + + 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) { + float correction = (plot.Hovered && equal_zoom) ? 0.5f : 1.0f; + const double plot_l = x_axis.PixelsToPlot(plot.PlotRect.Min.x - rect_size.x * tx * zoom_rate * correction); + const double plot_r = x_axis.PixelsToPlot(plot.PlotRect.Max.x + rect_size.x * (1 - tx) * zoom_rate * correction); + 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); + 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) { + float correction = (plot.Hovered && equal_zoom) ? 0.5f : 1.0f; + const double plot_t = y_axis.PixelsToPlot(plot.PlotRect.Min.y - rect_size.y * ty * zoom_rate * correction); + const double plot_b = y_axis.PixelsToPlot(plot.PlotRect.Max.y + rect_size.y * (1 - ty) * zoom_rate * correction); + 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; + } + } + } + + // 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)!"); + 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, + "Setup needs to be called after BeginPlot and before any setup locking functions (e.g. PlotX)!"); + IM_ASSERT_USER_ERROR(gp.CurrentItems != nullptr, + "SetupLegend() needs to be called within an itemized context!"); + 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); + + // capture scroll with a child region + if (!ImHasFlag(plot.Flags, ImPlotFlags_NoChild)) { + ImVec2 child_size; + if (gp.CurrentSubplot != nullptr) + child_size = gp.CurrentSubplot->CellSize; + else + child_size = ImVec2(size.x == 0 ? gp.Style.PlotDefaultSize.x : size.x, size.y == 0 ? gp.Style.PlotDefaultSize.y : size.y); + ImGui::BeginChild(title_id, child_size, false, ImGuiWindowFlags_NoScrollbar); + Window = ImGui::GetCurrentWindow(); + Window->ScrollMax.y = 1.0f; + gp.ChildWindowMade = true; + } + else { + gp.ChildWindowMade = false; + } + + // 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) { + 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) { + axis.Locator(axis.Ticker, axis.Range, plot_width, false, axis.Formatter, axis.FormatterData); + } + } + + // (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 && gp.Style.Colors[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; + DrawList.AddLine(start, start + ImVec2(0,direction*len), ax.ColorTick, thk); + } + if (aux || !render_border) + DrawList.AddLine(ImVec2(plot.PlotRect.Min.x,ax.Datum1), ImVec2(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; + DrawList.AddLine(start, start + ImVec2(direction*len,0), ax.ColorTick, thk); + } + if (aux || !render_border) + DrawList.AddLine(ImVec2(ax.Datum1, plot.PlotRect.Min.y), ImVec2(ax.Datum1, 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; + ImVec2 h1(plot.PlotRect.Min.x, xy.y); + ImVec2 h2(xy.x - 5, xy.y); + ImVec2 h3(xy.x + 5, xy.y); + ImVec2 h4(plot.PlotRect.Max.x, xy.y); + ImVec2 v1(xy.x, plot.PlotRect.Min.y); + ImVec2 v2(xy.x, xy.y - 5); + ImVec2 v3(xy.x, xy.y + 5); + ImVec2 v4(xy.x, plot.PlotRect.Max.y); + ImU32 col = GetStyleColorU32(ImPlotCol_Crosshairs); + DrawList.AddLine(h1, h2, col); + DrawList.AddLine(h3, h4, col); + DrawList.AddLine(v1, v2, col); + DrawList.AddLine(v3, v4, 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); + // test hover + legend.Hovered = ImGui::IsWindowHovered() && legend.Rect.Contains(IO.MousePos); + + if (legend_out) + ImGui::PushClipRect(plot.FrameRect.Min, plot.FrameRect.Max, true); + else + PushPlotClipRect(); + ImU32 col_bg = GetStyleColorU32(ImPlotCol_LegendBg); + ImU32 col_bd = GetStyleColorU32(ImPlotCol_LegendBorder); + DrawList.AddRectFilled(legend.Rect.Min, legend.Rect.Max, col_bg); + DrawList.AddRect(legend.Rect.Min, legend.Rect.Max, col_bd); + bool legend_contextable = ShowLegendEntries(plot.Items, legend.Rect, legend.Hovered, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz, DrawList) + && !ImHasFlag(legend.Flags, ImPlotLegendFlags_NoMenus); + + // main ctx menu + if (gp.OpenContextThisFrame && legend_contextable && !ImHasFlag(plot.Flags, ImPlotFlags_NoMenus)) + ImGui::OpenPopup("##LegendContext"); + ImGui::PopClipRect(); + 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 (render_border) + DrawList.AddRect(plot.PlotRect.Min, plot.PlotRect.Max, GetStyleColorU32(ImPlotCol_PlotBorder), 0, ImDrawFlags_RoundCornersAll, gp.Style.PlotBorderSize); + + // 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 +//----------------------------------------------------------------------------- + +static const float SUBPLOT_BORDER_SIZE = 1.0f; +static const float SUBPLOT_SPLITTER_HALF_THICKNESS = 4.0f; +static const 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); + + // 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_AllowItemOverlap | 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; + } + } + DrawList.AddLine(ImVec2(IM_ROUND(subplot.GridRect.Min.x),IM_ROUND(ypos)), + ImVec2(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_AllowItemOverlap | 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; + } + } + DrawList.AddLine(ImVec2(IM_ROUND(xpos),IM_ROUND(subplot.GridRect.Min.y)), + ImVec2(IM_ROUND(xpos),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; + // 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) { + const bool legend_horz = ImHasFlag(subplot.Items.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, subplot.Items.Legend.Location, gp.Style.PlotPadding); + subplot.Items.Legend.Rect = ImRect(legend_pos, legend_pos + legend_size); + subplot.Items.Legend.Hovered = subplot.FrameHovered && subplot.Items.Legend.Rect.Contains(ImGui::GetIO().MousePos); + ImGui::PushClipRect(subplot.FrameRect.Min, subplot.FrameRect.Max, true); + ImU32 col_bg = GetStyleColorU32(ImPlotCol_LegendBg); + ImU32 col_bd = GetStyleColorU32(ImPlotCol_LegendBorder); + DrawList.AddRectFilled(subplot.Items.Legend.Rect.Min, subplot.Items.Legend.Rect.Max, col_bg); + DrawList.AddRect(subplot.Items.Legend.Rect.Min, subplot.Items.Legend.Rect.Max, col_bd); + bool legend_contextable = ShowLegendEntries(subplot.Items, subplot.Items.Legend.Rect, subplot.Items.Legend.Hovered, gp.Style.LegendInnerPadding, gp.Style.LegendSpacing, !legend_horz, DrawList) + && !ImHasFlag(subplot.Items.Legend.Flags, ImPlotLegendFlags_NoMenus); + if (legend_contextable && !ImHasFlag(subplot.Flags, ImPlotSubplotFlags_NoMenus) && ImGui::GetIO().MouseReleased[gp.InputMap.Menu]) + ImGui::OpenPopup("##LegendContext"); + ImGui::PopClipRect(); + if (ImGui::BeginPopup("##LegendContext")) { + ImGui::Text("Legend"); ImGui::Separator(); + if (ShowLegendContextMenu(subplot.Items.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 elswhere) + 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); +} + +static const float DRAG_GRAB_HALF_SIZE = 4.0f; + +bool DragPoint(int n_id, double* x, double* y, const ImVec4& col, float radius, ImPlotDragToolFlags flags) { + 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) + ImGui::ButtonBehavior(rect,id,&hovered,&held); + + bool dragging = false; + if (held && ImGui::IsMouseDragging(0)) { + *x = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x; + *y = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y; + dragging = true; + } + + PushPlotClipRect(); + ImDrawList& DrawList = *GetPlotDrawList(); + if ((hovered || held) && show_curs) + ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); + if (dragging && no_delay) + pos = PlotToPixels(*x,*y,IMPLOT_AUTO,IMPLOT_AUTO); + DrawList.AddCircleFilled(pos, radius, col32); + PopPlotClipRect(); + + ImGui::PopID(); + return dragging; +} + +bool DragLineX(int n_id, double* value, const ImVec4& col, float thickness, ImPlotDragToolFlags flags) { + // 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) + ImGui::ButtonBehavior(rect,id,&hovered,&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 dragging = false; + if (held && ImGui::IsMouseDragging(0)) { + *value = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).x; + dragging = true; + } + + PushPlotClipRect(); + ImDrawList& DrawList = *GetPlotDrawList(); + if (dragging && no_delay) + x = IM_ROUND(PlotToPixels(*value,0,IMPLOT_AUTO,IMPLOT_AUTO).x); + DrawList.AddLine(ImVec2(x,yt), ImVec2(x,yb), col32, thickness); + DrawList.AddLine(ImVec2(x,yt), ImVec2(x,yt+len), col32, 3*thickness); + DrawList.AddLine(ImVec2(x,yb), ImVec2(x,yb-len), col32, 3*thickness); + PopPlotClipRect(); + + // ImGui::PopID(); + return dragging; +} + +bool DragLineY(int n_id, double* value, const ImVec4& col, float thickness, ImPlotDragToolFlags flags) { + 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) + ImGui::ButtonBehavior(rect,id,&hovered,&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 dragging = false; + if (held && ImGui::IsMouseDragging(0)) { + *value = ImPlot::GetPlotMousePos(IMPLOT_AUTO,IMPLOT_AUTO).y; + dragging = true; + } + + PushPlotClipRect(); + ImDrawList& DrawList = *GetPlotDrawList(); + if (dragging && no_delay) + y = IM_ROUND(PlotToPixels(0, *value,IMPLOT_AUTO,IMPLOT_AUTO).y); + DrawList.AddLine(ImVec2(xl,y), ImVec2(xr,y), col32, thickness); + DrawList.AddLine(ImVec2(xl,y), ImVec2(xl+len,y), col32, 3*thickness); + DrawList.AddLine(ImVec2(xr,y), ImVec2(xr-len,y), col32, 3*thickness); + PopPlotClipRect(); + + ImGui::PopID(); + return dragging; +} + +bool DragRect(int n_id, double* x_min, double* y_min, double* x_max, double* y_max, const ImVec4& col, ImPlotDragToolFlags flags) { + 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 dragging = false; + bool hovered = false, held = false; + 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); + + ImGui::KeepAliveID(id); + if (input) + ImGui::ButtonBehavior(b_rect,id,&hovered,&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; + } + dragging = true; + } + + for (int i = 0; i < 4; ++i) { + // points + b_rect = ImRect(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) + ImGui::ButtonBehavior(b_rect,p_id,&hovered,&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; + dragging = 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) + ImGui::ButtonBehavior(b_rect,e_id,&hovered,&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; + dragging = 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; + dragging = true; + } + } + + + PushPlotClipRect(); + ImDrawList& DrawList = *GetPlotDrawList(); + if (dragging && 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 && (dragging || rect_grab.Contains(ImGui::GetMousePos()))) { + 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 dragging; +} + +bool DragRect(int id, ImPlotRect* bounds, const ImVec4& col, ImPlotDragToolFlags flags) { + return DragRect(id, &bounds->X.Min, &bounds->Y.Min,&bounds->X.Max, &bounds->Y.Max, col, flags); +} + +//----------------------------------------------------------------------------- +// [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.Rect; + 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--; + } +} + +//------------------------------------------------------------------------------ +// [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 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) { + DrawList.AddLine(opposite ? ImVec2(bb_grad.Min.x+1, y_pos) : ImVec2(bb_grad.Max.x-1, y_pos), + opposite ? ImVec2(bb_grad.Min.x + tick_width, y_pos) : ImVec2(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("Item Styling"); + ImGui::SliderFloat("LineWeight", &style.LineWeight, 0.0f, 5.0f, "%.1f"); + ImGui::SliderFloat("MarkerSize", &style.MarkerSize, 2.0f, 10.0f, "%.1f"); + ImGui::SliderFloat("MarkerWeight", &style.MarkerWeight, 0.0f, 5.0f, "%.1f"); + ImGui::SliderFloat("FillAlpha", &style.FillAlpha, 0.0f, 1.0f, "%.2f"); + ImGui::SliderFloat("ErrorBarSize", &style.ErrorBarSize, 0.0f, 10.0f, "%.1f"); + ImGui::SliderFloat("ErrorBarWeight", &style.ErrorBarWeight, 0.0f, 5.0f, "%.1f"); + ImGui::SliderFloat("DigitalBitHeight", &style.DigitalBitHeight, 0.0f, 20.0f, "%.1f"); + ImGui::SliderFloat("DigitalBitGap", &style.DigitalBitGap, 0.0f, 20.0f, "%.1f"); + ImGui::Text("Plot Styling"); + 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::SliderFloat2("PlotDefaultSize", (float*)&style.PlotDefaultSize, 0.0f, 1000, "%.0f"); + ImGui::SliderFloat2("PlotMinSize", (float*)&style.PlotMinSize, 0.0f, 300, "%.0f"); + 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::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; + filter.Draw("Filter colors", ImGui::GetFontSize() * 16); + + static ImGuiColorEditFlags alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; + 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(); + 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 or the\n" + "current ImPlot Colormap. If you want to style individual\n" + "plot items, use Push/PopStyleColor around its function."); + 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 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 any 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 ? "OrtherAxis: 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; + + 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::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)); + } + } + } + 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 (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("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_Line] = IMPLOT_AUTO_COL; + colors[ImPlotCol_Fill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerOutline] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerFill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_ErrorBar] = IMPLOT_AUTO_COL; + 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_Line] = IMPLOT_AUTO_COL; + colors[ImPlotCol_Fill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerOutline] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerFill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_ErrorBar] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f); + 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_Line] = IMPLOT_AUTO_COL; + colors[ImPlotCol_Fill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerOutline] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerFill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_ErrorBar] = IMPLOT_AUTO_COL; + 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_Line] = IMPLOT_AUTO_COL; + colors[ImPlotCol_Fill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerOutline] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerFill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_ErrorBar] = IMPLOT_AUTO_COL; + 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 + +bool BeginPlot(const char* title, const char* x_label, const char* y1_label, const ImVec2& size, + ImPlotFlags flags, ImPlotAxisFlags x_flags, ImPlotAxisFlags y1_flags, ImPlotAxisFlags y2_flags, ImPlotAxisFlags y3_flags, + const char* y2_label, const char* y3_label) +{ + if (!BeginPlot(title, size, flags)) + return false; + SetupAxis(ImAxis_X1, x_label, x_flags); + SetupAxis(ImAxis_Y1, y1_label, y1_flags); + if (ImHasFlag(flags, ImPlotFlags_YAxis2)) + SetupAxis(ImAxis_Y2, y2_label, y2_flags); + if (ImHasFlag(flags, ImPlotFlags_YAxis3)) + SetupAxis(ImAxis_Y3, y3_label, y3_flags); + return true; +} + +#endif + +} // namespace ImPlot + +#endif //#if NETIMGUI_IMPLOT_ENABLED // @EDIT to avoid compiling this library when not requested diff --git a/Source/Private/ThirdParty/ImPlot/implot_demo.cpp b/Source/Private/ThirdParty/ImPlot/implot_demo.cpp new file mode 100644 index 0000000..0427a02 --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/implot_demo.cpp @@ -0,0 +1,2454 @@ +// MIT License + +// Copyright (c) 2022 Evan Pezent + +// 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 v0.14 + +#if NETIMGUI_IMPLOT_ENABLED && NETIMGUI_DEMO_IMGUI_ENABLED // @EDIT to avoid compiling this library when not requested + +// We define this so that the demo does not accidentally use deprecated API +#ifndef IMPLOT_DISABLE_OBSOLETE_FUNCTIONS +#define IMPLOT_DISABLE_OBSOLETE_FUNCTIONS +#endif + +#include "implot.h" +#include +#include +#include +#include + +#ifdef _MSC_VER +#define sprintf sprintf_s +#endif + +#ifndef PI +#define PI 3.14159265358979323846 +#endif + +#define CHECKBOX_FLAG(flags, flag) ImGui::CheckboxFlags(#flag, (unsigned int*)&flags, flag) + +// Encapsulates examples for customizing ImPlot. +namespace MyImPlot { + +// Example for Custom Data and Getters section. +struct Vector2f { + Vector2f(float _x, float _y) { x = _x; y = _y; } + float x, y; +}; + +// Example for Custom Data and Getters section. +struct WaveData { + double X, Amp, Freq, Offset; + WaveData(double x, double amp, double freq, double offset) { X = x; Amp = amp; Freq = freq; Offset = offset; } +}; +ImPlotPoint SineWave(int idx, void* wave_data); +ImPlotPoint SawWave(int idx, void* wave_data); +ImPlotPoint Spiral(int idx, void* wave_data); + +// Example for Tables section. +void Sparkline(const char* id, const float* values, int count, float min_v, float max_v, int offset, const ImVec4& col, const ImVec2& size); + +// Example for Custom Plotters and Tooltips section. +void PlotCandlestick(const char* label_id, const double* xs, const double* opens, const double* closes, const double* lows, const double* highs, int count, bool tooltip = true, float width_percent = 0.25f, ImVec4 bullCol = ImVec4(0,1,0,1), ImVec4 bearCol = ImVec4(1,0,0,1)); + +// Example for Custom Styles section. +void StyleSeaborn(); + +} // namespace MyImPlot + +namespace ImPlot { + +template +inline T RandomRange(T min, T max) { + T scale = rand() / (T) RAND_MAX; + return min + scale * ( max - min ); +} + +ImVec4 RandomColor() { + ImVec4 col; + col.x = RandomRange(0.0f,1.0f); + col.y = RandomRange(0.0f,1.0f); + col.z = RandomRange(0.0f,1.0f); + col.w = 1.0f; + return col; +} + +double RandomGauss() { + static double V1, V2, S; + static int phase = 0; + double X; + if(phase == 0) { + do { + double U1 = (double)rand() / RAND_MAX; + double U2 = (double)rand() / RAND_MAX; + V1 = 2 * U1 - 1; + V2 = 2 * U2 - 1; + S = V1 * V1 + V2 * V2; + } while(S >= 1 || S == 0); + + X = V1 * sqrt(-2 * log(S) / S); + } else + X = V2 * sqrt(-2 * log(S) / S); + phase = 1 - phase; + return X; +} + +template +struct NormalDistribution { + NormalDistribution(double mean, double sd) { + for (int i = 0; i < N; ++i) + Data[i] = RandomGauss()*sd + mean; + } + double Data[N]; +}; + +// utility structure for realtime plot +struct ScrollingBuffer { + int MaxSize; + int Offset; + ImVector Data; + ScrollingBuffer(int max_size = 2000) { + MaxSize = max_size; + Offset = 0; + Data.reserve(MaxSize); + } + void AddPoint(float x, float y) { + if (Data.size() < MaxSize) + Data.push_back(ImVec2(x,y)); + else { + Data[Offset] = ImVec2(x,y); + Offset = (Offset + 1) % MaxSize; + } + } + void Erase() { + if (Data.size() > 0) { + Data.shrink(0); + Offset = 0; + } + } +}; + +// utility structure for realtime plot +struct RollingBuffer { + float Span; + ImVector Data; + RollingBuffer() { + Span = 10.0f; + Data.reserve(2000); + } + void AddPoint(float x, float y) { + float xmod = fmodf(x, Span); + if (!Data.empty() && xmod < Data.back().x) + Data.shrink(0); + Data.push_back(ImVec2(xmod, y)); + } +}; + +// Huge data used by Time Formatting example (~500 MB allocation!) +struct HugeTimeData { + HugeTimeData(double min) { + Ts = new double[Size]; + Ys = new double[Size]; + for (int i = 0; i < Size; ++i) { + Ts[i] = min + i; + Ys[i] = GetY(Ts[i]); + } + } + ~HugeTimeData() { delete[] Ts; delete[] Ys; } + static double GetY(double t) { + return 0.5 + 0.25 * sin(t/86400/12) + 0.005 * sin(t/3600); + } + double* Ts; + double* Ys; + static const int Size = 60*60*24*366; +}; + +//----------------------------------------------------------------------------- +// [SECTION] Demo Functions +//----------------------------------------------------------------------------- + +void Demo_Help() { + ImGui::Text("ABOUT THIS DEMO:"); + ImGui::BulletText("Sections below are demonstrating many aspects of the library."); + ImGui::BulletText("The \"Tools\" menu above gives access to: Style Editors (ImPlot/ImGui)\n" + "and Metrics (general purpose Dear ImGui debugging tool)."); + ImGui::Separator(); + ImGui::Text("PROGRAMMER GUIDE:"); + ImGui::BulletText("See the ShowDemoWindow() code in implot_demo.cpp. <- you are here!"); + ImGui::BulletText("If you see visual artifacts, do one of the following:"); + ImGui::Indent(); + ImGui::BulletText("Handle ImGuiBackendFlags_RendererHasVtxOffset for 16-bit indices in your backend."); + ImGui::BulletText("Or, enable 32-bit indices in imconfig.h."); + ImGui::BulletText("Your current configuration is:"); + ImGui::Indent(); + ImGui::BulletText("ImDrawIdx: %d-bit", (int)(sizeof(ImDrawIdx) * 8)); + ImGui::BulletText("ImGuiBackendFlags_RendererHasVtxOffset: %s", (ImGui::GetIO().BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) ? "True" : "False"); + ImGui::Unindent(); + ImGui::Unindent(); + ImGui::Separator(); + ImGui::Text("USER GUIDE:"); + ShowUserGuide(); +} + +//----------------------------------------------------------------------------- + +void ButtonSelector(const char* label, ImGuiMouseButton* b) { + ImGui::PushID(label); + if (ImGui::RadioButton("LMB",*b == ImGuiMouseButton_Left)) + *b = ImGuiMouseButton_Left; + ImGui::SameLine(); + if (ImGui::RadioButton("RMB",*b == ImGuiMouseButton_Right)) + *b = ImGuiMouseButton_Right; + ImGui::SameLine(); + if (ImGui::RadioButton("MMB",*b == ImGuiMouseButton_Middle)) + *b = ImGuiMouseButton_Middle; + ImGui::PopID(); +} + +void ModSelector(const char* label, int* k) { + ImGui::PushID(label); + ImGui::CheckboxFlags("Ctrl", (unsigned int*)k, ImGuiMod_Ctrl); ImGui::SameLine(); + ImGui::CheckboxFlags("Shift", (unsigned int*)k, ImGuiMod_Shift); ImGui::SameLine(); + ImGui::CheckboxFlags("Alt", (unsigned int*)k, ImGuiMod_Alt); ImGui::SameLine(); + ImGui::CheckboxFlags("Super", (unsigned int*)k, ImGuiMod_Super); + ImGui::PopID(); +} + +void InputMapping(const char* label, ImGuiMouseButton* b, int* k) { + ImGui::LabelText("##","%s",label); + if (b != nullptr) { + ImGui::SameLine(100); + ButtonSelector(label,b); + } + if (k != nullptr) { + ImGui::SameLine(300); + ModSelector(label,k); + } +} + +void ShowInputMapping() { + ImPlotInputMap& map = ImPlot::GetInputMap(); + InputMapping("Pan",&map.Pan,&map.PanMod); + InputMapping("Fit",&map.Fit,nullptr); + InputMapping("Select",&map.Select,&map.SelectMod); + InputMapping("SelectHorzMod",nullptr,&map.SelectHorzMod); + InputMapping("SelectVertMod",nullptr,&map.SelectVertMod); + InputMapping("SelectCancel",&map.SelectCancel,nullptr); + InputMapping("Menu",&map.Menu,nullptr); + InputMapping("OverrideMod",nullptr,&map.OverrideMod); + InputMapping("ZoomMod",nullptr,&map.ZoomMod); + ImGui::SliderFloat("ZoomRate",&map.ZoomRate,-1,1); +} + +void Demo_Config() { + ImGui::ShowFontSelector("Font"); + ImGui::ShowStyleSelector("ImGui Style"); + ImPlot::ShowStyleSelector("ImPlot Style"); + ImPlot::ShowColormapSelector("ImPlot Colormap"); + ImPlot::ShowInputMapSelector("Input Map"); + ImGui::Separator(); + ImGui::Checkbox("Use Local Time", &ImPlot::GetStyle().UseLocalTime); + ImGui::Checkbox("Use ISO 8601", &ImPlot::GetStyle().UseISO8601); + ImGui::Checkbox("Use 24 Hour Clock", &ImPlot::GetStyle().Use24HourClock); + ImGui::Separator(); + if (ImPlot::BeginPlot("Preview")) { + static double now = (double)time(nullptr); + ImPlot::SetupAxisScale(ImAxis_X1, ImPlotScale_Time); + ImPlot::SetupAxisLimits(ImAxis_X1, now, now + 24*3600); + for (int i = 0; i < 10; ++i) { + double x[2] = {now, now + 24*3600}; + double y[2] = {0,i/9.0}; + ImGui::PushID(i); + ImPlot::PlotLine("##Line",x,y,2); + ImGui::PopID(); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_LinePlots() { + static float xs1[1001], ys1[1001]; + for (int i = 0; i < 1001; ++i) { + xs1[i] = i * 0.001f; + ys1[i] = 0.5f + 0.5f * sinf(50 * (xs1[i] + (float)ImGui::GetTime() / 10)); + } + static double xs2[20], ys2[20]; + for (int i = 0; i < 20; ++i) { + xs2[i] = i * 1/19.0f; + ys2[i] = xs2[i] * xs2[i]; + } + if (ImPlot::BeginPlot("Line Plots")) { + ImPlot::SetupAxes("x","y"); + ImPlot::PlotLine("f(x)", xs1, ys1, 1001); + ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); + ImPlot::PlotLine("g(x)", xs2, ys2, 20,ImPlotLineFlags_Segments); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_FilledLinePlots() { + static double xs1[101], ys1[101], ys2[101], ys3[101]; + srand(0); + for (int i = 0; i < 101; ++i) { + xs1[i] = (float)i; + ys1[i] = RandomRange(400.0,450.0); + ys2[i] = RandomRange(275.0,350.0); + ys3[i] = RandomRange(150.0,225.0); + } + static bool show_lines = true; + static bool show_fills = true; + static float fill_ref = 0; + static int shade_mode = 0; + static ImPlotShadedFlags flags = 0; + ImGui::Checkbox("Lines",&show_lines); ImGui::SameLine(); + ImGui::Checkbox("Fills",&show_fills); + if (show_fills) { + ImGui::SameLine(); + if (ImGui::RadioButton("To -INF",shade_mode == 0)) + shade_mode = 0; + ImGui::SameLine(); + if (ImGui::RadioButton("To +INF",shade_mode == 1)) + shade_mode = 1; + ImGui::SameLine(); + if (ImGui::RadioButton("To Ref",shade_mode == 2)) + shade_mode = 2; + if (shade_mode == 2) { + ImGui::SameLine(); + ImGui::SetNextItemWidth(100); + ImGui::DragFloat("##Ref",&fill_ref, 1, -100, 500); + } + } + + if (ImPlot::BeginPlot("Stock Prices")) { + ImPlot::SetupAxes("Days","Price"); + ImPlot::SetupAxesLimits(0,100,0,500); + if (show_fills) { + ImPlot::PushStyleVar(ImPlotStyleVar_FillAlpha, 0.25f); + ImPlot::PlotShaded("Stock 1", xs1, ys1, 101, shade_mode == 0 ? -INFINITY : shade_mode == 1 ? INFINITY : fill_ref, flags); + ImPlot::PlotShaded("Stock 2", xs1, ys2, 101, shade_mode == 0 ? -INFINITY : shade_mode == 1 ? INFINITY : fill_ref, flags); + ImPlot::PlotShaded("Stock 3", xs1, ys3, 101, shade_mode == 0 ? -INFINITY : shade_mode == 1 ? INFINITY : fill_ref, flags); + ImPlot::PopStyleVar(); + } + if (show_lines) { + ImPlot::PlotLine("Stock 1", xs1, ys1, 101); + ImPlot::PlotLine("Stock 2", xs1, ys2, 101); + ImPlot::PlotLine("Stock 3", xs1, ys3, 101); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_ShadedPlots() { + static float xs[1001], ys[1001], ys1[1001], ys2[1001], ys3[1001], ys4[1001]; + srand(0); + for (int i = 0; i < 1001; ++i) { + xs[i] = i * 0.001f; + ys[i] = 0.25f + 0.25f * sinf(25 * xs[i]) * sinf(5 * xs[i]) + RandomRange(-0.01f, 0.01f); + ys1[i] = ys[i] + RandomRange(0.1f, 0.12f); + ys2[i] = ys[i] - RandomRange(0.1f, 0.12f); + ys3[i] = 0.75f + 0.2f * sinf(25 * xs[i]); + ys4[i] = 0.75f + 0.1f * cosf(25 * xs[i]); + } + static float alpha = 0.25f; + ImGui::DragFloat("Alpha",&alpha,0.01f,0,1); + + if (ImPlot::BeginPlot("Shaded Plots")) { + ImPlot::PushStyleVar(ImPlotStyleVar_FillAlpha, alpha); + ImPlot::PlotShaded("Uncertain Data",xs,ys1,ys2,1001); + ImPlot::PlotLine("Uncertain Data", xs, ys, 1001); + ImPlot::PlotShaded("Overlapping",xs,ys3,ys4,1001); + ImPlot::PlotLine("Overlapping",xs,ys3,1001); + ImPlot::PlotLine("Overlapping",xs,ys4,1001); + ImPlot::PopStyleVar(); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_ScatterPlots() { + srand(0); + static float xs1[100], ys1[100]; + for (int i = 0; i < 100; ++i) { + xs1[i] = i * 0.01f; + ys1[i] = xs1[i] + 0.1f * ((float)rand() / (float)RAND_MAX); + } + static float xs2[50], ys2[50]; + for (int i = 0; i < 50; i++) { + xs2[i] = 0.25f + 0.2f * ((float)rand() / (float)RAND_MAX); + ys2[i] = 0.75f + 0.2f * ((float)rand() / (float)RAND_MAX); + } + + if (ImPlot::BeginPlot("Scatter Plot")) { + ImPlot::PlotScatter("Data 1", xs1, ys1, 100); + ImPlot::PushStyleVar(ImPlotStyleVar_FillAlpha, 0.25f); + ImPlot::SetNextMarkerStyle(ImPlotMarker_Square, 6, ImPlot::GetColormapColor(1), IMPLOT_AUTO, ImPlot::GetColormapColor(1)); + ImPlot::PlotScatter("Data 2", xs2, ys2, 50); + ImPlot::PopStyleVar(); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_StairstepPlots() { + static float ys1[21], ys2[21]; + for (int i = 0; i < 21; ++i) { + ys1[i] = 0.75f + 0.2f * sinf(10 * i * 0.05f); + ys2[i] = 0.25f + 0.2f * sinf(10 * i * 0.05f); + } + static ImPlotStairsFlags flags = 0; + CHECKBOX_FLAG(flags, ImPlotStairsFlags_Shaded); + if (ImPlot::BeginPlot("Stairstep Plot")) { + ImPlot::SetupAxes("x","f(x)"); + ImPlot::SetupAxesLimits(0,1,0,1); + + ImPlot::PushStyleColor(ImPlotCol_Line, ImVec4(0.5f,0.5f,0.5f,1.0f)); + ImPlot::PlotLine("##1",ys1,21,0.05f); + ImPlot::PlotLine("##2",ys2,21,0.05f); + ImPlot::PopStyleColor(); + + ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); + ImPlot::SetNextFillStyle(IMPLOT_AUTO_COL, 0.25f); + ImPlot::PlotStairs("Post Step (default)", ys1, 21, 0.05f, 0, flags); + ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); + ImPlot::SetNextFillStyle(IMPLOT_AUTO_COL, 0.25f); + ImPlot::PlotStairs("Pre Step", ys2, 21, 0.05f, 0, flags|ImPlotStairsFlags_PreStep); + + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_BarPlots() { + static ImS8 data[10] = {1,2,3,4,5,6,7,8,9,10}; + if (ImPlot::BeginPlot("Bar Plot")) { + ImPlot::PlotBars("Vertical",data,10,0.7,1); + ImPlot::PlotBars("Horizontal",data,10,0.4,1,ImPlotBarsFlags_Horizontal); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_BarGroups() { + static ImS8 data[30] = {83, 67, 23, 89, 83, 78, 91, 82, 85, 90, // midterm + 80, 62, 56, 99, 55, 78, 88, 78, 90, 100, // final + 80, 69, 52, 92, 72, 78, 75, 76, 89, 95}; // course + + static const char* ilabels[] = {"Midterm Exam","Final Exam","Course Grade"}; + static const char* glabels[] = {"S1","S2","S3","S4","S5","S6","S7","S8","S9","S10"}; + static const double positions[] = {0,1,2,3,4,5,6,7,8,9}; + + static int items = 3; + static int groups = 10; + static float size = 0.67f; + + static ImPlotBarGroupsFlags flags = 0; + static bool horz = false; + + ImGui::CheckboxFlags("Stacked", (unsigned int*)&flags, ImPlotBarGroupsFlags_Stacked); + ImGui::SameLine(); + ImGui::Checkbox("Horizontal",&horz); + + ImGui::SliderInt("Items",&items,1,3); + ImGui::SliderFloat("Size",&size,0,1); + + if (ImPlot::BeginPlot("Bar Group")) { + ImPlot::SetupLegend(ImPlotLocation_East, ImPlotLegendFlags_Outside); + if (horz) { + ImPlot::SetupAxes("Score","Student",ImPlotAxisFlags_AutoFit,ImPlotAxisFlags_AutoFit); + ImPlot::SetupAxisTicks(ImAxis_Y1,positions, groups, glabels); + ImPlot::PlotBarGroups(ilabels,data,items,groups,size,0,flags|ImPlotBarGroupsFlags_Horizontal); + } + else { + ImPlot::SetupAxes("Student","Score",ImPlotAxisFlags_AutoFit,ImPlotAxisFlags_AutoFit); + ImPlot::SetupAxisTicks(ImAxis_X1,positions, groups, glabels); + ImPlot::PlotBarGroups(ilabels,data,items,groups,size,0,flags); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_BarStacks() { + + static ImPlotColormap Liars = -1; + if (Liars == -1) { + static const ImU32 Liars_Data[6] = { 4282515870, 4282609140, 4287357182, 4294630301, 4294945280, 4294921472 }; + Liars = ImPlot::AddColormap("Liars", Liars_Data, 6); + } + + static bool diverging = true; + ImGui::Checkbox("Diverging",&diverging); + + static const char* politicians[] = {"Trump","Bachman","Cruz","Gingrich","Palin","Santorum","Walker","Perry","Ryan","McCain","Rubio","Romney","Rand Paul","Christie","Biden","Kasich","Sanders","J Bush","H Clinton","Obama"}; + static int data_reg[] = {18,26,7,14,10,8,6,11,4,4,3,8,6,8,6,5,0,3,1,2, // Pants on Fire + 43,36,30,21,30,27,25,17,11,22,15,16,16,17,12,12,14,6,13,12, // False + 16,13,28,22,15,21,15,18,30,17,24,18,13,10,14,15,17,22,14,12, // Mostly False + 17,10,13,25,12,22,19,26,23,17,22,27,20,26,29,17,18,22,21,27, // Half True + 5,7,16,10,10,12,23,13,17,20,22,16,23,19,20,26,36,29,27,26, // Mostly True + 1,8,6,8,23,10,12,15,15,20,14,15,22,20,19,25,15,18,24,21}; // True + static const char* labels_reg[] = {"Pants on Fire","False","Mostly False","Half True","Mostly True","True"}; + + + static int data_div[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // Pants on Fire (dummy, to order legend logically) + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // False (dummy, to order legend logically) + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, // Mostly False (dummy, to order legend logically) + -16,-13,-28,-22,-15,-21,-15,-18,-30,-17,-24,-18,-13,-10,-14,-15,-17,-22,-14,-12, // Mostly False + -43,-36,-30,-21,-30,-27,-25,-17,-11,-22,-15,-16,-16,-17,-12,-12,-14,-6,-13,-12, // False + -18,-26,-7,-14,-10,-8,-6,-11,-4,-4,-3,-8,-6,-8,-6,-5,0,-3,-1,-2, // Pants on Fire + 17,10,13,25,12,22,19,26,23,17,22,27,20,26,29,17,18,22,21,27, // Half True + 5,7,16,10,10,12,23,13,17,20,22,16,23,19,20,26,36,29,27,26, // Mostly True + 1,8,6,8,23,10,12,15,15,20,14,15,22,20,19,25,15,18,24,21}; // True + static const char* labels_div[] = {"Pants on Fire","False","Mostly False","Mostly False","False","Pants on Fire","Half True","Mostly True","True"}; + + ImPlot::PushColormap(Liars); + if (ImPlot::BeginPlot("PolitiFact: Who Lies More?",ImVec2(-1,400),ImPlotFlags_NoMouseText)) { + ImPlot::SetupLegend(ImPlotLocation_South, ImPlotLegendFlags_Outside|ImPlotLegendFlags_Horizontal); + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_AutoFit|ImPlotAxisFlags_NoDecorations,ImPlotAxisFlags_AutoFit|ImPlotAxisFlags_Invert); + ImPlot::SetupAxisTicks(ImAxis_Y1,0,19,20,politicians,false); + if (diverging) + ImPlot::PlotBarGroups(labels_div,data_div,9,20,0.75,0,ImPlotBarGroupsFlags_Stacked|ImPlotBarGroupsFlags_Horizontal); + else + ImPlot::PlotBarGroups(labels_reg,data_reg,6,20,0.75,0,ImPlotBarGroupsFlags_Stacked|ImPlotBarGroupsFlags_Horizontal); + ImPlot::EndPlot(); + } + ImPlot::PopColormap(); +} + +//----------------------------------------------------------------------------- + +void Demo_ErrorBars() { + static float xs[5] = {1,2,3,4,5}; + static float bar[5] = {1,2,5,3,4}; + static float lin1[5] = {8,8,9,7,8}; + static float lin2[5] = {6,7,6,9,6}; + static float err1[5] = {0.2f, 0.4f, 0.2f, 0.6f, 0.4f}; + static float err2[5] = {0.4f, 0.2f, 0.4f, 0.8f, 0.6f}; + static float err3[5] = {0.09f, 0.14f, 0.09f, 0.12f, 0.16f}; + static float err4[5] = {0.02f, 0.08f, 0.15f, 0.05f, 0.2f}; + + + if (ImPlot::BeginPlot("##ErrorBars")) { + ImPlot::SetupAxesLimits(0, 6, 0, 10); + ImPlot::PlotBars("Bar", xs, bar, 5, 0.5f); + ImPlot::PlotErrorBars("Bar", xs, bar, err1, 5); + ImPlot::SetNextErrorBarStyle(ImPlot::GetColormapColor(1), 0); + ImPlot::PlotErrorBars("Line", xs, lin1, err1, err2, 5); + ImPlot::SetNextMarkerStyle(ImPlotMarker_Square); + ImPlot::PlotLine("Line", xs, lin1, 5); + ImPlot::PushStyleColor(ImPlotCol_ErrorBar, ImPlot::GetColormapColor(2)); + ImPlot::PlotErrorBars("Scatter", xs, lin2, err2, 5); + ImPlot::PlotErrorBars("Scatter", xs, lin2, err3, err4, 5, ImPlotErrorBarsFlags_Horizontal); + ImPlot::PopStyleColor(); + ImPlot::PlotScatter("Scatter", xs, lin2, 5); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_StemPlots() { + static double xs[51], ys1[51], ys2[51]; + for (int i = 0; i < 51; ++i) { + xs[i] = i * 0.02; + ys1[i] = 1.0 + 0.5 * sin(25*xs[i])*cos(2*xs[i]); + ys2[i] = 0.5 + 0.25 * sin(10*xs[i]) * sin(xs[i]); + } + if (ImPlot::BeginPlot("Stem Plots")) { + ImPlot::SetupAxisLimits(ImAxis_X1,0,1.0); + ImPlot::SetupAxisLimits(ImAxis_Y1,0,1.6); + ImPlot::PlotStems("Stems 1",xs,ys1,51); + ImPlot::SetNextMarkerStyle(ImPlotMarker_Circle); + ImPlot::PlotStems("Stems 2", xs, ys2,51); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_InfiniteLines() { + static double vals[] = {0.25, 0.5, 0.75}; + if (ImPlot::BeginPlot("##Infinite")) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_NoInitialFit,ImPlotAxisFlags_NoInitialFit); + ImPlot::PlotInfLines("Vertical",vals,3); + ImPlot::PlotInfLines("Horizontal",vals,3,ImPlotInfLinesFlags_Horizontal); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_PieCharts() { + static const char* labels1[] = {"Frogs","Hogs","Dogs","Logs"}; + static float data1[] = {0.15f, 0.30f, 0.2f, 0.05f}; + static ImPlotPieChartFlags flags = 0; + ImGui::SetNextItemWidth(250); + ImGui::DragFloat4("Values", data1, 0.01f, 0, 1); + if ((data1[0] + data1[1] + data1[2] + data1[3]) < 1) { + ImGui::SameLine(); + CHECKBOX_FLAG(flags,ImPlotPieChartFlags_Normalize); + } + + if (ImPlot::BeginPlot("##Pie1", ImVec2(250,250), ImPlotFlags_Equal | ImPlotFlags_NoMouseText)) { + ImPlot::SetupAxes(nullptr, nullptr, ImPlotAxisFlags_NoDecorations, ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(0, 1, 0, 1); + ImPlot::PlotPieChart(labels1, data1, 4, 0.5, 0.5, 0.4, "%.2f", 90, flags); + ImPlot::EndPlot(); + } + + ImGui::SameLine(); + + static const char* labels2[] = {"A","B","C","D","E"}; + static int data2[] = {1,1,2,3,5}; + + ImPlot::PushColormap(ImPlotColormap_Pastel); + if (ImPlot::BeginPlot("##Pie2", ImVec2(250,250), ImPlotFlags_Equal | ImPlotFlags_NoMouseText)) { + ImPlot::SetupAxes(nullptr, nullptr, ImPlotAxisFlags_NoDecorations, ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(0, 1, 0, 1); + ImPlot::PlotPieChart(labels2, data2, 5, 0.5, 0.5, 0.4, "%.0f", 180, flags); + ImPlot::EndPlot(); + } + ImPlot::PopColormap(); +} + +//----------------------------------------------------------------------------- + +void Demo_Heatmaps() { + static float values1[7][7] = {{0.8f, 2.4f, 2.5f, 3.9f, 0.0f, 4.0f, 0.0f}, + {2.4f, 0.0f, 4.0f, 1.0f, 2.7f, 0.0f, 0.0f}, + {1.1f, 2.4f, 0.8f, 4.3f, 1.9f, 4.4f, 0.0f}, + {0.6f, 0.0f, 0.3f, 0.0f, 3.1f, 0.0f, 0.0f}, + {0.7f, 1.7f, 0.6f, 2.6f, 2.2f, 6.2f, 0.0f}, + {1.3f, 1.2f, 0.0f, 0.0f, 0.0f, 3.2f, 5.1f}, + {0.1f, 2.0f, 0.0f, 1.4f, 0.0f, 1.9f, 6.3f}}; + static float scale_min = 0; + static float scale_max = 6.3f; + static const char* xlabels[] = {"C1","C2","C3","C4","C5","C6","C7"}; + static const char* ylabels[] = {"R1","R2","R3","R4","R5","R6","R7"}; + + static ImPlotColormap map = ImPlotColormap_Viridis; + if (ImPlot::ColormapButton(ImPlot::GetColormapName(map),ImVec2(225,0),map)) { + map = (map + 1) % ImPlot::GetColormapCount(); + // We bust the color cache of our plots so that item colors will + // resample the new colormap in the event that they have already + // been created. See documentation in implot.h. + BustColorCache("##Heatmap1"); + BustColorCache("##Heatmap2"); + } + + ImGui::SameLine(); + ImGui::LabelText("##Colormap Index", "%s", "Change Colormap"); + ImGui::SetNextItemWidth(225); + ImGui::DragFloatRange2("Min / Max",&scale_min, &scale_max, 0.01f, -20, 20); + + static ImPlotHeatmapFlags hm_flags = 0; + + ImGui::CheckboxFlags("Column Major", (unsigned int*)&hm_flags, ImPlotHeatmapFlags_ColMajor); + + static ImPlotAxisFlags axes_flags = ImPlotAxisFlags_Lock | ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_NoTickMarks; + + ImPlot::PushColormap(map); + + if (ImPlot::BeginPlot("##Heatmap1",ImVec2(225,225),ImPlotFlags_NoLegend|ImPlotFlags_NoMouseText)) { + ImPlot::SetupAxes(nullptr, nullptr, axes_flags, axes_flags); + ImPlot::SetupAxisTicks(ImAxis_X1,0 + 1.0/14.0, 1 - 1.0/14.0, 7, xlabels); + ImPlot::SetupAxisTicks(ImAxis_Y1,1 - 1.0/14.0, 0 + 1.0/14.0, 7, ylabels); + ImPlot::PlotHeatmap("heat",values1[0],7,7,scale_min,scale_max,"%g",ImPlotPoint(0,0),ImPlotPoint(1,1),hm_flags); + ImPlot::EndPlot(); + } + ImGui::SameLine(); + ImPlot::ColormapScale("##HeatScale",scale_min, scale_max, ImVec2(60,225)); + + ImGui::SameLine(); + + const int size = 80; + static double values2[size*size]; + srand((unsigned int)(ImGui::GetTime()*1000000)); + for (int i = 0; i < size*size; ++i) + values2[i] = RandomRange(0.0,1.0); + + if (ImPlot::BeginPlot("##Heatmap2",ImVec2(225,225))) { + ImPlot::SetupAxes(nullptr, nullptr, ImPlotAxisFlags_NoDecorations, ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(-1,1,-1,1); + ImPlot::PlotHeatmap("heat1",values2,size,size,0,1,nullptr); + ImPlot::PlotHeatmap("heat2",values2,size,size,0,1,nullptr, ImPlotPoint(-1,-1), ImPlotPoint(0,0)); + ImPlot::EndPlot(); + } + ImPlot::PopColormap(); + +} + +//----------------------------------------------------------------------------- + +void Demo_Histogram() { + static ImPlotHistogramFlags hist_flags = ImPlotHistogramFlags_Density; + static int bins = 50; + static double mu = 5; + static double sigma = 2; + ImGui::SetNextItemWidth(200); + if (ImGui::RadioButton("Sqrt",bins==ImPlotBin_Sqrt)) { bins = ImPlotBin_Sqrt; } ImGui::SameLine(); + if (ImGui::RadioButton("Sturges",bins==ImPlotBin_Sturges)) { bins = ImPlotBin_Sturges; } ImGui::SameLine(); + if (ImGui::RadioButton("Rice",bins==ImPlotBin_Rice)) { bins = ImPlotBin_Rice; } ImGui::SameLine(); + if (ImGui::RadioButton("Scott",bins==ImPlotBin_Scott)) { bins = ImPlotBin_Scott; } ImGui::SameLine(); + if (ImGui::RadioButton("N Bins",bins>=0)) { bins = 50; } + if (bins>=0) { + ImGui::SameLine(); + ImGui::SetNextItemWidth(200); + ImGui::SliderInt("##Bins", &bins, 1, 100); + } + ImGui::CheckboxFlags("Horizontal", (unsigned int*)&hist_flags, ImPlotHistogramFlags_Horizontal); + ImGui::SameLine(); + ImGui::CheckboxFlags("Density", (unsigned int*)&hist_flags, ImPlotHistogramFlags_Density); + ImGui::SameLine(); + ImGui::CheckboxFlags("Cumulative", (unsigned int*)&hist_flags, ImPlotHistogramFlags_Cumulative); + + static bool range = false; + ImGui::Checkbox("Range", &range); + static float rmin = -3; + static float rmax = 13; + if (range) { + ImGui::SameLine(); + ImGui::SetNextItemWidth(200); + ImGui::DragFloat2("##Range",&rmin,0.1f,-3,13); + ImGui::SameLine(); + ImGui::CheckboxFlags("Exclude Outliers", (unsigned int*)&hist_flags, ImPlotHistogramFlags_NoOutliers); + } + static NormalDistribution<10000> dist(mu, sigma); + static double x[100]; + static double y[100]; + if (hist_flags & ImPlotHistogramFlags_Density) { + for (int i = 0; i < 100; ++i) { + x[i] = -3 + 16 * (double)i/99.0; + y[i] = exp( - (x[i]-mu)*(x[i]-mu) / (2*sigma*sigma)) / (sigma * sqrt(2*3.141592653589793238)); + } + if (hist_flags & ImPlotHistogramFlags_Cumulative) { + for (int i = 1; i < 100; ++i) + y[i] += y[i-1]; + for (int i = 0; i < 100; ++i) + y[i] /= y[99]; + } + } + + if (ImPlot::BeginPlot("##Histograms")) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_AutoFit,ImPlotAxisFlags_AutoFit); + ImPlot::SetNextFillStyle(IMPLOT_AUTO_COL,0.5f); + ImPlot::PlotHistogram("Empirical", dist.Data, 10000, bins, 1.0, range ? ImPlotRange(rmin,rmax) : ImPlotRange(), hist_flags); + if ((hist_flags & ImPlotHistogramFlags_Density) && !(hist_flags & ImPlotHistogramFlags_NoOutliers)) { + if (hist_flags & ImPlotHistogramFlags_Horizontal) + ImPlot::PlotLine("Theoretical",y,x,100); + else + ImPlot::PlotLine("Theoretical",x,y,100); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_Histogram2D() { + static int count = 50000; + static int xybins[2] = {100,100}; + + static ImPlotHistogramFlags hist_flags = 0; + + ImGui::SliderInt("Count",&count,100,100000); + ImGui::SliderInt2("Bins",xybins,1,500); + ImGui::SameLine(); + ImGui::CheckboxFlags("Density", (unsigned int*)&hist_flags, ImPlotHistogramFlags_Density); + + static NormalDistribution<100000> dist1(1, 2); + static NormalDistribution<100000> dist2(1, 1); + double max_count = 0; + ImPlotAxisFlags flags = ImPlotAxisFlags_AutoFit|ImPlotAxisFlags_Foreground; + ImPlot::PushColormap("Hot"); + if (ImPlot::BeginPlot("##Hist2D",ImVec2(ImGui::GetContentRegionAvail().x-100-ImGui::GetStyle().ItemSpacing.x,0))) { + ImPlot::SetupAxes(nullptr, nullptr, flags, flags); + ImPlot::SetupAxesLimits(-6,6,-6,6); + max_count = ImPlot::PlotHistogram2D("Hist2D",dist1.Data,dist2.Data,count,xybins[0],xybins[1],ImPlotRect(-6,6,-6,6), hist_flags); + ImPlot::EndPlot(); + } + ImGui::SameLine(); + ImPlot::ColormapScale(hist_flags & ImPlotHistogramFlags_Density ? "Density" : "Count",0,max_count,ImVec2(100,0)); + ImPlot::PopColormap(); +} + +//----------------------------------------------------------------------------- + +void Demo_DigitalPlots() { + ImGui::BulletText("Digital plots do not respond to Y drag and zoom, so that"); + ImGui::Indent(); + ImGui::Text("you can drag analog plots over the rising/falling digital edge."); + ImGui::Unindent(); + + static bool paused = false; + static ScrollingBuffer dataDigital[2]; + static ScrollingBuffer dataAnalog[2]; + static bool showDigital[2] = {true, false}; + static bool showAnalog[2] = {true, false}; + + char label[32]; + ImGui::Checkbox("digital_0", &showDigital[0]); ImGui::SameLine(); + ImGui::Checkbox("digital_1", &showDigital[1]); ImGui::SameLine(); + ImGui::Checkbox("analog_0", &showAnalog[0]); ImGui::SameLine(); + ImGui::Checkbox("analog_1", &showAnalog[1]); + + static float t = 0; + if (!paused) { + t += ImGui::GetIO().DeltaTime; + //digital signal values + if (showDigital[0]) + dataDigital[0].AddPoint(t, sinf(2*t) > 0.45); + if (showDigital[1]) + dataDigital[1].AddPoint(t, sinf(2*t) < 0.45); + //Analog signal values + if (showAnalog[0]) + dataAnalog[0].AddPoint(t, sinf(2*t)); + if (showAnalog[1]) + dataAnalog[1].AddPoint(t, cosf(2*t)); + } + if (ImPlot::BeginPlot("##Digital")) { + ImPlot::SetupAxisLimits(ImAxis_X1, t - 10.0, t, paused ? ImGuiCond_Once : ImGuiCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1, -1, 1); + for (int i = 0; i < 2; ++i) { + if (showDigital[i] && dataDigital[i].Data.size() > 0) { + snprintf(label, sizeof(label), "digital_%d", i); + ImPlot::PlotDigital(label, &dataDigital[i].Data[0].x, &dataDigital[i].Data[0].y, dataDigital[i].Data.size(), 0, dataDigital[i].Offset, 2 * sizeof(float)); + } + } + for (int i = 0; i < 2; ++i) { + if (showAnalog[i]) { + snprintf(label, sizeof(label), "analog_%d", i); + if (dataAnalog[i].Data.size() > 0) + ImPlot::PlotLine(label, &dataAnalog[i].Data[0].x, &dataAnalog[i].Data[0].y, dataAnalog[i].Data.size(), 0, dataAnalog[i].Offset, 2 * sizeof(float)); + } + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_Images() { + ImGui::BulletText("Below we are displaying the font texture, which is the only texture we have\naccess to in this demo."); + ImGui::BulletText("Use the 'ImTextureID' type as storage to pass pointers or identifiers to your\nown texture data."); + ImGui::BulletText("See ImGui Wiki page 'Image Loading and Displaying Examples'."); + static ImVec2 bmin(0,0); + static ImVec2 bmax(1,1); + static ImVec2 uv0(0,0); + static ImVec2 uv1(1,1); + static ImVec4 tint(1,1,1,1); + ImGui::SliderFloat2("Min", &bmin.x, -2, 2, "%.1f"); + ImGui::SliderFloat2("Max", &bmax.x, -2, 2, "%.1f"); + ImGui::SliderFloat2("UV0", &uv0.x, -2, 2, "%.1f"); + ImGui::SliderFloat2("UV1", &uv1.x, -2, 2, "%.1f"); + ImGui::ColorEdit4("Tint",&tint.x); + if (ImPlot::BeginPlot("##image")) { + ImPlot::PlotImage("my image",ImGui::GetIO().Fonts->TexID, bmin, bmax, uv0, uv1, tint); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_RealtimePlots() { + ImGui::BulletText("Move your mouse to change the data!"); + ImGui::BulletText("This example assumes 60 FPS. Higher FPS requires larger buffer size."); + static ScrollingBuffer sdata1, sdata2; + static RollingBuffer rdata1, rdata2; + ImVec2 mouse = ImGui::GetMousePos(); + static float t = 0; + t += ImGui::GetIO().DeltaTime; + sdata1.AddPoint(t, mouse.x * 0.0005f); + rdata1.AddPoint(t, mouse.x * 0.0005f); + sdata2.AddPoint(t, mouse.y * 0.0005f); + rdata2.AddPoint(t, mouse.y * 0.0005f); + + static float history = 10.0f; + ImGui::SliderFloat("History",&history,1,30,"%.1f s"); + rdata1.Span = history; + rdata2.Span = history; + + static ImPlotAxisFlags flags = ImPlotAxisFlags_NoTickLabels; + + if (ImPlot::BeginPlot("##Scrolling", ImVec2(-1,150))) { + ImPlot::SetupAxes(nullptr, nullptr, flags, flags); + ImPlot::SetupAxisLimits(ImAxis_X1,t - history, t, ImGuiCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1,0,1); + ImPlot::SetNextFillStyle(IMPLOT_AUTO_COL,0.5f); + ImPlot::PlotShaded("Mouse X", &sdata1.Data[0].x, &sdata1.Data[0].y, sdata1.Data.size(), -INFINITY, 0, sdata1.Offset, 2 * sizeof(float)); + ImPlot::PlotLine("Mouse Y", &sdata2.Data[0].x, &sdata2.Data[0].y, sdata2.Data.size(), 0, sdata2.Offset, 2*sizeof(float)); + ImPlot::EndPlot(); + } + if (ImPlot::BeginPlot("##Rolling", ImVec2(-1,150))) { + ImPlot::SetupAxes(nullptr, nullptr, flags, flags); + ImPlot::SetupAxisLimits(ImAxis_X1,0,history, ImGuiCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1,0,1); + ImPlot::PlotLine("Mouse X", &rdata1.Data[0].x, &rdata1.Data[0].y, rdata1.Data.size(), 0, 0, 2 * sizeof(float)); + ImPlot::PlotLine("Mouse Y", &rdata2.Data[0].x, &rdata2.Data[0].y, rdata2.Data.size(), 0, 0, 2 * sizeof(float)); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_MarkersAndText() { + static float mk_size = ImPlot::GetStyle().MarkerSize; + static float mk_weight = ImPlot::GetStyle().MarkerWeight; + ImGui::DragFloat("Marker Size",&mk_size,0.1f,2.0f,10.0f,"%.2f px"); + ImGui::DragFloat("Marker Weight", &mk_weight,0.05f,0.5f,3.0f,"%.2f px"); + + if (ImPlot::BeginPlot("##MarkerStyles", ImVec2(-1,0), ImPlotFlags_CanvasOnly)) { + + ImPlot::SetupAxes(nullptr, nullptr, ImPlotAxisFlags_NoDecorations, ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(0, 10, 0, 12); + + ImS8 xs[2] = {1,4}; + ImS8 ys[2] = {10,11}; + + // filled markers + for (int m = 0; m < ImPlotMarker_COUNT; ++m) { + ImGui::PushID(m); + ImPlot::SetNextMarkerStyle(m, mk_size, IMPLOT_AUTO_COL, mk_weight); + ImPlot::PlotLine("##Filled", xs, ys, 2); + ImGui::PopID(); + ys[0]--; ys[1]--; + } + xs[0] = 6; xs[1] = 9; ys[0] = 10; ys[1] = 11; + // open markers + for (int m = 0; m < ImPlotMarker_COUNT; ++m) { + ImGui::PushID(m); + ImPlot::SetNextMarkerStyle(m, mk_size, ImVec4(0,0,0,0), mk_weight); + ImPlot::PlotLine("##Open", xs, ys, 2); + ImGui::PopID(); + ys[0]--; ys[1]--; + } + + ImPlot::PlotText("Filled Markers", 2.5f, 6.0f); + ImPlot::PlotText("Open Markers", 7.5f, 6.0f); + + ImPlot::PushStyleColor(ImPlotCol_InlayText, ImVec4(1,0,1,1)); + ImPlot::PlotText("Vertical Text", 5.0f, 6.0f, ImVec2(0,0), ImPlotTextFlags_Vertical); + ImPlot::PopStyleColor(); + + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_NaNValues() { + + static bool include_nan = true; + static ImPlotLineFlags flags = 0; + + float data1[5] = {0.0f,0.25f,0.5f,0.75f,1.0f}; + float data2[5] = {0.0f,0.25f,0.5f,0.75f,1.0f}; + + if (include_nan) + data1[2] = NAN; + + ImGui::Checkbox("Include NaN",&include_nan); + ImGui::SameLine(); + ImGui::CheckboxFlags("Skip NaN", (unsigned int*)&flags, ImPlotLineFlags_SkipNaN); + + if (ImPlot::BeginPlot("##NaNValues")) { + ImPlot::SetNextMarkerStyle(ImPlotMarker_Square); + ImPlot::PlotLine("line", data1, data2, 5, flags); + ImPlot::PlotBars("bars", data1, 5); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_LogScale() { + static double xs[1001], ys1[1001], ys2[1001], ys3[1001]; + for (int i = 0; i < 1001; ++i) { + xs[i] = i*0.1f; + ys1[i] = sin(xs[i]) + 1; + ys2[i] = log(xs[i]); + ys3[i] = pow(10.0, xs[i]); + } + if (ImPlot::BeginPlot("Log Plot", ImVec2(-1,0))) { + ImPlot::SetupAxisScale(ImAxis_X1, ImPlotScale_Log10); + ImPlot::SetupAxesLimits(0.1, 100, 0, 10); + ImPlot::PlotLine("f(x) = x", xs, xs, 1001); + ImPlot::PlotLine("f(x) = sin(x)+1", xs, ys1, 1001); + ImPlot::PlotLine("f(x) = log(x)", xs, ys2, 1001); + ImPlot::PlotLine("f(x) = 10^x", xs, ys3, 21); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_SymmetricLogScale() { + static double xs[1001], ys1[1001], ys2[1001]; + for (int i = 0; i < 1001; ++i) { + xs[i] = i*0.1f-50; + ys1[i] = sin(xs[i]); + ys2[i] = i*0.002 - 1; + } + if (ImPlot::BeginPlot("SymLog Plot", ImVec2(-1,0))) { + ImPlot::SetupAxisScale(ImAxis_X1, ImPlotScale_SymLog); + ImPlot::PlotLine("f(x) = a*x+b",xs,ys2,1001); + ImPlot::PlotLine("f(x) = sin(x)",xs,ys1,1001); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_TimeScale() { + + static double t_min = 1609459200; // 01/01/2021 @ 12:00:00am (UTC) + static double t_max = 1640995200; // 01/01/2022 @ 12:00:00am (UTC) + + ImGui::BulletText("When ImPlotAxisFlags_Time is enabled on the X-Axis, values are interpreted as\n" + "UNIX timestamps in seconds and axis labels are formated as date/time."); + ImGui::BulletText("By default, labels are in UTC time but can be set to use local time instead."); + + ImGui::Checkbox("Local Time",&ImPlot::GetStyle().UseLocalTime); + ImGui::SameLine(); + ImGui::Checkbox("ISO 8601",&ImPlot::GetStyle().UseISO8601); + ImGui::SameLine(); + ImGui::Checkbox("24 Hour Clock",&ImPlot::GetStyle().Use24HourClock); + + static HugeTimeData* data = nullptr; + if (data == nullptr) { + ImGui::SameLine(); + if (ImGui::Button("Generate Huge Data (~500MB!)")) { + static HugeTimeData sdata(t_min); + data = &sdata; + } + } + + if (ImPlot::BeginPlot("##Time", ImVec2(-1,0))) { + ImPlot::SetupAxisScale(ImAxis_X1, ImPlotScale_Time); + ImPlot::SetupAxesLimits(t_min,t_max,0,1); + if (data != nullptr) { + // downsample our data + int downsample = (int)ImPlot::GetPlotLimits().X.Size() / 1000 + 1; + int start = (int)(ImPlot::GetPlotLimits().X.Min - t_min); + start = start < 0 ? 0 : start > HugeTimeData::Size - 1 ? HugeTimeData::Size - 1 : start; + int end = (int)(ImPlot::GetPlotLimits().X.Max - t_min) + 1000; + end = end < 0 ? 0 : end > HugeTimeData::Size - 1 ? HugeTimeData::Size - 1 : end; + int size = (end - start)/downsample; + // plot it + ImPlot::PlotLine("Time Series", &data->Ts[start], &data->Ys[start], size, 0, 0, sizeof(double)*downsample); + } + // plot time now + double t_now = (double)time(nullptr); + double y_now = HugeTimeData::GetY(t_now); + ImPlot::PlotScatter("Now",&t_now,&y_now,1); + ImPlot::Annotation(t_now,y_now,ImPlot::GetLastItemColor(),ImVec2(10,10),false,"Now"); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +static inline double TransformForward_Sqrt(double v, void*) { + return sqrt(v); +} + +static inline double TransformInverse_Sqrt(double v, void*) { + return v*v; +} + +void Demo_CustomScale() { + static float v[100]; + for (int i = 0; i < 100; ++i) { + v[i] = i*0.01f; + } + if (ImPlot::BeginPlot("Sqrt")) { + ImPlot::SetupAxis(ImAxis_X1, "Linear"); + ImPlot::SetupAxis(ImAxis_Y1, "Sqrt"); + ImPlot::SetupAxisScale(ImAxis_Y1, TransformForward_Sqrt, TransformInverse_Sqrt); + ImPlot::SetupAxisLimitsConstraints(ImAxis_Y1, 0, INFINITY); + ImPlot::PlotLine("##data",v,v,100); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_MultipleAxes() { + static float xs[1001], xs2[1001], ys1[1001], ys2[1001], ys3[1001]; + for (int i = 0; i < 1001; ++i) { + xs[i] = (i*0.1f); + xs2[i] = xs[i] + 10.0f; + ys1[i] = sinf(xs[i]) * 3 + 1; + ys2[i] = cosf(xs[i]) * 0.2f + 0.5f; + ys3[i] = sinf(xs[i]+0.5f) * 100 + 200; + } + + static bool x2_axis = true; + static bool y2_axis = true; + static bool y3_axis = true; + + ImGui::Checkbox("X-Axis 2", &x2_axis); + ImGui::SameLine(); + ImGui::Checkbox("Y-Axis 2", &y2_axis); + ImGui::SameLine(); + ImGui::Checkbox("Y-Axis 3", &y3_axis); + + ImGui::BulletText("You can drag axes to the opposite side of the plot."); + ImGui::BulletText("Hover over legend items to see which axis they are plotted on."); + + if (ImPlot::BeginPlot("Multi-Axis Plot", ImVec2(-1,0))) { + ImPlot::SetupAxes("X-Axis 1", "Y-Axis 1"); + ImPlot::SetupAxesLimits(0, 100, 0, 10); + if (x2_axis) { + ImPlot::SetupAxis(ImAxis_X2, "X-Axis 2",ImPlotAxisFlags_AuxDefault); + ImPlot::SetupAxisLimits(ImAxis_X2, 0, 100); + } + if (y2_axis) { + ImPlot::SetupAxis(ImAxis_Y2, "Y-Axis 2",ImPlotAxisFlags_AuxDefault); + ImPlot::SetupAxisLimits(ImAxis_Y2, 0, 1); + } + if (y3_axis) { + ImPlot::SetupAxis(ImAxis_Y3, "Y-Axis 3",ImPlotAxisFlags_AuxDefault); + ImPlot::SetupAxisLimits(ImAxis_Y3, 0, 300); + } + + ImPlot::PlotLine("f(x) = x", xs, xs, 1001); + if (x2_axis) { + ImPlot::SetAxes(ImAxis_X2, ImAxis_Y1); + ImPlot::PlotLine("f(x) = sin(x)*3+1", xs2, ys1, 1001); + } + if (y2_axis) { + ImPlot::SetAxes(ImAxis_X1, ImAxis_Y2); + ImPlot::PlotLine("f(x) = cos(x)*.2+.5", xs, ys2, 1001); + } + if (y3_axis) { + ImPlot::SetAxes(ImAxis_X2, ImAxis_Y3); + ImPlot::PlotLine("f(x) = sin(x+.5)*100+200 ", xs2, ys3, 1001); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_LinkedAxes() { + static ImPlotRect lims(0,1,0,1); + static bool linkx = true, linky = true; + int data[2] = {0,1}; + ImGui::Checkbox("Link X", &linkx); + ImGui::SameLine(); + ImGui::Checkbox("Link Y", &linky); + + ImGui::DragScalarN("Limits",ImGuiDataType_Double,&lims.X.Min,4,0.01f); + + if (BeginAlignedPlots("AlignedGroup")) { + if (ImPlot::BeginPlot("Plot A")) { + ImPlot::SetupAxisLinks(ImAxis_X1, linkx ? &lims.X.Min : nullptr, linkx ? &lims.X.Max : nullptr); + ImPlot::SetupAxisLinks(ImAxis_Y1, linky ? &lims.Y.Min : nullptr, linky ? &lims.Y.Max : nullptr); + ImPlot::PlotLine("Line",data,2); + ImPlot::EndPlot(); + } + if (ImPlot::BeginPlot("Plot B")) { + ImPlot::SetupAxisLinks(ImAxis_X1, linkx ? &lims.X.Min : nullptr, linkx ? &lims.X.Max : nullptr); + ImPlot::SetupAxisLinks(ImAxis_Y1, linky ? &lims.Y.Min : nullptr, linky ? &lims.Y.Max : nullptr); + ImPlot::PlotLine("Line",data,2); + ImPlot::EndPlot(); + } + ImPlot::EndAlignedPlots(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_AxisConstraints() { + static float constraints[4] = {-10,10,1,20}; + static ImPlotAxisFlags flags; + ImGui::DragFloat2("Limits Constraints", &constraints[0], 0.01f); + ImGui::DragFloat2("Zoom Constraints", &constraints[2], 0.01f); + CHECKBOX_FLAG(flags, ImPlotAxisFlags_PanStretch); + if (ImPlot::BeginPlot("##AxisConstraints",ImVec2(-1,0))) { + ImPlot::SetupAxes("X","Y",flags,flags); + ImPlot::SetupAxesLimits(-1,1,-1,1); + ImPlot::SetupAxisLimitsConstraints(ImAxis_X1,constraints[0], constraints[1]); + ImPlot::SetupAxisZoomConstraints(ImAxis_X1,constraints[2], constraints[3]); + ImPlot::SetupAxisLimitsConstraints(ImAxis_Y1,constraints[0], constraints[1]); + ImPlot::SetupAxisZoomConstraints(ImAxis_Y1,constraints[2], constraints[3]); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_EqualAxes() { + ImGui::BulletText("Equal constraint applies to axis pairs (e.g ImAxis_X1/Y1, ImAxis_X2/Y2)"); + static double xs1[360], ys1[360]; + for (int i = 0; i < 360; ++i) { + double angle = i * 2 * PI / 359.0; + xs1[i] = cos(angle); ys1[i] = sin(angle); + } + float xs2[] = {-1,0,1,0,-1}; + float ys2[] = {0,1,0,-1,0}; + if (ImPlot::BeginPlot("##EqualAxes",ImVec2(-1,0),ImPlotFlags_Equal)) { + ImPlot::SetupAxis(ImAxis_X2, nullptr, ImPlotAxisFlags_AuxDefault); + ImPlot::SetupAxis(ImAxis_Y2, nullptr, ImPlotAxisFlags_AuxDefault); + ImPlot::PlotLine("Circle",xs1,ys1,360); + ImPlot::SetAxes(ImAxis_X2, ImAxis_Y2); + ImPlot::PlotLine("Diamond",xs2,ys2,5); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_AutoFittingData() { + ImGui::BulletText("The Y-axis has been configured to auto-fit to only the data visible in X-axis range."); + ImGui::BulletText("Zoom and pan the X-axis. Disable Stems to see a difference in fit."); + ImGui::BulletText("If ImPlotAxisFlags_RangeFit is disabled, the axis will fit ALL data."); + + static ImPlotAxisFlags xflags = ImPlotAxisFlags_None; + static ImPlotAxisFlags yflags = ImPlotAxisFlags_AutoFit|ImPlotAxisFlags_RangeFit; + + ImGui::TextUnformatted("X: "); ImGui::SameLine(); + ImGui::CheckboxFlags("ImPlotAxisFlags_AutoFit##X", (unsigned int*)&xflags, ImPlotAxisFlags_AutoFit); ImGui::SameLine(); + ImGui::CheckboxFlags("ImPlotAxisFlags_RangeFit##X", (unsigned int*)&xflags, ImPlotAxisFlags_RangeFit); + + ImGui::TextUnformatted("Y: "); ImGui::SameLine(); + ImGui::CheckboxFlags("ImPlotAxisFlags_AutoFit##Y", (unsigned int*)&yflags, ImPlotAxisFlags_AutoFit); ImGui::SameLine(); + ImGui::CheckboxFlags("ImPlotAxisFlags_RangeFit##Y", (unsigned int*)&yflags, ImPlotAxisFlags_RangeFit); + + static double data[101]; + srand(0); + for (int i = 0; i < 101; ++i) + data[i] = 1 + sin(i/10.0f); + + if (ImPlot::BeginPlot("##DataFitting")) { + ImPlot::SetupAxes("X","Y",xflags,yflags); + ImPlot::PlotLine("Line",data,101); + ImPlot::PlotStems("Stems",data,101); + ImPlot::EndPlot(); + }; +} + +//----------------------------------------------------------------------------- + +ImPlotPoint SinewaveGetter(int i, void* data) { + float f = *(float*)data; + return ImPlotPoint(i,sinf(f*i)); +} + +void Demo_SubplotsSizing() { + + static ImPlotSubplotFlags flags = ImPlotSubplotFlags_None; + ImGui::CheckboxFlags("ImPlotSubplotFlags_NoResize", (unsigned int*)&flags, ImPlotSubplotFlags_NoResize); + ImGui::CheckboxFlags("ImPlotSubplotFlags_NoTitle", (unsigned int*)&flags, ImPlotSubplotFlags_NoTitle); + + static int rows = 3; + static int cols = 3; + ImGui::SliderInt("Rows",&rows,1,5); + ImGui::SliderInt("Cols",&cols,1,5); + static float rratios[] = {5,1,1,1,1,1}; + static float cratios[] = {5,1,1,1,1,1}; + ImGui::DragScalarN("Row Ratios",ImGuiDataType_Float,rratios,rows,0.01f,nullptr); + ImGui::DragScalarN("Col Ratios",ImGuiDataType_Float,cratios,cols,0.01f,nullptr); + if (ImPlot::BeginSubplots("My Subplots", rows, cols, ImVec2(-1,400), flags, rratios, cratios)) { + for (int i = 0; i < rows*cols; ++i) { + if (ImPlot::BeginPlot("",ImVec2(),ImPlotFlags_NoLegend)) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_NoDecorations,ImPlotAxisFlags_NoDecorations); + float fi = 0.01f * (i+1); + ImPlot::SetNextLineStyle(SampleColormap((float)i/(float)(rows*cols-1),ImPlotColormap_Jet)); + ImPlot::PlotLineG("data",SinewaveGetter,&fi,1000); + ImPlot::EndPlot(); + } + } + ImPlot::EndSubplots(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_SubplotItemSharing() { + static ImPlotSubplotFlags flags = ImPlotSubplotFlags_ShareItems; + ImGui::CheckboxFlags("ImPlotSubplotFlags_ShareItems", (unsigned int*)&flags, ImPlotSubplotFlags_ShareItems); + ImGui::CheckboxFlags("ImPlotSubplotFlags_ColMajor", (unsigned int*)&flags, ImPlotSubplotFlags_ColMajor); + ImGui::BulletText("Drag and drop items from the legend onto plots (except for 'common')"); + static int rows = 2; + static int cols = 3; + static int id[] = {0,1,2,3,4,5}; + static int curj = -1; + if (ImPlot::BeginSubplots("##ItemSharing", rows, cols, ImVec2(-1,400), flags)) { + for (int i = 0; i < rows*cols; ++i) { + if (ImPlot::BeginPlot("")) { + float fc = 0.01f; + ImPlot::PlotLineG("common",SinewaveGetter,&fc,1000); + for (int j = 0; j < 6; ++j) { + if (id[j] == i) { + char label[8]; + float fj = 0.01f * (j+2); + snprintf(label, sizeof(label), "data%d", j); + ImPlot::PlotLineG(label,SinewaveGetter,&fj,1000); + if (ImPlot::BeginDragDropSourceItem(label)) { + curj = j; + ImGui::SetDragDropPayload("MY_DND",nullptr,0); + ImPlot::ItemIcon(GetLastItemColor()); ImGui::SameLine(); + ImGui::TextUnformatted(label); + ImPlot::EndDragDropSource(); + } + } + } + if (ImPlot::BeginDragDropTargetPlot()) { + if (ImGui::AcceptDragDropPayload("MY_DND")) + id[curj] = i; + ImPlot::EndDragDropTarget(); + } + ImPlot::EndPlot(); + } + } + ImPlot::EndSubplots(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_SubplotAxisLinking() { + static ImPlotSubplotFlags flags = ImPlotSubplotFlags_LinkRows | ImPlotSubplotFlags_LinkCols; + ImGui::CheckboxFlags("ImPlotSubplotFlags_LinkRows", (unsigned int*)&flags, ImPlotSubplotFlags_LinkRows); + ImGui::CheckboxFlags("ImPlotSubplotFlags_LinkCols", (unsigned int*)&flags, ImPlotSubplotFlags_LinkCols); + ImGui::CheckboxFlags("ImPlotSubplotFlags_LinkAllX", (unsigned int*)&flags, ImPlotSubplotFlags_LinkAllX); + ImGui::CheckboxFlags("ImPlotSubplotFlags_LinkAllY", (unsigned int*)&flags, ImPlotSubplotFlags_LinkAllY); + + static int rows = 2; + static int cols = 2; + if (ImPlot::BeginSubplots("##AxisLinking", rows, cols, ImVec2(-1,400), flags)) { + for (int i = 0; i < rows*cols; ++i) { + if (ImPlot::BeginPlot("")) { + ImPlot::SetupAxesLimits(0,1000,-1,1); + float fc = 0.01f; + ImPlot::PlotLineG("common",SinewaveGetter,&fc,1000); + ImPlot::EndPlot(); + } + } + ImPlot::EndSubplots(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_LegendOptions() { + static ImPlotLocation loc = ImPlotLocation_East; + ImGui::CheckboxFlags("North", (unsigned int*)&loc, ImPlotLocation_North); ImGui::SameLine(); + ImGui::CheckboxFlags("South", (unsigned int*)&loc, ImPlotLocation_South); ImGui::SameLine(); + ImGui::CheckboxFlags("West", (unsigned int*)&loc, ImPlotLocation_West); ImGui::SameLine(); + ImGui::CheckboxFlags("East", (unsigned int*)&loc, ImPlotLocation_East); + + static ImPlotLegendFlags flags = 0; + + CHECKBOX_FLAG(flags, ImPlotLegendFlags_Horizontal); + CHECKBOX_FLAG(flags, ImPlotLegendFlags_Outside); + CHECKBOX_FLAG(flags, ImPlotLegendFlags_Sort); + + ImGui::SliderFloat2("LegendPadding", (float*)&GetStyle().LegendPadding, 0.0f, 20.0f, "%.0f"); + ImGui::SliderFloat2("LegendInnerPadding", (float*)&GetStyle().LegendInnerPadding, 0.0f, 10.0f, "%.0f"); + ImGui::SliderFloat2("LegendSpacing", (float*)&GetStyle().LegendSpacing, 0.0f, 5.0f, "%.0f"); + + if (ImPlot::BeginPlot("##Legend",ImVec2(-1,0))) { + ImPlot::SetupLegend(loc, flags); + static MyImPlot::WaveData data1(0.001, 0.2, 4, 0.2); + static MyImPlot::WaveData data2(0.001, 0.2, 4, 0.4); + static MyImPlot::WaveData data3(0.001, 0.2, 4, 0.6); + static MyImPlot::WaveData data4(0.001, 0.2, 4, 0.8); + static MyImPlot::WaveData data5(0.001, 0.2, 4, 1.0); + + ImPlot::PlotLineG("Item B", MyImPlot::SawWave, &data1, 1000); // "Item B" added to legend + ImPlot::PlotLineG("Item A##IDText", MyImPlot::SawWave, &data2, 1000); // "Item A" added to legend, text after ## used for ID only + ImPlot::PlotLineG("##NotListed", MyImPlot::SawWave, &data3, 1000); // plotted, but not added to legend + ImPlot::PlotLineG("Item C", MyImPlot::SawWave, &data4, 1000); // "Item C" added to legend + ImPlot::PlotLineG("Item C", MyImPlot::SawWave, &data5, 1000); // combined with previous "Item C" + + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_DragPoints() { + ImGui::BulletText("Click and drag each point."); + static ImPlotDragToolFlags flags = ImPlotDragToolFlags_None; + ImGui::CheckboxFlags("NoCursors", (unsigned int*)&flags, ImPlotDragToolFlags_NoCursors); ImGui::SameLine(); + ImGui::CheckboxFlags("NoFit", (unsigned int*)&flags, ImPlotDragToolFlags_NoFit); ImGui::SameLine(); + ImGui::CheckboxFlags("NoInput", (unsigned int*)&flags, ImPlotDragToolFlags_NoInputs); + ImPlotAxisFlags ax_flags = ImPlotAxisFlags_NoTickLabels | ImPlotAxisFlags_NoTickMarks; + if (ImPlot::BeginPlot("##Bezier",ImVec2(-1,0),ImPlotFlags_CanvasOnly)) { + ImPlot::SetupAxes(nullptr,nullptr,ax_flags,ax_flags); + ImPlot::SetupAxesLimits(0,1,0,1); + static ImPlotPoint P[] = {ImPlotPoint(.05f,.05f), ImPlotPoint(0.2,0.4), ImPlotPoint(0.8,0.6), ImPlotPoint(.95f,.95f)}; + + ImPlot::DragPoint(0,&P[0].x,&P[0].y, ImVec4(0,0.9f,0,1),4,flags); + ImPlot::DragPoint(1,&P[1].x,&P[1].y, ImVec4(1,0.5f,1,1),4,flags); + ImPlot::DragPoint(2,&P[2].x,&P[2].y, ImVec4(0,0.5f,1,1),4,flags); + ImPlot::DragPoint(3,&P[3].x,&P[3].y, ImVec4(0,0.9f,0,1),4,flags); + + static ImPlotPoint B[100]; + for (int i = 0; i < 100; ++i) { + double t = i / 99.0; + double u = 1 - t; + double w1 = u*u*u; + double w2 = 3*u*u*t; + double w3 = 3*u*t*t; + double w4 = t*t*t; + B[i] = ImPlotPoint(w1*P[0].x + w2*P[1].x + w3*P[2].x + w4*P[3].x, w1*P[0].y + w2*P[1].y + w3*P[2].y + w4*P[3].y); + } + + + ImPlot::SetNextLineStyle(ImVec4(1,0.5f,1,1)); + ImPlot::PlotLine("##h1",&P[0].x, &P[0].y, 2, 0, 0, sizeof(ImPlotPoint)); + ImPlot::SetNextLineStyle(ImVec4(0,0.5f,1,1)); + ImPlot::PlotLine("##h2",&P[2].x, &P[2].y, 2, 0, 0, sizeof(ImPlotPoint)); + ImPlot::SetNextLineStyle(ImVec4(0,0.9f,0,1), 2); + ImPlot::PlotLine("##bez",&B[0].x, &B[0].y, 100, 0, 0, sizeof(ImPlotPoint)); + + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_DragLines() { + ImGui::BulletText("Click and drag the horizontal and vertical lines."); + static double x1 = 0.2; + static double x2 = 0.8; + static double y1 = 0.25; + static double y2 = 0.75; + static double f = 0.1; + static ImPlotDragToolFlags flags = ImPlotDragToolFlags_None; + ImGui::CheckboxFlags("NoCursors", (unsigned int*)&flags, ImPlotDragToolFlags_NoCursors); ImGui::SameLine(); + ImGui::CheckboxFlags("NoFit", (unsigned int*)&flags, ImPlotDragToolFlags_NoFit); ImGui::SameLine(); + ImGui::CheckboxFlags("NoInput", (unsigned int*)&flags, ImPlotDragToolFlags_NoInputs); + if (ImPlot::BeginPlot("##lines",ImVec2(-1,0))) { + ImPlot::SetupAxesLimits(0,1,0,1); + ImPlot::DragLineX(0,&x1,ImVec4(1,1,1,1),1,flags); + ImPlot::DragLineX(1,&x2,ImVec4(1,1,1,1),1,flags); + ImPlot::DragLineY(2,&y1,ImVec4(1,1,1,1),1,flags); + ImPlot::DragLineY(3,&y2,ImVec4(1,1,1,1),1,flags); + double xs[1000], ys[1000]; + for (int i = 0; i < 1000; ++i) { + xs[i] = (x2+x1)/2+fabs(x2-x1)*(i/1000.0f - 0.5f); + ys[i] = (y1+y2)/2+fabs(y2-y1)/2*sin(f*i/10); + } + ImPlot::PlotLine("Interactive Data", xs, ys, 1000); + ImPlot::DragLineY(120482,&f,ImVec4(1,0.5f,1,1),1,flags); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_DragRects() { + + static float x_data[512]; + static float y_data1[512]; + static float y_data2[512]; + static float y_data3[512]; + static float sampling_freq = 44100; + static float freq = 500; + for (size_t i = 0; i < 512; ++i) { + const float t = i / sampling_freq; + x_data[i] = t; + const float arg = 2 * 3.14f * freq * t; + y_data1[i] = sinf(arg); + y_data2[i] = y_data1[i] * -0.6f + sinf(2 * arg) * 0.4f; + y_data3[i] = y_data2[i] * -0.6f + sinf(3 * arg) * 0.4f; + } + ImGui::BulletText("Click and drag the edges, corners, and center of the rect."); + static ImPlotRect rect(0.0025,0.0045,0,0.5); + static ImPlotDragToolFlags flags = ImPlotDragToolFlags_None; + ImGui::CheckboxFlags("NoCursors", (unsigned int*)&flags, ImPlotDragToolFlags_NoCursors); ImGui::SameLine(); + ImGui::CheckboxFlags("NoFit", (unsigned int*)&flags, ImPlotDragToolFlags_NoFit); ImGui::SameLine(); + ImGui::CheckboxFlags("NoInput", (unsigned int*)&flags, ImPlotDragToolFlags_NoInputs); + + if (ImPlot::BeginPlot("##Main",ImVec2(-1,150))) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_NoTickLabels,ImPlotAxisFlags_NoTickLabels); + ImPlot::SetupAxesLimits(0,0.01,-1,1); + ImPlot::PlotLine("Signal 1", x_data, y_data1, 512); + ImPlot::PlotLine("Signal 2", x_data, y_data2, 512); + ImPlot::PlotLine("Signal 3", x_data, y_data3, 512); + ImPlot::DragRect(0,&rect.X.Min,&rect.Y.Min,&rect.X.Max,&rect.Y.Max,ImVec4(1,0,1,1),flags); + ImPlot::EndPlot(); + } + if (ImPlot::BeginPlot("##rect",ImVec2(-1,150), ImPlotFlags_CanvasOnly)) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_NoDecorations,ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(rect.X.Min, rect.X.Max, rect.Y.Min, rect.Y.Max, ImGuiCond_Always); + ImPlot::PlotLine("Signal 1", x_data, y_data1, 512); + ImPlot::PlotLine("Signal 2", x_data, y_data2, 512); + ImPlot::PlotLine("Signal 3", x_data, y_data3, 512); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +ImPlotPoint FindCentroid(const ImVector& data, const ImPlotRect& bounds, int& cnt) { + cnt = 0; + ImPlotPoint avg; + ImPlotRect bounds_fixed; + bounds_fixed.X.Min = bounds.X.Min < bounds.X.Max ? bounds.X.Min : bounds.X.Max; + bounds_fixed.X.Max = bounds.X.Min < bounds.X.Max ? bounds.X.Max : bounds.X.Min; + bounds_fixed.Y.Min = bounds.Y.Min < bounds.Y.Max ? bounds.Y.Min : bounds.Y.Max; + bounds_fixed.Y.Max = bounds.Y.Min < bounds.Y.Max ? bounds.Y.Max : bounds.Y.Min; + for (int i = 0; i < data.size(); ++i) { + if (bounds_fixed.Contains(data[i].x, data[i].y)) { + avg.x += data[i].x; + avg.y += data[i].y; + cnt++; + } + } + if (cnt > 0) { + avg.x = avg.x / cnt; + avg.y = avg.y / cnt; + } + return avg; +} + +//----------------------------------------------------------------------------- + +void Demo_Querying() { + static ImVector data; + static ImVector rects; + static ImPlotRect limits, select; + static bool init = true; + if (init) { + for (int i = 0; i < 50; ++i) + { + double x = RandomRange(0.1, 0.9); + double y = RandomRange(0.1, 0.9); + data.push_back(ImPlotPoint(x,y)); + } + init = false; + } + + ImGui::BulletText("Box select and left click mouse to create a new query rect."); + ImGui::BulletText("Ctrl + click in the plot area to draw points."); + + if (ImGui::Button("Clear Queries")) + rects.shrink(0); + + if (ImPlot::BeginPlot("##Centroid")) { + ImPlot::SetupAxesLimits(0,1,0,1); + if (ImPlot::IsPlotHovered() && ImGui::IsMouseClicked(0) && ImGui::GetIO().KeyCtrl) { + ImPlotPoint pt = ImPlot::GetPlotMousePos(); + data.push_back(pt); + } + ImPlot::PlotScatter("Points", &data[0].x, &data[0].y, data.size(), 0, 0, 2 * sizeof(double)); + if (ImPlot::IsPlotSelected()) { + select = ImPlot::GetPlotSelection(); + int cnt; + ImPlotPoint centroid = FindCentroid(data,select,cnt); + if (cnt > 0) { + ImPlot::SetNextMarkerStyle(ImPlotMarker_Square,6); + ImPlot::PlotScatter("Centroid", ¢roid.x, ¢roid.y, 1); + } + if (ImGui::IsMouseClicked(ImPlot::GetInputMap().SelectCancel)) { + CancelPlotSelection(); + rects.push_back(select); + } + } + for (int i = 0; i < rects.size(); ++i) { + int cnt; + ImPlotPoint centroid = FindCentroid(data,rects[i],cnt); + if (cnt > 0) { + ImPlot::SetNextMarkerStyle(ImPlotMarker_Square,6); + ImPlot::PlotScatter("Centroid", ¢roid.x, ¢roid.y, 1); + } + ImPlot::DragRect(i,&rects[i].X.Min,&rects[i].Y.Min,&rects[i].X.Max,&rects[i].Y.Max,ImVec4(1,0,1,1)); + } + limits = ImPlot::GetPlotLimits(); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_Annotations() { + static bool clamp = false; + ImGui::Checkbox("Clamp",&clamp); + if (ImPlot::BeginPlot("##Annotations")) { + ImPlot::SetupAxesLimits(0,2,0,1); + static float p[] = {0.25f, 0.25f, 0.75f, 0.75f, 0.25f}; + ImPlot::PlotScatter("##Points",&p[0],&p[1],4); + ImVec4 col = GetLastItemColor(); + ImPlot::Annotation(0.25,0.25,col,ImVec2(-15,15),clamp,"BL"); + ImPlot::Annotation(0.75,0.25,col,ImVec2(15,15),clamp,"BR"); + ImPlot::Annotation(0.75,0.75,col,ImVec2(15,-15),clamp,"TR"); + ImPlot::Annotation(0.25,0.75,col,ImVec2(-15,-15),clamp,"TL"); + ImPlot::Annotation(0.5,0.5,col,ImVec2(0,0),clamp,"Center"); + + ImPlot::Annotation(1.25,0.75,ImVec4(0,1,0,1),ImVec2(0,0),clamp); + + float bx[] = {1.2f,1.5f,1.8f}; + float by[] = {0.25f, 0.5f, 0.75f}; + ImPlot::PlotBars("##Bars",bx,by,3,0.2); + for (int i = 0; i < 3; ++i) + ImPlot::Annotation(bx[i],by[i],ImVec4(0,0,0,0),ImVec2(0,-5),clamp,"B[%d]=%.2f",i,by[i]); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_Tags() { + static bool show = true; + ImGui::Checkbox("Show Tags",&show); + if (ImPlot::BeginPlot("##Tags")) { + ImPlot::SetupAxis(ImAxis_X2); + ImPlot::SetupAxis(ImAxis_Y2); + if (show) { + ImPlot::TagX(0.25, ImVec4(1,1,0,1)); + ImPlot::TagY(0.75, ImVec4(1,1,0,1)); + static double drag_tag = 0.25; + ImPlot::DragLineY(0,&drag_tag,ImVec4(1,0,0,1),1,ImPlotDragToolFlags_NoFit); + ImPlot::TagY(drag_tag, ImVec4(1,0,0,1), "Drag"); + SetAxes(ImAxis_X2, ImAxis_Y2); + ImPlot::TagX(0.5, ImVec4(0,1,1,1), "%s", "MyTag"); + ImPlot::TagY(0.5, ImVec4(0,1,1,1), "Tag: %d", 42); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_DragAndDrop() { + ImGui::BulletText("Drag/drop items from the left column."); + ImGui::BulletText("Drag/drop items between plots."); + ImGui::Indent(); + ImGui::BulletText("Plot 1 Targets: Plot, Y-Axes, Legend"); + ImGui::BulletText("Plot 1 Sources: Legend Item Labels"); + ImGui::BulletText("Plot 2 Targets: Plot, X-Axis, Y-Axis"); + ImGui::BulletText("Plot 2 Sources: Plot, X-Axis, Y-Axis (hold Ctrl)"); + ImGui::Unindent(); + + // convenience struct to manage DND items; do this however you like + struct MyDndItem { + int Idx; + int Plt; + ImAxis Yax; + char Label[16]; + ImVector Data; + ImVec4 Color; + MyDndItem() { + static int i = 0; + Idx = i++; + Plt = 0; + Yax = ImAxis_Y1; + snprintf(Label, sizeof(Label), "%02d Hz", Idx+1); + Color = RandomColor(); + Data.reserve(1001); + for (int k = 0; k < 1001; ++k) { + float t = k * 1.0f / 999; + Data.push_back(ImVec2(t, 0.5f + 0.5f * sinf(2*3.14f*t*(Idx+1)))); + } + } + void Reset() { Plt = 0; Yax = ImAxis_Y1; } + }; + + const int k_dnd = 20; + static MyDndItem dnd[k_dnd]; + static MyDndItem* dndx = nullptr; // for plot 2 + static MyDndItem* dndy = nullptr; // for plot 2 + + // child window to serve as initial source for our DND items + ImGui::BeginChild("DND_LEFT",ImVec2(100,400)); + if (ImGui::Button("Reset Data")) { + for (int k = 0; k < k_dnd; ++k) + dnd[k].Reset(); + dndx = dndy = nullptr; + } + for (int k = 0; k < k_dnd; ++k) { + if (dnd[k].Plt > 0) + continue; + ImPlot::ItemIcon(dnd[k].Color); ImGui::SameLine(); + ImGui::Selectable(dnd[k].Label, false, 0, ImVec2(100, 0)); + if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None)) { + ImGui::SetDragDropPayload("MY_DND", &k, sizeof(int)); + ImPlot::ItemIcon(dnd[k].Color); ImGui::SameLine(); + ImGui::TextUnformatted(dnd[k].Label); + ImGui::EndDragDropSource(); + } + } + ImGui::EndChild(); + if (ImGui::BeginDragDropTarget()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dnd[i].Reset(); + } + ImGui::EndDragDropTarget(); + } + + ImGui::SameLine(); + ImGui::BeginChild("DND_RIGHT",ImVec2(-1,400)); + // plot 1 (time series) + ImPlotAxisFlags flags = ImPlotAxisFlags_NoTickLabels | ImPlotAxisFlags_NoGridLines | ImPlotAxisFlags_NoHighlight; + if (ImPlot::BeginPlot("##DND1", ImVec2(-1,195))) { + ImPlot::SetupAxis(ImAxis_X1, nullptr, flags|ImPlotAxisFlags_Lock); + ImPlot::SetupAxis(ImAxis_Y1, "[drop here]", flags); + ImPlot::SetupAxis(ImAxis_Y2, "[drop here]", flags|ImPlotAxisFlags_Opposite); + ImPlot::SetupAxis(ImAxis_Y3, "[drop here]", flags|ImPlotAxisFlags_Opposite); + + for (int k = 0; k < k_dnd; ++k) { + if (dnd[k].Plt == 1 && dnd[k].Data.size() > 0) { + ImPlot::SetAxis(dnd[k].Yax); + ImPlot::SetNextLineStyle(dnd[k].Color); + ImPlot::PlotLine(dnd[k].Label, &dnd[k].Data[0].x, &dnd[k].Data[0].y, dnd[k].Data.size(), 0, 0, 2 * sizeof(float)); + // allow legend item labels to be DND sources + if (ImPlot::BeginDragDropSourceItem(dnd[k].Label)) { + ImGui::SetDragDropPayload("MY_DND", &k, sizeof(int)); + ImPlot::ItemIcon(dnd[k].Color); ImGui::SameLine(); + ImGui::TextUnformatted(dnd[k].Label); + ImPlot::EndDragDropSource(); + } + } + } + // allow the main plot area to be a DND target + if (ImPlot::BeginDragDropTargetPlot()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dnd[i].Plt = 1; dnd[i].Yax = ImAxis_Y1; + } + ImPlot::EndDragDropTarget(); + } + // allow each y-axis to be a DND target + for (int y = ImAxis_Y1; y <= ImAxis_Y3; ++y) { + if (ImPlot::BeginDragDropTargetAxis(y)) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dnd[i].Plt = 1; dnd[i].Yax = y; + } + ImPlot::EndDragDropTarget(); + } + } + // allow the legend to be a DND target + if (ImPlot::BeginDragDropTargetLegend()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dnd[i].Plt = 1; dnd[i].Yax = ImAxis_Y1; + } + ImPlot::EndDragDropTarget(); + } + ImPlot::EndPlot(); + } + // plot 2 (Lissajous) + if (ImPlot::BeginPlot("##DND2", ImVec2(-1,195))) { + ImPlot::PushStyleColor(ImPlotCol_AxisBg, dndx != nullptr ? dndx->Color : ImPlot::GetStyle().Colors[ImPlotCol_AxisBg]); + ImPlot::SetupAxis(ImAxis_X1, dndx == nullptr ? "[drop here]" : dndx->Label, flags); + ImPlot::PushStyleColor(ImPlotCol_AxisBg, dndy != nullptr ? dndy->Color : ImPlot::GetStyle().Colors[ImPlotCol_AxisBg]); + ImPlot::SetupAxis(ImAxis_Y1, dndy == nullptr ? "[drop here]" : dndy->Label, flags); + ImPlot::PopStyleColor(2); + if (dndx != nullptr && dndy != nullptr) { + ImVec4 mixed((dndx->Color.x + dndy->Color.x)/2,(dndx->Color.y + dndy->Color.y)/2,(dndx->Color.z + dndy->Color.z)/2,(dndx->Color.w + dndy->Color.w)/2); + ImPlot::SetNextLineStyle(mixed); + ImPlot::PlotLine("##dndxy", &dndx->Data[0].y, &dndy->Data[0].y, dndx->Data.size(), 0, 0, 2 * sizeof(float)); + } + // allow the x-axis to be a DND target + if (ImPlot::BeginDragDropTargetAxis(ImAxis_X1)) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dndx = &dnd[i]; + } + ImPlot::EndDragDropTarget(); + } + // allow the x-axis to be a DND source + if (dndx != nullptr && ImPlot::BeginDragDropSourceAxis(ImAxis_X1)) { + ImGui::SetDragDropPayload("MY_DND", &dndx->Idx, sizeof(int)); + ImPlot::ItemIcon(dndx->Color); ImGui::SameLine(); + ImGui::TextUnformatted(dndx->Label); + ImPlot::EndDragDropSource(); + } + // allow the y-axis to be a DND target + if (ImPlot::BeginDragDropTargetAxis(ImAxis_Y1)) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dndy = &dnd[i]; + } + ImPlot::EndDragDropTarget(); + } + // allow the y-axis to be a DND source + if (dndy != nullptr && ImPlot::BeginDragDropSourceAxis(ImAxis_Y1)) { + ImGui::SetDragDropPayload("MY_DND", &dndy->Idx, sizeof(int)); + ImPlot::ItemIcon(dndy->Color); ImGui::SameLine(); + ImGui::TextUnformatted(dndy->Label); + ImPlot::EndDragDropSource(); + } + // allow the plot area to be a DND target + if (ImPlot::BeginDragDropTargetPlot()) { + if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("MY_DND")) { + int i = *(int*)payload->Data; dndx = dndy = &dnd[i]; + } + } + // allow the plot area to be a DND source + if (ImPlot::BeginDragDropSourcePlot()) { + ImGui::TextUnformatted("Yes, you can\ndrag this!"); + ImPlot::EndDragDropSource(); + } + ImPlot::EndPlot(); + } + ImGui::EndChild(); +} + +//----------------------------------------------------------------------------- + +void Demo_Tables() { +#ifdef IMGUI_HAS_TABLE + static ImGuiTableFlags flags = ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | + ImGuiTableFlags_RowBg | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable; + static bool anim = true; + static int offset = 0; + ImGui::BulletText("Plots can be used inside of ImGui tables as another means of creating subplots."); + ImGui::Checkbox("Animate",&anim); + if (anim) + offset = (offset + 1) % 100; + if (ImGui::BeginTable("##table", 3, flags, ImVec2(-1,0))) { + ImGui::TableSetupColumn("Electrode", ImGuiTableColumnFlags_WidthFixed, 75.0f); + ImGui::TableSetupColumn("Voltage", ImGuiTableColumnFlags_WidthFixed, 75.0f); + ImGui::TableSetupColumn("EMG Signal"); + ImGui::TableHeadersRow(); + ImPlot::PushColormap(ImPlotColormap_Cool); + for (int row = 0; row < 10; row++) { + ImGui::TableNextRow(); + static float data[100]; + srand(row); + for (int i = 0; i < 100; ++i) + data[i] = RandomRange(0.0f,10.0f); + ImGui::TableSetColumnIndex(0); + ImGui::Text("EMG %d", row); + ImGui::TableSetColumnIndex(1); + ImGui::Text("%.3f V", data[offset]); + ImGui::TableSetColumnIndex(2); + ImGui::PushID(row); + MyImPlot::Sparkline("##spark",data,100,0,11.0f,offset,ImPlot::GetColormapColor(row),ImVec2(-1, 35)); + ImGui::PopID(); + } + ImPlot::PopColormap(); + ImGui::EndTable(); + } +#else + ImGui::BulletText("You need to merge the ImGui 'tables' branch for this section."); +#endif +} + +//----------------------------------------------------------------------------- + +void Demo_OffsetAndStride() { + static const int k_circles = 11; + static const int k_points_per = 50; + static const int k_size = 2 * k_points_per * k_circles; + static double interleaved_data[k_size]; + for (int p = 0; p < k_points_per; ++p) { + for (int c = 0; c < k_circles; ++c) { + double r = (double)c / (k_circles - 1) * 0.2 + 0.2; + interleaved_data[p*2*k_circles + 2*c + 0] = 0.5 + r * cos((double)p/k_points_per * 6.28); + interleaved_data[p*2*k_circles + 2*c + 1] = 0.5 + r * sin((double)p/k_points_per * 6.28); + } + } + static int offset = 0; + ImGui::BulletText("Offsetting is useful for realtime plots (see above) and circular buffers."); + ImGui::BulletText("Striding is useful for interleaved data (e.g. audio) or plotting structs."); + ImGui::BulletText("Here, all circle data is stored in a single interleaved buffer:"); + ImGui::BulletText("[c0.x0 c0.y0 ... cn.x0 cn.y0 c0.x1 c0.y1 ... cn.x1 cn.y1 ... cn.xm cn.ym]"); + ImGui::BulletText("The offset value indicates which circle point index is considered the first."); + ImGui::BulletText("Offsets can be negative and/or larger than the actual data count."); + ImGui::SliderInt("Offset", &offset, -2*k_points_per, 2*k_points_per); + if (ImPlot::BeginPlot("##strideoffset",ImVec2(-1,0),ImPlotFlags_Equal)) { + ImPlot::PushColormap(ImPlotColormap_Jet); + char buff[32]; + for (int c = 0; c < k_circles; ++c) { + snprintf(buff, sizeof(buff), "Circle %d", c); + ImPlot::PlotLine(buff, &interleaved_data[c*2 + 0], &interleaved_data[c*2 + 1], k_points_per, 0, offset, 2*k_circles*sizeof(double)); + } + ImPlot::EndPlot(); + ImPlot::PopColormap(); + } + // offset++; uncomment for animation! +} + +//----------------------------------------------------------------------------- + +void Demo_CustomDataAndGetters() { + ImGui::BulletText("You can plot custom structs using the stride feature."); + ImGui::BulletText("Most plotters can also be passed a function pointer for getting data."); + ImGui::Indent(); + ImGui::BulletText("You can optionally pass user data to be given to your getter function."); + ImGui::BulletText("C++ lambdas can be passed as function pointers as well!"); + ImGui::Unindent(); + + MyImPlot::Vector2f vec2_data[2] = { MyImPlot::Vector2f(0,0), MyImPlot::Vector2f(1,1) }; + + if (ImPlot::BeginPlot("##Custom Data")) { + + // custom structs using stride example: + ImPlot::PlotLine("Vector2f", &vec2_data[0].x, &vec2_data[0].y, 2, 0, 0, sizeof(MyImPlot::Vector2f) /* or sizeof(float) * 2 */); + + // custom getter example 1: + ImPlot::PlotLineG("Spiral", MyImPlot::Spiral, nullptr, 1000); + + // custom getter example 2: + static MyImPlot::WaveData data1(0.001, 0.2, 2, 0.75); + static MyImPlot::WaveData data2(0.001, 0.2, 4, 0.25); + ImPlot::PlotLineG("Waves", MyImPlot::SineWave, &data1, 1000); + ImPlot::PlotLineG("Waves", MyImPlot::SawWave, &data2, 1000); + ImPlot::PushStyleVar(ImPlotStyleVar_FillAlpha, 0.25f); + ImPlot::PlotShadedG("Waves", MyImPlot::SineWave, &data1, MyImPlot::SawWave, &data2, 1000); + ImPlot::PopStyleVar(); + + // you can also pass C++ lambdas: + // auto lamda = [](void* data, int idx) { ... return ImPlotPoint(x,y); }; + // ImPlot::PlotLine("My Lambda", lambda, data, 1000); + + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +int MetricFormatter(double value, char* buff, int size, void* data) { + const char* unit = (const char*)data; + static double v[] = {1000000000,1000000,1000,1,0.001,0.000001,0.000000001}; + static const char* p[] = {"G","M","k","","m","u","n"}; + if (value == 0) { + return snprintf(buff,size,"0 %s", unit); + } + for (int i = 0; i < 7; ++i) { + if (fabs(value) >= v[i]) { + return snprintf(buff,size,"%g %s%s",value/v[i],p[i],unit); + } + } + return snprintf(buff,size,"%g %s%s",value/v[6],p[6],unit); +} + +void Demo_TickLabels() { + static bool custom_fmt = true; + static bool custom_ticks = false; + static bool custom_labels = true; + ImGui::Checkbox("Show Custom Format", &custom_fmt); + ImGui::SameLine(); + ImGui::Checkbox("Show Custom Ticks", &custom_ticks); + if (custom_ticks) { + ImGui::SameLine(); + ImGui::Checkbox("Show Custom Labels", &custom_labels); + } + const double pi = 3.14; + const char* pi_str[] = {"PI"}; + static double yticks[] = {100,300,700,900}; + static const char* ylabels[] = {"One","Three","Seven","Nine"}; + static double yticks_aux[] = {0.2,0.4,0.6}; + static const char* ylabels_aux[] = {"A","B","C","D","E","F"}; + if (ImPlot::BeginPlot("##Ticks")) { + ImPlot::SetupAxesLimits(2.5,5,0,1000); + ImPlot::SetupAxis(ImAxis_Y2, nullptr, ImPlotAxisFlags_AuxDefault); + ImPlot::SetupAxis(ImAxis_Y3, nullptr, ImPlotAxisFlags_AuxDefault); + if (custom_fmt) { + ImPlot::SetupAxisFormat(ImAxis_X1, "%g ms"); + ImPlot::SetupAxisFormat(ImAxis_Y1, MetricFormatter, (void*)"Hz"); + ImPlot::SetupAxisFormat(ImAxis_Y2, "%g dB"); + ImPlot::SetupAxisFormat(ImAxis_Y3, MetricFormatter, (void*)"m"); + } + if (custom_ticks) { + ImPlot::SetupAxisTicks(ImAxis_X1, &pi,1,custom_labels ? pi_str : nullptr, true); + ImPlot::SetupAxisTicks(ImAxis_Y1, yticks, 4, custom_labels ? ylabels : nullptr, false); + ImPlot::SetupAxisTicks(ImAxis_Y2, yticks_aux, 3, custom_labels ? ylabels_aux : nullptr, false); + ImPlot::SetupAxisTicks(ImAxis_Y3, 0, 1, 6, custom_labels ? ylabels_aux : nullptr, false); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_CustomStyles() { + ImPlot::PushColormap(ImPlotColormap_Deep); + // normally you wouldn't change the entire style each frame + ImPlotStyle backup = ImPlot::GetStyle(); + MyImPlot::StyleSeaborn(); + if (ImPlot::BeginPlot("seaborn style")) { + ImPlot::SetupAxes( "x-axis", "y-axis"); + ImPlot::SetupAxesLimits(-0.5f, 9.5f, 0, 10); + unsigned int lin[10] = {8,8,9,7,8,8,8,9,7,8}; + unsigned int bar[10] = {1,2,5,3,4,1,2,5,3,4}; + unsigned int dot[10] = {7,6,6,7,8,5,6,5,8,7}; + ImPlot::PlotBars("Bars", bar, 10, 0.5f); + ImPlot::PlotLine("Line", lin, 10); + ImPlot::NextColormapColor(); // skip green + ImPlot::PlotScatter("Scatter", dot, 10); + ImPlot::EndPlot(); + } + ImPlot::GetStyle() = backup; + ImPlot::PopColormap(); +} + +//----------------------------------------------------------------------------- + +void Demo_CustomRendering() { + if (ImPlot::BeginPlot("##CustomRend")) { + ImVec2 cntr = ImPlot::PlotToPixels(ImPlotPoint(0.5f, 0.5f)); + ImVec2 rmin = ImPlot::PlotToPixels(ImPlotPoint(0.25f, 0.75f)); + ImVec2 rmax = ImPlot::PlotToPixels(ImPlotPoint(0.75f, 0.25f)); + ImPlot::PushPlotClipRect(); + ImPlot::GetPlotDrawList()->AddCircleFilled(cntr,20,IM_COL32(255,255,0,255),20); + ImPlot::GetPlotDrawList()->AddRect(rmin, rmax, IM_COL32(128,0,255,255)); + ImPlot::PopPlotClipRect(); + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_LegendPopups() { + ImGui::BulletText("You can implement legend context menus to inject per-item controls and widgets."); + ImGui::BulletText("Right click the legend label/icon to edit custom item attributes."); + + static float frequency = 0.1f; + static float amplitude = 0.5f; + static ImVec4 color = ImVec4(1,1,0,1); + static float alpha = 1.0f; + static bool line = false; + static float thickness = 1; + static bool markers = false; + static bool shaded = false; + + static float vals[101]; + for (int i = 0; i < 101; ++i) + vals[i] = amplitude * sinf(frequency * i); + + if (ImPlot::BeginPlot("Right Click the Legend")) { + ImPlot::SetupAxesLimits(0,100,-1,1); + // rendering logic + ImPlot::PushStyleVar(ImPlotStyleVar_FillAlpha, alpha); + if (!line) { + ImPlot::SetNextFillStyle(color); + ImPlot::PlotBars("Right Click Me", vals, 101); + } + else { + if (markers) ImPlot::SetNextMarkerStyle(ImPlotMarker_Square); + ImPlot::SetNextLineStyle(color, thickness); + ImPlot::PlotLine("Right Click Me", vals, 101); + if (shaded) ImPlot::PlotShaded("Right Click Me",vals,101); + } + ImPlot::PopStyleVar(); + // custom legend context menu + if (ImPlot::BeginLegendPopup("Right Click Me")) { + ImGui::SliderFloat("Frequency",&frequency,0,1,"%0.2f"); + ImGui::SliderFloat("Amplitude",&litude,0,1,"%0.2f"); + ImGui::Separator(); + ImGui::ColorEdit3("Color",&color.x); + ImGui::SliderFloat("Transparency",&alpha,0,1,"%.2f"); + ImGui::Checkbox("Line Plot", &line); + if (line) { + ImGui::SliderFloat("Thickness", &thickness, 0, 5); + ImGui::Checkbox("Markers", &markers); + ImGui::Checkbox("Shaded",&shaded); + } + ImPlot::EndLegendPopup(); + } + ImPlot::EndPlot(); + } +} + +//----------------------------------------------------------------------------- + +void Demo_ColormapWidgets() { + static int cmap = ImPlotColormap_Viridis; + + if (ImPlot::ColormapButton("Button",ImVec2(0,0),cmap)) { + cmap = (cmap + 1) % ImPlot::GetColormapCount(); + } + + static float t = 0.5f; + static ImVec4 col; + ImGui::ColorButton("##Display",col,ImGuiColorEditFlags_NoInputs); + ImGui::SameLine(); + ImPlot::ColormapSlider("Slider", &t, &col, "%.3f", cmap); + + ImPlot::ColormapIcon(cmap); ImGui::SameLine(); ImGui::Text("Icon"); + + static ImPlotColormapScaleFlags flags = 0; + static float scale[2] = {0, 100}; + ImPlot::ColormapScale("Scale",scale[0],scale[1],ImVec2(0,0),"%g dB",flags,cmap); + ImGui::InputFloat2("Scale",scale); + CHECKBOX_FLAG(flags, ImPlotColormapScaleFlags_NoLabel); + CHECKBOX_FLAG(flags, ImPlotColormapScaleFlags_Opposite); + CHECKBOX_FLAG(flags, ImPlotColormapScaleFlags_Invert); +} + +//----------------------------------------------------------------------------- + +void Demo_CustomPlottersAndTooltips() { + ImGui::BulletText("You can create custom plotters or extend ImPlot using implot_internal.h."); + double dates[] = {1546300800,1546387200,1546473600,1546560000,1546819200,1546905600,1546992000,1547078400,1547164800,1547424000,1547510400,1547596800,1547683200,1547769600,1547942400,1548028800,1548115200,1548201600,1548288000,1548374400,1548633600,1548720000,1548806400,1548892800,1548979200,1549238400,1549324800,1549411200,1549497600,1549584000,1549843200,1549929600,1550016000,1550102400,1550188800,1550361600,1550448000,1550534400,1550620800,1550707200,1550793600,1551052800,1551139200,1551225600,1551312000,1551398400,1551657600,1551744000,1551830400,1551916800,1552003200,1552262400,1552348800,1552435200,1552521600,1552608000,1552867200,1552953600,1553040000,1553126400,1553212800,1553472000,1553558400,1553644800,1553731200,1553817600,1554076800,1554163200,1554249600,1554336000,1554422400,1554681600,1554768000,1554854400,1554940800,1555027200,1555286400,1555372800,1555459200,1555545600,1555632000,1555891200,1555977600,1556064000,1556150400,1556236800,1556496000,1556582400,1556668800,1556755200,1556841600,1557100800,1557187200,1557273600,1557360000,1557446400,1557705600,1557792000,1557878400,1557964800,1558051200,1558310400,1558396800,1558483200,1558569600,1558656000,1558828800,1558915200,1559001600,1559088000,1559174400,1559260800,1559520000,1559606400,1559692800,1559779200,1559865600,1560124800,1560211200,1560297600,1560384000,1560470400,1560729600,1560816000,1560902400,1560988800,1561075200,1561334400,1561420800,1561507200,1561593600,1561680000,1561939200,1562025600,1562112000,1562198400,1562284800,1562544000,1562630400,1562716800,1562803200,1562889600,1563148800,1563235200,1563321600,1563408000,1563494400,1563753600,1563840000,1563926400,1564012800,1564099200,1564358400,1564444800,1564531200,1564617600,1564704000,1564963200,1565049600,1565136000,1565222400,1565308800,1565568000,1565654400,1565740800,1565827200,1565913600,1566172800,1566259200,1566345600,1566432000,1566518400,1566777600,1566864000,1566950400,1567036800,1567123200,1567296000,1567382400,1567468800,1567555200,1567641600,1567728000,1567987200,1568073600,1568160000,1568246400,1568332800,1568592000,1568678400,1568764800,1568851200,1568937600,1569196800,1569283200,1569369600,1569456000,1569542400,1569801600,1569888000,1569974400,1570060800,1570147200,1570406400,1570492800,1570579200,1570665600,1570752000,1571011200,1571097600,1571184000,1571270400,1571356800,1571616000,1571702400,1571788800,1571875200,1571961600}; + double opens[] = {1284.7,1319.9,1318.7,1328,1317.6,1321.6,1314.3,1325,1319.3,1323.1,1324.7,1321.3,1323.5,1322,1281.3,1281.95,1311.1,1315,1314,1313.1,1331.9,1334.2,1341.3,1350.6,1349.8,1346.4,1343.4,1344.9,1335.6,1337.9,1342.5,1337,1338.6,1337,1340.4,1324.65,1324.35,1349.5,1371.3,1367.9,1351.3,1357.8,1356.1,1356,1347.6,1339.1,1320.6,1311.8,1314,1312.4,1312.3,1323.5,1319.1,1327.2,1332.1,1320.3,1323.1,1328,1330.9,1338,1333,1335.3,1345.2,1341.1,1332.5,1314,1314.4,1310.7,1314,1313.1,1315,1313.7,1320,1326.5,1329.2,1314.2,1312.3,1309.5,1297.4,1293.7,1277.9,1295.8,1295.2,1290.3,1294.2,1298,1306.4,1299.8,1302.3,1297,1289.6,1302,1300.7,1303.5,1300.5,1303.2,1306,1318.7,1315,1314.5,1304.1,1294.7,1293.7,1291.2,1290.2,1300.4,1284.2,1284.25,1301.8,1295.9,1296.2,1304.4,1323.1,1340.9,1341,1348,1351.4,1351.4,1343.5,1342.3,1349,1357.6,1357.1,1354.7,1361.4,1375.2,1403.5,1414.7,1433.2,1438,1423.6,1424.4,1418,1399.5,1435.5,1421.25,1434.1,1412.4,1409.8,1412.2,1433.4,1418.4,1429,1428.8,1420.6,1441,1460.4,1441.7,1438.4,1431,1439.3,1427.4,1431.9,1439.5,1443.7,1425.6,1457.5,1451.2,1481.1,1486.7,1512.1,1515.9,1509.2,1522.3,1513,1526.6,1533.9,1523,1506.3,1518.4,1512.4,1508.8,1545.4,1537.3,1551.8,1549.4,1536.9,1535.25,1537.95,1535.2,1556,1561.4,1525.6,1516.4,1507,1493.9,1504.9,1506.5,1513.1,1506.5,1509.7,1502,1506.8,1521.5,1529.8,1539.8,1510.9,1511.8,1501.7,1478,1485.4,1505.6,1511.6,1518.6,1498.7,1510.9,1510.8,1498.3,1492,1497.7,1484.8,1494.2,1495.6,1495.6,1487.5,1491.1,1495.1,1506.4}; + double highs[] = {1284.75,1320.6,1327,1330.8,1326.8,1321.6,1326,1328,1325.8,1327.1,1326,1326,1323.5,1322.1,1282.7,1282.95,1315.8,1316.3,1314,1333.2,1334.7,1341.7,1353.2,1354.6,1352.2,1346.4,1345.7,1344.9,1340.7,1344.2,1342.7,1342.1,1345.2,1342,1350,1324.95,1330.75,1369.6,1374.3,1368.4,1359.8,1359,1357,1356,1353.4,1340.6,1322.3,1314.1,1316.1,1312.9,1325.7,1323.5,1326.3,1336,1332.1,1330.1,1330.4,1334.7,1341.1,1344.2,1338.8,1348.4,1345.6,1342.8,1334.7,1322.3,1319.3,1314.7,1316.6,1316.4,1315,1325.4,1328.3,1332.2,1329.2,1316.9,1312.3,1309.5,1299.6,1296.9,1277.9,1299.5,1296.2,1298.4,1302.5,1308.7,1306.4,1305.9,1307,1297.2,1301.7,1305,1305.3,1310.2,1307,1308,1319.8,1321.7,1318.7,1316.2,1305.9,1295.8,1293.8,1293.7,1304.2,1302,1285.15,1286.85,1304,1302,1305.2,1323,1344.1,1345.2,1360.1,1355.3,1363.8,1353,1344.7,1353.6,1358,1373.6,1358.2,1369.6,1377.6,1408.9,1425.5,1435.9,1453.7,1438,1426,1439.1,1418,1435,1452.6,1426.65,1437.5,1421.5,1414.1,1433.3,1441.3,1431.4,1433.9,1432.4,1440.8,1462.3,1467,1443.5,1444,1442.9,1447,1437.6,1440.8,1445.7,1447.8,1458.2,1461.9,1481.8,1486.8,1522.7,1521.3,1521.1,1531.5,1546.1,1534.9,1537.7,1538.6,1523.6,1518.8,1518.4,1514.6,1540.3,1565,1554.5,1556.6,1559.8,1541.9,1542.9,1540.05,1558.9,1566.2,1561.9,1536.2,1523.8,1509.1,1506.2,1532.2,1516.6,1519.7,1515,1519.5,1512.1,1524.5,1534.4,1543.3,1543.3,1542.8,1519.5,1507.2,1493.5,1511.4,1525.8,1522.2,1518.8,1515.3,1518,1522.3,1508,1501.5,1503,1495.5,1501.1,1497.9,1498.7,1492.1,1499.4,1506.9,1520.9}; + double lows[] = {1282.85,1315,1318.7,1309.6,1317.6,1312.9,1312.4,1319.1,1319,1321,1318.1,1321.3,1319.9,1312,1280.5,1276.15,1308,1309.9,1308.5,1312.3,1329.3,1333.1,1340.2,1347,1345.9,1338,1340.8,1335,1332,1337.9,1333,1336.8,1333.2,1329.9,1340.4,1323.85,1324.05,1349,1366.3,1351.2,1349.1,1352.4,1350.7,1344.3,1338.9,1316.3,1308.4,1306.9,1309.6,1306.7,1312.3,1315.4,1319,1327.2,1317.2,1320,1323,1328,1323,1327.8,1331.7,1335.3,1336.6,1331.8,1311.4,1310,1309.5,1308,1310.6,1302.8,1306.6,1313.7,1320,1322.8,1311,1312.1,1303.6,1293.9,1293.5,1291,1277.9,1294.1,1286,1289.1,1293.5,1296.9,1298,1299.6,1292.9,1285.1,1288.5,1296.3,1297.2,1298.4,1298.6,1302,1300.3,1312,1310.8,1301.9,1292,1291.1,1286.3,1289.2,1289.9,1297.4,1283.65,1283.25,1292.9,1295.9,1290.8,1304.2,1322.7,1336.1,1341,1343.5,1345.8,1340.3,1335.1,1341.5,1347.6,1352.8,1348.2,1353.7,1356.5,1373.3,1398,1414.7,1427,1416.4,1412.7,1420.1,1396.4,1398.8,1426.6,1412.85,1400.7,1406,1399.8,1404.4,1415.5,1417.2,1421.9,1415,1413.7,1428.1,1434,1435.7,1427.5,1429.4,1423.9,1425.6,1427.5,1434.8,1422.3,1412.1,1442.5,1448.8,1468.2,1484.3,1501.6,1506.2,1498.6,1488.9,1504.5,1518.3,1513.9,1503.3,1503,1506.5,1502.1,1503,1534.8,1535.3,1541.4,1528.6,1525.6,1535.25,1528.15,1528,1542.6,1514.3,1510.7,1505.5,1492.1,1492.9,1496.8,1493.1,1503.4,1500.9,1490.7,1496.3,1505.3,1505.3,1517.9,1507.4,1507.1,1493.3,1470.5,1465,1480.5,1501.7,1501.4,1493.3,1492.1,1505.1,1495.7,1478,1487.1,1480.8,1480.6,1487,1488.3,1484.8,1484,1490.7,1490.4,1503.1}; + double closes[] = {1283.35,1315.3,1326.1,1317.4,1321.5,1317.4,1323.5,1319.2,1321.3,1323.3,1319.7,1325.1,1323.6,1313.8,1282.05,1279.05,1314.2,1315.2,1310.8,1329.1,1334.5,1340.2,1340.5,1350,1347.1,1344.3,1344.6,1339.7,1339.4,1343.7,1337,1338.9,1340.1,1338.7,1346.8,1324.25,1329.55,1369.6,1372.5,1352.4,1357.6,1354.2,1353.4,1346,1341,1323.8,1311.9,1309.1,1312.2,1310.7,1324.3,1315.7,1322.4,1333.8,1319.4,1327.1,1325.8,1330.9,1325.8,1331.6,1336.5,1346.7,1339.2,1334.7,1313.3,1316.5,1312.4,1313.4,1313.3,1312.2,1313.7,1319.9,1326.3,1331.9,1311.3,1313.4,1309.4,1295.2,1294.7,1294.1,1277.9,1295.8,1291.2,1297.4,1297.7,1306.8,1299.4,1303.6,1302.2,1289.9,1299.2,1301.8,1303.6,1299.5,1303.2,1305.3,1319.5,1313.6,1315.1,1303.5,1293,1294.6,1290.4,1291.4,1302.7,1301,1284.15,1284.95,1294.3,1297.9,1304.1,1322.6,1339.3,1340.1,1344.9,1354,1357.4,1340.7,1342.7,1348.2,1355.1,1355.9,1354.2,1362.1,1360.1,1408.3,1411.2,1429.5,1430.1,1426.8,1423.4,1425.1,1400.8,1419.8,1432.9,1423.55,1412.1,1412.2,1412.8,1424.9,1419.3,1424.8,1426.1,1423.6,1435.9,1440.8,1439.4,1439.7,1434.5,1436.5,1427.5,1432.2,1433.3,1441.8,1437.8,1432.4,1457.5,1476.5,1484.2,1519.6,1509.5,1508.5,1517.2,1514.1,1527.8,1531.2,1523.6,1511.6,1515.7,1515.7,1508.5,1537.6,1537.2,1551.8,1549.1,1536.9,1529.4,1538.05,1535.15,1555.9,1560.4,1525.5,1515.5,1511.1,1499.2,1503.2,1507.4,1499.5,1511.5,1513.4,1515.8,1506.2,1515.1,1531.5,1540.2,1512.3,1515.2,1506.4,1472.9,1489,1507.9,1513.8,1512.9,1504.4,1503.9,1512.8,1500.9,1488.7,1497.6,1483.5,1494,1498.3,1494.1,1488.1,1487.5,1495.7,1504.7,1505.3}; + static bool tooltip = true; + ImGui::Checkbox("Show Tooltip", &tooltip); + ImGui::SameLine(); + static ImVec4 bullCol = ImVec4(0.000f, 1.000f, 0.441f, 1.000f); + static ImVec4 bearCol = ImVec4(0.853f, 0.050f, 0.310f, 1.000f); + ImGui::SameLine(); ImGui::ColorEdit4("##Bull", &bullCol.x, ImGuiColorEditFlags_NoInputs); + ImGui::SameLine(); ImGui::ColorEdit4("##Bear", &bearCol.x, ImGuiColorEditFlags_NoInputs); + ImPlot::GetStyle().UseLocalTime = false; + + if (ImPlot::BeginPlot("Candlestick Chart",ImVec2(-1,0))) { + ImPlot::SetupAxes(nullptr,nullptr,0,ImPlotAxisFlags_AutoFit|ImPlotAxisFlags_RangeFit); + ImPlot::SetupAxesLimits(1546300800, 1571961600, 1250, 1600); + ImPlot::SetupAxisScale(ImAxis_X1, ImPlotScale_Time); + ImPlot::SetupAxisLimitsConstraints(ImAxis_X1, 1546300800, 1571961600); + ImPlot::SetupAxisZoomConstraints(ImAxis_X1, 60*60*24*14, 1571961600-1546300800); + ImPlot::SetupAxisFormat(ImAxis_Y1, "$%.0f"); + MyImPlot::PlotCandlestick("GOOGL",dates, opens, closes, lows, highs, 218, tooltip, 0.25f, bullCol, bearCol); + ImPlot::EndPlot(); + } + } + +//----------------------------------------------------------------------------- +// DEMO WINDOW +//----------------------------------------------------------------------------- + +void DemoHeader(const char* label, void(*demo)()) { + if (ImGui::TreeNodeEx(label)) { + demo(); + ImGui::TreePop(); + } +} + +void ShowDemoWindow(bool* p_open) { + static bool show_implot_metrics = false; + static bool show_implot_style_editor = false; + static bool show_imgui_metrics = false; + static bool show_imgui_style_editor = false; + static bool show_imgui_demo = false; + + if (show_implot_metrics) { + ImPlot::ShowMetricsWindow(&show_implot_metrics); + } + if (show_implot_style_editor) { + ImGui::SetNextWindowSize(ImVec2(415,762), ImGuiCond_Appearing); + ImGui::Begin("Style Editor (ImPlot)", &show_implot_style_editor); + ImPlot::ShowStyleEditor(); + ImGui::End(); + } + if (show_imgui_style_editor) { + ImGui::Begin("Style Editor (ImGui)", &show_imgui_style_editor); + ImGui::ShowStyleEditor(); + ImGui::End(); + } + if (show_imgui_metrics) { + ImGui::ShowMetricsWindow(&show_imgui_metrics); + } + if (show_imgui_demo) { + ImGui::ShowDemoWindow(&show_imgui_demo); + } + ImGui::SetNextWindowPos(ImVec2(50, 50), ImGuiCond_FirstUseEver); + ImGui::SetNextWindowSize(ImVec2(600, 750), ImGuiCond_FirstUseEver); + ImGui::Begin("ImPlot Demo", p_open, ImGuiWindowFlags_MenuBar); + if (ImGui::BeginMenuBar()) { + if (ImGui::BeginMenu("Tools")) { + ImGui::MenuItem("Metrics", nullptr, &show_implot_metrics); + ImGui::MenuItem("Style Editor", nullptr, &show_implot_style_editor); + ImGui::Separator(); + ImGui::MenuItem("ImGui Metrics", nullptr, &show_imgui_metrics); + ImGui::MenuItem("ImGui Style Editor", nullptr, &show_imgui_style_editor); + ImGui::MenuItem("ImGui Demo", nullptr, &show_imgui_demo); + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + } + //------------------------------------------------------------------------- + ImGui::Text("ImPlot says hello. (%s)", IMPLOT_VERSION); + // display warning about 16-bit indices + static bool showWarning = sizeof(ImDrawIdx)*8 == 16 && (ImGui::GetIO().BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) == false; + if (showWarning) { + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1,1,0,1)); + ImGui::TextWrapped("WARNING: ImDrawIdx is 16-bit and ImGuiBackendFlags_RendererHasVtxOffset is false. Expect visual glitches and artifacts! See README for more information."); + ImGui::PopStyleColor(); + } + + ImGui::Spacing(); + + if (ImGui::BeginTabBar("ImPlotDemoTabs")) { + if (ImGui::BeginTabItem("Plots")) { + DemoHeader("Line Plots", Demo_LinePlots); + DemoHeader("Filled Line Plots", Demo_FilledLinePlots); + DemoHeader("Shaded Plots##", Demo_ShadedPlots); + DemoHeader("Scatter Plots", Demo_ScatterPlots); + DemoHeader("Realtime Plots", Demo_RealtimePlots); + DemoHeader("Stairstep Plots", Demo_StairstepPlots); + DemoHeader("Bar Plots", Demo_BarPlots); + DemoHeader("Bar Groups", Demo_BarGroups); + DemoHeader("Bar Stacks", Demo_BarStacks); + DemoHeader("Error Bars", Demo_ErrorBars); + DemoHeader("Stem Plots##", Demo_StemPlots); + DemoHeader("Infinite Lines", Demo_InfiniteLines); + DemoHeader("Pie Charts", Demo_PieCharts); + DemoHeader("Heatmaps", Demo_Heatmaps); + DemoHeader("Histogram", Demo_Histogram); + DemoHeader("Histogram 2D", Demo_Histogram2D); + DemoHeader("Digital Plots", Demo_DigitalPlots); + DemoHeader("Images", Demo_Images); + DemoHeader("Markers and Text", Demo_MarkersAndText); + DemoHeader("NaN Values", Demo_NaNValues); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Subplots")) { + DemoHeader("Sizing", Demo_SubplotsSizing); + DemoHeader("Item Sharing", Demo_SubplotItemSharing); + DemoHeader("Axis Linking", Demo_SubplotAxisLinking); + DemoHeader("Tables", Demo_Tables); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Axes")) { + DemoHeader("Log Scale", Demo_LogScale); + DemoHeader("Symmetric Log Scale", Demo_SymmetricLogScale); + DemoHeader("Time Scale", Demo_TimeScale); + DemoHeader("Custom Scale", Demo_CustomScale); + DemoHeader("Multiple Axes", Demo_MultipleAxes); + DemoHeader("Tick Labels", Demo_TickLabels); + DemoHeader("Linked Axes", Demo_LinkedAxes); + DemoHeader("Axis Constraints", Demo_AxisConstraints); + DemoHeader("Equal Axes", Demo_EqualAxes); + DemoHeader("Auto-Fitting Data", Demo_AutoFittingData); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Tools")) { + DemoHeader("Offset and Stride", Demo_OffsetAndStride); + DemoHeader("Drag Points", Demo_DragPoints); + DemoHeader("Drag Lines", Demo_DragLines); + DemoHeader("Drag Rects", Demo_DragRects); + DemoHeader("Querying", Demo_Querying); + DemoHeader("Annotations", Demo_Annotations); + DemoHeader("Tags", Demo_Tags); + DemoHeader("Drag and Drop", Demo_DragAndDrop); + DemoHeader("Legend Options", Demo_LegendOptions); + DemoHeader("Legend Popups", Demo_LegendPopups); + DemoHeader("Colormap Widgets", Demo_ColormapWidgets); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Custom")) { + DemoHeader("Custom Styles", Demo_CustomStyles); + DemoHeader("Custom Data and Getters", Demo_CustomDataAndGetters); + DemoHeader("Custom Rendering", Demo_CustomRendering); + DemoHeader("Custom Plotters and Tooltips", Demo_CustomPlottersAndTooltips); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Config")) { + Demo_Config(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Help")) { + Demo_Help(); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + ImGui::End(); +} + +} // namespace ImPlot + +namespace MyImPlot { + +ImPlotPoint SineWave(int idx, void* data) { + WaveData* wd = (WaveData*)data; + double x = idx * wd->X; + return ImPlotPoint(x, wd->Offset + wd->Amp * sin(2 * 3.14 * wd->Freq * x)); +} + +ImPlotPoint SawWave(int idx, void* data) { + WaveData* wd = (WaveData*)data; + double x = idx * wd->X; + return ImPlotPoint(x, wd->Offset + wd->Amp * (-2 / 3.14 * atan(cos(3.14 * wd->Freq * x) / sin(3.14 * wd->Freq * x)))); +} + +ImPlotPoint Spiral(int idx, void*) { + float r = 0.9f; // outer radius + float a = 0; // inner radius + float b = 0.05f; // increment per rev + float n = (r - a) / b; // number of revolutions + double th = 2 * n * 3.14; // angle + float Th = float(th * idx / (1000 - 1)); + return ImPlotPoint(0.5f+(a + b*Th / (2.0f * (float) 3.14))*cos(Th), + 0.5f + (a + b*Th / (2.0f * (float)3.14))*sin(Th)); +} + +void Sparkline(const char* id, const float* values, int count, float min_v, float max_v, int offset, const ImVec4& col, const ImVec2& size) { + ImPlot::PushStyleVar(ImPlotStyleVar_PlotPadding, ImVec2(0,0)); + if (ImPlot::BeginPlot(id,size,ImPlotFlags_CanvasOnly|ImPlotFlags_NoChild)) { + ImPlot::SetupAxes(nullptr,nullptr,ImPlotAxisFlags_NoDecorations,ImPlotAxisFlags_NoDecorations); + ImPlot::SetupAxesLimits(0, count - 1, min_v, max_v, ImGuiCond_Always); + ImPlot::SetNextLineStyle(col); + ImPlot::SetNextFillStyle(col, 0.25); + ImPlot::PlotLine(id, values, count, 1, 0, ImPlotLineFlags_Shaded, offset); + ImPlot::EndPlot(); + } + ImPlot::PopStyleVar(); +} + +void StyleSeaborn() { + + ImPlotStyle& style = ImPlot::GetStyle(); + + ImVec4* colors = style.Colors; + colors[ImPlotCol_Line] = IMPLOT_AUTO_COL; + colors[ImPlotCol_Fill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerOutline] = IMPLOT_AUTO_COL; + colors[ImPlotCol_MarkerFill] = IMPLOT_AUTO_COL; + colors[ImPlotCol_ErrorBar] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f); + colors[ImPlotCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f); + colors[ImPlotCol_PlotBg] = ImVec4(0.92f, 0.92f, 0.95f, 1.00f); + colors[ImPlotCol_PlotBorder] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f); + colors[ImPlotCol_LegendBg] = ImVec4(0.92f, 0.92f, 0.95f, 1.00f); + colors[ImPlotCol_LegendBorder] = ImVec4(0.80f, 0.81f, 0.85f, 1.00f); + 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_AxisBgHovered] = ImVec4(0.92f, 0.92f, 0.95f, 1.00f); + colors[ImPlotCol_AxisBgActive] = ImVec4(0.92f, 0.92f, 0.95f, 0.75f); + colors[ImPlotCol_Selection] = ImVec4(1.00f, 0.65f, 0.00f, 1.00f); + colors[ImPlotCol_Crosshairs] = ImVec4(0.23f, 0.10f, 0.64f, 0.50f); + + style.LineWeight = 1.5; + style.Marker = ImPlotMarker_None; + style.MarkerSize = 4; + style.MarkerWeight = 1; + style.FillAlpha = 1.0f; + style.ErrorBarSize = 5; + style.ErrorBarWeight = 1.5f; + style.DigitalBitHeight = 8; + style.DigitalBitGap = 4; + style.PlotBorderSize = 0; + style.MinorAlpha = 1.0f; + style.MajorTickLen = ImVec2(0,0); + style.MinorTickLen = ImVec2(0,0); + style.MajorTickSize = ImVec2(0,0); + style.MinorTickSize = ImVec2(0,0); + style.MajorGridSize = ImVec2(1.2f,1.2f); + style.MinorGridSize = ImVec2(1.2f,1.2f); + style.PlotPadding = ImVec2(12,12); + style.LabelPadding = ImVec2(5,5); + style.LegendPadding = ImVec2(5,5); + style.MousePosPadding = ImVec2(5,5); + style.PlotMinSize = ImVec2(300,225); +} + +} // namespaece MyImPlot + +// WARNING: +// +// You can use "implot_internal.h" to build custom plotting fuctions or extend ImPlot. +// However, note that forward compatibility of this file is not guaranteed and the +// internal API is subject to change. At some point we hope to bring more of this +// into the public API and expose the necessary building blocks to fully support +// custom plotters. For now, proceed at your own risk! + +#include "implot_internal.h" + +namespace MyImPlot { + +template +int BinarySearch(const T* arr, int l, int r, T x) { + if (r >= l) { + int mid = l + (r - l) / 2; + if (arr[mid] == x) + return mid; + if (arr[mid] > x) + return BinarySearch(arr, l, mid - 1, x); + return BinarySearch(arr, mid + 1, r, x); + } + return -1; +} + +void PlotCandlestick(const char* label_id, const double* xs, const double* opens, const double* closes, const double* lows, const double* highs, int count, bool tooltip, float width_percent, ImVec4 bullCol, ImVec4 bearCol) { + + // get ImGui window DrawList + ImDrawList* draw_list = ImPlot::GetPlotDrawList(); + // calc real value width + double half_width = count > 1 ? (xs[1] - xs[0]) * width_percent : width_percent; + + // custom tool + if (ImPlot::IsPlotHovered() && tooltip) { + ImPlotPoint mouse = ImPlot::GetPlotMousePos(); + mouse.x = ImPlot::RoundTime(ImPlotTime::FromDouble(mouse.x), ImPlotTimeUnit_Day).ToDouble(); + float tool_l = ImPlot::PlotToPixels(mouse.x - half_width * 1.5, mouse.y).x; + float tool_r = ImPlot::PlotToPixels(mouse.x + half_width * 1.5, mouse.y).x; + float tool_t = ImPlot::GetPlotPos().y; + float tool_b = tool_t + ImPlot::GetPlotSize().y; + ImPlot::PushPlotClipRect(); + draw_list->AddRectFilled(ImVec2(tool_l, tool_t), ImVec2(tool_r, tool_b), IM_COL32(128,128,128,64)); + ImPlot::PopPlotClipRect(); + // find mouse location index + int idx = BinarySearch(xs, 0, count - 1, mouse.x); + // render tool tip (won't be affected by plot clip rect) + if (idx != -1) { + ImGui::BeginTooltip(); + char buff[32]; + ImPlot::FormatDate(ImPlotTime::FromDouble(xs[idx]),buff,32,ImPlotDateFmt_DayMoYr,ImPlot::GetStyle().UseISO8601); + ImGui::Text("Day: %s", buff); + ImGui::Text("Open: $%.2f", opens[idx]); + ImGui::Text("Close: $%.2f", closes[idx]); + ImGui::Text("Low: $%.2f", lows[idx]); + ImGui::Text("High: $%.2f", highs[idx]); + ImGui::EndTooltip(); + } + } + + // begin plot item + if (ImPlot::BeginItem(label_id)) { + // override legend icon color + ImPlot::GetCurrentItem()->Color = IM_COL32(64,64,64,255); + // fit data if requested + if (ImPlot::FitThisFrame()) { + for (int i = 0; i < count; ++i) { + ImPlot::FitPoint(ImPlotPoint(xs[i], lows[i])); + ImPlot::FitPoint(ImPlotPoint(xs[i], highs[i])); + } + } + // render data + for (int i = 0; i < count; ++i) { + ImVec2 open_pos = ImPlot::PlotToPixels(xs[i] - half_width, opens[i]); + ImVec2 close_pos = ImPlot::PlotToPixels(xs[i] + half_width, closes[i]); + ImVec2 low_pos = ImPlot::PlotToPixels(xs[i], lows[i]); + ImVec2 high_pos = ImPlot::PlotToPixels(xs[i], highs[i]); + ImU32 color = ImGui::GetColorU32(opens[i] > closes[i] ? bearCol : bullCol); + draw_list->AddLine(low_pos, high_pos, color); + draw_list->AddRectFilled(open_pos, close_pos, color); + } + + // end plot item + ImPlot::EndItem(); + } +} + +} // namespace MyImplot + +#endif // #if NETIMGUI_IMPLOT_ENABLED && NETIMGUI_DEMO_IMGUI_ENABLED // @EDIT to avoid compiling this library when not requested diff --git a/Source/Private/ThirdParty/ImPlot/implot_internal.h b/Source/Private/ThirdParty/ImPlot/implot_internal.h new file mode 100644 index 0000000..51f0b42 --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/implot_internal.h @@ -0,0 +1,1667 @@ +// MIT License + +// Copyright (c) 2022 Evan Pezent + +// 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 v0.14 + +// 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 + +#include +#include "imgui_internal.h" + +#ifndef IMPLOT_VERSION +#error Must include implot.h before implot_internal.h +#endif + + +// 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. + +// Mimimum allowable timestamp value 01/01/1970 @ 12:00am (UTC) (DO NOT DECREASE THIS) +#define IMPLOT_MIN_TIME 0 +// Maximum allowable timestamp value 01/01/3000 @ 12:00am (UTC) (DO NOT INCREASE THIS) +#define IMPLOT_MAX_TIME 32503680000 +// Default label format for axis labels +#define IMPLOT_LABEL_FORMAT "%g" +// Max character size for tick labels +#define IMPLOT_LABEL_MAX_SIZE 32 + +//----------------------------------------------------------------------------- +// [SECTION] Macros +//----------------------------------------------------------------------------- + +#define IMPLOT_NUM_X_AXES ImAxis_Y1 +#define IMPLOT_NUM_Y_AXES (ImAxis_COUNT - IMPLOT_NUM_X_AXES) + +// 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 +static inline bool ImHasFlag(TSet set, TFlag flag) { return (set & flag) == flag; } +// Flips a flag in a flagset +template +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 +static inline T ImRemap(T x, T x0, T x1, T y0, T y1) { return y0 + (x - x0) * (y1 - y0) / (x1 - x0); } +// Linear rempas x from [x0 x1] to [0 1] +template +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 +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 +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 +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 +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 +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 +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 collors 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)< +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_ + +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 ] +}; + +//----------------------------------------------------------------------------- +// [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 Keys; + ImVector KeyCounts; + ImVector KeyOffsets; + ImVector Tables; + ImVector TableSizes; + ImVector TableOffsets; + ImGuiTextBuffer Text; + ImVector TextOffsets; + ImVector 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(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 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; +}; + +struct ImPlotTagCollection { + + ImVector 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(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 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) { SetMin(*LinkedMin,true); } + 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; + ImRect LegendHoverRect; + int NameOffset; + bool Show; + bool LegendHovered; + bool SeenThisFrame; + + ImPlotItem() { + ID = 0; + Color = IM_COL32_WHITE; + NameOffset = -1; + Show = true; + SeenThisFrame = false; + LegendHovered = false; + } + + ~ImPlotItem() { ID = 0; } +}; + +// Holds Legend state +struct ImPlotLegend +{ + ImPlotLegendFlags Flags; + ImPlotLegendFlags PreviousFlags; + ImPlotLocation Location; + ImPlotLocation PreviousLocation; + ImVector Indices; + ImGuiTextBuffer Labels; + ImRect Rect; + bool Hovered; + bool Held; + bool CanGoInside; + + ImPlotLegend() { + Flags = PreviousFlags = ImPlotLegendFlags_None; + CanGoInside = true; + Hovered = Held = false; + Location = PreviousLocation = ImPlotLocation_NorthWest; + } + + void Reset() { Indices.shrink(0); Labels.Buf.shrink(0); } +}; + +// Holds Items and Legend data +struct ImPlotItemGroup +{ + ImGuiID ID; + ImPlotLegend Legend; + ImPool ItemPool; + int ColormapIdx; + + ImPlotItemGroup() { ID = 0; ColormapIdx = 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 RowAlignmentData; + ImVector ColAlignmentData; + ImVector RowRatios; + ImVector ColRatios; + ImVector RowLinkData; + ImVector ColLinkData; + float TempSizes[2]; + bool FrameHovered; + bool HasTitle; + + ImPlotSubplot() { + ID = 0; + Flags = PreviousFlags = ImPlotSubplotFlags_None; + Rows = Cols = CurrentIdx = 0; + FrameHovered = false; + 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 { + ImVec4 Colors[5]; // ImPlotCol_Line, ImPlotCol_Fill, ImPlotCol_MarkerOutline, ImPlotCol_MarkerFill, ImPlotCol_ErrorBar + float LineWeight; + ImPlotMarker Marker; + float MarkerSize; + float MarkerWeight; + float FillAlpha; + float ErrorBarSize; + float ErrorBarWeight; + float DigitalBitHeight; + float DigitalBitGap; + bool RenderLine; + bool RenderFill; + bool RenderMarkerLine; + bool RenderMarkerFill; + bool HasHidden; + bool Hidden; + ImPlotCond HiddenCond; + ImPlotNextItemData() { Reset(); } + void Reset() { + for (int i = 0; i < 5; ++i) + Colors[i] = IMPLOT_AUTO_COL; + LineWeight = MarkerSize = MarkerWeight = FillAlpha = ErrorBarSize = ErrorBarWeight = DigitalBitHeight = DigitalBitGap = IMPLOT_AUTO; + Marker = IMPLOT_AUTO; + HasHidden = Hidden = false; + } +}; + +// Holds state information that must persist between calls to BeginPlot()/EndPlot() +struct ImPlotContext { + // Plot States + ImPool Plots; + ImPool Subplots; + ImPlotPlot* CurrentPlot; + ImPlotSubplot* CurrentSubplot; + ImPlotItemGroup* CurrentItems; + ImPlotItem* CurrentItem; + ImPlotItem* PreviousItem; + + // Tick Marks and Labels + ImPlotTicker CTicker; + + // Annotation and Tabs + ImPlotAnnotationCollection Annotations; + ImPlotTagCollection Tags; + + // Flags + bool ChildWindowMade; + + // Style and Colormaps + ImPlotStyle Style; + ImVector ColorModifiers; + ImVector StyleModifiers; + ImPlotColormapData ColormapData; + ImVector ColormapModifiers; + + // Time + tm Tm; + + // Temp data for general use + ImVector TempDouble1, TempDouble2; + ImVector TempInt1; + + // Misc + int DigitalPlotItemCnt; + int DigitalPlotOffset; + ImPlotNextPlotData NextPlotData; + ImPlotNextItemData NextItemData; + ImPlotInputMap InputMap; + bool OpenContextThisFrame; + ImGuiTextBuffer MousePosStringBuilder; + ImPlotItemGroup* SortItems; + + // Align plots + ImPool 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, ImPlotItemFlags flags=0, ImPlotCol recolor_from=IMPLOT_AUTO); + +// Same as above but with fitting functionality. +template +bool BeginItemEx(const char* label_id, const _Fitter& fitter, ImPlotItemFlags flags=0, ImPlotCol recolor_from=IMPLOT_AUTO) { + if (BeginItem(label_id, flags, recolor_from)) { + ImPlotPlot& plot = *GetCurrentPlot(); + if (plot.FitThisFrame && !ImHasFlag(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 +IMPLOT_API ImVec2 CalcLegendSize(ImPlotItemGroup& items, const ImVec2& pad, const ImVec2& spacing, bool vertical); +// 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!). +IMPLOT_API void ShowAltLegend(const char* title_id, bool vertical = true, const ImVec2 size = ImVec2(0,0), bool interactable = true); +// Shows an legends'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); + +//----------------------------------------------------------------------------- +// [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 +void FillRange(ImVector& 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 +static inline void CalculateBins(const T* 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) { + static const 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 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); + +// 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); + +// 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 +//------------------------------------------------------------------------------ + +void Locator_Default(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data); +void Locator_Time(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data); +void Locator_Log10(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data); +void Locator_SymLog(ImPlotTicker& ticker, const ImPlotRange& range, float pixels, bool vertical, ImPlotFormatter formatter, void* formatter_data); + +} // namespace ImPlot diff --git a/Source/Private/ThirdParty/ImPlot/implot_items.cpp b/Source/Private/ThirdParty/ImPlot/implot_items.cpp new file mode 100644 index 0000000..1216114 --- /dev/null +++ b/Source/Private/ThirdParty/ImPlot/implot_items.cpp @@ -0,0 +1,2696 @@ +// MIT License + +// Copyright (c) 2020 Evan Pezent + +// 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 v0.14 + +#if NETIMGUI_IMPLOT_ENABLED // @EDIT to avoid compiling this library when not requested + +#define IMGUI_DEFINE_MATH_OPERATORS +#include "implot.h" +#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 +#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 instantion 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 +struct MaxIdx { static const unsigned int Value; }; +template <> const unsigned int MaxIdx::Value = 65535; +template <> const unsigned int MaxIdx::Value = 4294967295; + +IMPLOT_INLINE void GetLineRenderProps(const ImDrawList& draw_list, float& half_weight, ImVec2& tex_uv0, ImVec2& tex_uv1) { + 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; + } +} + +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; +} + +void SetNextLineStyle(const ImVec4& col, float weight) { + ImPlotContext& gp = *GImPlot; + gp.NextItemData.Colors[ImPlotCol_Line] = col; + gp.NextItemData.LineWeight = weight; +} + +void SetNextFillStyle(const ImVec4& col, float alpha) { + ImPlotContext& gp = *GImPlot; + gp.NextItemData.Colors[ImPlotCol_Fill] = col; + gp.NextItemData.FillAlpha = alpha; +} + +void SetNextMarkerStyle(ImPlotMarker marker, float size, const ImVec4& fill, float weight, const ImVec4& outline) { + ImPlotContext& gp = *GImPlot; + gp.NextItemData.Marker = marker; + gp.NextItemData.Colors[ImPlotCol_MarkerFill] = fill; + gp.NextItemData.MarkerSize = size; + gp.NextItemData.Colors[ImPlotCol_MarkerOutline] = outline; + gp.NextItemData.MarkerWeight = weight; +} + +void SetNextErrorBarStyle(const ImVec4& col, float size, float weight) { + ImPlotContext& gp = *GImPlot; + gp.NextItemData.Colors[ImPlotCol_ErrorBar] = col; + gp.NextItemData.ErrorBarSize = size; + gp.NextItemData.ErrorBarWeight = weight; +} + +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 +//----------------------------------------------------------------------------- + +static const float ITEM_HIGHLIGHT_LINE_SCALE = 2.0f; +static const 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, ImPlotItemFlags flags, ImPlotCol recolor_from) { + 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, flags, &just_created); + // set current item + gp.CurrentItem = item; + ImPlotNextItemData& s = gp.NextItemData; + // set/override item color + if (recolor_from != -1) { + if (!IsColorAuto(s.Colors[recolor_from])) + item->Color = ImGui::ColorConvertFloat4ToU32(s.Colors[recolor_from]); + else if (!IsColorAuto(gp.Style.Colors[recolor_from])) + item->Color = ImGui::ColorConvertFloat4ToU32(gp.Style.Colors[recolor_from]); + else if (just_created) + item->Color = NextColormapColorU32(); + } + else if (just_created) { + item->Color = NextColormapColorU32(); + } + // hide/show item + if (gp.NextItemData.HasHidden) { + if (just_created || gp.NextItemData.HiddenCond == ImGuiCond_Always) + item->Show = !gp.NextItemData.Hidden; + } + 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 colors + s.Colors[ImPlotCol_Line] = IsColorAuto(s.Colors[ImPlotCol_Line]) ? ( IsColorAuto(ImPlotCol_Line) ? item_color : gp.Style.Colors[ImPlotCol_Line] ) : s.Colors[ImPlotCol_Line]; + s.Colors[ImPlotCol_Fill] = IsColorAuto(s.Colors[ImPlotCol_Fill]) ? ( IsColorAuto(ImPlotCol_Fill) ? item_color : gp.Style.Colors[ImPlotCol_Fill] ) : s.Colors[ImPlotCol_Fill]; + s.Colors[ImPlotCol_MarkerOutline] = IsColorAuto(s.Colors[ImPlotCol_MarkerOutline]) ? ( IsColorAuto(ImPlotCol_MarkerOutline) ? s.Colors[ImPlotCol_Line] : gp.Style.Colors[ImPlotCol_MarkerOutline] ) : s.Colors[ImPlotCol_MarkerOutline]; + s.Colors[ImPlotCol_MarkerFill] = IsColorAuto(s.Colors[ImPlotCol_MarkerFill]) ? ( IsColorAuto(ImPlotCol_MarkerFill) ? s.Colors[ImPlotCol_Line] : gp.Style.Colors[ImPlotCol_MarkerFill] ) : s.Colors[ImPlotCol_MarkerFill]; + s.Colors[ImPlotCol_ErrorBar] = IsColorAuto(s.Colors[ImPlotCol_ErrorBar]) ? ( GetStyleColorVec4(ImPlotCol_ErrorBar) ) : s.Colors[ImPlotCol_ErrorBar]; + // stage next item style vars + s.LineWeight = s.LineWeight < 0 ? gp.Style.LineWeight : s.LineWeight; + s.Marker = s.Marker < 0 ? gp.Style.Marker : s.Marker; + s.MarkerSize = s.MarkerSize < 0 ? gp.Style.MarkerSize : s.MarkerSize; + s.MarkerWeight = s.MarkerWeight < 0 ? gp.Style.MarkerWeight : s.MarkerWeight; + s.FillAlpha = s.FillAlpha < 0 ? gp.Style.FillAlpha : s.FillAlpha; + s.ErrorBarSize = s.ErrorBarSize < 0 ? gp.Style.ErrorBarSize : s.ErrorBarSize; + s.ErrorBarWeight = s.ErrorBarWeight < 0 ? gp.Style.ErrorBarWeight : s.ErrorBarWeight; + s.DigitalBitHeight = s.DigitalBitHeight < 0 ? gp.Style.DigitalBitHeight : s.DigitalBitHeight; + s.DigitalBitGap = s.DigitalBitGap < 0 ? gp.Style.DigitalBitGap : s.DigitalBitGap; + // apply alpha modifier(s) + s.Colors[ImPlotCol_Fill].w *= s.FillAlpha; + s.Colors[ImPlotCol_MarkerFill].w *= s.FillAlpha; // TODO: this should be separate, if it at all + // apply highlight mods + if (item->LegendHovered) { + if (!ImHasFlag(gp.CurrentItems->Legend.Flags, ImPlotLegendFlags_NoHighlightItem)) { + s.LineWeight *= ITEM_HIGHLIGHT_LINE_SCALE; + s.MarkerSize *= ITEM_HIGHLIGHT_MARK_SCALE; + s.MarkerWeight *= ITEM_HIGHLIGHT_LINE_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.Colors[ImPlotCol_Line].w > 0 && s.LineWeight > 0; + s.RenderFill = s.Colors[ImPlotCol_Fill].w > 0; + s.RenderMarkerFill = s.Colors[ImPlotCol_MarkerFill].w > 0; + s.RenderMarkerLine = s.Colors[ImPlotCol_MarkerOutline].w > 0 && s.MarkerWeight > 0; + // 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 +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 +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 IMPLOT_INLINE double operator()(I idx) const { + return (double)IndexData(Data, idx, Count, Offset, Stride); + } + const T* Data; + int Count; + int Offset; + int Stride; +}; + +template +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 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; +}; + +struct IndexerLin { + IndexerLin(double m, double b) : M(m), B(b) { } + template IMPLOT_INLINE double operator()(I idx) const { + return M * idx + B; + } + const double M; + const double B; +}; + +struct IndexerConst { + IndexerConst(double ref) : Ref(ref) { } + template IMPLOT_INLINE double operator()(I) const { return Ref; } + const double Ref; +}; + +//----------------------------------------------------------------------------- +// [SECTION] Getters +//----------------------------------------------------------------------------- + +template +struct GetterXY { + GetterXY(_IndexerX x, _IndexerY y, int count) : IndxerX(x), IndxerY(y), Count(count) { } + template IMPLOT_INLINE ImPlotPoint operator()(I idx) const { + return ImPlotPoint(IndxerX(idx),IndxerY(idx)); + } + const _IndexerX IndxerX; + const _IndexerY IndxerY; + 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 IMPLOT_INLINE ImPlotPoint operator()(I idx) const { + return Getter(idx, Data); + } + ImPlotGetter Getter; + void* const Data; + const int Count; +}; + +template +struct GetterOverrideX { + GetterOverrideX(_Getter getter, double x) : Getter(getter), X(x), Count(getter.Count) { } + template 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; +}; + +template +struct GetterOverrideY { + GetterOverrideY(_Getter getter, double y) : Getter(getter), Y(y), Count(getter.Count) { } + template 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; +}; + +template +struct GetterLoop { + GetterLoop(_Getter getter) : Getter(getter), Count(getter.Count + 1) { } + template IMPLOT_INLINE ImPlotPoint operator()(I idx) const { + idx = idx % (Count - 1); + return Getter(idx); + } + const _Getter Getter; + const int Count; +}; + +template +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 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; +}; + +//----------------------------------------------------------------------------- +// [SECTION] Fitters +//----------------------------------------------------------------------------- + +template +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 +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 +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 +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 +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 +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 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 IMPLOT_INLINE ImVec2 operator()(const P& plt) const { + ImVec2 out; + out.x = Tx(plt.x); + out.y = Ty(plt.y); + return out; + } + + template 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 +struct RendererLineStrip : RendererBase { + RendererLineStrip(const _Getter& getter, ImU32 col, float weight) : + RendererBase(getter.Count - 1, 6, 4), + Getter(getter), + Col(col), + 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; + } + PrimLine(draw_list,P1,P2,HalfWeight,Col,UV0,UV1); + P1 = P2; + return true; + } + const _Getter& Getter; + const ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 P1; + mutable ImVec2 UV0; + mutable ImVec2 UV1; +}; + +template +struct RendererLineStripSkip : RendererBase { + RendererLineStripSkip(const _Getter& getter, ImU32 col, float weight) : + RendererBase(getter.Count - 1, 6, 4), + Getter(getter), + Col(col), + 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; + } + PrimLine(draw_list,P1,P2,HalfWeight,Col,UV0,UV1); + if (!ImNan(P2.x) && !ImNan(P2.y)) + P1 = P2; + return true; + } + const _Getter& Getter; + const ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 P1; + mutable ImVec2 UV0; + mutable ImVec2 UV1; +}; + +template +struct RendererLineSegments1 : RendererBase { + RendererLineSegments1(const _Getter& getter, ImU32 col, float weight) : + RendererBase(getter.Count / 2, 6, 4), + Getter(getter), + Col(col), + 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; + PrimLine(draw_list,P1,P2,HalfWeight,Col,UV0,UV1); + return true; + } + const _Getter& Getter; + const ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 UV0; + mutable ImVec2 UV1; +}; + +template +struct RendererLineSegments2 : RendererBase { + RendererLineSegments2(const _Getter1& getter1, const _Getter2& getter2, ImU32 col, float weight) : + RendererBase(ImMin(getter1.Count, getter1.Count), 6, 4), + Getter1(getter1), + Getter2(getter2), + Col(col), + 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; + PrimLine(draw_list,P1,P2,HalfWeight,Col,UV0,UV1); + return true; + } + const _Getter1& Getter1; + const _Getter2& Getter2; + const ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 UV0; + mutable ImVec2 UV1; +}; + +template +struct RendererBarsFillV : RendererBase { + RendererBarsFillV(const _Getter1& getter1, const _Getter2& getter2, ImU32 col, double width) : + RendererBase(ImMin(getter1.Count, getter1.Count), 6, 4), + Getter1(getter1), + Getter2(getter2), + Col(col), + 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; + PrimRectFill(draw_list,PMin,PMax,Col,UV); + return true; + } + const _Getter1& Getter1; + const _Getter2& Getter2; + const ImU32 Col; + const double HalfWidth; + mutable ImVec2 UV; +}; + +template +struct RendererBarsFillH : RendererBase { + RendererBarsFillH(const _Getter1& getter1, const _Getter2& getter2, ImU32 col, double height) : + RendererBase(ImMin(getter1.Count, getter1.Count), 6, 4), + Getter1(getter1), + Getter2(getter2), + Col(col), + 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; + PrimRectFill(draw_list,PMin,PMax,Col,UV); + return true; + } + const _Getter1& Getter1; + const _Getter2& Getter2; + const ImU32 Col; + const double HalfHeight; + mutable ImVec2 UV; +}; + +template +struct RendererBarsLineV : RendererBase { + RendererBarsLineV(const _Getter1& getter1, const _Getter2& getter2, ImU32 col, double width, float weight) : + RendererBase(ImMin(getter1.Count, getter1.Count), 24, 8), + Getter1(getter1), + Getter2(getter2), + Col(col), + 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; + PrimRectLine(draw_list,PMin,PMax,Weight,Col,UV); + return true; + } + const _Getter1& Getter1; + const _Getter2& Getter2; + const ImU32 Col; + const double HalfWidth; + const float Weight; + mutable ImVec2 UV; +}; + +template +struct RendererBarsLineH : RendererBase { + RendererBarsLineH(const _Getter1& getter1, const _Getter2& getter2, ImU32 col, double height, float weight) : + RendererBase(ImMin(getter1.Count, getter1.Count), 24, 8), + Getter1(getter1), + Getter2(getter2), + Col(col), + 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; + PrimRectLine(draw_list,PMin,PMax,Weight,Col,UV); + return true; + } + const _Getter1& Getter1; + const _Getter2& Getter2; + const ImU32 Col; + const double HalfHeight; + const float Weight; + mutable ImVec2 UV; +}; + + +template +struct RendererStairsPre : RendererBase { + RendererStairsPre(const _Getter& getter, ImU32 col, float weight) : + RendererBase(getter.Count - 1, 12, 8), + Getter(getter), + Col(col), + 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; + } + 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 ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 P1; + mutable ImVec2 UV; +}; + +template +struct RendererStairsPost : RendererBase { + RendererStairsPost(const _Getter& getter, ImU32 col, float weight) : + RendererBase(getter.Count - 1, 12, 8), + Getter(getter), + Col(col), + 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; + } + 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 ImU32 Col; + mutable float HalfWeight; + mutable ImVec2 P1; + mutable ImVec2 UV; +}; + +template +struct RendererStairsPreShaded : RendererBase { + RendererStairsPreShaded(const _Getter& getter, ImU32 col) : + RendererBase(getter.Count - 1, 6, 4), + Getter(getter), + Col(col) + { + 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; + } + PrimRectFill(draw_list, PMin, PMax, Col, UV); + P1 = P2; + return true; + } + const _Getter& Getter; + const ImU32 Col; + float Y0; + mutable ImVec2 P1; + mutable ImVec2 UV; +}; + +template +struct RendererStairsPostShaded : RendererBase { + RendererStairsPostShaded(const _Getter& getter, ImU32 col) : + RendererBase(getter.Count - 1, 6, 4), + Getter(getter), + Col(col) + { + 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; + } + PrimRectFill(draw_list, PMin, PMax, Col, UV); + P1 = P2; + return true; + } + const _Getter& Getter; + const ImU32 Col; + float Y0; + mutable ImVec2 P1; + mutable ImVec2 UV; +}; + + + +template +struct RendererShaded : RendererBase { + RendererShaded(const _Getter1& getter1, const _Getter2& getter2, ImU32 col) : + RendererBase(ImMin(getter1.Count, getter2.Count) - 1, 6, 5), + Getter1(getter1), + Getter2(getter2), + Col(col) + { + 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; + } + const int intersect = (P11.y > P12.y && P22.y > P21.y) || (P12.y > P11.y && P21.y > P22.y); + ImVec2 intersection = 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 ImU32 Col; + mutable ImVec2 P11; + mutable ImVec2 P12; + mutable ImVec2 UV; +}; + +struct RectC { + ImPlotPoint Pos; + ImPlotPoint HalfSize; + ImU32 Color; +}; + +template +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 +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::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::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