示例#1
0
            public bool MoveNext()
            {
                while (true)
                {
                    while (_entryEnum == null || !_entryEnum.MoveNext())
                    {
                        if (!_tileEnum.MoveNext())
                        {
                            return(false);
                        }

                        BoxTile tile = Assert.NotNull(_tileEnum.Current);

                        _entryEnum = _tree.GetTileEnumerator(this, tile.EnumElems());
                    }

                    if (_searchBox == null)
                    {
                        return(true);
                    }

                    if (Assert.NotNull(Current).Box.Intersects(_searchBox))
                    {
                        return(true);
                    }
                }
            }
                    public IEnumerable <TileEntry> GetEntries(IBox box)
                    {
                        if (!box.Intersects(_tileBox))
                        {
                            yield break;
                        }

                        foreach (TileEntry entry in _tile.EnumElems())
                        {
                            if (entry.Box.Intersects(box))
                            {
                                yield return(entry);
                            }
                        }
                    }
                internal IEnumerable <Neighborhood> GetNeighborhoods(double searchDistance)
                {
                    if (_searchingTile.ElemsCount <= 0)
                    {
                        yield break;
                    }

                    if (!HasNeighbourTiles())
                    {
                        yield break;
                    }

                    List <INeighbourEntryEnumerable> neighbourEntryEnumerators =
                        GetNeighbourEntryEnumerators();

                    if (neighbourEntryEnumerators == null)
                    {
                        yield break;
                    }

                    foreach (TileEntry searchEntry in _searchingTile.EnumElems())
                    {
                        IBox search =
                            GetSearchBox(searchEntry.Box, searchDistance, _master._common);
                        if (search == null)
                        {
                            continue;
                        }

                        yield return(new Neighborhood
                        {
                            Entry = searchEntry,
                            Neighbours =
                                GetNeighbours(search, neighbourEntryEnumerators)
                        });
                    }
                }