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(); }
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; }
internal TileEntryEnumerator(BoxTree tree, BoxTile startTile, Box startBox, IBox search) { _tree = tree; _startTile = startTile; _startBox = startBox; _searchBox = search; Reset(); }
public static xTileHandler CreateMain([NotNull] BoxTree tree) { var created = new xTileHandler { _tile = tree._mainTile, _box = tree._mainBox.Clone() }; return(created); }
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); }
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); }
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)); }
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); }
public BoxTreeSearcher(BoxTree <T> boxTree) { _boxTree = boxTree; _searchBox = new Box(new Pnt2D(), new Pnt2D()); }
public TileEntryEnumerable(BoxTree tree, IBox search) : this(tree, tree.MainTile, tree.MainBox, search) { }
public TileEnumerator([NotNull] BoxTree tree, IBox searchBox) : this(tree._mainTile, tree._mainBox, searchBox) { }
public TileEntryEnumerator(BoxTree tree, IBox search) : this(tree, tree._mainTile, tree._mainBox, search) { }