一句话总结:在 NX 12 制图模块里,用两个小按钮把两类高频手工活自动化——把剖视图里的尺寸批量追加
(D1)/(D2)/(L1)后缀标号;再按一个矩形草图范围一键生成评审、修订用的连续云线。下面是视频复盘、规则设计和实现要点。
一、开篇:两类很常见、又很容易做乱的活
加工图、品检图、工序图里,尺寸后面经常要挂 (D1)、(D2)、(L1) 这类标号,用来和检验单、工艺卡、测量报告对应。手工改有三个坑:
- 漏改、错改:图纸一多,某个尺寸忘改,后面整套编号就断。
- 编号不连续:同一张图里
(D1)、(D3)中间跳号,审图时很难解释。 - 破坏关联:用游离文本去「补」后缀,尺寸和模型不再联动,改模型后图面直接漂移。
云线也是类似问题。评审圈改、断裂边界、局部放大范围、工序提示区域,手画的话线条松紧、圈口位置、比例全凭手感;遇到改版,重画一遍非常烦。
所以我把它们做成了两个小按钮:后缀标号和云线。后缀标号在公开仓库里有完整实现(705 行,下面第三节讲规则);云线是内部版功能,先看视频。
二、先看视频:两个按钮完整演示
2.1 后缀标号(29 秒)
后缀标号 · 29 秒完整演示
视频里做的事:对当前图纸剖视图上已有的尺寸,按类型归组、按空间排序,逐个追加 (D1)、(D2)、(L1) 标号,信息窗口同步输出处理日志。注意它只处理当前活动图纸——别的 sheet 上的同名标注一概不动。
2.2 矩形云线(33 秒)
矩形云线 · 33 秒完整演示
流程:在制图图纸上用草图画一个矩形圈出要标记的区域 → 点「云线」→ 工具沿矩形外轮廓生成一圈连续云线。云线是内部版实现,公开仓库暂无对应代码,这里只展示视频,实现细节留在公司版本里。
三、后缀标号:规则比按钮更重要
这类功能不能只做成「把 (d) 改成 (D)」。真正可用,要先定规则。以下是 Step7_AppendSuffix.cpp 里最终落地的版本:
| 规则 | 实现 |
|---|---|
| 作用范围 | 只处理当前活动图纸;其它图纸、其它视图、坐标标注一律跳过并计数 |
| 类型白名单 | 水平、平行、正交、直径、半径 → D 组;垂直 → L 组;其余类型跳过 |
| 分组语义 | 车床件剖视图里,水平标注测径向(直径方向 → D),垂直标注测轴向(长度方向 → L),直径本身即 D 语义 |
| 编号方式 | 按当前图纸独立从 1 起;组内按空间位置排序,编号顺序确定 |
| 保留关联 | 只改附加文本槽位(AppendedText.SetAfter),公差本体视为不可动区域,不新建游离文本 |
| 幂等 | SetAfter 是全量替换语义——重复运行同一张图,结果相同,不会出现 (D1)(D1) 叠加 |
| 可审计 | 信息窗输出:成功/失败、其它图纸、其它视图、坐标标注、其它类型各自计数 |
改造示意(以视频为准):
| |
三个值得单独说的点:
① 编号顺序不是「谁先谁后」,是空间排序。 录制宏里手工编号有过瑕疵——D7 重复出现、D6/D7 错序。代码里按标注的空间位置排序后重新编号,天然避开这类问题。
② 直径/半径必须换 Builder。 CreateLinearDimensionBuilder 只接受线性尺寸;直径、半径标注(子类型 9/10)必须走 CreateRadialDimensionBuilder,否则直接失败。
③ 幂等是「替换」不是「追加」。 用户不可能记得上次编到 D 几,所以不做增量追加——SetAfter 直接把后缀槽位替换成新标号,重跑结果一致。
简化伪代码(完整实现见仓库 Step7_AppendSuffix.cpp,705 行):
| |
四、一个 NX12 特有的坑:GetViews() 会骗你
判断「标注属于哪张图纸」是这件事的核心,而 NX12 在这里埋了个雷:
NXOpen Annotation::GetViews() 在 NX12 中对制图标注会抛内部错误 3655004(“Object is not a displayable PMI”)——这个接口实际只对 PMI 显示实例可用。上一版实现因此全部判「未知」,日志实测:
| |
两百多个标注一个都没归上类,等于功能全废。最终改走 UF 层原始 tag 通道,绕开 NXOpen 的 View 指针包装:
UF_DRF_ask_associative_origin→ 取关联视图原始 tag;UF_DRF_ask_associativity_data→ 取标注所测几何所在图纸(归属的权威依据,与放置位置无关);- NXOpen
GetViews()保留兜底。
这个坑和前一篇《我给 NX 写出图插件》里「跨图纸误收」是同一个病根:NXOpen 包装层在制图场景下会失守,归属判断要落到 UF 原始 tag 上。
五、云线:本质是按闭合轮廓生成「均匀波动曲线」
云线看起来是画花边,实质是几个约束问题:闭合、等距、不交叉、密度可控、可重复生成。
工程上值得留意的几点:
- 闭合方向决定内外:云线应沿轮廓法向一致偏置,不能一半朝里一半朝外,否则长边中段会交叉。
- 采样要足:只拿 4 个角点画样条会尖,按弦长细分再生成才平滑;太多又会拖慢速度、增大文件。
- 对象归属:云线应放独立图层/颜色,区分「设计几何」和「审图标记」,导出 DXF/PDF 时也方便过滤。
- 清理策略:重复执行时是替换旧云线还是新增,要明确;是否删源草图做成开关。
云线为内部版实现,公开仓库暂无对应代码。视频为 33 秒完整演示,供了解交互流程。
六、价值不在炫技,在把口头规范变成按钮
- 把口头规范变成按钮:以前「后缀统一大写、同图从 1 编号、云线别压尺寸」靠检查表和责任心;现在规则进代码,检查表变成日志。
- 减少改版返工:模型改一处,尺寸后缀不会丢;评审区域重圈,云线按同一套规则重生成,视觉风格稳定。
- 日志能当半个测试:成功/失败、来源视图、归组、计数都能回放。现场反馈「某个尺寸没编号」,先看日志是类型不在白名单、视图归属失败,还是目标不在当前图纸,定位会快很多。
七、可以继续做的
- 批量图纸模式:多张 sheet 统一跑,输出「图纸-编号-对象 tag」CSV,方便和检验单核对。
- 后缀模板:支持
(D1)、ØD1、孔位 D1等模板;但别把公差、基准、测量要求混进同一个后缀。 - 云线样式:线型、颜色、图层、是否避开尺寸/注释、是否只包局部视图边界。
- 发布前校验:导出 PDF/DXF 前检查还有没有小写
(d1)、是否跳号、云线是否压住公差框。 - 权限与审计:正式项目里自动改标注要留痕,和版本管理绑定,避免「工具改图」变成「无记录改图」。
这两个视频演示的是很小的事:一个改后缀,一个画云线。但在工程图场景里,小工具的价值恰恰在于把高频、易错、又必须统一的动作收进同一个入口。比起一次性写个大而全的「制图自动化平台」,我更喜欢这种从真实痛点长出来的小功能:按钮少,日志清,效果一眼能验收。
源码仓库:tan-wen-peng/UG_Draw_NXopen_Dill(后缀标号实现见 NX12_NXOpenCPP_Wizard1/Step7_AppendSuffix/)
相关阅读:我给 NX 写出图插件:跨图纸误收、垂直标注漏判、视图拾取三个坑
湘公网安备43042402000045号