夜雨聆风学习资料网

ARTICLE · 1122687

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

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

    点击蓝字,关注我们

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

做设计的小伙伴肯定都知道图片插入,如果要发给别人其实是很麻烦的。

CAD 插入图片,要么用 IMAGEATTACH,要么 OLE 拖进去。两个都不好用:

  • 光栅图像:DWG 里存的只是一条路径,图片本身没进去。图纸一发出去,或者换台电脑打开,图片就变成"图像未找到"。给你发图的人折腾半天,收到的人看到的全是空框。

  • OLE 嵌入:倒是真进 DWG 了,但打印模糊、文件巨大、大图容易崩、调不了透明度。做底图的时候能把人逼疯。

更烦的是,图上插了 20 张效果图,哪张丢了、哪张没加载,完全看不出来。想重新链接,还得一张一张点特性面板改路径。

今天咱们用 AI 写一个图片管家,从根上解决"图片会丢":

图片二进制直接嵌入 DWG、走哪带哪、打开自动恢复、支持批量插入、一键删除——单 DWG 文件就能发给别人。

先看效果:单 DWG走天下

GIF1(打开窗口):输入 PIC → 弹出图片管家 → 显示当前图纸所有图片,带缩略图、状态。

GIF2(插入图片):点"插入图片" → 选图片(可多选)→ 图纸上点一下 → 图片插入完成。

GIF3(批量插入):多选 3 张 → 点起始位置 → 从左到右依次排开,间距可设置。

GIF4(批量删除):勾选多张 → 点"删除选中图片" → 一次性清掉。

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

针对图片插入的六大痛点,做了六个核心优化:

  • 图片二进制直接嵌入 DWG

    打开图纸,把图片文件读成二进制,用 XRecord 存到 DWG 的命名对象字典里。

  • 打开图纸自动恢复

    用户完全无感。 只要 DWG 打开,图片就自动回来。

  • 临时文件机制

    DWG 里的图片是二进制,CAD 不认识。所以需要:

    插入时:二进制存进 DWG,同时提取一份到临时目录;

    显示时:RasterImageDef 指向临时文件,CAD 才认得;

    重开时:临时文件不在了就重新提取。

  • 批量插入 + 自动排布

    一次选多张图 → 点一下起始位置 → 从左到右依次排开。

    顶部可以设置间距(默认 1000mm)。

    顺序就是你选图片时的顺序。

  • 批量删除

    列表每行加复选框,表头有全选框,下面是"全选 / 反选 / 删除选中图片"。

    一次删 10 张也没问题,删除后立即 Regen 刷新。

  • 不抢焦点

    窗口打开后不抢 CAD 焦点,鼠标直接移到图纸上就能点插入点。

    插入时窗口自动隐藏 → 让用户点位置 → 完成后自动显示。整个流程一气呵成。

    交互设计:一个窗口,四个区域

    启动命令:输入 PIC 回车,弹出图片管家。
  • 【区域 1:标题栏】
    - 应用图标 + "图片管家"- 最小化 / 关闭按钮- 可拖拽移动
  • 【区域 2:插入卡片】
    - "插入图片"按钮(支持多选)- 间距输入框(默认 1000)
  • 【区域 3:图片列表】
    - 每行:复选框 / 缩略图 / 文件名 / 嵌入标识 / 状态- 单击选中 → 双击定位到图片- 状态:已嵌入(绿色)/ 数据丢失(红色)
  • 【区域 4:操作按钮】
    - 定位到图片 / 全选 / 反选 / 删除选中图片 / 刷新
  • 【底部状态栏】
    - 显示"共 N 张图片,其中 M 张未找到"

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

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

下面是实测多轮、输出稳定能用的提示词模板:

角色设定

你是资深 CAD 插件开发工程师,用 C# 和 WPF 做 AutoCAD 插件。

功能需求

开发一个「图片管家」插件,命令名 PIC。

核心目标

解决"插入图片后图纸发出去图片就丢"的问题。

现在的做法要么是引用外部路径(图片一移动就丢),要么是 OLE 嵌入(打印模糊、文件大、容易崩)。

要做的是:把图片直接装进 DWG 文件里,走哪带哪。

界面

WPF 无边框圆角窗口,毛玻璃卡片风格:

  • 标题栏:应用图标 + "图片管家" + 最小化/关闭,可拖拽

  • 卡片 1:插入图片按钮 + 间距输入框(默认 1000)

  • 卡片 2:图片列表(复选框 / 缩略图 / 文件名 / 标识 / 状态)

  • 卡片 3:定位 / 全选 / 反选 / 批量删除 / 刷新

  • 状态栏:显示图片数量和异常数量

