Clipper2中的术语和基本概念

Clipper2是一个开源的图形库,支持图形的交、并、差、异或操作及大小调整。本文介绍了其核心术语,如裁剪、简单多边形、填充规则、风向数等,并讨论了自相交多边形、精度问题和自相交图形处理的注意事项。此外,还涵盖了偏移操作的关节类型和端点类型选择。


背景

Clipper是一个开源的计算几何图形库,支持图形的交,并,补以及亦或(boolean)操作,同时也支持图形的变大/变小(sizing)操作。

The Clipper library performs clipping and offsetting for both lines and polygons. All four boolean clipping operations are supported - intersection, union, difference and exclusive-or. Polygons can be of any shape including self-intersecting polygons.

Clipper 是由Angus Johnson于2010年发布,2022年其再次发布了一个对于Clipper的改进版,这样把2010年的版本叫做Clipper1,现在的版本叫做Clipper2。


一、Clipper2中的术语(terminology)

Clipper2中有一些基本的术语,它们是Clipper2的核心:

1. 裁剪Clipping

clipping最初是指用某个clip window对某个image进行裁剪,只留下clip window内部的部分image,相当于对两个图形求交集。后来clipping(裁剪)泛化为不仅仅是裁剪(intersection), 还包括union, difference, XOR等boolean操作。

2. subject/clip

image 等被裁剪对象叫做subject, clip window等称为clip

3. segment

segment就是线段,由相连的两点(point/vertice)表示

4. Paths

Paths是由一系列segment构成的路径
Open paths是指起点和终点不相连的Paths, 也叫做polylines
Close paths是指起点和终点相连的Paths,通常叫做polygon
subject可能是Open paths, 也可能是closed paths
clip只能是closed paths.

5. Simple polygons

由一条不自交(self-intersect)的Close Paths构成的图形称为简单多边形(simple polygons)

6. Complex polygons

如果Closed paths自相交,或者由多条Paths组成的polygons, 称为复杂多边形(complex polygons)

7. Polygon holes

Polygon内部不被填充的部分成为polygon holes, holes通常是由位于outer polygon contour内部的inner polygon contour 组成。

8.

### Clipper2 库的使用方法 Clipper2 是一个用于执行布尔运算(如交集、并集、差集等)以及路径偏移操作的强大几何库。以下是关于如何安装使用的详细介绍: #### 安装 Clipper2 为了使用 Clipper2,可以按照以下方式获取源码并集成到项目中: - **下载源码**: 可以从其官方 GitHub 页面克隆仓库[^4]。 - **集成到 CMake 项目**: 如果您正在使用 CMake 构建您的项目,则可以通过修改 `CMakeLists.txt` 文件来引入 Clipper2 的头文件静态库。 ```cmake # 添加 Clipper2 头文件路径 include_directories(${PROJECT_SOURCE_DIR}/third_party/clipper2) # 将 Clipper2 源文件加入目标链接 add_subdirectory(third_party/clipper2) target_link_libraries(your_target_name clipper2::clipper2) ``` 上述代码片段展示了如何将 Clipper2 集成至现有的 CMake 工程中[^5]。 #### 使用 Clipper2 进行基本操作 下面是一个简单的例子,演示了如何利用 Clipper2 执行两个多边形之间的布尔运算。 ```cpp #include "clipper2/clipper.h" using namespace Clipper2Lib; int main() { PathsD subject = { { {0,0}, {100,0}, {100,100}, {0,100} } }; PathsD clip = { { {50,50}, {150,50}, {150,150}, {50,150} } }; Clipper2Lib::PathsD solution; Clipper2Lib::PolyTree polytree; // 计算交集 Clipper2Lib::Difference(subject, clip, solution); return 0; } ``` 此代码实现了计算两个矩形区域之间差异的功能[^6]。 #### 文档与支持资源 对于更详细的文档支持资料,建议访问 Clipper2 的官方网站或者查阅其 API Reference[^7]。这些材料提供了丰富的教程技术细节,有助于开发者深入理解该库的能力及其应用场景。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值