public NeighborhoodEnumerator([NotNull] BoxTree searchingTree,
                                          [NotNull] BoxTree neighbourTree,
                                          double searchDistance, [CanBeNull] IBox common)
            {
                _searchingTree  = searchingTree;
                _neighbourTree  = neighbourTree;
                _searchDistance = searchDistance;

                Pnt min = Pnt.Create(_searchingTree._unitBox.Min);
                Pnt max = Pnt.Create(_searchingTree._unitBox.Max);

                for (var i = 0; i < min.Dimension; i++)
                {
                    min[i] = Math.Max(min[i], _neighbourTree._unitBox.Min[i]);
                    if (common != null)
                    {
                        min[i] = Math.Max(min[i], common.Min[i]);
                    }

                    min[i] -= searchDistance;

                    max[i] = Math.Min(max[i], _neighbourTree._unitBox.Max[i]);
                    if (common != null)
                    {
                        max[i] = Math.Min(max[i], common.Max[i]);
                    }

                    max[i] += searchDistance;
                }

                _common = new Box(min, max);

                Reset();
            }
Beispiel #2
0
 internal TileEntryEnumerable(BoxTree tree, BoxTile startTile, Box startBox,
                              IBox search)
 {
     Tree      = tree;
     StartTile = startTile;
     StartBox  = startBox;
     Search    = search;
 }
 public NeighborhoodEnumerable([NotNull] BoxTree <T> searchingTree,
                               [NotNull] BoxTree <U> neighbourTree,
                               double searchDistance, [CanBeNull] IBox common)
 {
     _searchingTree  = searchingTree;
     _neighbourTree  = neighbourTree;
     _searchDistance = searchDistance;
     _common         = common;
 }
Beispiel #4
0
 internal TileEntryEnumerator(BoxTree tree, BoxTile startTile, Box startBox,
                              IBox search)
 {
     _tree      = tree;
     _startTile = startTile;
     _startBox  = startBox;
     _searchBox = search;
     Reset();
 }
Beispiel #5
0
            public static xTileHandler CreateMain([NotNull] BoxTree tree)
            {
                var created = new xTileHandler
                {
                    _tile = tree._mainTile,
                    _box  = tree._mainBox.Clone()
                };

                return(created);
            }
Beispiel #6
0
        public static BoxTree <T> CreateBoxTree <T>([NotNull] IBox initialBox,
                                                    int maxElementsPerTile = 64,
                                                    bool dynamic           = true)
        {
            Assert.ArgumentNotNull(initialBox, nameof(initialBox));

            var result = new BoxTree <T>(initialBox.Dimension, maxElementsPerTile, dynamic);

            result.InitSize(new IGmtry[] { initialBox });

            return(result);
        }
Beispiel #7
0
            internal bool VerifyPointTile(BoxTree tree)
            {
                IBox extent = tree.TileExtent(this);

                foreach (TileEntry entry in EnumElems())
                {
                    if (extent.Contains(entry.Box) == false)
                    {
                        return(false);
                    }
                }

                return(true);
            }
                private double[] GetSearchExtent([NotNull] BoxTree tree, [NotNull] BoxTile tile,
                                                 double search, [NotNull] IBox commonBox,
                                                 out int splitDim)
                {
                    if (tile.Parent == null)
                    {
                        splitDim = -1;
                        return(null);
                    }

                    splitDim = tile.Parent.SplitDimension;
                    double[] extent = tree.GetExtent(tile, splitDim);
                    extent[0] = Math.Max(extent[0] - search, commonBox.Min[splitDim]);
                    extent[1] = Math.Min(extent[1] + search, commonBox.Max[splitDim]);

                    return(extent);
                }
Beispiel #9
0
        public static BoxTreeSearcher <int> CreateSpatialSearcher(Linestring linestring)
        {
            BoxTree <int> boxTree = BoxTreeUtils.CreateBoxTree <int>(
                linestring.XMin, linestring.YMin, linestring.XMax, linestring.YMax,
                maxElementsPerTile: 8);

            var i = 0;

            foreach (Line3D line in linestring.Segments)
            {
                Box box2D = GeomUtils.CreateBox(line.Extent.Min.X, line.Extent.Min.Y,
                                                line.Extent.Max.X, line.Extent.Max.Y);
                boxTree.Add(box2D, i++);
            }

            return(new BoxTreeSearcher <int>(boxTree));
        }
Beispiel #10
0
        public IEnumerable <T> Search(
            double xMin, double yMin, double xMax, double yMax,
            double tolerance, Predicate <T> predicate = null)
        {
            // Avoid array instantiation for better performance:
            _searchBox.Min.X = xMin - tolerance;
            _searchBox.Min.Y = yMin - tolerance;
            _searchBox.Max.X = xMax + tolerance;
            _searchBox.Max.Y = yMax + tolerance;

            BoxTree <T> .TileEntryEnumerable tileEntries = _boxTree.Search(_searchBox);

            foreach (BoxTree <T> .TileEntry tileEntry in tileEntries)
            {
                if (predicate == null || predicate(tileEntry.Value))
                {
                    yield return(tileEntry.Value);
                }
            }
        }
 public EntryEnumerable(BoxTree tree, BoxTile tile)
 {
     _tree    = tree;
     _tile    = tile;
     _tileBox = tree.GetBox(tile);
 }
 public ElemsEnumerable([NotNull] BoxTree tree, BoxTile tile)
 {
     _tile    = tile;
     _tileBox = tree.GetBox(tile);
 }
Beispiel #13
0
 public BoxTreeSearcher(BoxTree <T> boxTree)
 {
     _boxTree   = boxTree;
     _searchBox = new Box(new Pnt2D(), new Pnt2D());
 }
Beispiel #14
0
 public TileEntryEnumerable(BoxTree tree, IBox search)
     : this(tree, tree.MainTile, tree.MainBox, search)
 {
 }
Beispiel #15
0
 public TileEnumerator([NotNull] BoxTree tree, IBox searchBox)
     : this(tree._mainTile, tree._mainBox, searchBox)
 {
 }
Beispiel #16
0
 public TileEntryEnumerator(BoxTree tree, IBox search)
     : this(tree, tree._mainTile, tree._mainBox, search)
 {
 }