# HG changeset patch # User Alys Brooks # Date 2022-07-28 07:50:59 # Node ID 1735a628e0975e1484ae3a0bfb865b45b3042c93 # Parent 1bbd6b30ac60d5855bf376d5e1ed0ae25c009940 Get rudimentary custom graph plot working. diff --git a/isometric-park-fna/UI/Graph.cs b/isometric-park-fna/UI/Graph.cs --- a/isometric-park-fna/UI/Graph.cs +++ b/isometric-park-fna/UI/Graph.cs @@ -39,8 +39,48 @@ .Select(e => (e, false)) .ToDictionary(t => t.Item1, t=> t.Item2); + public static void DrawLine(ImDrawListPtr draw_list, Num.Vector2[] points) { - public static void Render(ImFontPtr font, Simulation sim, ImGuiWindowBridgeEngine engine) + var p = Num.Vector2.Zero;// ImGui.GetCursorScreenPos(); + + // var points = new Num.Vector2[] { new Num.Vector2(0, 0), new Num.Vector2(25, 25), new Num.Vector2(50, 500) }; + + for (int i = 0; i < points.Length; i++) + { + var c = ImGui.GetCursorScreenPos(); + points[i] = Num.Vector2.Add(points[i], c); + } + + // uint col = 0b_1111_1111_1111_0000; + uint col = 0xFF000000; + + draw_list.AddPolyline(ref points[0], points.Length, col, ImDrawFlags.RoundCornersDefault, 1.0f); + + } + + public static int Scale(Num.Vector2 domain, Num.Vector2 range, int num) { + //https://stats.stackexchange.com/a/281164 + + var domain_span = Math.Max(1, (domain.Y - domain.X)); + var range_span = range.Y - range.X; + + var start = range.X - domain.X; + + + // return (int)((domain_span / range_span) * (num + start)); + + checked + { + + return (int) (((num - domain.X) / domain_span) * range_span + range.X); + } + + + + } + + + public static async void Render(ImFontPtr font, Simulation sim, ImGuiWindowBridgeEngine engine) { bool newShow = true; @@ -99,8 +139,6 @@ ImPlot.PushStyleVar(ImPlotStyleVar.LineWeight, 2.0f); ImPlot.PushStyleVar(ImPlotStyleVar.MinorAlpha, 0.0f); - // ImPlot.PushStyleVar(ImPlotStyleVar.MajorGridSize, new Num.Vector2(0.0f, 0.0f)); - // ImPlot.PushStyleVar(ImPlotStyleVar.MinorGridSize, new Num.Vector2(0.0f, 0.0f)); ImPlot.SetNextPlotLimits(totals.Count()-periods, totals.Count(), min, max, ImGuiCond.Always); if( ImPlot.BeginPlot("My Plot", null, null, new Num.Vector2(-1,0), ImPlotFlags.NoLegend | ImPlotFlags.NoMousePos )) { @@ -114,6 +152,8 @@ ImPlot.PlotLine(key, ref data_array[0], data_array.Length); ImPlot.AnnotateClamped(data_array.Length-1, data_array[data_array.Length-1], new Num.Vector2(5, -10), StyleSets.grey, key); + + } } @@ -122,6 +162,7 @@ ImPlot.PopStyleVar(2); + ImGui.RadioButton("1 year", ref GraphWindow.year, 1); ImGui.SameLine(); ImGui.RadioButton("5 years", ref GraphWindow.year, 5); @@ -161,8 +202,28 @@ } + var draw_list = ImGui.GetWindowDrawList(); + var range = new Num.Vector2(200, 0); + + foreach (var key in keys) { + var show = data_sets_show[key]; + var data = data_sets[key]; + var domain = new Num.Vector2((int)data.Min(), (int)data.Max()); + // var data_array = datasets[key].Select((p) => Scale(domain, range, (int)p) ).Select((p,i) => new Num.Vector2(i*10, (int)p)).ToArray(); + if (data.Count() > 0 && show) + { + // Logging.Spy(range); + // Logging.Spy(domain); + IEnumerable data_array = data_sets[key].Select((p) => Scale(domain, range, (int)p)); + var data_array2 = data_array.Select((p, i) => new Num.Vector2(i * 10, p)).ToArray(); + DrawLine(draw_list, data_array2); + } + } + + ImGui.Dummy(new Num.Vector2(200, 200)); + ImGui.End(); ImGui.GetStyle().WindowMenuButtonPosition = ImGuiDir.Left; StyleSets.defaultSet.pop();