Description:
Get rudimentary custom graph plot working.
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
@@ -39,8 +39,48 | |||
|
39 | 39 | .Select(e => (e, false)) |
|
40 | 40 | .ToDictionary(t => t.Item1, t=> t.Item2); |
|
41 | 41 | |
|
42 | public static void DrawLine(ImDrawListPtr draw_list, Num.Vector2[] points) { | |
|
42 | 43 | |
|
43 | public static void Render(ImFontPtr font, Simulation sim, ImGuiWindowBridgeEngine engine) | |
|
44 | var p = Num.Vector2.Zero;// ImGui.GetCursorScreenPos(); | |
|
45 | ||
|
46 | // var points = new Num.Vector2[] { new Num.Vector2(0, 0), new Num.Vector2(25, 25), new Num.Vector2(50, 500) }; | |
|
47 | ||
|
48 | for (int i = 0; i < points.Length; i++) | |
|
49 | { | |
|
50 | var c = ImGui.GetCursorScreenPos(); | |
|
51 | points[i] = Num.Vector2.Add(points[i], c); | |
|
52 | } | |
|
53 | ||
|
54 | // uint col = 0b_1111_1111_1111_0000; | |
|
55 | uint col = 0xFF000000; | |
|
56 | ||
|
57 | draw_list.AddPolyline(ref points[0], points.Length, col, ImDrawFlags.RoundCornersDefault, 1.0f); | |
|
58 | ||
|
59 | } | |
|
60 | ||
|
61 | public static int Scale(Num.Vector2 domain, Num.Vector2 range, int num) { | |
|
62 | //https://stats.stackexchange.com/a/281164 | |
|
63 | ||
|
64 | var domain_span = Math.Max(1, (domain.Y - domain.X)); | |
|
65 | var range_span = range.Y - range.X; | |
|
66 | ||
|
67 | var start = range.X - domain.X; | |
|
68 | ||
|
69 | ||
|
70 | // return (int)((domain_span / range_span) * (num + start)); | |
|
71 | ||
|
72 | checked | |
|
73 | { | |
|
74 | ||
|
75 | return (int) (((num - domain.X) / domain_span) * range_span + range.X); | |
|
76 | } | |
|
77 | ||
|
78 | ||
|
79 | ||
|
80 | } | |
|
81 | ||
|
82 | ||
|
83 | public static async void Render(ImFontPtr font, Simulation sim, ImGuiWindowBridgeEngine engine) | |
|
44 | 84 | { |
|
45 | 85 | bool newShow = true; |
|
46 | 86 | |
@@ -99,8 +139,6 | |||
|
99 | 139 | |
|
100 | 140 | ImPlot.PushStyleVar(ImPlotStyleVar.LineWeight, 2.0f); |
|
101 | 141 | ImPlot.PushStyleVar(ImPlotStyleVar.MinorAlpha, 0.0f); |
|
102 | // ImPlot.PushStyleVar(ImPlotStyleVar.MajorGridSize, new Num.Vector2(0.0f, 0.0f)); | |
|
103 | // ImPlot.PushStyleVar(ImPlotStyleVar.MinorGridSize, new Num.Vector2(0.0f, 0.0f)); | |
|
104 | 142 | |
|
105 | 143 | ImPlot.SetNextPlotLimits(totals.Count()-periods, totals.Count(), min, max, ImGuiCond.Always); |
|
106 | 144 | if( ImPlot.BeginPlot("My Plot", null, null, new Num.Vector2(-1,0), ImPlotFlags.NoLegend | ImPlotFlags.NoMousePos )) { |
@@ -114,6 +152,8 | |||
|
114 | 152 | ImPlot.PlotLine(key, ref data_array[0], data_array.Length); |
|
115 | 153 | ImPlot.AnnotateClamped(data_array.Length-1, data_array[data_array.Length-1], |
|
116 | 154 | new Num.Vector2(5, -10), StyleSets.grey, key); |
|
155 | ||
|
156 | ||
|
117 | 157 | } |
|
118 | 158 | } |
|
119 | 159 | |
@@ -122,6 +162,7 | |||
|
122 | 162 | |
|
123 | 163 | ImPlot.PopStyleVar(2); |
|
124 | 164 | |
|
165 | ||
|
125 | 166 | ImGui.RadioButton("1 year", ref GraphWindow.year, 1); |
|
126 | 167 | ImGui.SameLine(); |
|
127 | 168 | ImGui.RadioButton("5 years", ref GraphWindow.year, 5); |
@@ -161,8 +202,28 | |||
|
161 | 202 | } |
|
162 | 203 | |
|
163 | 204 | |
|
205 | var draw_list = ImGui.GetWindowDrawList(); | |
|
164 | 206 | |
|
165 | 207 | |
|
208 | var range = new Num.Vector2(200, 0); | |
|
209 | ||
|
210 | foreach (var key in keys) { | |
|
211 | var show = data_sets_show[key]; | |
|
212 | var data = data_sets[key]; | |
|
213 | var domain = new Num.Vector2((int)data.Min(), (int)data.Max()); | |
|
214 | // var data_array = datasets[key].Select((p) => Scale(domain, range, (int)p) ).Select((p,i) => new Num.Vector2(i*10, (int)p)).ToArray(); | |
|
215 | if (data.Count() > 0 && show) | |
|
216 | { | |
|
217 | // Logging.Spy(range); | |
|
218 | // Logging.Spy(domain); | |
|
219 | IEnumerable<int> data_array = data_sets[key].Select((p) => Scale(domain, range, (int)p)); | |
|
220 | var data_array2 = data_array.Select((p, i) => new Num.Vector2(i * 10, p)).ToArray(); | |
|
221 | DrawLine(draw_list, data_array2); | |
|
222 | } | |
|
223 | } | |
|
224 | ||
|
225 | ImGui.Dummy(new Num.Vector2(200, 200)); | |
|
226 | ||
|
166 | 227 | ImGui.End(); |
|
167 | 228 | ImGui.GetStyle().WindowMenuButtonPosition = ImGuiDir.Left; |
|
168 | 229 | StyleSets.defaultSet.pop(); |
You need to be logged in to leave comments.
Login now