javascript 将两个基于贝塞尔曲线的形状合并为一个以创建新轮廓

kq0g1dla  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(173)

假设我有数据来呈现两个基于Bezier的重叠形状,它们是重叠的,显示在svg或画布上(在哪里并不重要)。我想计算由两个形状合并产生的形状的轮廓,这样我就有了一个干净(新)轮廓和尽可能少的节点和句柄。我希望达到像 adobe illustrator 这样的矢量程序通过 Pathfinder〉Add 提供的效果或字体程序 glyphs 与 * 删除重叠 *。例如:https://helpx.adobe.com/illustrator/using/combining-objects.html
有可能有一个库或一个概念来完成这个任务吗?我正在浏览器中使用javascript,但是任何其他关于如何进行这样的计算的源代码也会有帮助。
同样重要的是,这个计算发生在渲染之前,对渲染结果(svg/canvas)是不可知的。
在下面的插图中,左边是输入形状,右边是预期结果。我有数据,意味着所有的节点和句柄(从贝塞尔曲线),我想计算右侧的红色(节点)和绿色点(句柄)的坐标。

xpcnnkqh

xpcnnkqh1#

    • Paper. js**可能是完成此任务的最佳库:

特别是它类似Boolean operations的unite()来合并路径元素,语法如下:

let unitedPath = path1.unite(path2);

下面的示例还使用了Jarek Foksa的pathData多边形填充。

示例:联合路径:

x一个一个一个一个x一个一个二个一个x一个一个三个一个

可选:路径规格化(使用getPathData()多边形填充)

您可能还需要转换svg原语(<rect><circle><polygon>),就像大写字母A中的水平笔划一样。
pathData polyfill提供了一种标准化svg元素的方法。
这个标准化将输出一个d属性(对于每个选择的svg子元素),该属性只包含一个简化的立方体路径命令集(M,C,L,Z)-所有这些命令都基于绝对坐标

    • 小小的沮丧**

我不会说paper.js有太多的教程或详细的示例,但您可以查看pathItem的参考以查看所有选项。
另请参阅:以编程方式减去SVG路径

相关问题