ARTICLE · 1130062
实战|用 AI 写 CAD 插件:图库资源管理器(附源码 + 提示词)

点击蓝字,关注我们
这是《零基础 CAD 插件从 0 到 1》第 18 篇
先说一句实话:这个插件我写得挺费劲
前几期做的小工具,基本上一个下午就能跑通——定时保存、图层切换、快捷键,都是几十行代码的事。
但这个图库资源管理器,我前后折腾了两三天。
不是功能有多复杂,是问题太碎:
图库里有 200 多个图块,第一次打开面板卡了七八秒
白底黑线的图块,显示出来和黑底白线的混在一起,看着像半成品
分类树点一下换一个分类,卡片墙整个重建,一抖一抖的
有的图块有属性、有的没属性,插入的时候属性经常丢
最头疼的是:图块的缩略图到底从哪来
每一个都是小问题,但凑在一起就是:能用,但不好用。
后来我一边画图一边改,一边截图丢给 AI 让它优化,才慢慢把体验磨到位。
这篇不是"你看我多厉害",是"我踩过的坑你别再踩"
先看效果:选图块不用再翻文件夹
看实际操作:

打开窗口设置你的图库目录

插入图块
不用打开资源管理器一层层找图块,不用靠文件名猜里面画的什么。
打开面板,左边挑分类,右边挑图块,双击一下就插到图纸里。
缩略图直接显示,黑底白线,跟你想要的风格一致。200 个图块也是秒开。
这个插件解决了什么问题?
针对设计师找图块最烦的几件事,做了四个改进:
图块看得见自动扫描你指定的图库文件夹(子文件夹也扫),把所有图块以缩略图墙的方式摆出来。不用打开 DWG 挨个看,一眼扫过去就知道要哪个。
第二次打开秒出图每个图块第一次显示会慢一点(要读 SLD 生成缩略图),之后就记住了。下次再打开面板,200 个图块也是瞬间铺满,不用再等。
分类树好管左边自动按文件夹生成分类,右键就能加分类、改名字、删分类,跟 Windows 文件夹一样用。找图块先点分类缩小范围,再慢慢挑。
双击即插选中图块双击,切到 CAD 里点一下位置,图块就插进去了。带属性的动态块也能正确带出属性。
交互设计:一次设置,永久使用
设置一次,以后再也不用管。

