コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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());
            }
        }