SVG /矢量图形对象布尔运算(并集,交集,减法)

我有2D闭合矢量路径,在SVG路径类语法中指定 – 即这些路径包括直线和各种贝塞尔曲线。 有没有什么像一个小的,漂亮的和离散的库(最好用C,Java或Ruby,但如果这个库干净且易于使用,任何语言都会这样做),允许做这些路径的联合,交叉和减法等布尔运算?

到目前为止我发现的内容包括:

  • 巨大而昂贵的商业矢量图形产品(例如Autodesk AutoCAD或Adobe Illustrator),可以使用某种API调用或编写脚本来执行布尔2D路径操作 – 这对我来说显然是一种过度杀伤力。
  • Inkscape开发的内部lib2geom库缺少文档,绑定,有一些编译问题,似乎除了Inkscape本身之外没有项目使用,看起来相当复杂。
  • CGAL是一个庞大且相当复杂的计算几何库,可以在非常奇怪的对象空间中工作(即你有疯狂的模板组合,命令式样式函数来对这些模板化数据结构进行操作等),而且似乎没有对C ++以外的其他语言进行合理的绑定。 Python CG绑定似乎被抛弃了,对我来说看起来并不友好。
  • JTS似乎以GIS为中心,只处理直线,而我需要处理类似SVG的Bezier曲线。

所以,问题是,是否还有其他小型,漂亮和简单的库可以在类似SVG的路径上处理布尔操作?

也许我错过了一些东西,但java.awt.geom包中的类不适合你的需求吗? 它们处理二维形状; Area类专门处理布尔运算:

Area对象存储和操作二维空间的封闭区域的与分辨率无关的描述。 Area对象可以转换,并且可以在与其他Area对象组合时执行各种构造区域几何(CAG)操作。 CAG操作包括区域加法,减法,交集和排他或。

你可以使用JavaScript Clipper ,这是Angus Johnson的Clipper (用Delphi,C ++,C#和Python编写)的端口,而后者又基于Bala R. Vatti的剪切算法 。 它能够处理所有多边形情况,包括自相交的情况。

请记住,lib只接受多边形,因此任何曲线都需要首先进行多边形化