图库资源管理器界面
首次配置(仅做一次)
输入
TUKU回车,面板弹出来点右上角扳手 🔧 图标,选你的图库文件夹(比如
C:\CAD\YQArch\sys\blocks)关闭。下次再打开,它记住了
日常使用
看:左边点分类,右边缩略图跟着变
找:上面搜索框输关键字,即时筛选
插:双击缩略图,CAD 里点位置,完成
改分类:右键分类,加、改、删
调透明度:标题栏滑块拖动,不影响画图
刷新:图库变了,点左下角「刷新缩略图」
全程无感,专心选图。
核心干货:给 AI 的精准提示词
还是那句话
用 AI 写插件写出来的功能不对,本质是需求没说细。AI 就像助理,你说清楚规则,它才能做准。下面是实测多轮、输出稳定能用的提示词模板,直接复制就能用:
角色设定:你是资深 CAD 插件开发工程师,精通 C# 和 CAD 原生接口,
面向室内设计场景开发插件。
功能需求:开发一个「图库资源管理器」插件,具体要求:
命令名:TUKU
打开方式:
在 CAD 里输入 TUKU 回车,弹出一个窗口,显示图库里的所有图块。
窗口长相:
- 无边框、圆角、看着像现代软件那种
- 不抢 CAD 的焦点(用户还能继续在 CAD 里操作)
- 不占任务栏
- 标题栏放:软件名、透明度滑块、打开日志、设置目录、最小化、关闭
- 左边一列:搜索框 + 分类树 + 刷新按钮
- 右边一大块:4 列的缩略图墙
- 底部:进度提示 + 数量统计 + 插入按钮
缩略图怎么来(这是最关键的部分):
- 优先读跟 DWG 同名的 SLD 文件(CAD 自带的幻灯片格式,
里面存着图块画好的样子,比打开 DWG 快几十倍)
- 读 SLD 的时候要解析它的二进制结构,按绘图指令把线条画出来
- 把读出来的图,白底黑线统一改成黑底白线,看着整齐
- 没 SLD 就依次找:同名 PNG → 同名 JPG → DWG 里嵌的预览图
- 都没有,最后才打开 DWG 截图(最慢的兜底)
- 处理好的缩略图存起来,下次直接用,不用重新生成
分类树:
- 按图库文件夹的结构自动生成,根节点叫「全部」
- 右键能加子分类、改名字、删分类
- 点分类,右边缩略图跟着过滤
- 展开、折叠用起来跟 Windows 文件夹一样
数据管理:
- 缩略图列表用最轻的方式存,切换分类不重新建卡片
- 过滤条件缓存起来,避免反复读界面
配置保存:
- 用简单的配置文件存用户的目录设置、透明度
- 下次打开自动读出来
插入逻辑:
- 双击缩略图 → 面板暂时隐藏 → 切到 CAD → 提示用户点一个位置 → 图块插进去
- 带属性的动态块也能正确带出属性
- 插完面板自动弹回来
环境:.NET Framework 4.8,AutoCAD 2021 或更新版本
输出要求:
给出完整可复制编译的代码,关键地方加中文注释,
说明怎么编译、怎么加载到 CAD 里
写提示词的核心原则
先定身份先让 AI 进入专业 CAD 开发的角色,避免用错 API、写出行外代码。
再划边界明确命令名、CAD 版本、运行环境,从根源减少兼容问题和报错。
讲清规则怎么保存、怎么注入、怎么设为当前,每一步规则都说死,不给 AI 自由发挥的空间。
固定格式要完整代码、要注释、要部署说明,都明确提出来,输出直接能用。
照着这个结构写,AI 输出代码的可用率至少提升 80%。
核心源码分享
下面是一部分代码,
using System;using System.IO;using System.Reflection;using System.Windows.Interop;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.Runtime;using AcApp = Autodesk.AutoCAD.ApplicationServices.Application;using Exception = System.Exception;[assembly: ExtensionApplication(typeof(GalleryExplorer.GalleryExplorerApp))]namespace GalleryExplorer{public class GalleryExplorerApp : IExtensionApplication{private static GalleryExplorerWindow _win;publicvoidInitialize(){GalleryLog.Init();// 加载 SlideCtrl.dlltry{string path = FindSlideCtrl();if (path != null){var asm = Assembly.LoadFrom(path);GalleryLog.Info("已加载 SlideCtrl.dll:" + path +",版本:" + asm.GetName().Version);}else{GalleryLog.Warn("找不到 SlideCtrl.dll,所有候选路径均不存在");}}catch (Exception ex){GalleryLog.Error("加载 SlideCtrl.dll 失败", ex);}// 兜底:注册程序集解析事件AppDomain.CurrentDomain.AssemblyResolve += ResolveSlideCtrl;GalleryLog.Info("插件 Initialize 完成");}publicvoidTerminate(){GalleryLog.Info("插件 Terminate");}///<summary>/// 从多个候选位置搜索 SlideCtrl.dll///</summary>privatestaticstringFindSlideCtrl(){string myDir = "";try{myDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);}catch { }string localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);string myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);var candidates = new System.Collections.Generic.List<string>();// 1. 当前 Assembly 所在目录if (!string.IsNullOrEmpty(myDir))candidates.Add(Path.Combine(myDir, "SlideCtrl.dll"));// 2. %LOCALAPPDATA%\GalleryExplorer\candidates.Add(Path.Combine(localAppData,"GalleryExplorer", "SlideCtrl.dll"));// 3. 我的文档\GalleryExplorer\candidates.Add(Path.Combine(myDocs,"GalleryExplorer", "SlideCtrl.dll"));// 4. 项目 bin 目录(硬编码,方便开发时用)candidates.Add(@"E:\CAD\GalleryExplorer\bin\Debug\SlideCtrl.dll");candidates.Add(@"E:\CAD\GalleryExplorer\bin\Release\SlideCtrl.dll");// 5. NuGet 包目录(硬编码)candidates.Add(@"E:\CAD\GalleryExplorer\packages\AutoCAD.Slide.Control.1.1.0\lib\net45\SlideCtrl.dll");candidates.Add(@"E:\CAD\GalleryExplorer\packages\AutoCAD.Slide.Control.1.1.0\lib\net40\SlideCtrl.dll");foreach (var c in candidates){if (File.Exists(c)) return c;}// 都没找到,打印一遍方便排查GalleryLog.Warn("SlideCtrl.dll 搜索路径:");foreach (var c in candidates)GalleryLog.Warn(" " + c);return null;}privatestatic Assembly ResolveSlideCtrl(object sender, ResolveEventArgs args){try{var asmName = new AssemblyName(args.Name);if (asmName.Name != "SlideCtrl") return null;string path = FindSlideCtrl();if (path != null){GalleryLog.Info("AssemblyResolve 加载:" + path);return Assembly.LoadFrom(path);}}catch { }return null;}[CommandMethod("TUKU")]publicvoidShowWindow(){GalleryLog.Info("命令 TUKU 被调用");Document doc = AcApp.DocumentManager.MdiActiveDocument;if (doc == null){GalleryLog.Warn("没有活动文档,退出");return;}if (_win != null && _win.IsLoaded){GalleryLog.Info("窗口已存在,激活它");if (_win.WindowState == System.Windows.WindowState.Minimized)_win.WindowState = System.Windows.WindowState.Normal;_win.Show();_win.Topmost = true;_win.Topmost = false;return;}GalleryLog.Info("创建新窗口");_win = new GalleryExplorerWindow(doc);try{var helper = new WindowInteropHelper(_win);helper.Owner = AcApp.MainWindow.Handle;GalleryLog.Info("窗口 Owner 已设为 CAD 主窗口");}catch (Exception ex){GalleryLog.Error("设置 Owner 失败", ex);}_win.Closed += (s, e) =>{GalleryLog.Info("窗口已关闭");_win = null;};_win.Show();GalleryLog.Info("窗口已显示");}}}
用 AI 开发插件的完整流程
这类带界面的工具插件,用 AI 分步开发最顺手:
需求拆解
把「图库资源管理器」拆成五块,逐个让 AI 实现:
第一块:窗口长得像什么样
第二块:缩略图怎么生成
第三块:分类树怎么建、怎么过滤
第四块:双击怎么插入图块
第五块:设置怎么记住
不要一次性把完整需求丢给 AI,它消化不了。
分步验证
先写缩略图,看能不能正常显示出来
再加黑底白线处理,看效果对不对
再加分类树,测右键增删改能不能同步到文件夹
最后加插入逻辑,测带属性的块属性有没有带出来
每一步跑通再往下,出问题好定位。
实测优化
挂 200 多个图块跑一天,看会不会卡,看反复点分类有没有变慢,把遇到的问题截图发给 AI,让它优化。
细节调整
默认目录、缩略图大小、一行显示几个,都可以直接告诉 AI 让它改。
开发过程中我遇到的几个大的问题
问题1:SLD 文件到底怎么读
就是上面说的那件事。没有现成资料,全靠自己试。
用十六进制工具一个字节一个字节看,试了十几种读法,花了整整一天才把 SLD 的结构搞清楚。
这绝对是整个插件最难的 20%。
问题2:第一次打开太慢
200 个图块,每个都要现场生成缩略图,第一次打开要等七八秒。
后来加了个「记住」机制——第一次生成过就存起来,下次直接读,第二次打开 1 秒内。
问题3:白底黑线看着不像话
有些图块是白底黑线,有些是黑底白线,混在一起像半成品。
后来统一处理:不管原来什么底色,都给它变成黑底白线,看着整齐。
成品领取 & 下期预告
成品插件直接领
不想自己编译、调代码的朋友,关注公众号 「下班让AI教我做插件」,后台回复 「图库」,直接领取编译好的 DLL 插件文件,NETLOAD 加载或者是使用我写的dll插件加载工具箱。 完整工程源码拿到手就能二次修改。
下期预告
下一篇咱们继续图纸提效工具,如果有想要的插件可以在评论区留言,我看看哪个留言最多就做哪个。
我是做插件的设计师,专注用 AI 提高 CAD 设计效率。关注我,下班一起做插件,把重复工作交给程序。
声明
本插件完全免费分享,仅供交流学习使用。严禁任何人将其用于商业倒卖或牟利。如需转载,请注明出处。请大家尊重作者的劳动成果,共同维护良好的交流环境。

E
N
D