public void AssertThat_GenerateBounds_ProducesAlternatelyAlignedRectangle_WithDepth3() { //Create a tree with hand calculated split values var tree = new Node <TestData>(null, null, true, 10) { new Node <TestData>(null, new TestData("0"), false, 4) { new Node <TestData>(null, new TestData("1"), 2), new Node <TestData>(null, new TestData("2"), 8), }, new Node <TestData>(null, new TestData("3"), 6), }; //Generate the boundaries for this tree Treemap <TestData> .GenerateBounds(new BoundingRectangle(new Vector2(0, 0), new Vector2(10, 10)), new [] { tree }, true); DrawTreemap(tree); //Does the root take all the available space? Assert.AreEqual(new BoundingRectangle(new Vector2(0, 0), new Vector2(10, 10)), tree.Bounds); //Do the inner nodes take the correct space? Assert.AreEqual(new BoundingRectangle(new Vector2(0, 0), new Vector2(4, 10)), tree.First().Bounds); Assert.AreEqual(new BoundingRectangle(new Vector2(4, 0), new Vector2(10, 10)), tree.Skip(1).First().Bounds); //Do the leaves take the correct space? Assert.AreEqual(new BoundingRectangle(new Vector2(0, 0), new Vector2(4, 2)), tree.First().First().Bounds); Assert.AreEqual(new BoundingRectangle(new Vector2(0, 2), new Vector2(4, 10)), tree.First().Skip(1).First().Bounds); }
public void DrawChart(bool refresh = false) { if (refresh) { Treemap.BuildAndDraw(); } else { var indx = Indexes.Select(i => Data.GetValues <string>(i.Column)).ToList(); var size = Data.GetValues <double>(SizeColumn).ToList(); var color = Data.GetValues <object>(ColorColumn); TreemapParameters parameters = GetParameters(); parameters.AutoRefresh = AutoRefresh; Treemap.DrawChart(indx, size, color, parameters); } if (!Treemap.IsActive) { IsDead = true; Messenger.Default.Send(new NotificationMessage <ChartBase>(Treemap, "Chart has been unactivated"), "ChartUnactivated"); MessageBox.Show("An error has occured during chart rendering.", "Unexpected error", MessageBoxButton.OK, MessageBoxImage.Error); } }
public void AssertThat_MultiLevelTree_AssignsCorrectAreas() { var tree = new Tree <TestData>(new Tree <TestData> .Node { new Tree <TestData> .Node(new TestData("1", 1)), new Tree <TestData> .Node(new TestData("2", 2)), new Tree <TestData> .Node(new TestData("3")) { new Tree <TestData> .Node(new TestData("3a", 0.8f)), new Tree <TestData> .Node(new TestData("3b", 1)), new Tree <TestData> .Node(new TestData("3c", 1.2f)) } }); var result = Treemap <TestData> .Build(new BoundingRectangle(new Vector2(0, 0), new Vector2(3, 2)), tree); DrawTreemap(result); //Check all the areas RecursiveAssert(result.Root, (p, c) => { if (p.Value?.Area != null) { Assert.AreEqual(p.Value.Area.Value, p.Bounds.Area(), 0.0001f); } }); }
private void butTreemap_Click(object sender, RoutedEventArgs e) { Reset(ChartType.TreeMap); modelChart = Treemap.Create(); controller.ChartModel = modelChart; RenderChart(); }
public void AssertThat_GenerateBounds_ProducesSpecifiedRectangles_WithRootNode_WithTwoChildren_WithNonZeroRectangle() { var a = new Node <TestData>(null, new TestData("0"), 4); var b = new Node <TestData>(null, new TestData("1"), 6); Treemap <TestData> .GenerateBounds(new BoundingRectangle(new Vector2(-7, -5), new Vector2(3, 5)), new[] { a, b, }, true); Assert.AreEqual(new BoundingRectangle(new Vector2(-7, -5), new Vector2(-3, 5)), a.Bounds); Assert.AreEqual(new BoundingRectangle(new Vector2(-3, -5), new Vector2(3, 5)), b.Bounds); }
public void Playground() { var tree = new Tree <TestData>(new Tree <TestData> .Node { new Tree <TestData> .Node(new TestData("1", 1)), new Tree <TestData> .Node(new TestData("2", 2)), new Tree <TestData> .Node(new TestData("3", 3)) }); var result = Treemap <TestData> .Build(new BoundingRectangle(new Vector2(0, 0), new Vector2(3, 2)), tree); DrawTreemap(result); }
public void AssertThat_SingleLevelTree_AssignsCorrectArea() { //Construct a single level tree with a hardcoded area var tree = new Tree <TestData>(new Tree <TestData> .Node(new TestData("a", 6))); var result = Treemap <TestData> .Build(new BoundingRectangle(new Vector2(0, 0), new Vector2(3, 2)), tree); DrawTreemap(result); //Check that the resulting area is correct Assert.AreEqual(6, result.Root.Bounds.Area(), 0.0001f); }
private void RenderTreemap(Point2I size) { Stopwatch sw = Stopwatch.StartNew(); if (treemap == null || treemapSize.X != size.X || treemapSize.Y != size.Y) { treemapSize = size; UI.Invoke(() => { treemap = new WriteableBitmap(size.X, size.Y, 96, 96, PixelFormats.Bgra32, null); }); } Treemap.DrawTreemap(treemap, new Rectangle2I(size), rootItem); //Treemap.DrawTreemap(treemap, new Rectangle2I(size), fileRoot, options); Console.WriteLine($"Took {sw.ElapsedMilliseconds}ms to render treemap"); }
//called when data for any output pin is requested public void Evaluate(int SpreadMax) { if (FInput.IsChanged || FSortIn.IsChanged || FAlgorithmIn.IsChanged) { var n = MakeTree(SpreadMax); FTreeMap = new Treemap(n, FSortIn[0]); FTreeMap.Algorithm = FAlgorithmIn[0]; FTreeMap.DoLayout(); FCenterOut.SliceCount = SpreadMax; FSizeOut.SliceCount = SpreadMax; FFormerSliceOut.SliceCount = SpreadMax; var childs = FTreeMap.Root.Children; for (int i = 0; i < SpreadMax; i++) { var c = childs[i]; FCenterOut[i] = c.Rect.Center; FSizeOut[i] = c.Rect.Size; FFormerSliceOut[i] = (int)c.Value; } } }
public void AssertThat_MultiLevelTree_MaintainsParentChildRelationship() { var tree = new Tree <TestData>(new Tree <TestData> .Node(new TestData("root")) { new Tree <TestData> .Node(new TestData("1", 1)), new Tree <TestData> .Node(new TestData("2", 2)), new Tree <TestData> .Node(new TestData("3")) { new Tree <TestData> .Node(new TestData("3a", 0.8f)), new Tree <TestData> .Node(new TestData("3b", 1)), new Tree <TestData> .Node(new TestData("3c", 1.2f)) } }); var result = Treemap <TestData> .Build(new BoundingRectangle(new Vector2(0, 0), new Vector2(3, 2)), tree); DrawTreemap(result); //Check that all child bounds are contained within parent bounds RecursiveAssert(result.Root, (p, c) => { Assert.IsTrue(p.Bounds.Contains(c.Bounds)); }); }
private void RenderHighlight(Point2I size) { Stopwatch sw = Stopwatch.StartNew(); if (highlight == null || highlightSize.X != size.X || highlightSize.Y != size.Y) { highlightSize = size; UI.Invoke(() => { highlight = new WriteableBitmap(size.X, size.Y, 96, 96, PixelFormats.Bgra32, null); }); Trace.WriteLine($"Took {sw.ElapsedMilliseconds}ms to setup highlight bitmap"); } sw.Restart(); if (highlightMode == HighlightMode.Extension) { Treemap.HighlightExtensions(highlight, new Rectangle2I(size), rootItem, Settings.HighlightColor, extension); } else if (highlightMode == HighlightMode.Selection) { Treemap.HighlightItems(highlight, new Rectangle2I(size), Settings.HighlightColor, selection); } Trace.WriteLine($"Took {sw.ElapsedMilliseconds}ms to render highlight"); Trace.WriteLine(""); }
private static void DrawTreemap <T>(Treemap <T> map) where T : ITreemapNode { DrawTreemap(map.Root); }