2011年10月5日水曜日

wpf : PathのDataのミニ言語をcsで記述

wpfのPathはさまざまな線を描けるようになっています。 その分扱うデータも複雑です。 前の投稿でもPolyBezierSegment、PathFigure、PathSegmentCollection、PathGeometryなどを組み合わせてやっと一連のベジェ曲線を描くことができました。

xamlで描くときは

<Path Stroke="Black" Data="M 200.0,200.0 C 100,200 200,400 300,100" />

のようにDataを書くだけで良いんですよね。 Data内の数字や記号の並びのことを、MSDNライブラリでは「ミニ言語」と表現されていました。

C#のコード上でこのミニ言語からDataを作る方法、なんか在るはずなのに前の投稿のネタを書いたときには見つかりませんでした。

で、前のネタを書いた後に検索したらアッサリ発見。 なぜ?

やり方は、Geometry.Parseを使うだけ。 xamlでこんなPathを書いた場合、

<Path Name="path" Stroke="Black"/>

C#ではこういうコードを書きます。

path.Data = Geometry.Parse("M 200.0,200.0 C 100,200 200,400 300,100");

もうちょっと早く見つけられたら前のサンプルコードも短く書けたのに。

ちなみに、次の資料を見るとPathGeometryとStreamGeometryの違いが書かれています。

使い分けたい場合はGeometry.ParseではなくPathGeometry.ParseやStreamGeometry.Parseを使った方がいいのかもしれません。 (ホントにその書き分けでいいのかは未確認)