ARTICLE · 1074173
实战|用 AI 写 CAD 插件:一键标注柜体(附源码+提示词)
做全屋定制的设计师都懂:图纸画出来,少不了漏标、标不清楚。
审查、拆单、车间、工地,这一整条链上,少一个标注不清楚,都是要挨骂的。
今天这篇,就解决这个问题:少挨骂,也提高效率。
不多说直接看效果:

标总高、总宽——外框尺寸,拆单第一眼要看
标分截高度——柜子与柜子之间分断
标内部尺寸——净宽净高,尤其是开放格,
别看就这几个需求,写起来还是挺麻烦的。
麻烦在哪?怎么识别柜体外框?怎么找内部横竖分隔线?标注怎么避让?这些后面都会讲。
写算法,定规则,光写规则和算法弄了我两天,所以这个不算简单的插件。不是直接给AI提示词就能出来的,需要和AI周旋打磨算法规则。
BZGT提示词设计
BZGT |
[CommandMethod("GTDIM")]public static void GTDIM(){Document doc = Application.DocumentManager.MdiActiveDocument;if (doc == null) return;Editor ed = doc.Editor;Database db = doc.Database;try{// 重置计数VTotal = VInner = VSplit = 0;HTotal = HInner = HSplit = 0;PromptSelectionOptions options = new PromptSelectionOptions();options.MessageForAdding = "\n请框选需要标注的柜体";SelectionFilter filter = new SelectionFilter(new[]{new TypedValue((int)DxfCode.Start,"LINE,LWPOLYLINE,POLYLINE")});PromptSelectionResult selection =ed.GetSelection(options, filter);if (selection.Status != PromptStatus.OK){ed.WriteMessage("\n未选择对象。");return;}using (Transaction tr =db.TransactionManager.StartTransaction()){BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);BlockTableRecord modelSpace =(BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite);DimLayout layout = DimLayout.FromDatabase(tr, db);double layer = layout.LayerOffset;List<RawSegment> segments = CollectSegments(tr, selection.Value.GetObjectIds());if (segments.Count == 0){tr.Commit();return;}List<HorizontalLine> horizontalLines =BuildHorizontalLines(segments);List<VerticalLine> verticalLines =BuildVerticalLines(segments);OuterFrame frame = FindOuterFrame(horizontalLines, verticalLines, ed);if (frame == null){ed.WriteMessage("\n无法建立外框。");tr.Commit();return;}HighlightOuterFrame(tr, frame);DrawAllDimensions(tr, modelSpace, ed, frame,horizontalLines, verticalLines, layer);tr.Commit();}UnhighlightAll(db);ed.WriteMessage("\n竖向:总尺寸 {0} 内部尺寸 {1} 分段尺寸 {2}",VTotal, VInner, VSplit);ed.WriteMessage("\n横向:总尺寸 {0} 内部尺寸 {1} 分段尺寸 {2}",HTotal, HInner, HSplit);ed.WriteMessage("\n标注已完成!");}catch (System.Exception ex){ed.WriteMessage("\nGTDIM 错误:{0}", ex.Message);}}
源码&插件获取方式
本文仅展示核心主程序代码,完整的算法逻辑、封装方法、工程源码、成品插件,可关注公众号,后台回复关键词一键标注免费获取,支持直接编译、直接加载使用。
新建项目 引用cad的api文件 给ai喂提示词 复制代码放到项目里面 编译代码 加载测试插件 反复调试插件
插件加载与测试
提供两种加载方式,新手推荐第二种一键工具加载,永久生效无需重复操作:
方式1:临时手动加载
打开CAD,命令行输入 NETLOAD,选择编译好的DLL文件,加载成功后输入GTDIM命令即可使用,重启CAD后失效。
方式2:工具一键永久加载(推荐)
使用专属CAD插件加载工具,实现插件永久自动加载、多版本CAD统一管理,无需每次手动加载:
关注公众号回复【CAD加载工具】,免费获取无广告工具安装包
关闭所有CAD进程,解压并安装工具,选择本机对应的CAD版本
浏览添加本次编译的柜体标注DLL插件,填写插件名称,点击【注册插件】
重启CAD,插件自动生效,永久可用,支持一键卸载、版本切换
工具详细使用教程可参考前篇:CAD DLL插件加载工具使用指南
新手进阶学习建议
本插件是全屋定制CAD实用插件的核心实战案例,掌握本次开发逻辑后,可继续拓展更多实用功能:一键批量打印、一键图层清理、一键柜体生成等。
所有插件开发均基于搭建的基础环境篇,无需重复配置,只需迭代功能代码即可落地,适合全屋定制设计师利用业余时间提升效率、掌握可变现的编程技能。
下一篇将更新 一键统计柜子面积
评论区回复「一键标注」,统计更新优先级!