在inkscape中自动合并重叠节点

平面设计 墨景 svg 小路 激光切割
2022-01-11 06:33:59

我的 SVG 有多个线对象形成一个封闭的形状。我必须将其转换为单一路径,以便激光切割机沿着路径从材料中切割出形状而不会跳跃。

当然,这可以通过 inkscape 手动完成:

  1. 将所有单个对象转换为一条路径,生成一条路径,但形状的每个角度都有两个重叠节点
  2. 对于每个角度,选择共享相同坐标的两个节点并连接所选节点 (Shift+J)

但是,它需要执行步骤 2) 数千次(每个角度一次),是否有自动合并所有重叠节点的选项?

即使在我的例子中,重叠节点的坐标完全匹配,因为浮点数之间没有完全相等,最终可以提供一个距离来研究重叠节点,例如所有节点(或以像素n1, n2distance(n1, n2) ≤ 1e-6 mm单位)合并到一个节点中。

如果在此容差范围内有 2 个以上的节点,就会开始发生冲突,但是加入选定节点 (Shift+J)工具本身似乎无法处理这种情况,只能合并两个节点。

此选项也可用于在板上多次复制单个形状,并防止激光切割同一边缘多次损坏材料。但它似乎更先进,因为有几条路径。

这是输入文件的示例:

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1" id="svg5169"
   viewBox="0 0 20.302442 20.250575"
   height="5.7151623mm"
   width="5.7298002mm">
  <g
     transform="translate(-41.214011,-1123.8181)"
     id="layer1">
    <g
       transform="matrix(0.99667782,0,0,0.99980745,-163.30415,1035.5366)"
       id="g4" />
    <path
       id="line134"
       d="m 41.339286,1123.9953 20,0"
       style="stroke:#191919;stroke-width:0.35433069;stroke-miterlimit:4;stroke-dasharray:none" />
    <path
       id="line138"
       d="m 41.339286,1123.9434 20,20"
       style="stroke:#191919;stroke-width:0.35433072;stroke-miterlimit:4;stroke-dasharray:none" />
    <path
       id="line142"
       d="m 61.339287,1143.8181 0,-20"
       style="stroke:#191919;stroke-width:0.35433072;stroke-miterlimit:4;stroke-dasharray:none" />
  </g>
</svg>

以及我需要产生的输出以发送到激光切割机,即具有单一路径的相同对象:

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1" id="svg5169"
   viewBox="0 0 20.604885 20.60488"
   height="5.815155mm"
   width="5.8151565mm">
  <g
     transform="translate(-84.099911,-1123.8181)"
     id="layer1">
    <g
       transform="matrix(0.99667782,0,0,0.99980745,-163.30415,1035.5366)"
       id="g4" />
    <path
       id="line142-9"
       d="m 104.52763,1123.9953 -20.000004,0 20.000004,20 z"
       style="fill:none;stroke:#191919;stroke-width:0.35433072;stroke-miterlimit:4;stroke-dasharray:none" />
  </g>
</svg>
1个回答

参考提供的来源,您需要:

  1. 取消组合Shift-Ctrl-G)您的对象,选择路径并将它们组合​​Ctrl-K)在单个路径中
  2. 切换到按节点编辑路径模式(F2),选择所有节点加入选定节点Shift-J)。

加入的节点

当所有节点都被选中时,join selected nodes功能适用于找到的所有端节点对。

如果您的节点的坐标完全重叠,这应该可以工作(您不需要重复步骤 2. 数千次)。

如果节点的坐标不重叠,Inkscape 会加入节点,但您可以获得意想不到的行为,例如:

奇怪的结果

因此,在所有节点上使用连接时应谨慎使用。