You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.9 KiB
4.9 KiB
FreeCAD FCStd 电气设备模板制作设计
1. 目标
把普通 STEP / STP / STE 几何模型加工成可复用的 .FCStd 电气设备模板。
模板保存设备几何和端子槽位语义。后续不同工程、不同人员导入这个 FCStd 时,FreeCADExchange 能识别其中的端子 LCS,并把工程里的真实 terminal_uuid 绑定到这些槽位上。
2. 非目标
- 不修改 FreeCAD C/C++ 内核。
- 不在模板文件里保存工程级
terminal_uuid、project_uuid、instance_id。 - 不做自动布线。
- 不把完整接线路径写入数据库。
- 不要求第一版做完整 UI 面板。
3. 核心原则
STEP / STP / STE 是几何输入,FCStd 是正式设备模板输出。
模板端子描述“这个设备模型哪里可以接线”。工程端子描述“当前工程的哪个 2D 端子绑定到哪个 3D 端子对象”。两者不能混用。
4. 模板文件结构
以电流互感器为例:
电流互感器.FCStd
ModelGeometry
Terminal_P1
Terminal_P2
Terminal_P1 和 Terminal_P2 是 LCS 对象。它们的位置就是模型上真实接线位置,方向就是后续出线方向参考。
5. 模板端子属性
模板端子至少写入:
Role = Terminal
CanWire = true
QetTemplateSlotName = P1
QetTerminalLabel = P1
QetTerminalType = primary
模板端子不写入:
QetProjectUuid
QetElementUuid
QetTerminalUuid
QetInstanceId
这些字段只属于具体工程场景。
6. 新模块
新增模块:
src/Mod/FreeCADExchange/TemplateAuthoring.py
职责:
- 创建模板端子 LCS。
- 给 LCS 写入模板语义属性。
- 校验当前文档中的模板端子。
- 保存或辅助保存
.FCStd模板。
不负责:
- 工程
2d_to_3d.json导入。 - 工程端子 UUID 绑定。
- 手动连线。
3d_to_2d.json回写。
7. 第一版命令
第一版先做两个命令:
QET_Template_AddTerminal
QET_Template_ValidateTerminals
QET_Template_AddTerminal:
- 用户选择一个模型对象或模型上的点位。
- 执行命令。
- 输入端子槽位名,例如
P1。 - 在选择位置创建 LCS。
- 自动写入模板端子属性。
QET_Template_ValidateTerminals:
- 扫描当前文档中的端子 LCS。
- 检查是否有
Role="Terminal"。 - 检查是否有
QetTemplateSlotName。 - 输出端子列表和问题。
保存动作第一版直接使用 FreeCAD 自带保存为 .FCStd。后续再补 QET_Template_SaveAsFCStd。
8. 第一版点位策略
第一版按简单稳定策略实现:
- 如果用户选择对象的子元素,并且能取到选择点,就使用该点。
- 如果只能选到对象,则使用对象包围盒中心。
- 如果没有选择,则拒绝创建端子。
端子方向第一版使用默认旋转。后续再增加方向编辑,例如沿面法向、沿用户选择边方向或手动输入轴角。
9. 与现有导入流程的关系
现有项目导入流程保持不变:
ExchangeBootstrap
-> DeviceImport
-> TerminalImport
-> ExchangeWriteBack
TerminalImport 已经支持读取 FCStd 模板中的 Role="Terminal" LCS。模板制作工具只负责把这些 LCS 方便、规范地放进 FCStd。
项目导入时的优先级仍是:
- FCStd 模板 LCS。
- sidecar JSON。
- bbox fallback。
10. 用户流程
以电流互感器为例:
- 打开 FreeCAD。
- 导入
电流互感器.step。 - 选择 P1 接线位置。
- 执行
QET_Template_AddTerminal,输入P1。 - 选择 P2 接线位置。
- 执行
QET_Template_AddTerminal,输入P2。 - 执行
QET_Template_ValidateTerminals。 - 保存为
电流互感器.FCStd。 - 在 LightWork3D 设备 3D 资源中使用该 FCStd。
11. 验收标准
- 能从普通 STEP 模型创建
Terminal_P1和Terminal_P2。 - 端子对象是 LCS。
- 端子对象带
Role="Terminal"和CanWire=true。 - 端子对象带
QetTemplateSlotName。 - 保存为 FCStd 后重新打开,端子和属性仍存在。
- 使用该 FCStd 作为工程模型时,端子位置来自模板 LCS,不再使用 bbox fallback。
12. 风险和处理
选择点不可用:
- 第一版退回对象包围盒中心。
- 如果连对象也没有选择,则直接提示错误。
端子重名:
- 第一版自动使用唯一对象名,例如
Terminal_P1_1。 QetTemplateSlotName保持用户输入,用于槽位语义。
模板里混入工程端子属性:
- 校验命令提示警告。
- 第一版不自动删除,避免误删用户数据。
方向不准确:
- 第一版只保证位置和语义。
- 后续补方向编辑命令。
13. 实施顺序
- 新增
TemplateAuthoring.py。 - 在
CMakeLists.txt加入该模块。 - 在
InitGui.py注册模板命令。 - 实现添加端子命令。
- 实现校验命令。
- 增加 Python 单元测试,覆盖属性写入和校验逻辑。
- 用电流互感器模型手工验证一次完整流程。