ImGui.NET icon indicating copy to clipboard operation
ImGui.NET copied to clipboard

Add ImGuizmo and ImGuiPlot to Nuget

Open Pastor111 opened this issue 3 years ago • 22 comments

Can you add ImGuizmo and ImGuiPlot to the Nuget version or show a tutorial of how to add them?

Pastor111 avatar Apr 03 '21 10:04 Pastor111

For now, you can simply:

  1. clone TillAlex's Branch of ImGui.NET-nativebuild and build that. This will give you all 4 DLL's (cimgui, cimplot, cimnodes, cimgizmos) for your project.

  2. Reference the ImPlot.NET/ImGuizmo.NET projects in your project and be sure to put the cimgui.dll/... where your exectuable will find them.

  3. An Example for ImPlot.NET:

using ImGuiNET;
using ImPlotNET;
using System.Runtime.InteropServices;

// More code

IntPtr context = ImGui.CreateContext();
IntPtr implotContext = ImPlot.CreateContext(); 
ImPlot.SetCurrentContext(implotContext); 
ImPlot.SetImGuiContext(context);

// Other code

if (ImPlot.BeginPlot("Some Plot")) 
{
        Span<double> xVals = new Span<double>(new double[]{0.0, 1.0, 2.0});
        Span<double> yVals = new Span<double>(new double[]{1.0, 0.0, 1.0});
        
        ImPlot.PlotLine("Test", ref MemoryMarshal.GetReference(xVals), ref MemoryMarshal.GetReference(yVals), xVals.Length);

    ImPlot.EndPlot();
}

// More code

ImPlot.DestroyContext();
ImGui.DestroyContext();

NOTE: If you are getting access violations, be sure to use all 4 DLL's that were generated by the nativebuild. Otherwise you will have mismatching ImGui versions.

Kayzaks avatar Apr 09 '21 19:04 Kayzaks

Oh thank wil this all work with Other render apis like OpenTK?

Pastor111 avatar Apr 10 '21 07:04 Pastor111

Oh and also i cant seem to get the build correctly for some reason

Pastor111 avatar Apr 10 '21 08:04 Pastor111

Oh thank wil this all work with Other render apis like OpenTK?

I sadly don't know.

Oh and also i cant seem to get the build correctly for some reason

Did you init/update all submodules first? What type of error/problem are you running into?

This is what I did to build it:

git submodule update --init --recursive
.\build-native.cmd

works fine on my machine™.

Kayzaks avatar Apr 10 '21 19:04 Kayzaks

It only compiles for the imgui folder the implot, imguizmo and imnodes dont compile apparently

Pastor111 avatar Apr 10 '21 20:04 Pastor111

You'll need to provide more information. What you did, Compiler Output, etc.

Kayzaks avatar Apr 10 '21 21:04 Kayzaks

When i git clone the repository it only comes with the cimgui folder and in the .gitmodules it does not include the other stuff just the cimgui and i also tried downloading the zip it comes with everything but when i try to compile it with cmake it says that there is an error with the cmakeList.txt

Pastor111 avatar Apr 11 '21 18:04 Pastor111

when i try to compile it with cmake it says that there is an error with the cmakeList.txt

@Pastor111 When @Kayzaks is asking you for more information you cant expect that with the info provided above you get your problems solved!!

Your guide should be the first post from @Kayzaks where is telling you to clone https://github.com/TillAlex/ImGui.NET-nativebuild/tree/additional_libraries. You should clone this one and not any other (as it seems to be happening).

If you download the zip the submodules will be missing.

You should do the clone with git clone --recursive https://github.com/TillAlex/ImGui.NET-nativebuild

where recursive makes sure that all submodules are cloned also (cimgui, cimplot, etc)

Then you should do checkout to additional_libraries branch (this is done in you git client)

Then you will have to build with cmake.

If something fails dont forget to provide the informations of all the commands used in the process and the output messages.


Also: this message https://github.com/mellinoe/ImGui.NET/pull/218#issuecomment-801475327 is telling you where to find compiled binaries.

sonoro1234 avatar Apr 11 '21 18:04 sonoro1234

I think i got it correct now but when i try to link it cimguizmo and the other libraries it says that the reference is unvalid or unsopported

Pastor111 avatar Apr 12 '21 13:04 Pastor111

I think i got it correct now but when i try to link it cimguizmo and the other libraries it says that the reference is unvalid or unsopported

Cool. Please re-read and re-follow the steps in our previous comments, it should be working. If not I would like to emphasize the following comments:

NOTE: If you are getting access violations, be sure to use all 4 DLL's that were generated by the nativebuild. Otherwise you will have mismatching ImGui versions.

and

You'll need to provide more information. What you did, Compiler Output, etc.

and

[...] you cant expect that with the info provided above you get your problems solved!!

Kayzaks avatar Apr 12 '21 15:04 Kayzaks

