示例#1
0
        public IEnumerable <VertexData> Vertices()
        {
            VertexData lastPosition = new VertexData();

            IEnumerator <VertexData> vertexDataEnumerator = VertexSource.Vertices().GetEnumerator();

            while (vertexDataEnumerator.MoveNext())
            {
                VertexData vertexData = vertexDataEnumerator.Current;
                switch (vertexData.command)
                {
                case ShapePath.FlagsAndCommand.CommandCurve3:
                {
                    vertexDataEnumerator.MoveNext();
                    VertexData vertexDataEnd = vertexDataEnumerator.Current;
                    m_curve3.init(lastPosition.position.x, lastPosition.position.y, vertexData.position.x, vertexData.position.y, vertexDataEnd.position.x, vertexDataEnd.position.y);
                    IEnumerator <VertexData> curveIterator = m_curve3.Vertices().GetEnumerator();
                    curveIterator.MoveNext();                                     // First call returns path_cmd_move_to
                    do
                    {
                        curveIterator.MoveNext();
                        if (ShapePath.is_stop(curveIterator.Current.command))
                        {
                            break;
                        }
                        vertexData = new VertexData(ShapePath.FlagsAndCommand.CommandLineTo, curveIterator.Current.position);
                        yield return(vertexData);

                        lastPosition = vertexData;
                    } while (!ShapePath.is_stop(curveIterator.Current.command));
                }
                break;

                case ShapePath.FlagsAndCommand.CommandCurve4:
                {
                    vertexDataEnumerator.MoveNext();
                    VertexData vertexDataControl = vertexDataEnumerator.Current;
                    vertexDataEnumerator.MoveNext();
                    VertexData vertexDataEnd = vertexDataEnumerator.Current;
                    m_curve4.init(lastPosition.position.x, lastPosition.position.y, vertexData.position.x, vertexData.position.y, vertexDataControl.position.x, vertexDataControl.position.y, vertexDataEnd.position.x, vertexDataEnd.position.y);
                    IEnumerator <VertexData> curveIterator = m_curve4.Vertices().GetEnumerator();
                    curveIterator.MoveNext();                                     // First call returns path_cmd_move_to
                    while (!ShapePath.is_stop(vertexData.command))
                    {
                        curveIterator.MoveNext();
                        if (ShapePath.is_stop(curveIterator.Current.command))
                        {
                            break;
                        }
                        vertexData = new VertexData(ShapePath.FlagsAndCommand.CommandLineTo, curveIterator.Current.position);
                        yield return(vertexData);

                        lastPosition = vertexData;
                    }
                }
                break;

                default:
                    yield return(vertexData);

                    lastPosition = vertexData;
                    break;
                }
            }
        }