R3.Geometry.Tiling.ReflectRecursive C# (CSharp) Метод

ReflectRecursive() приватный Метод

private ReflectRecursive ( List tiles, bool>.Dictionary completed ) : void
tiles List
completed bool>.Dictionary
Результат void
        private void ReflectRecursive( List<Tile> tiles, Dictionary<Vector3D,bool> completed )
        {
            // Breadth first recursion.

            if( 0 == tiles.Count )
                return;

            List<Tile> reflected = new List<Tile>();

            foreach( Tile tile in tiles )
            {
                // We don't want to reflect tiles living out at infinity.
                // Strange things happen, and we can still get the full tiling without doing this.
                if( tile.HasPointsProjectedToInfinity )
                    continue;

                // Are we done?
                if( m_tiles.Count >= this.TilingConfig.MaxTiles )
                    return;

                for( int s=0; s<tile.Boundary.NumSides; s++ )
                {
                    Segment seg = tile.Boundary.Segments[s];
                    if( !NewTileAfterReflect( tile, seg, completed ) )
                        continue;

                    Tile newBase = tile.Clone();
                    newBase.Reflect( seg );
                    if( TransformAndAdd( newBase ) )
                    {
                        Debug.Assert( !completed.ContainsKey( newBase.Boundary.Center ) );
                        reflected.Add( newBase );
                        completed[newBase.Boundary.Center] = true;
                    }
                }
            }

            ReflectRecursive( reflected, completed );
        }