是否有使用z而不是与其他段坐标的SVG路径d约定?



我尝试探索一个名为svgelements的用于SVG解析的python库。还有一个不寻常的概念,我在任何SVG文档中都找不到,也不是海豚文件浏览器、firefox或gimp都不能使用它来渲染SVG文件。在pathd中有一个z解析为坐标,并传递给Path以与z_point创建曲线或直线(最后一次移动操作的结束)。所以zLQTCS操作来代替坐标。这是SVG的标准吗?为什么许多其他应用程序不能处理这个?

我已经为路径d解析研究了这段代码https://github.com/meerk40t/svgelements/blob/master/svgelements/svgelements.py L408

有一个部分用z作为数字处理

库正在实现实际上是SVG 2规范的一部分:分段完成关闭路径操作。在Chromium测试套件中有一个(显然是失败的)测试,它举例说明了这意味着什么。它给出了测试路径元素:

<path d="M 10 10 z m 20 70 h 10 v 10 h -10 l z M 70 30 q 20 0 20 20 t -20 20 t -20 -20 T z" />

说明一下:自SVG 1.0以来,z命令关闭直线上的任何路径。这个变量可以将结束段定义为曲线。

不幸的是,规范的这一部分看起来有点像死胡同。W3C SVG工作组8月份的这一期说:

分段完成关闭路径操作命令的规范是在4年前添加的,尚未被任何浏览器实现。(https://svgwg.org/svg2-draft/paths.html # PathDataClosePathCommand)。目前它只存在于规范中,并且作为一个失败的wpt测试。

考虑将其从规范中删除?

到目前为止,似乎还没有进一步的讨论。

ccprog的答案是正确的。我会说实际的图书馆位于:https://github.com/meerk40t/svgelements

(完全公开,这是我写的)


是的,这是一个路径关闭语法,实际上是死胡同。我建议保持清晰,因为这会损害可移植性。事实上,如果您将该数据提供给路径,并请求路径的.d(),您将不会得到相同的语法,因为不存在交叉兼容性。(这不会破坏东西,因为原来的SVG 1.0语法仍然有效,如果你不知道它的存在,使用这种语法会很奇怪)。

同样,"In order to represent the basic shapes as equivalent paths, there must be a way to close curved shapes without introducing an additional straight-line segment (even if that segment would have zero length)."也几乎死了,因为也没有人真正实现分解。

例如,一个圆被分解为4个顺时针90°圆弧段。以结束结束。这个分解的圆不以0长度的线和关闭符结束。它以一个闭合的弧线结束。所以如果你添加代码在这些位置添加标记你应该让圆周围的每个点都有一个标记。但是,这也没有在任何地方实现,标记不能在形状上工作,对于一个圆,你会在角度0处有start-markerend-marker,但没有mid-marker。我猜这种模棱两可是没有人实现的部分原因,而war3很清楚,如果没有人实现它,它就会从规范中删除。

虽然Z语法没有明显的区别,但它确实对数据结构产生了影响,这是我在写这些东西时更关心的问题(当你处理路径作为一个序列时,就像库确实存在0距离线一样),然后在没有人实现它之后,我不能因为向后兼容性的原因而削减它。所以你完全可以使用它,但它只会导致一些不同的路径,否则你可以用工具来组合。

最新更新