Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 工业软件 / Industrial Software

SAM 平台开发 / SAM Platform Development

1. SAM 二次开发总览与证据分级 / SAM Secondary Development Overview and Evidence Levels

2. 从 P0 到 P5:SAM 插件界面开发流程 / SAM Plugin Interface Development from P0 to P5

3. PYD 注册、Model Fragment 与 Part Fragment / PYD Registration, Model Fragments, and Part Fragments

4. Python 2 SAM API:已验证接口与失败清单 / Verified Python 2 SAM APIs and Known Failures

5. C++ SAM SDK:模型、网格与 ODB 接口 / C++ SAM SDK APIs for Models, Meshes, and ODB Data

6. SAM 参数化构件建模:从二维轮廓到三维网格 / SAM Parametric Component Modeling from 2D Profiles to 3D Meshes

7. Agent 接入 SAM:插件架构、工具注册与安全边界 / Integrating AI Agents into SAM with Plugins, Tools, and Safety Boundaries

8. SAM API 验证工作流:禁止猜测与七级验收门 / A Seven-Gate SAM API Validation Workflow Without Guesswork

9. 真实案例、当前边界与后续路线 / Validated Cases, Current Boundaries, and the Development Roadmap

10. SAM 二次开发指南:架构总览与系列索引 / SAM Secondary Development Architecture and Series Index

11. SAM GUI、Toolset 与交互类 API / SAM GUI, Toolset, and Interaction APIs

12. SAM 命令桥、Python 与 PYD 扩展 API / SAM Command Bridge, Python, and PYD Extension APIs

13. SAM 数据模型、Part 与 Mesh API / SAM Data Models, Parts, and Mesh APIs

14. SAM 场景、显示表示与渲染 API / SAM Scene, Display Representation, and Rendering APIs

15. SAM 插件编译、部署与故障排查 / Building, Deploying, and Troubleshooting SAM Plugins

16. SAM 二次开发旧入口 / Legacy Entry for SAM Secondary Development

17. SAM 二次开发知识体系 / SAM Secondary Development Knowledge System

本页目录

SAM 参数化构件建模:从二维轮廓到三维网格 / SAM Parametric Component Modeling from 2D Profiles to 3D Meshes ​

📅 创建时间:2026-07-23
🏷️ 标签:#SAM #参数化建模 #CM2 #局部坐标 #增量网格
📚 前置知识:04-cpp-sdk-mesh-api
📖 系列导航:总目录 · 上一篇:04-cpp-sdk-mesh-api · 下一篇:06-agent-plugin-architecture


第7部分:参数化构件的完整执行链 ​

以吊耳为例:

text
用户点击 Lug Modeling
        ↓
Qt 对话框输入 V/H/R、网格尺寸并选择3个节点
        ↓
GUI 校验参数
        ↓
omuArguments 组织命名参数
        ↓
omuMethodCall 调用 Part.createLiftingLug(...)
        ↓
C++ Fragment 取得当前 ptoKPart 和 bmeMesh
        ↓
三个节点建立局部坐标系
        ↓
直线/圆弧构造二维外轮廓和孔轮廓
        ↓
CM2 生成二维网格
        ↓
局部坐标映射到三维
        ↓
SAMReMesh.createNewElement2 增量写入
        ↓
必要时调用 Python 2 合并接触节点
        ↓
刷新 Mesh 与 Viewport
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

参数化不是“把几个参数塞入一条 SAM 命令”,而是:

text
参数定义几何
+
几何定义拓扑边界
+
网格器生成连接关系
+
SAM 接口把结果写入当前模型
1
2
3
4
5
6
7

参数与局部坐标的约束 ​

参数首先要形成可验证的领域对象。长度和半径必须统一单位并满足几何不等式,网格尺寸需要大于数值容差且与最小特征相容。三个选中节点用于建立局部坐标系时,不能重合或近似共线;否则叉积长度接近零,归一化会放大误差并产生不稳定方向。

text
origin = P0
ex = normalize(P1 - P0)
ez = normalize(ex × (P2 - P0))
ey = ez × ex
local(u,v,w) -> origin + u*ex + v*ey + w*ez
1
2
3
4
5

构造后要检查三个基向量的长度、正交性和手性,并记录从局部到全局的变换。轮廓在局部二维平面生成,能够简化直线、圆弧、孔和网格尺寸控制;最终写入模型前再统一映射到三维,避免几何算法同时承担任意空间方向。

从轮廓到有效网格 ​

二维外边界和孔边界必须形成方向一致、无自交的闭合环。几何看起来正确,不代表网格器能够识别拓扑;短边、重复点、接近相切的圆弧和小于容差的间隙都可能导致失败。调用 CM2 前应生成诊断摘要,包括边界数量、包围盒、最小边长和目标网格尺寸。

网格生成后至少检查节点与单元数量、连接索引范围、退化单元、重复节点、法向方向和边界保留情况。增量写入不能假设新节点编号从旧数量连续递增,应使用 SAM 返回的稳定标识或显式映射。若写入中途失败,应撤销整个命令,不能在 Part 中留下半个构件。

