当前位置: 首页 > 面试题库 >

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

季稳
2023-03-14
问题内容

我有2D封闭矢量路径,以类似SVG路径的语法指定-
即这些路径包括直线和各种Bezier曲线。是否有类似小型,精巧且离散的库(最好使用C,Java或Ruby,但如果此库干净且易于使用,则任何语言都可以使用)允许使用这些路径进行布尔运算(例如,并集,交集和减法)?


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

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

因此,问题是,是否还有其他小的,简单易用的库在处理类似SVG的路径上的布尔运算?


问题答案:

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

一个Area对象存储和操作的2维空间中的封闭区域的与分辨率无关的描述。Area与其他Area对象结合使用时,可以对对象进行变形并执行各种“构造面积几何(CAG)”操作。CAG操作包括区域加法,减法,交集和异或。



 类似资料:
  • 了解如何通过使用布尔运算组合对象组来创建复杂的形状。另外,了解如何使用任何形状(如矩形或椭圆形)遮盖对象。 使用布尔运算组合对象 您可以组合简单的形状来创建复合形状和对象。选择要组合的形状,并使用属性检查器中的以下选项之一: 添加到形状区域 将组件区域添加到底层几何形状中。 从形状区域中减去 将组件区域从底层几何形状中切除。 与形状区域相交 和蒙版功能一样,可使用组件区域来剪切底层几何形状。 排除

  • 前言 上个礼拜介绍了Shell编程范例之数值运算,对 Shell 下基本数值运算方法做了简单的介绍,这周将一起探讨布尔运算,即如何操作“真假值”。 在 Bash 里有这样的常量(实际上是两个内置命令,在这里我们姑且这么认为,后面将介绍),即 true 和 false,一个表示真,一个表示假。对它们可以进行与、或、非运算等常规的逻辑运算,在这一节,我们除了讨论这些基本逻辑运算外,还将讨论Shell编

  • 问题内容: 我们使用iText从Java生成PDF(部分基于此站点的建议)。但是,将徽标的副本以GIF之类的图像格式嵌入会导致人们放大和缩小时看起来有些奇怪。 理想情况下,我们希望以矢量格式嵌入图像,例如EPS,SVG或只是PDF模板。该网站声称EPS支持已被删除,在PDF中嵌入PDF或PS可能会导致错误,甚至没有提到SVG。 我们的代码直接使用Graphics2D API而不是iText,但是我

  • 问题内容: 我想将填充的轮廓图包括到pdf文档(例如TeX文档)中。目前我使用小号,并保存到与小号。问题在于,与高分辨率相比,绘图的大小变得相当大。 减小大小的一种方法当然是减少地块中的层数,但是,层数太少则会导致地块变差。我正在寻找一种简单的方法,例如让绘图的颜色另存为png,并且将轴,刻度等保存为矢量。 问题答案: 您可以使用选项执行此操作。 任何小于您设置的值的内容都将保存为栅格化的图形,即

  • 问题内容: 我声明一个布尔变量。例如, 现在,如果我执行以下代码段: 我懂了。好吧,我知道它很明显,但是我需要知道其背后的原因。 问题答案: 当您评估对象的布尔值时,Java会将其取消装箱(自装箱功能,自1.5开始)。因此,实际的代码是:。然后它抛出。对于任何装箱的值,将空对象拆箱将引发此异常。 在1.5之前,您必须手动将值拆箱:所以它更明显(也更加冗长:)

  • 概述 布尔运算符用于将表达式转为布尔值,一共包含四个运算符。 取反运算符:! 且运算符:&& 或运算符:|| 三元运算符:?: 取反运算符(!) 取反运算符是一个感叹号,用于将布尔值变为相反值,即true变成false,false变成true。 !true // false !false // true 对于非布尔值,取反运算符会将其转为布尔值。可以这样记忆,以下六个值取反后为true,其他值都