Xamarin.Forms 図形: パス マークアップ構文
Xamarin.Forms パス マークアップ構文を使用すると、XAML でパス ジオメトリをコンパクトに指定できます。 構文は、Path.Data
プロパティの文字列値として指定されます。
<Path Stroke="Black"
Data="M13.908992,16.207977 L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983Z" />
パス マークアップ構文は、オプションの FillRule
値と 1 つ以上の図形の記述で構成されています。 この構文は次のように表すことができます: <Path Data="
[fillRule] figureDescription [figureDescription] * " ... />
この構文では:
- fillRule は省略可能な
Xamarin.Forms.Shapes.FillRule
で、ジオメトリでEvenOdd
を使用するか、Nonzero
FillRule
を使用するかを指定します。F0
はEvenOdd
塗りつぶしルールを指定するために使用されるのに対して、F1
はNonzero
塗りつぶしルールを指定するために使用されます。 塗りつぶしルールの詳細については、「Xamarin.Forms 図形: 塗りつぶしルール」を参照してください。 - figureDescription は、移動コマンド、描画コマンド、オプションの終了コマンドで構成される図形を表します。 移動コマンドは、図形の開始点を指定します。 描画コマンドは図形の内容を記述し、オプションの終了コマンドは図形を閉じます。
上の例では、パス マークアップ構文では、移動コマンド (M
) で開始点を指定し、直線コマンド (L
) で一連の直線を指定し、終了コマンド (Z
) でパスを閉じます。
パス マークアップ構文では、コマンドの前後に空白は必要ありません。 さらに、文字列があいまいな場合以外は、2 つの数値をコンマまたは空白で区切る必要はありません。
ヒント
パス マークアップ構文は、スケーラブル ベクター グラフィックス (SVG) 画像パス定義と互換性があるので、SVG 形式からグラフィックスを移植する場合に便利です。
パス マークアップ構文は XAML での使用を目的としていますが、PathGeometryConverter
クラスの ConvertFromInvariantString
メソッドを呼び出して、コードで Geometry
オブジェクトに変換できます。
Geometry pathData = (Geometry)new PathGeometryConverter().ConvertFromInvariantString("M13.908992,16.207977 L32.000049,16.207977 32.000049,31.999985 13.908992,30.109983Z");
移動コマンド
移動コマンドは、新しい図形の開始点を指定します。 このコマンドの構文は次のとおりです: M
startPoint または m
startPoint。
この構文では、startPoint は、新しい図形の開始点を指定する Point
構造体です。 移動コマンドの後ろに複数の点を指定した場合は、これらの点を結ぶ線が描画されます。
M 10,10
は、有効な移動コマンドの例です。
描画コマンド
描画コマンドは、さまざまな図形コマンドで構成できます。 次の移動コマンドを使用できます。
- 直線 (
L
またはl
) - 水平線 (
H
またはh
) - 垂直線 (
V
またはv
) - 楕円弧 (
A
またはa
) - 三次ベジエ曲線 (
C
またはc
) - 二次ベジエ曲線 (
Q
またはq
)。 - スムーズ三次ベジエ曲線 (
S
またはs
) - スムーズ二次ベジエ曲線 (
T
またはt
)
各描画コマンドは、大文字と小文字を区別しない文字で指定されます。 同じ種類の複数のコマンドを続けて入力する場合は、重複するコマンドの入力を省略できます。 たとえば、L 100,200 300,400
は L 100,200 L 300,400
と同等です。
直線コマンド
直線コマンドは、現在の点と指定された終点の間に直線を作成します。 このコマンドの構文は次のとおりです: L
endPoint または l
endPoint。
この構文では、endPoint は、直線の終点を表す Point
です。
L 20,30
と L 20 30
は有効な直線コマンドの例です。
直線を PathGeometry
オブジェクトとして作成する方法については、「LineSegment を作成する」をご覧ください。
水平線コマンド
水平線コマンドは、現在の点と指定された x 座標の間に水平線を作成します。 このコマンドの構文は次のとおりです: H
x または h
x。
この構文では、x は線の終点の x 座標を表す double
です。
H 90
は、有効な水平線コマンドの例です。
垂直線コマンド
垂直線コマンドは、現在の点と指定した y 座標の間に垂直線を作成します。 このコマンドの構文は次のとおりです: V
y または v
y。
この構文では、y は線の終点の y 座標を表す double
です。
V 90
は、有効な垂直線コマンドの例です。
楕円円弧コマンド
楕円円弧コマンドは、現在の点と指定された終点の間に楕円の円弧を作成します。 このコマンドの構文は次のとおりです: A
size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint または a
size rotationAngle isLargeArcFlag sweepDirectionFlag endPoint。
この構文では:
size
は、円弧の x 半径と y 半径を表すSize
です。rotationAngle
はdouble
で、楕円の回転を度数で表します。isLargeArcFlag
は、弧の角度が 180 度以上であれば 1 に、そうでなければ 0 に設定します。sweepDirectionFlag
は、円弧が正角方向に描かれる場合は 1 に、そうでない場合は 0 に設定します。endPoint
は、円弧の描画先となるPoint
です。
A 150,150 0 1,0 150,-150
は、有効な楕円円弧コマンドの例です。
楕円円弧を PathGeometry
オブジェクトとして作成する方法については、「ArcSegment を作成する」を参照してください。
3 次ベジエ曲線コマンド
3 次ベジェ曲線コマンドは、指定された 2 つの制御点を用いて、現在の点と指定された終点との間に 3 次ベジェ曲線を作成します。 このコマンドの構文は次のとおりです: C
controlPoint1 controlPoint2 endPoint または c
controlPoint1 controlPoint2 endPoint。
この構文では:
- controlPoint1 は、曲線の最初の制御点を表す
Point
で、曲線の開始接線を決定します。 - controlPoint2 は、曲線の 2 番目の制御点を表す
Point
で、曲線の終了接線を決定します。 - endPoint は、曲線の描画先となる
Point
を表します。
C 100,200 200,400 300,200
は、有効な 3 次ベジエ曲線コマンドの例です。
3 次ベジエ曲線を PathGeometry
オブジェクトとして作成する方法については、「BezierSegment を作成する」を参照してください。
2 次ベジエ曲線コマンド
2 次ベジェ曲線コマンドは、指定された制御点を用いて、現在の点と指定された終点との間に 2 次ベジェ曲線を作成します。 このコマンドの構文は次のとおりです: Q
controlPoint endPoint または q
controlPoint endPoint。
この構文では:
Q 100,200 300,200
は、有効な 2 次ベジエ曲線コマンドの例です。
2 次ベジエ曲線を PathGeometry
オブジェクトとして作成する方法については、「QuadraticBezierSegment を作成する」を参照してください。
スムーズ 3 次ベジエ曲線コマンド
スムーズ 3 次ベジェ曲線コマンドは、指定された制御点を使って、現在の点と指定された終点の間に 3 次ベジェ曲線を作成します。 このコマンドの構文は次のとおりです: S
controlPoint2 endPoint または s
controlPoint2 endPoint。
この構文では:
1 つ目の制御点は、前のコマンドの 2 番目の制御点の、現在の点からの相対的な反射であると仮定されます。 前のコマンドが存在しない場合、または前のコマンドが 3 次ベジエ曲線コマンドまたはスムーズ 3 次ベジエ曲線コマンドでなかった場合、1 つ目の制御点は、現在の点と一致するとみなされます。
S 100,200 200,300
は、有効なスムース 3 次ベジエ曲線コマンドの例です。
スムーズ 2 次ベジエ曲線コマンド
スムース 2 次ベジェ曲線コマンドは、制御点を用いて、現在の点と指定された終点との間に 2 次ベジェ曲線を作成します。 このコマンドの構文は次のとおりです: T
endPoint または t
endPoint。
この構文では、endPoint は曲線の描画先を表す Point
です。
制御点は、現在の点に対する前のコマンドの制御点のリフレクションと見なされます。 前のコマンドが存在しない場合、または前のコマンドが 2 次ベジエ曲線コマンドまたはスムーズ 2 次ベジエ曲線コマンドでなかった場合、制御点は、現在の点と一致するとみなされます。
T 100,30
は、有効なスムーズ 2 次 3 次ベジエ曲線コマンドの例です。
終了コマンド
終了コマンドは、現在の図形を終了し、現在の点と図の始点を結ぶ線分を作成します。 したがって、このコマンドは、図形の最初のセグメントと最後のセグメントのを結合する線分を作成します。
Z
コマンドの正しい構文は z
です。
その他の値
標準的な数値ではなく、大文字と小文字が区別される次の特殊な値を使用することもできます。
Infinity
はdouble.PositiveInfinity
を表します。-Infinity
はdouble.NegativeInfinity
を表します。NaN
はdouble.NaN
を表します。
さらに、大文字と小文字を区別しない科学的表記を使用することもできます。 したがって、+1.e17
は有効な値です。