与文档事务和撤销协作 ​

参数对话框只收集意图,不直接逐步修改 Mesh。确认后创建一次 Command:冻结输入参数和选中节点,完成计算与校验,再以事务方式提交新增实体。撤销信息保存新增节点、单元和集合的稳定 ID,而不是临时数组下标。后台生成时还要携带 Part revision;用户已编辑模型后,旧结果应被拒绝或要求重新计算。

刷新 Viewport 是提交后的表现层动作。场景更新失败不应使领域网格回滚到未知状态,反过来渲染缓存也不能成为模型真相。模型成功后由变更事件驱动场景重建,便于测试和恢复。

失败处理与验收 ​

参数化构件的验收不止是“视口里看到了形状”。需要保存并重新打开模型,核对节点、单元、集合和方向;导出求解输入,确认连接和属性引用完整;对典型尺寸、极限尺寸、反向节点顺序和共线节点分别测试。任何失败都应指出发生在参数、坐标、轮廓、网格还是提交阶段。

只有当相同参数和参考节点能够稳定重建等价拓扑,且错误输入不会污染当前 Part,参数化建模才从演示脚本成为可靠工程能力。

同时应保存参数 Schema 版本,使旧模型在参数含义变化后能够迁移或给出明确诊断。

参数 Schema ​

参数化构件首先需要稳定的参数契约。

每个字段至少定义:

  • 稳定名称;
  • 显示名称;
  • 数据类型;
  • 物理单位;
  • 默认值;
  • 最小和最大范围;
  • 是否必填;
  • 与其他字段的约束;
  • Schema 版本;
  • 迁移规则。
text
LugParameters v1
├─ width: Length > 0
├─ height: Length > 0
├─ outerRadius: Length
├─ holeRadius: Length
├─ thickness: Length
├─ meshSize: Length > tolerance
└─ referenceNodeIds[3]
1
2
3
4
5
6
7
8

参数校验不能只在 GUI 中实现。 脚本、批处理和插件调用都必须复用相同领域校验。

跨字段约束示例:

  • 孔半径小于外半径;
  • 边缘净距满足最小值;
  • 厚度与目标单元类型兼容;
  • 网格尺寸能解析最小几何特征;
  • 参考节点属于当前 Part;
  • 参考节点没有重复;
  • 当前 Mesh revision 与选择时一致。

错误消息应指出字段、输入值和违反的约束。

参数快照与可重复性 ​

命令启动时冻结参数快照。 后台计算不能继续读取仍可编辑的对话框控件。

text
UI draft
  -> validate
  -> immutable parameter snapshot
  -> geometry and mesh generation
  -> transactional commit
1
2
3
4
5

快照包含单位归一化后的值、参考实体稳定 ID、Part revision 和算法版本。

相同快照在相同算法版本下应生成拓扑等价结果。 节点编号可以不同,但几何、连接、集合和属性应满足等价规则。

局部坐标构造 ​

三个点定义局部平面时,需要选择明确约定。

text
P0: origin
P1: positive local X direction
P2: selects local plane and positive normal
1
2
3

计算流程:

  1. vx = P1 - P0;
  2. 检查 |vx| 大于长度容差;
  3. temp = P2 - P0;
  4. vz = cross(vx, temp);
  5. 检查 |vz| 大于面积相关容差;
  6. 归一化 ex 和 ez;
  7. ey = cross(ez, ex);
  8. 检查正交性和手性;
  9. 建立正向和逆向变换。

绝对固定容差不适合所有模型尺度。 可以基于包围盒和输入长度定义相对容差,并设置合理上下限。

参考点顺序改变会翻转法向。 界面应预览方向,并允许用户确认或反转。

二维轮廓表示 ​

轮廓不应只是一组无类型点。 它由有方向的线段、圆弧和闭合 Loop 组成。

text
Profile
├─ OuterLoop: CCW
│  ├─ Line
│  ├─ Arc
│  └─ Line
└─ InnerLoop: CW
   └─ Circle / Arc sequence
1
2
3
4
5
6
7

外环和孔环使用一致方向约定。 网格器才能判断材料区域和空洞。

轮廓校验包括:

  • 首尾闭合;
  • 连续端点在容差内一致;
  • 无自交;
  • 孔位于外环内部;
  • 多孔之间不相交;
  • 曲线长度大于容差;
  • 圆弧半径有效;
  • 切向和方向符合设计。

几何离散 ​

曲线进入网格器前可能需要离散为边界点。 离散误差应与网格尺寸和曲率相关。

圆弧分段太少会显著改变孔和应力集中几何。 分段过多则增加网格规模和短边问题。

可以依据最大弦误差或最大角度选择分段。

text
arc segments = max(
  minimumSegments,
  segmentsForChordTolerance,
  segmentsForMeshSize)
