夜雨聆风学习资料网

ARTICLE · 1074173

实战|用 AI 写 CAD 插件:一键标注柜体(附源码+提示词)

实战|用 AI 写 CAD 插件:一键标注柜体(附源码+提示词)
这是《零基础 CAD 插件从 0 到 1》第 7 篇

做全屋定制的设计师都懂:图纸画出来,少不了漏标、标不清楚。

审查、拆单、车间、工地,这一整条链上,少一个标注不清楚,都是要挨骂的。

今天这篇,就解决这个问题:少挨骂,也提高效率。

不多说直接看效果:

首先我们今天的这个插件要干什么

标总高、总宽——外框尺寸,拆单第一眼要看

标分截高度——柜子与柜子之间分断

标内部尺寸——净宽净高,尤其是开放格,

别看就这几个需求,写起来还是挺麻烦的。

麻烦在哪?怎么识别柜体外框?怎么找内部横竖分隔线?标注怎么避让?这些后面都会讲。

写算法,定规则,光写规则和算法弄了我两天,所以这个不算简单的插件。不是直接给AI提示词就能出来的,需要和AI周旋打磨算法规则。

需求定好了接下来就是设计交互流程了。
设计交互流程,就是用户怎么使用的流程
第一步:用户输入命令BZGT
第二步:提示用户框选需要标注的柜子
第三步:用户选择柜子
第四步:用户按下回车或是空格
插件就自动绘制标注

提示词设计

很多人用AI写代码,上来就说"帮我写一个CAD标注插件",结果AI生成一堆不能用的东西。问题出在:你没给AI明确的约束。
首先我们今天这个插件不可能是AI一轮提示词就写好的
我是一名全屋定制设计师,没有任何开发经验,我准备使用C#语言 .net4.8 在cad中开发一个一键标注的插件
1,需求标总高、总宽
2,标分截高度
3,标内部尺寸
4,总高,总宽只标一个,分别位置在右侧和底下
5,需要屏蔽,块,圆,标注
第一步:用户输入命令BZGT
第二步:提示用户框选需要标注的柜子
第三步:用户选择柜子
第四步:用户按下回车或是空格
命令行输出"标注完成,共标注 X 个柜体,Y 个标注"
提示词
这只是第一轮的提示词,给完AI之后你会发现能跑,能标注,但是效果不理想,这时候你就得给AI加多规则,比如你这个标注要标注在左边还是右边,是上面还是下面。
后面还要很多次要求,一直达到你要的效果为止。
我展示部分代码吧代码太多会占用文章字数:
 [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);     } }
代码块

源码&插件获取方式

本文仅展示核心主程序代码,完整的算法逻辑、封装方法、工程源码、成品插件,可关注公众号,后台回复关键词一键标注免费获取,支持直接编译、直接加载使用。

操作流程
具体流程可查看环境篇的文章这篇单独讲了具体步骤
首先我们是:
  1. 新建项目
  2. 引用cad的api文件
  3. 给ai喂提示词
  4. 复制代码放到项目里面
  5. 编译代码
  6. 加载测试插件
  7. 反复调试插件

插件加载与测试

提供两种加载方式,新手推荐第二种一键工具加载,永久生效无需重复操作:

方式1:临时手动加载

打开CAD,命令行输入 NETLOAD,选择编译好的DLL文件,加载成功后输入GTDIM命令即可使用,重启CAD后失效。

方式2:工具一键永久加载(推荐)

使用专属CAD插件加载工具,实现插件永久自动加载、多版本CAD统一管理,无需每次手动加载:

  1. 关注公众号回复【CAD加载工具】,免费获取无广告工具安装包

  2. 关闭所有CAD进程,解压并安装工具,选择本机对应的CAD版本

  3. 浏览添加本次编译的柜体标注DLL插件,填写插件名称,点击【注册插件】

  4. 重启CAD,插件自动生效,永久可用,支持一键卸载、版本切换

工具详细使用教程可参考前篇:CAD DLL插件加载工具使用指南

新手进阶学习建议

本插件是全屋定制CAD实用插件的核心实战案例,掌握本次开发逻辑后,可继续拓展更多实用功能:一键批量打印、一键图层清理、一键柜体生成等。

所有插件开发均基于搭建的基础环境篇,无需重复配置,只需迭代功能代码即可落地,适合全屋定制设计师利用业余时间提升效率、掌握可变现的编程技能。

下一篇将更新 一键统计柜子面积 

评论区回复「一键标注」,统计更新优先级!

相关学习资料