/// <summary> /// Insert a <typeparamref name="T"/> item into the QuadTree. /// </summary> public void Add(T item) { var bounds = item.Bounds; EnsureBounds(bounds); root.Add(item, bounds); }
public void CreateQuadTree() { using (var wb = new XLWorkbook()) { var ws = wb.Worksheets.Add("Sheet1") as XLWorksheet; var quadTree = new Quadrant(); var range = ws.Range("BT76:CA87"); quadTree.Add(range); var level0 = quadTree; Assert.AreEqual(1, level0.MinimumColumn); Assert.AreEqual(XLHelper.MaxColumnNumber, level0.MaximumColumn); Assert.AreEqual(1, level0.MinimumRow); Assert.AreEqual(XLHelper.MaxRowNumber, level0.MaximumRow); Assert.IsNull(level0.Ranges); Assert.AreEqual(128, level0.Children.Count()); Assert.True(level0.Children.All(child => child.Level == 1)); Assert.AreEqual(64, level0.Children.Count(child => child.MinimumColumn == 1 && child.MaximumColumn == 8192 && child.X == 0)); Assert.AreEqual(64, level0.Children.Count(child => child.MinimumColumn == 8193 && child.MaximumColumn == 16384 && child.X == 1)); Assert.AreEqual(2, level0.Children.Count(child => child.MinimumRow == 1 && child.MaximumRow == 8192 && child.Y == 0)); Assert.AreEqual(2, level0.Children.Count(child => child.MinimumRow == 16385 && child.MaximumRow == 24576 && child.Y == 2)); Assert.True(level0.Children.ElementAt(0).Children.Any()); Assert.True(level0.Children.Skip(1).All(child => child.Children == null)); var level8 = level0 .Children.First() // 1 .Children.First() // 2 .Children.First() // 3 .Children.First() // 4 .Children.First() // 5 .Children.First() // 6 .Children.First() // 7 .Children.Last(); // 8 Assert.AreEqual(65, level8.MinimumColumn); Assert.AreEqual(65, level8.MinimumRow); Assert.AreEqual(128, level8.MaximumColumn); Assert.AreEqual(128, level8.MaximumRow); var level9 = level8.Children.First(); Assert.NotNull(level9.Ranges); Assert.AreEqual(range, level9.Ranges.Single()); } }