Skip to content

Commit 5acbb93

Browse files
committed
added: many demos and images.
Refactored and added some demos
1 parent 6ca0988 commit 5acbb93

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+2036
-488
lines changed

README.md

Lines changed: 147 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,46 @@
22
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
33

44
- [Nim ImPlot binding](#nim-implot-binding)
5-
- [Direct install from Web](#direct-install-from-web)
6-
- [Runing test application](#runing-test-application)
5+
- [Direct nimble install from Web](#direct-nimble-install-from-web)
6+
- [Runing all demo programs](#runing-all-demo-programs)
77
- [Compiling application](#compiling-application)
8+
- [Notice: Compilation options](#notice-compilation-options)
89
- [Generating ImPlot bindings for development](#generating-implot-bindings-for-development)
910
- [Development](#development)
1011
- [Tools info](#tools-info)
1112
- [Example gallery written in Nim language](#example-gallery-written-in-nim-language)
1213
- [Plots](#plots)
14+
- [LinePlots.nim](#lineplotsnim)
15+
- [FilledLinePlots.nim](#filledlineplotsnim)
16+
- [ShadedPlots.nim](#shadedplotsnim)
17+
- [ScatterPlots.nim](#scatterplotsnim)
18+
- [RealtimePlots.nim](#realtimeplotsnim)
19+
- [StairstepPlots.nim](#stairstepplotsnim)
20+
- [BarGroups.nim](#bargroupsnim)
21+
- [BarPlots.nim](#barplotsnim)
22+
- [BarStacks.nim](#barstacksnim)
23+
- [ErrorBars.nim](#errorbarsnim)
24+
- [StemPlots.nim](#stemplotsnim)
25+
- [InfiniteLines.nim](#infinitelinesnim)
26+
- [PieCharts.nim](#piechartsnim)
27+
- [HeatMaps.nim](#heatmapsnim)
28+
- [Histogram.nim](#histogramnim)
29+
- [DigitalPlots.nim](#digitalplotsnim)
30+
- [Images.nim](#imagesnim)
31+
- [MarkersAndText.nim](#markersandtextnim)
32+
- [NaNValues.nim](#nanvaluesnim)
1333
- [Subplots](#subplots)
34+
- [Tables.nim](#tablesnim)
35+
- [ItemSharing.nim](#itemsharingnim)
1436
- [Axes](#axes)
37+
- [LogScale.nim](#logscalenim)
38+
- [MultipleAxes.nim](#multipleaxesnim)
39+
- [Tools](#tools)
40+
- [OffsetAndStride.nim](#offsetandstridenim)
41+
- [DragRects.nim](#dragrectsnim)
42+
- [DragAndDrop.nim](#draganddropnim)
43+
- [Custom](#custom)
44+
- [CustomDataAndGetters.nim](#customdataandgettersnim)
1545

1646
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
1747

@@ -24,16 +54,17 @@
2454

2555
1. This project uses the modified generator that derived from the achievement of [Nimgl/imgui](https://github.com/nimgl/imgui) and [nimgl-imgui](https://github.com/daniel-j/nimgl-imgui)(forked).
2656
1. This project also uses ImGui library ([nim-imgui (ImGui v1.89.9 latest)](https://github.com/dinau/nimgl-imgui)) derived from [Nimgl/imgui](https://github.com/nimgl/imgui) and [nimgl-imgui](https://github.com/daniel-j/nimgl-imgui)(forked).
57+
1. Also have used [CImGui library](https://github.com/cimgui/cimgui)
2758

28-
### Direct install from Web
59+
### Direct nimble install from Web
2960

3061
---
3162

3263
```sh
3364
nimble install https://github.com/dinau/nim_implot
3465
```
3566

36-
### Runing test application
67+
### Runing all demo programs
3768

3869
---
3970

@@ -43,7 +74,7 @@ cd nim_implot
4374
nimble test
4475
```
4576

46-
Test source: [examples/ImPlotDemo.nim](examples/ImPlotDemo.nim)
77+
Test source: [examples/demo](examples/demo)
4778

4879
### Compiling application
4980

@@ -54,12 +85,21 @@ It has to be used **cpp** backend at compilation for example,
5485
```sh
5586
pwd
5687
nim_implot
57-
cd examples
88+
cd examples/demo
5889
nim cpp -r ImPlotDemo.nim
5990
```
6091

6192
**Note**: **C** backend is not supported.
6293

94+
### Notice: Compilation options
95+
96+
---
97+
98+
If demo programs crash, please try to specify compilation option
99+
`--mm:refc` instead of `--mm:arc` or `--mm:orc`,
100+
especially if you use Nim-2.00, try to specify `--mm:refc`.
101+
These are TODO at this moment.
102+
63103
### Generating ImPlot bindings for development
64104

65105
---
@@ -93,85 +133,142 @@ It is currently being developed and tested on
93133
- Windows10
94134
- Nim Compiler Version 1.6.14
95135
- gcc.exe (Rev2, Built by MSYS2 project) 13.2.0
96-
- git version 2.41.0.windows.3
97136
- Debian 12 Bookworm
98137
- Nim Compiler Version 1.6.14
99138
- gcc (Debian 12.2.0-14) 12.2.0
100-
- git version 2.39.2
101139

102140
### Example gallery written in Nim language
103141

142+
---
143+
144+
**Now all demo (over 50) programs have been implemented in Nim language** (2023/10),
145+
(Orignal demo program is here [implot_demo.cpp](https://github.com/epezent/implot/blob/master/implot_demo.cpp), (C++))
146+
below images are part of them.
147+
104148
#### Plots
105149

106150
---
107151

108-
- [examples/LinePlots.nim](examples/LinePlots.nim)
109-
![alt](img/LinePlots.png)
152+
##### [LinePlots.nim](examples/demo/tools/LinePlots.nim)
153+
154+
![alt](img/LinePlots.png)
155+
156+
##### [FilledLinePlots.nim](examples/demo/tools/FilledLinePlots.nim)
157+
158+
![alt](img/FilledLinePlots.png)
159+
160+
##### [ShadedPlots.nim](examples/demo/tools/ShadedPlots.nim)
161+
162+
![alt](img/ShadedPlots.png)
163+
164+
##### [ScatterPlots.nim](examples/demo/tools/ScatterPlots.nim)
165+
166+
![alt](img/ScatterPlots.png)
167+
168+
##### [RealtimePlots.nim](examples/demo/tools/RealtimePlots.nim)
169+
170+
![alt](img/RealtimePlots.png)
171+
172+
##### [StairstepPlots.nim](examples/demo/tools/StairstepPlots.nim)
173+
174+
![alt](img/StairstepPlots.png)
175+
176+
##### [BarGroups.nim](examples/demo/tools/BarGroups.nim)
177+
178+
![alt](img/BarGroups.png)
179+
180+
##### [BarPlots.nim](examples/demo/tools/BarPlots.nim)
181+
182+
![alt](img/BarPlots.png)
183+
184+
##### [BarStacks.nim](examples/demo/tools/BarStacks.nim)
110185

111-
- [examples/FilledLinePlots.nim](examples/FilledLinePlots.nim)
112-
![alt](img/FilledLinePlots.png)
186+
![alt](img/BarStacks.png)
113187

114-
- [examples/ShadedPlots.nim](examples/ShadedPlots.nim)
115-
![alt](img/ShadedPlots.png)
188+
##### [ErrorBars.nim](examples/demo/tools/ErrorBars.nim)
116189

117-
- [examples/ScatterPlots.nim](examples/ScatterPlots.nim)
118-
![alt](img/ScatterPlots.png)
190+
![alt](img/ErrorBars.png)
119191

120-
- [examples/RealtimePlots.nim](examples/RealtimePlots.nim) ( It dosn't work well.)
121-
![alt](img/RealtimePlots.png)
192+
##### [StemPlots.nim](examples/demo/tools/StemPlots.nim)
122193

123-
- [examples/StairstepPlots.nim](examples/StairstepPlots.nim)
124-
![alt](img/StairstepPlots.png)
194+
![alt](img/StemPlots.png)
125195

126-
- [examples/BarGroups.nim](examples/BarGroups.nim)
127-
![alt](img/BarGroups.png)
196+
##### [InfiniteLines.nim](examples/demo/tools/InfiniteLines.nim)
128197

129-
- [examples/BarPlots.nim](examples/BarPlots.nim)
130-
![alt](img/BarPlots.png)
198+
![alt](img/InfiniteLines.png)
131199

132-
- [examples/BarStacks.nim](examples/BarStacks.nim)
133-
![alt](img/BarStacks.png)
200+
##### [PieCharts.nim](examples/demo/tools/PieCharts.nim)
134201

135-
- [examples/ErrorBars.nim](examples/ErrorBars.nim)
136-
![alt](img/ErrorBars.png)
202+
![alt](img/PieCharts.png)
137203

138-
- [examples/StemPlots.nim](examples/StemPlots.nim)
139-
![alt](img/StemPlots.png)
204+
##### [HeatMaps.nim](examples/demo/tools/HeatMaps.nim)
140205

141-
- [examples/InfiniteLines.nim](examples/InfiniteLines.nim)
142-
![alt](img/InfiniteLines.png)
206+
![alt](img/HeatMaps.png)
143207

144-
- [examples/PieCharts.nim](examples/PieCharts.nim)
145-
![alt](img/PieCharts.png)
208+
##### [Histogram.nim](examples/demo/tools/Histogram.nim)
146209

147-
- [examples/HeatMaps.nim](examples/HeatMaps.nim)
148-
![alt](img/HeatMaps.png)
210+
![alt](img/Histogram.png)
149211

150-
- [examples/Histogram.nim](examples/Histogram.nim)
151-
![alt](img/Histogram.png)
212+
##### [DigitalPlots.nim](examples/demo/tools/DigitalPlots.nim)
152213

153-
- [examples/DigitalPlots.nim](examples/DigitalPlots.nim)
154-
![alt](img/DigitalPlots.png)
214+
![alt](img/DigitalPlots.png)
155215

156-
- [examples/Images.nim](examples/Images.nim)
157-
![alt](img/Images.png)
216+
##### [Images.nim](examples/demo/tools/Images.nim)
158217

159-
- [examples/MarkersAndText.nim](examples/MarkersAndText.nim)
160-
![alt](img/MarkersAndText.png)
218+
![alt](img/Images.png)
161219

162-
- [examples/NaNValues.nim](examples/NaNValues.nim)
163-
![alt](img/NaNValues.png)
220+
##### [MarkersAndText.nim](examples/demo/tools/MarkersAndText.nim)
221+
222+
![alt](img/MarkersAndText.png)
223+
224+
##### [NaNValues.nim](examples/demo/tools/NaNValues.nim)
225+
226+
![alt](img/NaNValues.png)
164227

165228
#### Subplots
166229

167230
---
168231

169-
- [examples/Tables.nim](examples/Tables.nim)
170-
![alt](img/Tables.png)
232+
##### [Tables.nim](examples/SubPlots/demo/Tables.nim)
233+
234+
![alt](img/Tables.png)
235+
236+
##### [ItemSharing.nim](examples/demo/SubPlots/ItemSharing.nim)
237+
238+
![alt](img/ItemSharing.png)
171239

172240
#### Axes
173241

174242
---
175243

176-
- [examples/LogScale.nim](examples/LogScale.nim)
177-
![alt](img/LogScale.png)
244+
##### [LogScale.nim](examples/demo/Axes/LogScale.nim)
245+
246+
![alt](img/LogScale.png)
247+
248+
##### [MultipleAxes.nim](examples/demo/Axes/MultipleAxes.nim)
249+
250+
![alt](img/MultipleAxes.png)
251+
252+
#### Tools
253+
254+
---
255+
256+
##### [OffsetAndStride.nim](examples/demo/Tools/OffsetAndStride.nim)
257+
258+
![alt](img/OffsetAndStride.png)
259+
260+
##### [DragRects.nim](examples/demo/Tools/DragRects.nim)
261+
262+
![alt](img/DragRects.png)
263+
264+
##### [DragAndDrop.nim](examples/demo/Tools/DragAndDrop.nim)
265+
266+
![alt](img/DragAndDrop.png)
267+
268+
#### Custom
269+
270+
---
271+
272+
##### [CustomDataAndGetters.nim](examples/demo/Tools/CustomDataAndGetters.nim)
273+
274+
![alt](img/CustomDataAndGetters.png)

examples/demo/ImPlotDemo.nim

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ proc main() =
4747
doAssert igOpenGL3Init()
4848
defer: igOpenGL3Shutdown()
4949

50-
#implot.igStyleColorsCherry()
5150
#imgui.igStyleColorsCherry()
5251

5352
var
@@ -75,7 +74,7 @@ proc main() =
7574
igSetNextWindowPos(ImVec2(x: 25, y: 25), FirstUseEver)
7675
igSetNextWindowSize(ImVec2(x: 580, y: 400), FirstUseEver)
7776
block:
78-
igBegin("This Demos have been written in Nim language.")
77+
igBegin("All Demos have been written in Nim language.")
7978
defer: igEnd()
8079
igText("Application average %.3f ms/frame (%.1f FPS)",
8180
1000.0f / igGetIO().framerate, igGetIO().framerate)

examples/demo/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ run: all
99
./$(TARGET)
1010

1111
gen:
12-
(cd ..;nimble gen)
12+
(cd ../..;nimble gen)
1313

1414
clean:
1515
-rm -fr .nimcache
16-
-rm $(TARGET).exe
16+
-rm $(TARGET)

examples/demo/README.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
### Memo
2-
3-
- Examples has been converted to Nim language from ImPlot C++ language.
4-
by dinau 2023/09
5-
1+
### Aboue Demo programs
62

3+
- Demo programs have been converted to Nim language from ImPlot C++ language (implot\_demo.cpp).
4+
by dinau 2023/09 (https://github.com/dinau)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import std/[math,random]
2+
import imgui
3+
import implot
4+
5+
#-----------------------------
6+
# demo_Axes_AutoFittingData()
7+
#-----------------------------
8+
proc demo_Axes_AutoFittingData*() =
9+
igBulletText("The Y-axis has been configured to auto-fit to only the data visible in X-axis range.")
10+
igBulletText("Zoom and pan the X-axis. Disable Stems to see a difference in fit.")
11+
igBulletText("If ImPlotAxisFlags_RangeFit is disabled, the axis will fit ALL data.")
12+
var
13+
xflags{.global.} = ImPlotAxisFlags.None
14+
yflags{.global.} = ImPlotAxisFlags.AutoFit or ImPlotAxisFlags.RangeFit
15+
16+
igTextUnformatted("X: ");igSameLine()
17+
igCheckboxFlags("ImPlotAxisFlags_AutoFit##X", xflags.pu32, ImPlotAxisFlags.AutoFit.uint32);igSameLine()
18+
igCheckboxFlags("ImPlotAxisFlags_RangeFit##X", xflags.pu32, ImPlotAxisFlags.RangeFit.uint32)
19+
20+
igTextUnformatted("Y: "); igSameLine()
21+
igCheckboxFlags("ImPlotAxisFlags_AutoFit##Y", yflags.pu32, ImPlotAxisFlags.AutoFit.uint32);igSameLine()
22+
igCheckboxFlags("ImPlotAxisFlags_RangeFit##Y", yflags.pu32, ImPlotAxisFlags.RangeFit.uint32)
23+
24+
var data{.global.}:array[101,cdouble]
25+
randomize(0) # srand(0) : C++
26+
for i in 0..<101:
27+
data[i] = 1.cfloat + sin(i.cfloat/10.0f)
28+
29+
if ipBeginPlot("##DataFitting"):
30+
defer: ipEndPlot()
31+
ipSetupAxes("X","Y",xflags,yflags)
32+
ipPlotLine("Line",data.ptz,101)
33+
ipPlotStems("Stems",data.ptz,101)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import imgui
2+
import implot
3+
import utils
4+
5+
#----------------------------
6+
# demo_Axes_AxisConstraints()
7+
#----------------------------
8+
proc demo_Axes_AxisConstraints*() =
9+
var
10+
constraintsA{.global.} = [-10.cfloat, 10]
11+
constraintsB{.global.} = [1.cfloat, 20]
12+
flags{.global.}: ImPlotAxisFlags
13+
14+
igDragFloat2("Limits Constraints", constraintsA, 0.01f)
15+
igDragFloat2("Zoom Constraints" , constraintsB, 0.01f)
16+
CHECKBOX_FLAG(flags, ImPlotAxisFlags.PanStretch)
17+
if ipBeginPlot("##AxisConstraints", ImVec2(x: -1, y: 0)):
18+
defer: ipEndPlot()
19+
ipSetupAxes("X", "Y", flags, flags)
20+
ipSetupAxesLimits(-1, 1, -1, 1)
21+
ipSetupAxisLimitsConstraints(ImAxis.X1, constraintsA[0], constraintsA[1])
22+
ipSetupAxisZoomConstraints( ImAxis.X1, constraintsB[0], constraintsB[1])
23+
ipSetupAxisLimitsConstraints(ImAxis.Y1, constraintsA[0], constraintsA[1])
24+
ipSetupAxisZoomConstraints( ImAxis.Y1, constraintsB[0], constraintsB[1])

0 commit comments

Comments
 (0)