Files
ViewDesignEngine/docs/feedback/VDE-070.md
T
茂之钳 9a4167e783
CI / Build & Test (push) Failing after 39s
CI / Release Build (push) Failing after 38s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
fix(VDE-070): implement Pattern/Mirror B-Rep API and assembly boolean ops
- 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
2026-07-30 22:19:16 +08:00

4.5 KiB
Raw Blame History

VDE-070: 缺少 Pattern/Mirror B-Rep API 和装配级布尔操作支持

提交日期: 2026-07-30 严重程度: 中 状态: Fixed — 已实现 brep::linear_pattern/circular_pattern/mirror_body/assembly_boolean API2026-07-30

修复方案

新增 include/vde/brep/pattern_ops.h + src/brep/pattern_ops.cpp

依赖的基础设施(均已存在):

  1. core::Transform3Dinclude/vde/core/transform.h 已提供 4×4 齐次变换矩阵
  2. BrepModel 顶点/边/面/环/壳/体遍历与构造 API
  3. brep_union/brep_difference/brep_intersectioninclude/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

  1. PartDesign Pattern/Mirror: 当前使用 geom::Transform 对网格数据进行平移/旋转/镜像,复制完整的网格几何体。这在 VDE 模式下可用但低效 — 理想做法是在 B-Rep 层面做特征阵列/镜像。
  2. 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, MirrorPartDesign
  • 模块: Assembly Cut, Assembly HoleAssembly
  • 构建模式: 所有 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 stubs
  • src/vd_geom/src/transform.cpp — Transform 实现(网格级操作)