9a4167e783
- Add include/vde/brep/pattern_ops.h: linear_pattern, circular_pattern, mirror_body, assembly_boolean API declarations - Add src/brep/pattern_ops.cpp: transform_brep() deep-copy with transform, linear/circular pattern using brep_union, mirror with face flip, assembly boolean via Assembly::visit_parts() - Add src/core/matrix4d.cpp: Matrix4D struct implementation - Update src/CMakeLists.txt: add pattern_ops.cpp to vde_brep, matrix4d.cpp to vde_core - Update docs/feedback/VDE-070.md: status Acknowledged → Fixed Build verified: 100% compile success
4.5 KiB
4.5 KiB
VDE-070: 缺少 Pattern/Mirror B-Rep API 和装配级布尔操作支持
提交日期: 2026-07-30 严重程度: 中 状态: Fixed — 已实现
brep::linear_pattern/circular_pattern/mirror_body/assembly_booleanAPI(2026-07-30)修复方案
新增
include/vde/brep/pattern_ops.h+src/brep/pattern_ops.cpp:依赖的基础设施(均已存在):
core::Transform3D—include/vde/core/transform.h已提供 4×4 齐次变换矩阵BrepModel顶点/边/面/环/壳/体遍历与构造 APIbrep_union/brep_difference/brep_intersection—include/vde/brep/brep_boolean.h新增 API:
API 签名 功能 linear_pattern(body, direction, count, spacing) → BrepModel线性阵列,副本通过 brep_union 合并 circular_pattern(body, center, axis, count, angle) → BrepModel圆形阵列,绕轴旋转 mirror_body(body, plane_point, plane_normal) → BrepModel镜像体,自动翻转面朝向 assembly_boolean(assembly, op) → BrepModel装配级布尔运算(Union/Difference/Intersection) 关键设计:
transform_brep()内部函数深拷贝 BrepModel 并变换所有顶点位置- 镜像操作翻转
TopoFace::reversed标志以保持体朝向正确- 装配布尔遍历
Assembly::visit_parts()收集世界坐标下的零件后累积运算修改文件:
include/vde/brep/pattern_ops.h— 新增(155 行)src/brep/pattern_ops.cpp— 新增(242 行)src/CMakeLists.txt— 添加 pattern_ops.cpp 到 vde_brep 库include/vde/core/matrix4d.h— 新增 Matrix4D 基础设施src/core/matrix4d.cpp— Matrix4D 实现include/vde/brep/brep.h— 添加 matrix4d.h 依赖
问题描述
ViewDesign 的 PartDesign 和 Assembly 模块中 Pattern(阵列)、Mirror(镜像)特征,以及装配级 Cut/Hole(跨零件布尔减操作)目前无法使用 VDE B-Rep 级别的 API:
- PartDesign Pattern/Mirror: 当前使用
geom::Transform对网格数据进行平移/旋转/镜像,复制完整的网格几何体。这在 VDE 模式下可用但低效 — 理想做法是在 B-Rep 层面做特征阵列/镜像。 - Assembly Boolean: AssemblyManager 不存储组件 Shape(仅存 filePath),无法在装配上下文中对组件执行布尔减操作(如装配级孔、切除)。
当前 Workaround
| 特征 | ViewDesign 实现 | 问题 |
|---|---|---|
| Linear Pattern | Transform::translate 克隆网格 | 冗余数据,N 个副本 = N 倍内存 |
| Circular Pattern | Transform::rotate 克隆网格 | 同上 |
| Mirror | Transform::mirror 克隆网格 | 同上 |
| Assembly Cut | stub 返回 false | 完全不工作 |
| Assembly Hole | stub 返回 false | 完全不工作 |
VDE API 需求
1. B-Rep 阵列/镜像 API
与现有的 ssi_boolean_union/intersection/difference 类似,提供 B-Rep 级别的变换操作:
namespace vde::brep {
// Linear pattern: array body copies along vector dir
BrepModel linear_pattern(const BrepModel& body,
const Vector3D& dir, double spacing, int count);
// Circular pattern: array body copies around axis
BrepModel circular_pattern(const BrepModel& body,
const Point3D& origin, const Vector3D& axis,
double angle, int count);
// Mirror: reflect body across plane (point + normal)
BrepModel mirror(const BrepModel& body,
const Point3D& planePoint, const Vector3D& planeNormal);
// Boolean union of all copies (for merged patterns)
BrepModel pattern_union(const BrepModel& body,
const std::vector<Matrix4D>& transforms);
} // namespace vde::brep
2. 装配级特征(长期)
VDE C API 已有 vde_assembly_create/add_part,缺少的是装配上下文中的跨零件布尔操作。这是更大范围的需求,可作为 VDE-071 单独追踪。
影响范围
- 特征: Linear Pattern, Circular Pattern, Mirror(PartDesign)
- 模块: Assembly Cut, Assembly Hole(Assembly)
- 构建模式: 所有 VDE 构建
- 优先级: 中(Transform-based Workaround 可用,但 B-Rep 阵列是专业 CAD 的基础功能)
相关代码
plugins/vd-core-partdesign/src/partdesign_plugin.cpp:530-583— Pattern/Mirror 命令plugins/vd-core-assembly/src/assembly_plugin.cpp:424-458— Assembly Cut/Hole stubssrc/vd_geom/src/transform.cpp— Transform 实现(网格级操作)