确定重叠线(以将其删除)?

时间:2018-11-06 18:13:37

标签: algorithm svg dxf

我正在寻找一种从2D图像(即SVG或2D DXF)中去除重叠线的方法。我可以编写代码,但是我不确定我知道哪种算法最适合此类工作。

这里的用例是,有时在例如从另一个数据源生成SVG时,您最终会出现“重复”行,即实际上在图像中跟踪相同路径的行。在视觉上,渲染时这不是问题(文件中没有多余的膨胀),但是在使用激光切割机时,这是一个问题,该切割机将这些线段解释为要用激光切割的路径,并且您不希望这样做在同一条路径上两次。

有人可以引导我了解该算法的外观吗?我很难想象它。

1 个答案:

答案 0 :(得分:0)

当您发现路径段仅部分重叠时,您没有说应该怎么办。因此,这是我可以在Inkscape GUI中执行的操作。也许可以作为可行算法的模板:

  1. 将所有原始图元转换为路径。

  2. 分解所有路径,以便每个段都是单独的路径。

  3. 为所有这些路径提供一个笔触宽度,该宽度是“重叠”阈值的两倍。

  4. 将笔划的轮廓转换为路径。

  5. 对于所有路径对,切出交点。 (请注意:使用Inkscape,这是一个破坏性的过程,因此请进行复制。)

  6. 测量所得交叉点的大小(viewBox)。如果其长度超过“长度”阈值,则可以说这些片段重叠。

对于Point 1,我无法命名库,但是与Point 4相同,它实际上是每个矢量渲染器所做的事情,因此应该可以使用现有资源来实现。点2和3无关紧要。对于点5,有existing libraries确定交点。然后,可以通过确定一对路径对象上的相交点之间的最大距离来简单地解决点6。