【问题标题】:Parsing SVG Path Data解析 SVG 路径数据
【发布时间】:2018-02-04 14:23:03
【问题描述】:

在 Inkscape 中,我有一个代表星星的路径。我使用 Inkscape 作为基准来使用 Linq to XML 创建自己的 SVG 解析器,但是在解析 Inkscape 生成的路径数据时遇到了麻烦。我是按照documentation at MDN 编码的,但是 Inkscape 生成了这个路径数据:

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

如您所见,有移动指令,但没有行指令,所以我的路径解析失败。如果没有行指令,我应该如何正确解释这一点?所做的只是将“铅笔”绕着一堆移动,然后关闭路径。

【问题讨论】:

  • 末尾的 z 关闭路径。它看起来像一个有 5 个 x,y 点的移动

标签: c# xml svg inkscape


【解决方案1】:

移动后的后续坐标对应该是@​​987654321@。如果 moveto 是相对的,那么后面的隐式 linetos 也是相对的,和 absolute 一样。

作为一般经验法则,如果您想实施一个标准,请尽可能阅读规范,而不是遗漏关键细节的方便摘要。实际上,SVG 规范可读性很强,在过去的 10 年里,我几乎没有理由使用其他任何东西作为参考。

SVG 路径数据解析无论如何都有各种有趣的边缘情况,例如以下是有效的坐标对:5-30.0.1

【讨论】:

  • 旁注,当我遇到Z指令时,“铅笔”的位置是应该去当前图形的开头,还是停留在它的位置?
  • @333:来自同一个链接:»“closepath”(Z 或 z)结束当前子路径并导致从当前点到当前点的初始点自动绘制一条直线子路径。如果“closepath”之后紧跟“moveto”,则“moveto”标识下一个子路径的起点。如果“closepath”后面紧跟任何其他命令,则下一个子路径从与当前子路径相同的初始点开始。« 因此,当前位置与开始子路径的 moveto 之后的位置相同。请注意,M0 0 M 1 1 的子路径开始是 1 1
猜你喜欢
  • 2019-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-22
  • 2014-01-15
  • 1970-01-01
  • 2013-05-27
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多