パスについては、「 WPF での図形と基本描画の概要 」と「 ジオメトリの概要」で説明しますが、このトピックでは、Extensible Application Markup Language (XAML) を使用してパス ジオメトリをよりコンパクトに指定するために使用できる強力で複雑なミニ言語について詳しく説明します。
[前提条件]
このトピックを理解するには、 Geometry オブジェクトの基本的な機能について理解している必要があります。 詳細については、「ジオメトリの概要」を参照してください。
StreamGeometry と PathFigureCollection Mini-Languages
WPF には、幾何学的パスを記述するためのミニ言語を提供する 2 つのクラス ( StreamGeometry と PathFigureCollection) が用意されています。
StreamGeometryのGeometryプロパティやClip要素のUIElementプロパティなど、Data型のプロパティを設定する場合は、Pathミニ言語を使用します。 次の例では、属性構文を使用して StreamGeometryを作成します。
<Path Stroke="Black" Fill="Gray" Data="M 10,100 C 10,300 300,-200 300,100" />
PathFigureCollectionのFigures プロパティを設定するときは、PathGeometryミニ言語を使用します。 次の例では、属性構文を使用して、PathFigureCollectionをPathGeometryのために作成します。
<Path Stroke="Black" Fill="Gray"> <Path.Data> <PathGeometry Figures="M 10,100 C 10,300 300,-200 300,100" /> </Path.Data> </Path>
前の例からわかるように、2 つのミニ言語は非常に似ています。 PathGeometryを使用できる状況では常にStreamGeometryを使用できるため、どれを使用する必要がありますか? 作成後にパスを変更する必要がない場合は StreamGeometry を使用します。パスを変更する必要がある場合は PathGeometry を使用します。
PathGeometryオブジェクトとStreamGeometryオブジェクトの違いの詳細については、「ジオメトリの概要」を参照してください。
空白に関する注意事項
簡潔にするために、以降の構文セクションには 1 つのスペースが表示されますが、1 つのスペースが表示されている場所でも複数のスペースを使用できます。
実際には、2 つの数値をコンマまたは空白で区切る必要はありませんが、結果の文字列が明確な場合にのみ行うことができます。 たとえば、 2..3
は実際には "2" と "3" の 2 つの数値です。 同様に、 2-3
は "2" と "-3" です。 コマンドの前後にスペースは必要ありません。
構文
StreamGeometryの拡張アプリケーション マークアップ言語 (XAML) 属性の使用構文は、省略可能なFillRule値と 1 つ以上の図の説明で構成されます。
StreamGeometry XAML 属性の使用法 |
---|
<
objectproperty=" [ fillRule ] figureDescription [ figureDescription ]* " ... /> |
PathFigureCollectionの拡張アプリケーション マークアップ言語 (XAML) 属性の使用構文は、1 つ以上の図の説明で構成されます。
PathFigureCollection XAML 属性の使用法 |
---|
<
objectproperty=" figureDescription [ figureDescription ]* " ... /> |
任期 | 説明 |
---|---|
fillRule | System.Windows.Media.FillRule StreamGeometryがEvenOddを使用するか、NonzeroFillRuleを使用するかを指定します。 - F0 は、 EvenOdd 塗りつぶしルールを指定します。- F1 は、 Nonzero 塗りつぶしルールを指定します。このコマンドを省略すると、サブパスは既定の動作 ( EvenOdd) を使用します。 このコマンドを指定する場合は、最初に配置する必要があります。 |
figureDescription | 移動コマンド、描画コマンド、およびオプションの close コマンドで構成される図。moveCommand
drawCommands
[
closeCommand
]
|
moveCommand | 図の始点を指定する移動コマンド。 「 移動コマンド 」セクションを参照してください。 |
drawCommands | 図の内容を記述する 1 つ以上の描画コマンド。 「 描画コマンド 」セクションを参照してください。 |
クローズコマンド | オプションの閉じるコマンドで図を閉じます。 「 コマンドを閉じる」 セクションを参照してください。 |
ムーブ命令
新しい図形の始点を指定します。
構文 |
---|
M
を開始地点とし、-又は- m
を開始地点とし、 |
任期 | 説明 |
---|---|
startPoint を |
System.Windows.Point 新しい図形の開始点。 |
大文字の M
は、 startPoint
が絶対値であることを示します。小文字の m
は、 startPoint
が前のポイントへのオフセットであることを示します。存在しない場合は (0,0)。 移動コマンドの後に複数の点を一覧表示すると、線コマンドを指定した場合でも、その点に線が描画されます。
描画コマンド
描画コマンドは、複数の図形コマンドで構成できます。 次の図形コマンドを使用できます。線、水平線、垂直線、3 次ベジエ曲線、2 次ベジエ曲線、滑らかな 3 次ベジエ曲線、滑らかな 2 次ベジエ曲線、楕円円弧。
各コマンドは、大文字または小文字を使用して入力します。大文字は絶対値を示し、小文字は相対値を示します。そのセグメントの制御ポイントは、前の例の終点を基準にしています。
ヒント
同じ種類の複数のコマンドを順番に入力する場合は、重複するコマンド エントリを省略できます。たとえば、 L 100,200 300,400
は L 100,200 L 300,400
と同じです。
ラインコマンド
現在の点と指定した終点の間に直線を作成します。
l 20 30
および L 20,30
は、有効な 行 コマンドの例です。
構文 |
---|
endPoint を -又は- endPoint |
任期 | 説明 |
---|---|
で endPoint を設定する | System.Windows.Point 線の終点。 |
大文字の L
は、 endPoint
が絶対値であることを示します。小文字の l
は、 endPoint
が前のポイントへのオフセットであることを示します。存在しない場合は (0,0)。
水平線コマンド
現在の点と指定した x 座標の間に水平線を作成します。
H 90
は、有効な水平線コマンドの例です。
構文 |
---|
H
x-又は- h
x |
任期 | 説明 |
---|---|
x | System.Double 線の終点の x 座標。 |
大文字の H
は、 x
が絶対値であることを示します。小文字の h
は、 x
が前のポイントへのオフセットであることを示します。存在しない場合は (0,0)。
垂直線コマンド
現在の点と指定した y 座標の間に垂直線を作成します。
v 90
は、有効な垂直線コマンドの例です。
構文 |
---|
V
y-又は- v
y |
任期 | 説明 |
---|---|
y | System.Double 線の終点の y 座標。 |
大文字の V
は、 y
が絶対値であることを示します。小文字の v
は、 y
が前のポイントへのオフセットであることを示します。存在しない場合は (0,0)。
[3 次ベジエ曲線] コマンド
指定した 2 つのコントロール ポイント (controlPoint
1 と controlPoint
2) を使用して、現在のポイントと指定した終点の間に 3 次ベジエ曲線を作成します。
C 100,200 200,400 300,200
は、有効な曲線コマンドの例です。
構文 |
---|
C
controlPoint 1controlPoint 2endPoint -又は- c
controlPoint 1controlPoint 2endPoint |
任期 | 説明 |
---|---|
controlPoint 1 |
System.Windows.Point 曲線の最初の制御点。曲線の開始接線を決定します。 |
controlPoint 2 |
System.Windows.Point 曲線の終了接線を決定する曲線の 2 番目の制御点。 |
endPoint |
System.Windows.Point 曲線が描画されるポイント。 |
二次ベジエ曲線コマンド
指定したコントロール ポイント (controlPoint
) を使用して、現在のポイントと指定した終点の間に 2 次ベジエ曲線を作成します。
q 100,200 300,200
は、有効な 2 次ベジエ曲線コマンドの例です。
構文 |
---|
Q
controlPoint
endPoint
-又は- q
controlPoint
endPoint
|
任期 | 説明 |
---|---|
controlPoint |
System.Windows.Point 曲線の始点と終点の接線を決定する曲線の制御点。 |
endPoint |
System.Windows.Point 曲線が描画されるポイント。 |
スムーズな3次のベジェ曲線コマンド
現在の点と指定した終点の間に 3 次ベジエ曲線を作成します。 1 番目の制御ポイントは、現在のポイントに対する前のコマンドの 2 番目の制御ポイントの反射であると見なされます。 前のコマンドがない場合、または前のコマンドが 3 次ベジエ曲線コマンドまたはスムーズ 3 次ベジエ曲線コマンドでない場合は、最初の制御点が現在の点と一致していると仮定します。 2 番目の制御点(曲線の終点の制御点)は、 controlPoint
2 で指定されます。 たとえば、 S 100,200 200,300
は、有効なスムーズな 3 次ベジエ曲線コマンドです。
構文 |
---|
S
controlPoint 2endPoint -又は- s
controlPoint 2endPoint |
任期 | 説明 |
---|---|
controlPoint 2 |
System.Windows.Point 曲線の終了接線を決定する曲線の制御点。 |
endPoint |
System.Windows.Point 曲線が描画されるポイント。 |
スムーズ 2次ベジエ曲線のコマンド
現在の点と指定した終点の間に 2 次ベジエ曲線を作成します。 コントロール ポイントは、現在のポイントに対する前のコマンドの制御ポイントのリフレクションと見なされます。 前のコマンドがない場合、または前のコマンドが 2 次ベジエ曲線コマンドまたはスムーズ 2 次ベジエ曲線コマンドでない場合、制御点は現在の点と一致します。
構文 |
---|
T
endPoint
-又は- t
endPoint
|
任期 | 説明 |
---|---|
endPoint |
System.Windows.Point 曲線が描画されるポイント。 |
楕円円弧コマンド
現在の点と指定した終点の間に楕円円弧を作成します。
構文 |
---|
A
size
rotationAngle
isLargeArcFlag
sweepDirectionFlag
endPoint
-又は- a
size
rotationAngle
isLargeArcFlag
sweepDirectionFlag
endPoint
|
任期 | 説明 |
---|---|
size |
System.Windows.Size 円弧の x 半径と y 半径。 |
rotationAngle |
System.Double 楕円の回転角度。 |
isLargeArcFlag |
円弧の角度を 180 度以上にする必要がある場合は、1 に設定します。それ以外の場合は 0 に設定します。 |
sweepDirectionFlag |
円弧が正の角度の方向に描画される場合は 1 に設定します。それ以外の場合は 0 に設定します。 |
endPoint |
System.Windows.Point 円弧が描画されるポイント。 |
閉じるコマンド
現在の図形を終了し、現在のポイントを図形の始点に接続する線を作成します。 このコマンドは、図の最後のセグメントと最初のセグメントの間に線結合 (コーナー) を作成します。
構文 |
---|
Z -又は- z |
ポイント構文
(0,0) が左上隅である点の x 座標と y 座標を記述します。
構文 |
---|
x
,
y
-又は- x
y
|
任期 | 説明 |
---|---|
x |
System.Double ポイントの x 座標。 |
y |
System.Double 点の y 座標。 |
特殊値
標準の数値の代わりに、次の特殊な値を使用することもできます。 これらの値では、大文字と小文字が区別されます。
Infinity Double.PositiveInfinityを表します。
-Infinity Double.NegativeInfinityを表します。
NaN は Double.NaNを表します。
科学的表記を使用することもできます。 たとえば、+1.e17
は有効な値です。
こちらも参照ください
.NET Desktop feedback