开源改变世界

与零面积闭合路径无关的 SVG 渲染问题 #448

推推 grbl 2年前 (2023-02-04) 175次浏览
关闭
MrSurly 打开了这个问题 2018 年 1 月 17 日 · 7条评论
关闭

与零面积闭合路径无关的 SVG 渲染问题#448

MrSurly 打开了这个问题 2018 年 1 月 17 日 · 7条评论

评论

与零面积闭合路径无关的 SVG 渲染问题 #448
乖乖先生 评论了 2018 年 1 月 17 日  

短版

将单个路径点坐标从更改191.516191.5165导致整个路径不呈现为 GCODE 是的,通过将坐标改变 1/10000 毫米。

长版

正常工作:

  • 工作区:tm_good.json
  • SVG:tm_good.svg

屏幕截图,红色圆圈突出显示的区域:
与零面积闭合路径无关的 SVG 渲染问题 #448

无法正常工作:

  • 工作区:tm_bad.json
  • SVG:tm_bad.svg

屏幕截图,红色圆圈突出显示的区域:
与零面积闭合路径无关的 SVG 渲染问题 #448

实际差异

tm_good.svgtm_bad.svg(文件名元数据除外)之间的唯一区别如下所示:

237c237
<        d="m 191.5165,90.917 2.11984,-2.425725 2.47851,-1.099802 -2.13625,-3.299409 -3.71997,8.087217 z"
---
>        d="m 191.516,90.917 2.11984,-2.425725 2.47851,-1.099802 -2.13625,-3.299409 -3.71997,8.087217 z"

如果不是很明显,第一个坐标已从 更改191.5165191.516。我相信这种变化不应该意味着渲染和不渲染为 gcode 之间的区别。


  • 前端:4.0.989
  • 后端:4.0.115

所有文件:LW_issue.tar.gz

与零面积闭合路径无关的 SVG 渲染问题 #448
成员

乍一看,如果不通过分析运行它,您似乎遇到了数值不稳定问题。有时,任何多边形算法可以处理和不能处理的内容之间的区别是微乎其微的。没有已知的多边形算法可以解决这个问题。最接近的是我使用的整数多边形算法。但是 float 到 int 的转换会重新引入不稳定性。

与零面积闭合路径无关的 SVG 渲染问题 #448
作者

所以,我假设您将所有闭合路径视为多边形(而不是一系列线段),并通过多边形库提供它们,因为它们有可能被光栅填充?

我只能在参考凸包算法时找到术语“数值稳定性”。

与零面积闭合路径无关的 SVG 渲染问题 #448
成员

是的,但也适用于内部和外部(切口补偿)。

与零面积闭合路径无关的 SVG 渲染问题 #448
作者
乖乖先生 评论了 2018 年 1 月 17 日  

好的,新信息:在那个位置实际上有两个具有相同路径的多边形。

对象 ID: path4290-8path4294-4

不知道为什么两个重叠的多边形会导致这种情况。将 1 移动 1/1000 毫米即可修复它。

与零面积闭合路径无关的 SVG 渲染问题 #448
作者

是的,但也适用于内部和外部(切口补偿)。

这就说得通了

与零面积闭合路径无关的 SVG 渲染问题 #448
成员

好的,新信息:在那个位置实际上有两个具有相同路径的多边形。

他们取消了。LW4 对复杂多边形使用奇偶规则,对多个多边形组合使用异或规则。

与零面积闭合路径无关的 SVG 渲染问题 #448
作者

他们取消了。LW4 对复杂多边形使用奇偶规则,对多个多边形组合使用异或规则。

知道了。对于我得到的任何其他随机 SVG,我会牢记这一点。谢谢。