夜雨聆风学习资料网

ARTICLE · 1110337

实战|用 AI 写 CAD 插件:图块管理工具(附源码 + 提示词)

实战|用 AI 写 CAD 插件:图块管理工具(附源码 + 提示词)

点击蓝字,关注我们

这是《零基础 CAD 插件从 0 到 1》第 13 篇

做设计的小伙伴们应该都知道,图纸里的图块一直是个隐形的大麻烦:

别人的图纸里堆了一堆垃圾块,想清又不敢清;PURGE 命令误删率极高,手动一个个找更是要命;想插入一个旧块,结果基点乱跑,点在左下角,块飞到右上角;更恐怖的是,有些块删除时直接把图纸搞崩……

今天咱们用 AI 写一个图块管理器,一次性把这些痛点全解决:

列表展示、搜索过滤、双击定位、以实体位置插入、重置基点到左下角、安全删除、一键清理未使用块,可视化窗口操作,只删该删的,不碰图纸其他内容。

先看效果:一个窗口解决所有图块的问题

GIF1(浏览+搜索):输入 ALDELBLK → 列表展示全图所有块,未使用的排在前面并标记黄色 → 输入关键字实时过滤

GIF2(双击定位):选中一个块 → 双击 → 图纸自动缩放到该块

GIF3(插入+对齐):右键 → 插入 → 点图纸任意位置 → 块的实体左下角精确对齐到你点击的位置,不再受基点偏移影响

GIF4(重置基点):右键 → 重置基点到左下角 

GIF5(清理未使用):点"清理未使用" → 一键清除所有真·垃圾块

这个插件解决了什么问题?

针对图块管理的六大痛点,做了六个核心优化:

  • 可视化列表 + 实时搜索列表展示全图所有命名块,含"引用次数、实体数、状态、嵌套于"信息。顶部搜索框实时过滤,输入关键字秒找到目标块。

  •  双击定位到图纸选中块 → 双击 → 图纸自动缩放并高亮该块的第一个引用。用 ZOOM Window + 坐标系转换,无论 UCS 是否旋转,都能精确居中。

  • 以实体左下角插入(不吃基点亏)普通插入是"基点对齐点击点",如果块的基点在原点、图形在几万单位外,块就会飞到看不见的地方。本插件用实体的几何边界左下角对齐点击点,无论基点在哪,插入位置永远准。

  • 重置基点到左下角一键把块内所有实体整体平移,让实体左下角变成新的 (0,0,0)。从此以后这个块的插入、引用都规规矩矩。

  • 安全删除块定义(不会炸图纸)有引用的块,先删引用,再用 db.Purge() 判断能否安全删定义。被嵌套/被隐形引用时主动拒绝,不再让图纸崩溃。

  • 嵌套引用识别 + 真正的"未使用"判定之前只能看到"直接引用",图库里的子块会误显示"未使用"。现在用 BFS 递归收集所有嵌套引用,只在完全没有任何引用时才标记为未使用。

交互设计:可视化窗口+多功能操作

启动命令:输入 ALDELBLK 回车,弹出图块管理器窗口。

主列表:

  • 顶部搜索框:实时过滤

  • 右侧按钮:刷新 / 清理未使用

  • 列表列:名称 / 引用(总) / 实体数 / 状态 / 嵌套于

双击:定位到图纸并高亮

右键菜单:

  • 📍 定位到图纸

  • 📌 插入到图纸(实体左下角对齐)

  • 🎯 重置基点到左下角

  • ✏️ 打开块编辑器

  • 🗑️ 删除此块定义(带引用警告)

其他:

  • 单击列表项 → 下方显示块详情 + 图形预览

  • 按 ESC → 关闭窗口

没有复杂参数,打开就知道怎么用。

核心干货:给 AI 的精准提示词

还是那句话:

用 AI 写插件写出来的功能不对,本质是需求没说细。

下面是实测多轮、输出稳定能用的提示词模板,直接复制就能用:

角色设定:
你是资深 CAD .NET 二次开发工程师,精通 C# 与 CAD 原生 API,
面向全屋定制设计场景开发插件。
功能需求:
开发一个「图块管理器」插件,命令名 ALDELBLK。
界面:
使用 WPF 制作操作窗口,包含:
- 顶部搜索框(实时过滤块名)
- 刷新按钮、清理未使用按钮
- 块列表(名称/引用次数/实体数/状态/嵌套于)
- 下方详情面板(含 WPF 渲染的块图形预览)
功能要求:
1. 加载块列表
- 遍历 BlockTable,过滤布局块、匿名块、* 开头的系统块
- 统计直接引用次数(模型空间 + 所有布局空间)
- 用 BFS 递归收集嵌套引用,区分"直接引用"和"总引用"
- 记录每个块被哪些父块嵌套(NestedIn)
- 未使用块排在列表前面
2. 双击定位
- 用 ZOOM Window 命令定位到块的第一个引用
- WCS → UCS 坐标转换(Critical!)
- 先 SetImpliedSelection 高亮,再 SendStringToExecute 执行 ZOOM W
3. 插入块
- 只让用户点一个插入点,不要比例、角度输入
- 用块实体的 GeometricExtents 左下角对齐到点击位置
- 用 ed.CurrentUserCoordinateSystem 把点击的 UCS 坐标转成 WCS
- 支持属性块(自动生成 AttributeReference)
4. 重置基点到左下角
- 计算块内所有实体的几何边界
- 把所有实体 TransformBy 位移 -MinPoint
- 让实体左下角变成新的 (0,0,0)
5. 安全删除块定义
- 先用 GetBlockReferenceIds(true, false) 拿到所有直接引用
- 删除这些引用
- 用 db.Purge() 判断块定义能否安全删除
- Purge 不通过则拒绝删除并说明原因
- 所有操作包在 DocumentLock 内
6. 一键清理未使用块
- BFS 递归收集所有引用
- 只删除"直接引用 = 0 且无嵌套引用"的块
- 删除失败时计数,最后报告
环境:
.NET Framework 4.8,引用 AcMgd、AcDbMgd
输出要求:
给出完整可复制编译的代码
关键逻辑加中文注释
说明编译和加载方法

写提示词的核心原则

  1. 先定身份先让 AI 进入专业 CAD 开发的角色,避免用错 API、写出行外代码。

  2. 再划边界明确命令名、CAD 版本、运行环境,从根源减少兼容问题和报错。

  3. 讲清规则怎么保存、怎么注入、怎么设为当前,每一步规则都说死,不给 AI 自由发挥的空间。

  4. 固定格式要完整代码、要注释、要部署说明,都明确提出来,输出直接能用。

照着这个结构写,AI 输出代码的可用率至少提升 80%。

实际开发不要像我分的这么细,可以一个一个功能,多轮提示词,让每个功能实现了再进行下一个功能的优化。我这里是整合了所有功能,功能太多AI容易忘记。

核心源码分享

下面是核心实现代码,基于 C# + WPF + CAD .NET API 编写

using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.Runtime;using AcApp = Autodesk.AutoCAD.ApplicationServices.Application;namespace BlockDeletePlugin{    public class Commands    {        [CommandMethod("ALDELBLK")]        publicvoidAlDelBlkCommand()        {            Document doc = AcApp.DocumentManager.MdiActiveDocument;            if (doc == null) return;            BlockDeleteWindow win = new BlockDeleteWindow();            System.Windows.Interop.WindowInteropHelper helper =                new System.Windows.Interop.WindowInteropHelper(win);            helper.Owner = AcApp.MainWindow.Handle;            AcApp.ShowModalWindow(win);        }    }}

说明:这是插件的入口代码,里面的命令可以自己更改,流程是统一的。

其余的代码就不放出来,代码太多怕把文章撑爆了。想要的直接拿我的工程文件

用 AI 开发插件的完整流程

这类工具型插件,用 AI 分步开发,上手最快:

需求拆解把「图块管理器」拆成「列表展示 → 搜索过滤 → 双击定位 → 插入 → 重置基点 → 删除 → 清理未使用」七个模块,逐个让 AI 实现。

分步验证先做列表加载和显示,确认能列出所有块;再加搜索过滤;再加双击定位;再加插入;最后做重置基点和安全删除。每一步跑通再往下,出问题好定位。

实测优化拿不同的图纸测试:带嵌套块的、带匿名块的、带外部参照的。每次遇到崩溃或异常,先看命令行输出的异常信息,再让 AI 针对性修复。

细节调整窗口大小、按钮文案、右键菜单项、图标,都可以根据自己的操作习惯改,让 AI 直接调参数就行。

成品领取 & 下期预告

成品插件直接领

不想自己编译、调代码的朋友,关注公众号 「下班让AI教我做插件」,后台回复 「图块管理器」,直接领取编译好的 DLL 插件文件,NETLOAD 加载或者是使用我写的dll插件加载工具箱。 完整工程源码拿到手就能二次修改。

下期预告

下一篇咱们继续做图纸提效工具,如果有想要的插件可以在评论区留言,我看看哪个留言最多就做哪个。

我是做插件的设计师,专注用 AI 提高 CAD 设计效率。关注我,下班一起做插件,把重复工作交给程序。

E

N

D

相关学习资料