1

私は動的に生成されたパスを持っています。そのデータは で構成さPathGeometryれていPathFigureます。これPathFigureには、一連の線分が含まれています。したがって、パス全体は連続しており、直線で構成されています。このパスを多くの異なる小さなパスに分割するための良いアプローチは何ですか? 興味があれば、これを行う必要がある理由は、「パスがフェードアウトする」効果を達成するためであり、これを行う別の方法はないようです。

そこで、パスを取り、それを多くの異なる小さなパスに分割し、最初の小さなパスの不透明度を 0 に設定し、最後の小さなパスの不透明度を 1 に設定し、その間のすべてを補間します。また、これを使用してパスのテールを小さくし、パスの先頭まで補間することができます。これは大きいです。多くの用途があります - 私のアプリケーションでこれを行う方法が必要です。

4

2 に答える 2

2

Charles PetzoldによるGradientPathを参照してください。これは、説明と同様に実装されており、パスの幅を変更するためのサポートを追加する場合は、簡単に調整できるはずです。

于 2011-02-04T03:21:56.077 に答える
0

パスを分割するのではなく、パスのストロークの色に線形グラデーション ブラシを使用するだけで、パスのフェードと同じ効果を実現できるようです。たとえば、下のブラシをパスに設定してみてください。

Xaml の場合:

        <Path.Stroke>
            <LinearGradientBrush>
                <GradientStop Color="#00000000" Offset="0.0"/>
                <GradientStop Color="#FF000000" Offset="1.0"/>
            </LinearGradientBrush>
        </Path.Stroke>

C# の場合:

        var brush = new LinearGradientBrush();
        brush.GradientStops.Add(new GradientStop(new Color { A = 0, R = 0, B = 0, G = 0 }, 0.0));
        brush.GradientStops.Add(new GradientStop(new Color { A = 255, R = 0, B = 0, G = 0 }, 1.0));
        this._path.Stroke = brush;

また、元の質問に対処するために、上記が探しているものであるかどうかにかかわらず、パスを分割するオプションがいくつかあります。Data は PathFigures で構成される PathGeometry であることがわかっているので、単純にプログラムでセグメントにアクセスし、さらに Path オブジェクトを作成できます。レイアウトについては、各パス自体が新しい UIElement であり、その親がそれを測定して配置する必要があるため、すべての新しいパスを同じ相対位置に保持するレイアウト パネルに配置する必要があります。

これにはいくつかの方法があると思いますが、それらを完全に元に戻す方法の 1 つは、Canvas.Top と Canvas.Left (または方法によっては .Right、.Bottom) を使用してキャンバスに配置することです。それらをレイアウトしている) パス内の各セグメントの開始点の相対オフセットに設定し、新しいパスの新しい左上隅に相対的になるようにポイントを調整します。たとえば、これ

    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,10"/>
                    <LineSegment Point="20,60"/>
                    <LineSegment Point="70,60"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>

のようなものになることができます

    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,10"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" Canvas.Top="10" Canvas.Left="10">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,50"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" Canvas.Top="60" Canvas.Left="20">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="50,0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>

質問から XAML でこれを行っていないように聞こえるので、C# から PathGeometry オブジェクトを指定して複数のパスを作成することで、これを行う方法は明らかです。そうでない場合はお知らせください。詳しく説明できます。

于 2011-02-04T02:54:24.083 に答える