2

少しSVGパスパーサー/ノーマライザーを作成しようとしていますが、仕様に関する最後の問題が発生しました:

私が理解している限り、ほとんどのコマンドは追加の暗黙的なコマンドをサポートしており、それらがサポートしていて相対モードになっている場合、「現在のポイント」は最後の暗黙的なコマンドの後で更新されます。それらの間ではありません。

しかし、「moveTo」コマンドは特別なものであり、暗黙的な「lineTo」コマンドを許可します。「lineTo」コマンド自体は、最後の暗黙的なコマンドの後にのみ「現在のポイント」を更新します。

現在の点から指定された (x,y) 座標まで線を引き、それが新しい現在の点になります。L (大文字) は、絶対座標が続くことを示します。l (小文字) は、相対座標が続くことを示します。ポリラインを描画するために、いくつかの座標ペアを指定できます。コマンドの最後に、新しい現在の点が、提供された最終的な座標セットに設定されます。

「lineTo」を追加した「moveTo」が何をするのかわかりません。SVG パス仕様の抜粋:

指定された (x,y) 座標で新しいサブパスを開始します。M (大文字) は、絶対座標が続くことを示します。m (小文字) は、相対座標が続くことを示します。moveto の後に複数の座標のペアが続く場合、後続のペアは暗黙の lineto コマンドとして扱われます。したがって、暗黙的な lineto コマンドは、moveto が相対の場合は相対になり、moveto が絶対の場合は絶対になります。相対 moveto (m) がパスの最初の要素として表示される場合、絶対座標のペアとして扱われます。この場合、最初の moveto が絶対 moveto として解釈されても、後続の座標ペアは相対座標として扱われます。

特に最後の文は紛らわしいです。

さらに悪いことに、SVGTiny Path Specでは別の説明が書かれていますが、他のほとんどすべては同じです。

指定された (x,y) 座標で新しいサブパスが開始されます。これにより、指定された座標に新しい現在のポイントも確立されます。相対「moveto」(m) が「path」の最初の要素として表示される場合、絶対座標のペアとして扱われます。「moveto」の後に複数の座標のペアが続く場合、後続のペアは暗黙の「lineto」コマンドとして扱われます。

「現在のポイント」がその間に更新されることを意味しますか (これは他のすべてと矛盾します)、それとも新しいバージョンで修正されたあいまいな説明でしたか?

4

1 に答える 1

4

まあ、それはすべて完全に明確に思えます。

これは、2 つの正方形 (100px × 100px) のボックスを描画するために使用される 2 つのモードの図です。1 つ目は絶対座標を使用し、2 つ目は相対座標を使用します。仕様にあるように、最初の座標を小文字の「m」で指定すると絶対座標として扱われますが、それ以降の座標はすべて相対座標として扱われます。

<svg widtn="250" height="140" viewBox="0 0 250 140">
  <g fill="none" stroke-width="5">
    <!-- 1. Move with implicit LineTo (absolute) -->
    <path d="M10,10 110,10 110,110 10,110z" stroke="blue" />
    <!-- 2. Move with implicit LineTo (relative) -->
    <path d="m120,10 100,0 0,100 -100,0z" stroke="red" />
    </g>
  </svg>

于 2015-03-25T09:20:36.043 に答える