guide here : https://github.com/shlifedev/.net-imgui-native-build-guide

cimgui 1.82 dlls : https://github.com/shlifedev/.net-imgui-native-build-guide/releases/tag/1.82

❤️

shlifedev avatar Jun 28 '21 19:06 shlifedev

Thanks, i will see if it works in a moment

Pastor111 avatar Jun 28 '21 19:06 Pastor111

I have a question when i add the 4 dlls in my project should i unistall the Imgui.NET package or should i keep it?

Pastor111 avatar Jul 01 '21 07:07 Pastor111

if you want use imgui,implot then,

and add your .exe build folder cimgui.dll, cimplot.dll

shlifedev avatar Jul 02 '21 02:07 shlifedev

Is there any update on making these available through NuGet? I'm aware of the manual compilation option but NuGet is much more convenient

parzivail avatar May 01 '22 22:05 parzivail

按照上面[sonoro1234] (https://github.com/sonoro1234)native 编译后,调用cimplot.dll,并按照时[Kayzaks]方法使用时,总是报“Attempted to read or write protected memory. ”错误。然后他这个版本匹配很重要,ImGui.Net使用的版本和cimgui的版本要对应上,像TillAlax里是cimgui 1.82+ cimplot 0.9,他提供的deps里或者编译完成的dll版本,自然而然是基于1.82的,而我当时使用的ImGui.Net是1.87版本,我直接拷贝了TiilAlax的编译dll就发生了这个错误,而我后来的解决方法就是,直接在Tillax的0.9 cimplot基础上,拷贝1.87的cimgui覆盖并重新编译,就能正常使用cimplot.dll了。 其实最好的方法是重写各个版本对应的CodeGenerator里的definitions和cimgui.cpp\h包装,一一对应。但是他们这个json当时写的时候不会都是全手写,一个个对函数的吧?没有直接更新的工具吗?

1181719061 avatar Oct 20 '22 08:10 1181719061

@sonoro1234

In order to get the ImPlot binaries for using ImPlot.NET, I've been trying to follow your instructions but without success thus far...

Cloning the repository works:

C:\Users\aybe\source\repos>git clone --recursive https://github.com/TillAlex/ImGui.NET-nativebuild
Cloning into 'ImGui.NET-nativebuild'...
remote: Enumerating objects: 90, done.
remote: Counting objects: 100% (49/49), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 90 (delta 33), reused 28 (delta 28), pack-reused 41
Receiving objects: 100% (90/90), 22.67 KiB | 967.00 KiB/s, done.
Resolving deltas: 100% (39/39), done.
Submodule 'cimgui' (https://github.com/extrawurst/cimgui) registered for path 'cimgui'
Cloning into 'C:/Users/aybe/source/repos/ImGui.NET-nativebuild/cimgui'...
remote: Enumerating objects: 4058, done.
remote: Counting objects: 100% (789/789), done.
remote: Compressing objects: 100% (306/306), done.
remote: Total 4058 (delta 580), reused 635 (delta 482), pack-reused 3269
Receiving objects: 100% (4058/4058), 9.97 MiB | 16.18 MiB/s, done.
Resolving deltas: 100% (2955/2955), done.
Submodule path 'cimgui': checked out '9cb4b4f63cd41508db8b43ad10f131013669ed7d'
Submodule 'imgui' (https://github.com/ocornut/imgui.git) registered for path 'cimgui/imgui'
Cloning into 'C:/Users/aybe/source/repos/ImGui.NET-nativebuild/cimgui/imgui'...
remote: Enumerating objects: 45919, done.
remote: Counting objects: 100% (127/127), done.
remote: Compressing objects: 100% (65/65), done.
remote: Total 45919 (delta 82), reused 90 (delta 62), pack-reused 45792
Receiving objects: 100% (45919/45919), 87.56 MiB | 21.88 MiB/s, done.
Resolving deltas: 100% (34929/34929), done.
Submodule path 'cimgui/imgui': checked out '682249396f02b8c21e5ff333ab4a1969c89387ad'

Switching to the branch works:

C:\Users\aybe\source\repos\ImGui.NET-nativebuild>git switch additional_libraries
Switched to a new branch 'additional_libraries'
M       cimgui
branch 'additional_libraries' set up to track 'origin/additional_libraries'.

Building the stuff does not work, unfortunately:

C:\Users\aybe\source\repos\ImGui.NET-nativebuild>build-native.cmd
-- Building for: Visual Studio 17 2022
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19044.
-- The C compiler identification is MSVC 19.33.31630.0
-- The CXX compiler identification is MSVC 19.33.31630.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.33.31629/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
CMake Error at CMakeLists.txt:9 (add_library):
  Cannot find source file:

    cimgui/imgui/imgui_tables.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
  .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc


CMake Error at CMakeLists.txt:9 (add_library):
  No SOURCES given to target: cimgui


CMake Error at CMakeLists.txt:21 (add_library):
  No SOURCES given to target: cimplot


CMake Error at CMakeLists.txt:36 (add_library):
  No SOURCES given to target: cimnodes


CMake Error at CMakeLists.txt:49 (add_library):
  No SOURCES given to target: cimguizmo


CMake Generate step failed.  Build files cannot be regenerated correctly.
Calling cmake --build . --config Debug
CMake is re-running because C:/Users/aybe/source/repos/ImGui.NET-nativebuild/build/x64/CMakeFiles/generate.stamp dependency file is missing.
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19044.
-- Configuring done
CMake Error at CMakeLists.txt:9 (add_library):
  Cannot find source file:

    cimgui/imgui/imgui_tables.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
  .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc


CMake Error at CMakeLists.txt:9 (add_library):
  No SOURCES given to target: cimgui


CMake Error at CMakeLists.txt:21 (add_library):
  No SOURCES given to target: cimplot


CMake Error at CMakeLists.txt:36 (add_library):
  No SOURCES given to target: cimnodes


CMake Error at CMakeLists.txt:49 (add_library):
  No SOURCES given to target: cimguizmo


CMake Generate step failed.  Build files cannot be regenerated correctly.

By looking at the folder, cimgui/imgui/imgui_tables.cpp does not exist.

So, next, I've followed the instructions in repository README to initialize submodules:

C:\Users\aybe\source\repos\ImGui.NET-nativebuild>git submodule update --init
Submodule 'cimguizmo' (https://github.com/cimgui/cimguizmo.git) registered for path 'cimguizmo'
Submodule 'cimnodes' (https://github.com/cimgui/cimnodes.git) registered for path 'cimnodes'
Submodule 'cimplot' (https://github.com/cimgui/cimplot.git) registered for path 'cimplot'
Cloning into 'C:/Users/aybe/source/repos/ImGui.NET-nativebuild/cimguizmo'...
Cloning into 'C:/Users/aybe/source/repos/ImGui.NET-nativebuild/cimnodes'...
Cloning into 'C:/Users/aybe/source/repos/ImGui.NET-nativebuild/cimplot'...
Submodule path 'cimgui': checked out 'ccdae842e40f35ebf40167918175deb9af8c2a16'
Submodule path 'cimguizmo': checked out 'fcf76e389ef7e88bcf05340b14d031e1111caf32'
Submodule path 'cimnodes': checked out 'e7d42e5e8bcd8b7307a8faf6961d64296d3c9408'
Submodule path 'cimplot': checked out '43e46831c58c85a16bff1f460121baae2bf7f96c'
C:\Users\aybe\source\repos\ImGui.NET-nativebuild>git submodule update --remote
Submodule path 'cimgui': checked out '9ce2c32dada1e1fcb90f2c9bab2568895db719f5'
Submodule path 'cimguizmo': checked out '993ac0e192800c16c4ad60b249e8a4bb446047ed'
Submodule path 'cimnodes': checked out 'bf28b4d00878a9d81a9b9dc8c2d2a8412482f9de'
Submodule path 'cimplot': checked out 'ff39c9236c4d37bbccacbc7aa92a5af670f53c46'

These do work but cimgui/imgui/imgui_tables.cpp is still nowhere to be found and thus, build-native.cmd fails again.

Following your next step suggesting to look at https://github.com/mellinoe/ImGui.NET/pull/218#issuecomment-801475327, I'm greeted with the following:

Artifacts older than 1 month are automatically deleted.

So yeah, the binaries are long gone since it's been a while they've been published...

Any ideas to get hold of ImPlot binaries are more than welcome.

Thanks for your time!

aybe avatar Oct 25 '22 05:10 aybe

When looking at https://github.com/TillAlex/ImGui.NET-nativebuild on the branch additional_libraries with the web interface of github, it is possible to see that imbui_tables.cpp is present, so that should not happen.

You could try using checkout instead of switch for accesing the branch (and then use git submodule update --init --recursive) before calling cmake

But if you succed, you will be on tag 1.82 of imgui (2 years ago). It has not been updated since then. Your best bet would be to have it updated by @mellinoe which seem to be done in https://github.com/mellinoe/ImGui.NET/commit/2a842d868c1cb5fa4b3d59b46779eb79698580dd

sonoro1234 avatar Oct 25 '22 08:10 sonoro1234

Yes, TillAlex fork is really outdated by now...

Unless I'm mistaken, yesterday's commit indeed does include changes to the managed side of implot but unfortunately still no cimplot.dll.

I've just forked cimplot in order to build it by myself and see how it goes🤞

aybe avatar Oct 26 '22 08:10 aybe

Can you please just make a nuget package for them? I am really new to git and would definitely mess up in attempting to build and link everything myself. Having a nuget package for the other libraries would be a massive help for me and others.

LucoseGlucose avatar Jan 02 '23 22:01 LucoseGlucose