1. 摘要
用 TRAE SOLO 开发了一款 Tekla Structures 2023 焊接清册插件,实现了从 Tekla 三维模型中自动提取零件间焊缝数据(焊缝长度、板厚、材质),并一键写入 WPS 表格。原本需要人工逐个零件测量焊缝、手动填写表格,每条焊缝耗时 2-3 分钟,现在选择零件后 1 秒内即可完成提取和写入,准确率远超人工。
2. 背景
我是一名钢结构详图工程师,日常工作是在 Tekla Structures 中完成钢结构建模后,需要统计每个节点处零件之间的焊缝信息,包括焊缝长度、板厚、材质等,并填写到焊接清册表格中。一个普通桥梁项目通常有上千条焊缝,传统做法是:
- 在 Tekla 模型中逐个点选零件,人工判断接触区域
- 手动测量焊缝长度
- 查看零件属性获取板厚和材质
- 逐条填写到 Excel/WPS 表格
这个过程极其繁琐,一个项目往往需要 2-3 天,且容易出错。我希望能用 AI 编程工具来解决这个问题。
3. 实践过程
3.1 任务拆解
我将整个任务拆解为以下核心模块:
- Tekla 零件选择与查找 — 支持交互选择和按零件名批量查找
- 焊缝检测算法 — 两种模式:
- 模式1:利用 Tekla API 创建四周焊缝,经去重、厚度处理后提取
- 模式2:自研几何算法,通过边面投影法检测焊缝段
- 截面/材质提取 — 解析 PL16、PL8×1000 等截面字符串,提取板厚
- CAD 文字提取 — 从 AutoCAD/中望 CAD 中提取零件编号
- WPS 表格写入 — 通过 COM 接口自动写入焊接数据
- 内存数据库 — 缓存模型数据加速零件查找
3.2 使用 SOLO 的能力
在整个开发过程中,TRAE SOLO 发挥了关键作用:
代码生成与架构设计
- SOLO 帮我设计了策略模式架构来处理模式1的多种焊缝场景(全闭合、单组保留厚度、单组去除厚度、多组),让代码清晰可维护
- 自动生成了 WPF 界面的 XAML 布局和后台代码
- 帮助实现了 BFS/DFS 图算法用于焊缝路径的连通性检测和最长路径查找
API 文档查询与适配
- Tekla API 的 Weld、PolygonWeld、Solid 等对象用法复杂,SOLO 通过查询项目 help 文件夹中的 XML 文档,准确使用了
GetWeldGeometries、GetCoordinateSystem、GetCutPart等方法 - AutoCAD 和中望 CAD 的 COM 接口差异,SOLO 帮我实现了双平台兼容
- WPS 的 COM 接口(KET.Application/KWps.Application)也是 SOLO 查阅文档后正确调用的
复杂算法实现
- 厚度边识别算法:通过夹角 + 三角函数判断,角和约 180° 且长度约等于板厚/sin(角度) 的边即为厚度边
- 环状合并算法:移除厚度边后,检测链的首尾几何连接关系,合并环状链
- 两次 BFS 树的直径算法:在模式2中用于找最长简单路径
- GDI+ GraphicsPath 多边形包容测试和交点裁剪
调试与问题修复
- SOLO 帮我排查了坐标系转换问题:Tekla Weld 使用局部坐标系,需要通过
TransformationPlane转换到全局坐标 - 解决了 COM 对象释放问题,避免内存泄漏
- 修复了 protobuf-net 序列化在数据库持久化中的兼容性问题
3.3 关键 Prompt 示例
请帮我实现模式1的焊缝处理流程:
1. 对选中零件创建 +X -X +Y -Y +Z -Z 共6条四周焊缝
2. 对6条焊缝进行路径签名去重
3. 根据去重后的焊缝组数和闭合状态,使用策略模式选择不同处理逻辑
4. 去除厚度焊缝时,需要识别长度≈板厚/sin(角度)的边并移除
5. 移除后分割链,检测环状连通性并合并
帮我实现模式2的焊缝段检测算法:
遍历次零件的边和主零件的面,判断边端点到面的距离是否在容差内,
使用GDI+ GraphicsPath做多边形包容测试和交点裁剪,
将边裁剪到面范围内作为焊缝段
3.4 踩过的坑
- Tekla Weld 坐标系问题:Weld.GetWeldGeometries 返回的坐标是局部坐标系,需要通过 weld.GetCoordinateSystem() 获取变换矩阵转换到全局坐标,否则所有点坐标都是错的
- 四周焊缝去重:6 个方向创建的焊缝中,很多方向实际上是几何相同的(质心距 < 1mm),需要基于路径签名去重,否则会产生大量重复数据
- 厚度边判定:不能简单用长度==板厚来判断,因为斜面的厚度边长度 = 板厚/sin(角度),需要结合夹角信息综合判断
- COM 接口兼容性:WPS 不同版本的 ProgID 不同(KET.Application vs KWps.Application),需要逐个尝试
- 模型数据库性能:56824 个构件、290468 个零件的全量加载太慢,改用 protobuf-net 序列化 + 按需加载方案
4. 成果展示
项目规模
- 49 个 C# 源文件,约 7500+ 行代码
- 6 个功能模块:Tekla 操作、CAD 操作、WPS 操作、通用工具、ZWcad 封装、主程序
- .NET Framework 4.8 + WPF 架构
核心架构
┌─────────────────────────────────────────────────┐
│ MainApplication (WPF UI) │
└──────────────────────┬──────────────────────────┘
┌───────────┼───────────┐
▼ ▼ ▼
┌──────────────┐ ┌────────┐ ┌──────────┐
│ TeklaSelector│ │ 模式1 │ │ 模式2 │
│ 零件选择/查找 │ │ 策略模式│ │ 几何算法 │
└──────┬───────┘ └───┬────┘ └────┬─────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────┐
│ Common (Logger/Database/Data) │
└──────────┬──────────┬───────────────┘
▼ ▼
┌────────────┐ ┌──────────┐
│ WPS输出 │ │ CAD提取 │
└────────────┘ └──────────┘
运行效果
模式1运行日志示例(PL8×1000 板与 PL56 板焊接):
- 创建 6 方向四周焊缝 → 路径去重后保留 1 组
- 识别出 2 条厚度边(8mm 和 10.3mm)
- 移除厚度边后分割为 2 条连续链(1647mm + 1568mm)
- 自动创建 2 条多边形焊缝并写入 WPS
模式2运行日志示例(同组零件):
- 边面投影检测出 36 段焊缝
- 去重后分离出 1 条厚度段
- BFS 最长路径查找出 2 个连通组(1568mm + 902mm)
- 两次 BFS 树直径算法找到最长简单路径
- 自动创建焊缝并写入 WPS
数据库能力
- 首次构建:扫描模型中 56824 个构件、290468 个零件
- 持久化:protobuf-net 序列化为 .bin + .idx 文件
- 二次启动:从文件加载索引仅需 100ms,按需加载零件详情
5. 效果与总结
提效效果
| 对比项 | 人工操作 | 使用插件 |
|---|---|---|
| 单条焊缝统计 | 2-3 分钟 | < 1 秒 |
| 批量焊缝(确认按钮) | 需逐个查找 | 自动查找+接触检测+批量处理 |
| 1000 条焊缝项目 | 2-3 天 | 约 30 分钟 |
| 准确率 | 依赖经验,易出错 | 算法精确,日志可追溯 |
SOLO 在流程中做了什么
- 架构设计:策略模式、模块分层、接口定义
- 算法实现:BFS/DFS 图算法、几何投影、多边形裁剪、厚度边识别
- API 适配:Tekla/CAD/WPS 三个 COM 接口的正确调用
- 调试修复:坐标系转换、COM 释放、序列化兼容性
- 代码质量:日志系统、异常处理、DPI 适配
可复用的方法
- 策略模式处理多场景:焊缝处理的 4 种策略(全闭合/单组保留/单组去除/多组)可以推广到其他多场景业务逻辑
- Tekla API 坐标系转换:Weld → PolygonWeld 的坐标转换方法是 Tekla 二次开发的通用技巧
- COM 接口多平台兼容:WPS/AutoCAD/中望 CAD 的 ProgID 自动检测和连接模式
- protobuf-net 按需加载:大型模型数据的索引+按需加载方案
开发感悟
这个项目让我深刻体会到 AI 编程的威力。Tekla 二次开发本身门槛很高——需要理解三维几何算法、COM 互操作、坐标系变换等专业知识。传统方式下,一个有经验的开发者完成这个项目至少需要 2 周。而借助 TRAE SOLO,我只需要清晰地描述业务逻辑和算法思路,SOLO 就能生成正确的代码,并且能够查阅 API 文档确保方法调用的准确性。
最让我惊喜的是 SOLO 对复杂算法的实现能力——两次 BFS 树直径算法、环状链合并、厚度边三角函数判定,这些都不是简单的 CRUD 代码,而是需要深入理解图论和计算几何的算法。SOLO 不仅实现了,而且代码结构清晰、注释完整。
**一句话总结:TRAE SOLO 让专业领域的二次开发从"能不能做"变成了"怎么描述清楚需求"——只要你能想清楚,SOLO 就能帮你实现。
**
忘说了,其实这个帖子也是SOLO写的