1
2
3
4

离散策略属于算法版本的一部分。 修改策略后,旧参数模型重新生成可能得到不同网格。

CM2 输入准备 ​

调用网格器前形成独立输入对象:

  • 局部二维节点;
  • 有向边;
  • Loop 与孔;
  • 目标尺寸;
  • 局部加密;
  • 单元类型;
  • 质量限制;
  • 边界标签;
  • 算法选项。

网格器不应直接修改当前 Part。 它先返回临时候选网格和诊断。

网格结果校验 ​

候选网格必须通过结构检查:

  • 节点坐标有限;
  • 单元索引在范围内;
  • 无重复连接;
  • 面积或体积大于容差;
  • 单元方向一致;
  • 边界标签完整;
  • 孔没有被填充;
  • 外边界没有缺口;
  • 没有孤立节点;
  • 质量统计可接受。

质量阈值应与单元类型和求解用途一致。 只检查平均质量会隐藏少量严重退化单元。

映射到三维 ​

二维节点通过局部基映射到全局坐标。

text
global = origin + u * ex + v * ey
1

映射后检查点到目标平面的距离和坐标有限性。

如果构件具有厚度或拉伸方向,还需要定义局部 w 和层数。 壳、实体和梁模型使用不同离散策略,不能只在最后切换单元类型。

增量写入 ​

写入 SAM 前建立显式映射:

text
temporary node index -> SAM node ID
temporary element index -> SAM element ID
boundary tag -> SAM Set
1
2
3

不要假设返回 ID 连续,也不要用旧节点数量推算新 ID。

如果新构件需要与现有 Mesh 合并,先在候选状态计算匹配关系。 合并容差、优先级和冲突处理必须明确。

写入过程由事务管理。 任何节点、单元或 Set 创建失败,都撤销本次新增。

撤销与重做 ​

Command 保存:

  • 参数快照;
  • 参考实体稳定 ID;
  • 新增节点 ID;
  • 新增单元 ID;
  • 新增 Set 和属性;
  • 被合并实体的变更;
  • 提交前后 revision。

撤销按依赖反序删除。 重做可以复用已验证快照重新生成,或恢复完整差异,具体取决于确定性和成本。

如果算法版本已变化,重做不应悄悄使用新算法生成不同拓扑。

视图与交互 ​

参数输入阶段可以显示轻量预览。 预览不是 Document 真相,取消对话框后应直接丢弃。

提交成功后发出领域变更事件:

text
Document changed
  -> table and tree models update
  -> scene generation increments
  -> render buffers rebuild
  -> selection restored by stable IDs
1
2
3
4
5

Viewport 刷新失败不应回滚已经成功提交的领域事务。 渲染层可以根据 Document 重试重建。

后台执行与取消 ​

大网格生成可以在 Worker 中运行。

任务输入包含不可变参数、参考点坐标和 Part revision。 Worker 只生成候选数据,不直接操作 GUI 或当前 Part。

取消检查点包括:

  • 轮廓构造后;
  • 网格器阶段之间;
  • 质量扫描分块之间;
  • 提交前。

进入 Document 事务后,取消要么在提交前生效,要么等待原子提交完成。 不能在一半写入时退出。

性能与内存 ​

参数化构件性能分解为:

  • 参数和选择校验;
  • 坐标构造;
  • 轮廓离散;
  • CM2 网格;
  • 质量检查;
  • 三维映射;
  • SAM 写入;
  • Set 与合并;
  • 场景重建。

测量端到端时间和峰值内存。 避免为每个节点创建重量级对象,优先使用连续数组和批量接口。

验证矩阵 ​

测试至少包含:

  1. 标准尺寸;
  2. 最小允许尺寸;
  3. 大尺寸与细网格;
  4. 孔接近外边界;
  5. 反向参考点;
  6. 重复参考点;
  7. 近共线参考点;
  8. 不同模型尺度;
  9. 已有 Mesh 合并;
  10. 生成中取消;
  11. 保存和重开;
  12. 撤销和重做;
  13. 导出求解文件;
  14. 求解器读入;
  15. 旧参数 Schema 迁移。

每个失败必须确认当前 Part 没有被污染。

完成标准 ​

可靠参数化能力应满足:

  • 参数契约版本化;
  • 输入错误可诊断;
  • 坐标方向可预览;
  • 轮廓和网格通过结构校验;
  • 写入是原子事务;
  • 撤销重做可靠;
  • 后台结果受 revision 保护;
  • 保存重开保持语义;
  • 导出与求解验证通过;
  • 性能在目标规模内可接受。

最后更新于:

Pager
上一篇5. C++ SAM SDK:模型、网格与 ODB 接口 / C++ SAM SDK APIs for Models, Meshes, and ODB Data
下一篇7. Agent 接入 SAM:插件架构、工具注册与安全边界 / Integrating AI Agents into SAM with Plugins, Tools, and Safety Boundaries

持续记录,持续成长

Copyright © Tidenflow