【发布时间】:2020-08-24 06:55:35
【问题描述】:
我试图了解 SVG 程序(如浏览器)如何通过给定的路径绘制形状。我很难理解如何绘制路径以及如何剪辑形状的一部分。
例如,考虑字母Å 和带有顶环的A。 SVG 代码是这样的
<svg viewBox="0 0 1800 1800" xmlns="http://www.w3.org/2000/svg">
<path
d="
M484 0l-42 137h-245l-47 -137h-147l237 664h161l234 -664h-151z
M426 822q0 -47 -24 -71.5t-80 -24.5q-104 0 -104 96q0 46 25.5 71t78.5 25q56 0 80 -25t24 -71z
M319 515h-1l-85 -264h169z
M374 822q0 51 -52 51q-50 0 -50 -51q0 -49 50 -49q52 0 52 49z
" />
</svg>
- 第一行:绘制
A的主体。 - 第二行:绘制一个顶部圆。
- 第三行:从第一行剪下一个三角形。
- 第四行:从第二行剪下一个小圆圈。
我的问题是:SVG 程序如何理解通过第二行绘制形状,但从现有形状中剪切形状?
显然答案是:如果路径在另一个路径中,则它会剪切,否则它会绘制。
我认为这不是全部的原因有两个:
- 需要大量计算才能确定一条路径是否在另一条路径中。
- 线的顺序并不重要(剪切路径不一定在绘图路径之后)。
当然,这不仅限于 SVG,其他矢量格式(例如 EPS)也是如此。
为了增加务实的观点,请将问题阅读为:我们如何解析(在任何编程语言中)上面的d 元素以找出哪个路径正在绘制(黑色)和哪个正在剪切(白色) 在上述 SVG 中给出的四个路径中?
【问题讨论】:
标签: svg vector postscript eps