功能要求

  1. 窗口行为

    • 打开后不抢 CAD 焦点,鼠标能直接到图纸上操作

    • 关闭窗口后恢复 CAD 焦点

    • 插入时先隐藏窗口,让用户点位置

  2. 图片装进 DWG(核心)

    • 把图片文件读成二进制,装进 DWG 内部

    • 同一张图只存一份,不要重复装

    • 存完之后,即使原始图片文件被删了,图纸上的图片还能显示

  3. 打开图纸自动恢复

    • 每次打开图纸时,自动检查所有图片

    • 如果有图片找不到路径,就从 DWG 内部把图片取出来

    • 用户不需要做任何操作,打开就能看到

  4. 插入图片

    • 支持一次选多张

    • 单张:按原始尺寸插入,用户点一下位置

    • 多张:从左到右依次排开,间距用界面上设置的(默认 1000)

    • 插入后立即刷新显示

  5. 图片方向

    • 用户点的是图片左上角

    • 图片要正常方向显示,不能倒过来或镜像

  6. 图片列表

    • 显示缩略图、文件名、状态

    • 状态显示"已嵌入"或"数据丢失"

  7. 批量删除

    • 每行一个复选框

    • 表头有全选框

    • 底部有"全选 / 反选 / 删除选中图片"

    • 删除后立即刷新

  8. 定位到图片

    • 选中一行 → 点"定位" → 视图跳到那张图

环境

.NET Framework 4.8,AutoCAD 2021 及以上,用 AcMgd、AcDbMgd、AcCoreMgd 三个引用。

输出要求

  • 完整可编译的代码,分几个文件

  • 关键逻辑加中文注释

  • 说明怎么编译、怎么在 CAD 里加载

写提示词的核心原则

先定身份——让 AI 进入专业 CAD 开发角色,避免用错 API。

再划边界——明确命令名、CAD 版本、运行环境。

讲清规则——特别是图片的嵌入机制(XRecord)、RasterImage 的 Orientation、LockDocument 的用法,这几处 AI 最容易搞错。

固定格式——要完整代码、要注释、要部署说明。

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

重要提示:实际开发时不要一次把所有功能都塞给 AI。真正开发时,一个功能一个功能来——先做窗口,再做嵌入机制,再做列表,再做插入……每步跑通再下一步。

核心源码分享

工程一共 5 个文件,加起来 800+ 行。全部贴出来会把文章撑爆,下面只给核心代码示例。
publicstaticstringEmbedImage(Database db, string imagePath){    byte[] data = File.ReadAllBytes(imagePath);    string md5 = ComputeMd5(data);    using (var tr = db.TransactionManager.StartTransaction())    {        var nod = (DBDictionary)tr.GetObject(            db.NamedObjectsDictionaryId, OpenMode.ForWrite);        DBDictionary embedDict;        if (nod.Contains("PIC_INS_EMBEDDED"))            embedDict = (DBDictionary)tr.GetObject(                nod.GetAt("PIC_INS_EMBEDDED"), OpenMode.ForWrite);        else        {            embedDict = new DBDictionary();            nod.SetAt("PIC_INS_EMBEDDED", embedDict);            tr.AddNewlyCreatedDBObject(embedDict, true);        }        // 已存过就跳过(同图只存一份)        if (embedDict.Contains(md5))        {            tr.Commit();            return md5;        }        // 按 127 字节分块,TypeCode 310 = 二进制        var rb = new ResultBuffer();        int offset = 0;        while (offset < data.Length)        {            int len = Math.Min(127, data.Length - offset);            byte[] chunk = new byte[len];            Array.Copy(data, offset, chunk, 0, len);            rb.Add(new TypedValue(310, chunk));            offset += len;        }        // 扩展名        rb.Add(new TypedValue(1, Path.GetExtension(imagePath)));        var xrec = new Xrecord();        xrec.Data = rb;        embedDict.SetAt(md5, xrec);        tr.AddNewlyCreatedDBObject(xrec, true);        tr.Commit();    }    return md5;}

用 AI 开发插件的完整流程

需求拆解

把「图片管家」拆成六个模块:窗口框架 → 嵌入机制 → 打开恢复 → 列表显示 → 插入(含批量) → 批量删除。逐个让 AI 实现。

分步验证

先做"能读出来",再做"能嵌入",最后做"能自动恢复"。每一步跑通再往下,出问题好定位。

实测优化

拿不同 CAD 版本测试:2021、2024、2026 都有细微差异。踩的坑包括:

  • 窗口里改图必须先"锁定文档",否则报错;

  • 从没插过图的图纸,图片存放区还不存在,要自己创建;

  • 图片存放区的 key 不能用带反斜杠的路径,要用纯字母数字;

  • 图片上下颠倒——方向设反了;

  • 删除后不刷新——忘了让 CAD 重绘。

细节调整

窗口大小、按钮颜色、间距默认值、缩略图尺寸,都可以根据自己的操作习惯改。

成品领取 & 下期预告

成品插件直接领

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

下期预告

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

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

E

N

D

相关学习资料