fCraft.Drawing.Fill3DDrawOperation.BlockEnumerator C# (CSharp) Method

BlockEnumerator() private method

private BlockEnumerator ( ) : IEnumerable
return IEnumerable
        IEnumerable<Vector3I> BlockEnumerator() {
            Stack<Vector3I> stack = new Stack<Vector3I>();
            stack.Push( Origin );

            while( stack.Count > 0 ) {
                Vector3I coords = stack.Pop();
                blocksProcessed++;
                if(CanPlace( coords )){
                    yield return coords;
                    if( coords.X - 1 >= Bounds.XMin ) {
                        stack.Push( new Vector3I( coords.X - 1, coords.Y, coords.Z ) );
                    }
                    if( coords.X + 1 <= Bounds.XMax ) {
                        stack.Push( new Vector3I( coords.X + 1, coords.Y, coords.Z ) );
                    }
                    if( coords.Y - 1 >= Bounds.YMin ) {
                        stack.Push( new Vector3I( coords.X, coords.Y - 1, coords.Z ) );
                    }
                    if( coords.Y + 1 <= Bounds.YMax ) {
                        stack.Push( new Vector3I( coords.X, coords.Y + 1, coords.Z ) );
                    }
                    if( coords.Z - 1 >= Bounds.ZMin ) {
                        stack.Push( new Vector3I( coords.X, coords.Y, coords.Z - 1 ) );
                    }
                    if( coords.Z + 1 <= Bounds.ZMax ) {
                        stack.Push( new Vector3I( coords.X, coords.Y, coords.Z + 1 ) );
                    }
                }
            }
        }
    }