1
+ //
2
+ // 2024/07: Converted to Zig lang. from C++ by dinau
3
+ //
1
4
const std = @import ("std" );
2
5
const math = @import ("std" ).math ;
3
6
//
@@ -11,7 +14,9 @@ pub const c = @cImport({
11
14
@cInclude ("stdlib.h" );
12
15
});
13
16
14
-
17
+ //----------------
18
+ // imPlotDemoTabs
19
+ //----------------
15
20
pub fn imPlotDemoTabs () ! void {
16
21
if (ig .igBeginTabBar ("ImPlotDemoTabs" , 0 )) {
17
22
defer ig .igEndTabBar ();
@@ -36,19 +41,19 @@ pub fn imPlotDemoTabs() !void {
36
41
// demoHeader("Digital Plots", demo_DigitalPlots);
37
42
try demoHeader ("Images" , demo_Images );
38
43
try demoHeader ("Markers and Text" , demo_MarkersAndText );
39
- // demoHeader("NaN Values", demo_NaNValues);
44
+ try demoHeader ("NaN Values" , demo_NaNValues );
40
45
}
41
46
if (ig .igBeginTabItem (fonts .ICON_FA_CHART_AREA ++ " Subplots" , null , 0 )) {
42
47
defer ig .igEndTabItem ();
43
- // demoHeader("Sizing", demo_SubplotsSizing);
48
+ try demoHeader ("Sizing" , demo_SubplotsSizing );
44
49
// demoHeader("Item Sharing", demo_SubplotItemSharing);
45
50
// demoHeader("Axis Linking", demo_SubplotAxisLinking);
46
51
try demoHeader ("Tables" , demo_Tables );
47
52
}
48
53
if (ig .igBeginTabItem (fonts .ICON_FA_CHART_COLUMN ++ " Axes" , null , 0 )) {
49
54
defer ig .igEndTabItem ();
50
55
try demoHeader ("Log Scale" , demo_LogScale );
51
- // demoHeader("Symmetric Log Scale", demo_SymmetricLogScale);
56
+ try demoHeader ("Symmetric Log Scale" , demo_SymmetricLogScale );
52
57
// demoHeader("Time Scale", demo_TimeScale);
53
58
// demoHeader("Custom Scale", demo_CustomScale);
54
59
// demoHeader("Multiple Axes", demo_MultipleAxes);
@@ -96,6 +101,55 @@ fn demoHeader(label: anytype, demo: anytype) !void {
96
101
}
97
102
}
98
103
104
+ //-----------------------
105
+ // demo_SubplotsSizing()
106
+ //-----------------------
107
+ pub fn demo_SubplotsSizing () ! void {
108
+ if (false ){
109
+ const st = struct {
110
+ var flags = ip .ImPlotSubplotFlags_ShareItems | ip .ImPlotSubplotFlags_NoLegend ;
111
+ var rows :c_int = 3 ;
112
+ var cols :c_int = 3 ;
113
+ var rratios = [_ ]f32 {5 ,1 ,1 ,1 ,1 ,1 };
114
+ var cratios = [_ ]f32 {5 ,1 ,1 ,1 ,1 ,1 };
115
+ };
116
+ _ = ig .igCheckboxFlags_IntPtr ("ImPlotSubplotFlags_NoResize" , & st .flags , ip .ImPlotSubplotFlags_NoResize );
117
+ _ = ig .igCheckboxFlags_IntPtr ("ImPlotSubplotFlags_NoTitle" , & st .flags , ip .ImPlotSubplotFlags_NoTitle );
118
+
119
+ _ = ig .igSliderInt ("Rows" ,& st .rows ,1 ,5 , "%d" , 0 );
120
+ _ = ig .igSliderInt ("Cols" ,& st .cols ,1 ,5 , "%d" , 0 );
121
+ if ( (st .rows < 1 ) or (st .cols < 1 )) {
122
+ ig .igTextColored (.{.x = 1 , .y = 0 , .z = 0 , .w = 1 }, "Nice try, but the number of rows and columns must be greater than 0!" );
123
+ return ;
124
+ }
125
+ _ = ig .igDragScalarN ("Row Ratios" ,ig .ImGuiDataType_Float ,& st .rratios ,st .rows ,0.01 ,null ,null ,null ,0 );
126
+ _ = ig .igDragScalarN ("Col Ratios" ,ig .ImGuiDataType_Float ,& st .cratios ,st .cols ,0.01 ,null ,null ,null ,0 );
127
+ if (ip .ImPlot_BeginSubplots ("My Subplots" , st .rows , st .cols , .{.x = -1 , .y = 400 }, st .flags , & st .rratios , & st .cratios )) {
128
+ var id :c_int = 0 ;
129
+ for (0.. @intCast ((st .rows * st .cols )))| i | {
130
+ if (ip .ImPlot_BeginPlot ("" , .{.x = 0 , .y = 0 }, ip .ImPlotFlags_NoLegend )) {
131
+ ip .ImPlot_SetupAxes (null ,null ,ip .ImPlotAxisFlags_NoDecorations ,ip .ImPlotAxisFlags_NoDecorations );
132
+ var fi = 0.01 * (@as (f32 ,@floatFromInt (i )) + 1 );
133
+ if (st .rows * st .cols > 1 ) {
134
+ // TODO
135
+ var vec4 :ig.ImVec4 = undefined ;
136
+ ip .ImPlot_SampleColormap (@ptrCast (& vec4 ), @as (f32 ,@floatFromInt (i )) / @as (f32 ,@floatFromInt ((st .rows * st .cols - 1 ))), ip .ImPlotColormap_Jet );
137
+ ip .ImPlot_SetNextLineStyle (.{.x = vec4 .x , .y = vec4 .y , .z = vec4 .z , .w = vec4 .w }
138
+ , utils .IMPLOT_AUTO );
139
+ }
140
+ //var label:[16]u8 = undefined;
141
+ //const slLabel = try std.fmt.bufPrint(&label, "data{}", id);
142
+ id += 1 ;
143
+ //ip.ImPlot_PlotLineG(slLabel.ptr, utils.SineWave, &fi,1000, 0);
144
+ ip .ImPlot_PlotLineG ("mmmm" , utils .SineWave , & fi ,1000 , 0 );
145
+ ip .ImPlot_EndPlot ();
146
+ }
147
+ }
148
+ ip .ImPlot_EndSubplots ();
149
+ }
150
+ }
151
+ }
152
+
99
153
//---------------
100
154
// demo_LogScale()
101
155
//---------------
@@ -121,7 +175,29 @@ pub fn demo_LogScale() !void {
121
175
}
122
176
}
123
177
178
+ //-----------------
179
+ // demo_LogScale()
180
+ //-----------------
181
+ pub fn demo_SymmetricLogScale () ! void {
182
+ var xs :[1001 ]f64 = undefined ;
183
+ var ys1 :[1001 ]f64 = undefined ;
184
+ var ys2 :[1001 ]f64 = undefined ;
185
+ for (0.. 1001)| i | {
186
+ xs [i ] = @as (f64 ,@floatFromInt (i )) * 0.1 - 50 ;
187
+ ys1 [i ] = math .sin (xs [i ]);
188
+ ys2 [i ] = @as (f64 ,@floatFromInt (i )) * 0.002 - 1 ;
189
+ }
190
+ if (ip .ImPlot_BeginPlot ("SymLog Plot" , .{.x = -1 , .y = 0 } ,0 )) {
191
+ ip .ImPlot_SetupAxisScale_PlotScale (ip .ImAxis_X1 , ip .ImPlotScale_SymLog );
192
+ try ip .ImPlot_PlotLineXy ("f(x) = a*x+b" ,& xs , & ys2 ,1001 );
193
+ try ip .ImPlot_PlotLineXy ("f(x) = math.sin(x)" ,& xs , & ys1 ,1001 );
194
+ ip .ImPlot_EndPlot ();
195
+ }
196
+ }
124
197
198
+ //-----------------
199
+ // demo_Config()
200
+ //-----------------
125
201
pub fn demo_Config () ! void {
126
202
ig .igShowFontSelector ("Font" );
127
203
_ = ig .igShowStyleSelector ("ImGui Style" );
@@ -584,6 +660,34 @@ pub fn demo_MarkersAndText() !void {
584
660
}
585
661
}
586
662
663
+ //------------------
664
+ // demo_NaNValues()
665
+ //------------------
666
+ pub fn demo_NaNValues () ! void {
667
+ const st = struct {
668
+ var include_nan = true ;
669
+ var flags :ip.ImPlotLineFlags = 0 ;
670
+ };
671
+
672
+ var data1 = [5 ]f32 {0.0 ,0.25 ,0.5 ,0.75 ,1.0 };
673
+ var data2 = [5 ]f32 {0.0 ,0.25 ,0.5 ,0.75 ,1.0 };
674
+
675
+ if (st .include_nan ){
676
+ data1 [2 ] = utils .NaN_f32 ;
677
+ }
678
+
679
+ _ = ig .igCheckbox ("Include NaN" ,& st .include_nan );
680
+ ig .igSameLine (0 , -1.0 );
681
+ _ = ig .igCheckboxFlags_IntPtr ("Skip NaN" , & st .flags , ip .ImPlotLineFlags_SkipNaN );
682
+
683
+ if (ip .ImPlot_BeginPlot ("##NaNValues" , .{ .x = -1 , .y = 0 }, 0 )) {
684
+ ip .ImPlot_SetNextMarkerStyle (ip .ImPlotMarker_Square , utils .IMPLOT_AUTO , utils .IMPLOT_AUTO_COL , utils .IMPLOT_AUTO , utils .IMPLOT_AUTO_COL );
685
+ try ip .ImPlot_PlotLineXyEx ("line" , & data1 , & data2 , 5 , st .flags , 0 , utils .stride (data1 [0 ]));
686
+ try ip .ImPlot_PlotBars ("bars" , & data1 , 5 );
687
+ ip .ImPlot_EndPlot ();
688
+ }
689
+ }
690
+
587
691
//------------------
588
692
// demo_LinePlots()
589
693
//------------------
0 commit comments