|
ViewDesignEngine
3.1.0
高性能 CAD 计算几何引擎
|
枚举 | |
| enum class | BooleanOp { Union , Intersection , Difference , SymDiff } |
| 布尔运算类型 更多... | |
|
strong |
布尔运算类型
| 枚举值 | |
|---|---|
| Union | 并集 A ∪ B |
| Intersection | 交集 A ∩ B |
| Difference | 差集 A − B |
| SymDiff | 对称差 (A − B) ∪ (B − A) |
在文件 boolean_2d.h 第 22 行定义.
| std::vector<Polygon2D> vde::boolean::boolean_2d | ( | const Polygon2D & | a, |
| const Polygon2D & | b, | ||
| BooleanOp | op | ||
| ) |
二维多边形布尔运算
对两个简单多边形执行指定布尔操作。 当前实现:基于 Vatti 算法的边行走方式处理凸多边形, 可扩展支持任意简单多边形(含孔洞)。
算法流程:
| a | 第一个多边形 |
| b | 第二个多边形 |
| op | 布尔操作类型 |
| HalfedgeMesh vde::boolean::clip_mesh | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b, | ||
| bool | invert_b = false |
||
| ) |
用网格 B 裁剪网格 A
保留网格 A 中位于 B 体外的面片。 是 mesh_difference 的简化变体,仅输出来自 A 的面片。
| a | 待裁剪网格 |
| b | 裁剪体网格 |
| invert_b | 若为 true,将 B 的内外判定取反(裁剪外部) |
| HalfedgeMesh vde::boolean::invert_mesh | ( | const HalfedgeMesh & | m | ) |
| bool vde::boolean::is_point_inside_mesh | ( | const core::Point3D & | p, |
| const HalfedgeMesh & | mesh | ||
| ) |
判断三维点是否在封闭网格内部
使用射线投射法:从点 p 向任意方向射出射线, 统计与网格面片的交点数量。 奇数表示在内部,偶数表示在外部。
算法:
| p | 待判定点 |
| mesh | 封闭网格 |
| HalfedgeMesh vde::boolean::merge_meshes | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b | ||
| ) |
合并两个网格
将两个网格的顶点和面片直接拼接,不做布尔操作。 用于将分离的网格组件合并到单个数据结构中。
| a | 网格 A |
| b | 网格 B |
| HalfedgeMesh vde::boolean::mesh_boolean | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b, | ||
| BooleanOp | op | ||
| ) |
网格布尔运算统一接口
根据布尔操作类型分发到对应的具体函数。
| a | 网格 A |
| b | 网格 B |
| op | 布尔操作类型 |
| HalfedgeMesh vde::boolean::mesh_difference | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b | ||
| ) |
网格差集 A − B
保留网格 A 中重心在网格 B 外的面片, 以及网格 B 中重心在网格 A 内的面片(翻转法线)。
| a | 网格 A |
| b | 网格 B |
| HalfedgeMesh vde::boolean::mesh_intersection | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b | ||
| ) |
网格交集 A ∩ B
保留网格 A 中重心在网格 B 内的面片, 以及网格 B 中重心在网格 A 内的面片。
| a | 网格 A |
| b | 网格 B |
| HalfedgeMesh vde::boolean::mesh_sym_diff | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b | ||
| ) |
网格对称差 (A − B) ∪ (B − A)
等价于:
| a | 网格 A |
| b | 网格 B |
| HalfedgeMesh vde::boolean::mesh_union | ( | const HalfedgeMesh & | a, |
| const HalfedgeMesh & | b | ||
| ) |
网格并集 A ∪ B
保留网格 A 中重心在网格 B 外的面片, 以及网格 B 中重心在网格 A 外的面片。 合并后形成两个网格的并集体积。
原理:对每个面片计算重心坐标,用射线投射判断 该点是否在对方网格内部,据此决定保留或剔除。
| a | 网格 A |
| b | 网格 B |
多边形等距偏移
将多边形的每条边沿其法线方向平移指定距离, 在转角处自动生成圆弧/斜角连接。
算法:
| poly | 原始多边形 |
| distance | 偏移距离(正=外扩,负=内缩) |