2017-08-26 147 views
1

在Inkscape中,我有一條代表明星的路徑。我使用Inkscape作爲基準來創建我自己的使用Linq to XML的SVG解析器,但是我無法解析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在最後關閉路徑。它看起來像是一個5 x,y點的移動 – jdweng

回答

3

移動後的後續座標對應該是interpreted as lineto instructions。如果moveto是相對的,隨後的隱式linetos也是相對的,並且與絕對相同。

作爲一般的經驗法則,如果你想實現一個標準,請閱讀規範,如果你可以,而不是一個方便的總結,留下關鍵的細節。 SVG規範非常易讀,實際上我發現沒有什麼理由在過去的10年中使用其他任何東西作爲參考。

無論如何,SVG路徑數據解析都有趣的邊緣情況,例如,以下是有效的座標對:5-3,0.0.1

+0

旁註,當我遇到一個Z指令時,「鉛筆」的位置應該到達當前數字的開始位置,還是保持原位? – 333

+0

@ 333:從相同的鏈接:»「關閉路徑」(Z或z)結束當前子路徑,並導致自動直線從當前點繪製到當前子路徑的初始點。如果「closepath」後面緊跟着一個「moveto」,那麼「moveto」將標識下一個子路徑的起點。如果緊跟着任何其他命令緊跟着一條「關閉路徑」,則下一個子路徑將從與當前子路徑相同的起始點開始。「因此,當前位置與開始子路徑的moveto之後的位置相同。請注意,對於'M0 0 M 1 1',子路徑開始爲'1 1' – Joey