2017-08-26 10 views
1

Inkscapeでは、私は星を表すパスを持っています。私はLink to XMLを使用して独自のSVGパーサを作成するためのベンチマークとしてInkscapeを使用していますが、Inkscapeが生成したパスデータの解析に問題があります。私はdocumentation at MDNに応じてコーディングしていますが、Inkscapeは、このパスデータを生成した:あなたが見ることができるように私のパス解析が失敗したのでSVGパスデータの解析

m 100.93837,238.62186 -15.635004,13.72009 2.438549,20.65787 -17.880056,-10.63004 -18.893249,8.70283 4.584526,-20.28981 -14.11522,-15.27922 20.71345,-1.90975 10.169563,-18.14592 8.21709,19.10952 z 

は、移動命令、ないライン命令があります。ラインの指示がない場合、これを正しく解釈するにはどうすればよいですか?これはすべて、束の周りの "鉛筆"を動かして、パスを閉じることです。

+0

最後のzがパスを閉じます。それは5x、y点 – jdweng

答えて

3

移動後の後続の座標ペアは、interpreted as lineto instructionsとします。もしmovetoが相対的であったならば、その後の暗黙のlinetosも相対的であり、絶対的なものと同じです。

標準を実装したい場合は、できるだけ仕様を読んでください。重要な詳細を除外した便利な要約ではありません。 SVG仕様は非常に読みやすく、実際には私は過去10年間で何か他のものを参照として使用する理由はほとんど見つけられていません。

SVGパスのデータ解析には、とにかく楽しいエッジケースがあります。有効な座標ペアは、5-3,0.0.1です。

+0

sidenoteの動きのように見えます。私はZ命令に遭遇したとき、現在の人物の先頭に行くと思われる "鉛筆"の位置ですか? – 333

+0

@ 333:同じリンクから:» "closepath"(Zまたはz)は、現在のサブパスを終了させ、現在のサブパスの最初の点まで自動直線を描きます。 「クローズパス」に直ちに「moveto」が続く場合、「moveto」は次のサブパスの開始点を識別する。他のコマンドが直ちに「クローズパス」に続く場合、次のサブパスは、現在のサブパスと同じ初期点から開始する。したがって、現在の位置は、サブパスを開始したmovetoの後と同じである。 「M0 0 M 1 1」では、サブパスの開始は「1 1」であることに留意されたい – Joey