夜雨聆风学习资料网

ARTICLE · 1185259

实战|用 AI 写 CAD 插件:图纸一键排版(附源码 + 提示词)

实战|用 AI 写 CAD 插件:图纸一键排版(附源码 + 提示词)
点击蓝字,关注我们
这是《零基础 CAD 插件从 0 到 1》第 24 篇

痛点:图纸天女散花────────────────────────────────────────────────────────────────────────────────────────────────────

画图的人都懂这个场景。

有时候图纸画的乱七八糟的 这里放一个那里放一个,最后整理还要花不少时间或者是

选中一个节点 → MOVE → 找基准点 → 放到空白处 → 再选下一个 → 再 MOVE → 再放……

选着选着就出问题了。图里面有线、有文字、有标注、有填充,一个节点可能有几十个实体,用鼠标一个个点根本选不全。框选吧,又容易选到隔壁节点的东西。

选完了移动的时候,总有那么一两条线"掉队",忘了被框进去。放过去之后一看,怎么多出一条线?回头找半天。

一张图整理完,一个小时没了。

插件效果:框选一下,整整齐齐────────────────────────────────────────────────────────────────────────────────────────────────────

命令 ARRANGE,回车,弹出一个小窗口。

第一步,在窗口里设置参数。从左到右还是从右到左,单行还是多行,间距多少,底对齐还是顶对齐。还有一个"识别间距",这个后面细说。

第二步,点「框选并排列」,窗口自动隐藏。

第三步,在图上把所有要排的东西框一下,回车。

第四步,命令行提示"请指定排列起始点",在空白处点一下。

好了,所有东西整整齐齐排到你指定的位置。

原来一个小时的事,现在三十秒。

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

从实际使用角度看,它解决了三个层次的问题。

1最表面的问题:重复劳动。

一个个选、一个个移,每张图都要来一遍。纯粹的体力活,程序最适合干这种活。

2识别问题:一个"整体"其实是散的。

这是关键。排版跟批量打印不一样,批量打印只要识别图框就行,框里是什么不重要。排版要识别的是"一个完整的东西",但它可能是这样的:

  • 一个等轴测的立体线框(全是斜线,没有一条水平或垂直的线)

  • 旁边跟着几个数字标号

  • 底下跟着几个尺寸标注

这几样东西在图上没有连在一起,中间有缝。但它们是"一个整体",移动的时候必须一起动。

所以插件的识别逻辑不是"找图框",而是"找一伙的东西"——实体之间靠得近,就认为是一伙的,整伙一起排。

3参数问题:太近了会散,太远了会粘。

判断"靠得近"需要一个阈值。这个阈值给大了,隔壁的图形也被吸进来,两个图形合成一个;给小了,文字和线框分开,一个图形拆成两个。

所以插件界面上给了个"识别间距"参数,让用户自己调。调一次之后,同一套图纸基本就不用动了。

操作方式:一个命令搞定────────────────────────────────────────────────────────────────────────────────────────────────────

加载好插件之后,只需要记住一个命令:ARRANGE。

在 CAD 命令行输入这个命令,回车,弹出工具窗口。

窗口分三个区块:

排列设置区:方向(从左到右/从右到左)、排列(单行/多行)、每行个数、水平间距、垂直间距、对齐方式(底对齐/顶对齐/居中)、识别间距。全部可视化设置。

运行日志区:实时显示每一步,识别到几个图形、排列了多少个,带时间戳。

底部按钮:一个「框选并排列」,一个「关闭」。

操作流程就是一个按钮走完:点按钮 → 窗口自动隐藏 → 框选 → 点起始点 → 自动跳回窗口 → 日志显示"✔ 排列完成,共 N 个图形"。

核心干货:给AI的提示词────────────────────────────────────────────────────────────────────────────────────────────────────

下面是我实际用的提示词。

1立项目标

我跟 AI 说,我想做一个 CAD 图纸排版工具,用 C# 和 WPF。需求有六条:

  • 弹出一个窗口,让用户先设置参数:排列方向、单行/多行、每行个数、水平间距、垂直间距、对齐方式、识别间距。

  • 用户点一个按钮之后,窗口隐藏,在 CAD 里框选要排列的图形,然后点一个起始点。

  • 框选的时候不能识别"图框",要识别"图形"。判断标准是实体之间的距离小于阈值就归为一个图形。

  • 每个图形用它的总包围盒参与排列,图形内的所有实体一起移动。

  • 排列时支持三种对齐:底对齐、顶对齐、居中。

  • 界面用 WPF,风格参考我之前发的那套(红色主题、圆角、毛玻璃卡片)。

最后加一句:请给我完整的项目结构和代码,并解释一下思路。

2解决聚类问题

第一版做出来之后,聚类效果不理想,相邻的两个图形被吸到一起了。

于是我跟 AI 说:聚类用并查集实现。两两判断实体包围盒之间的最小距离,用切比雪夫距离(取 dx 和 dy 的最大值),而不是欧氏距离。距离小于阈值就合并。这样合并出来的连通分量就是一个个"图形"。

3解决窗口隐藏和恢复

框选的时候窗口要隐藏,点完起始点之后要恢复。

我跟 AI 说:流程是这样的。点按钮 → 窗口隐藏 → 调 GetSelection 框选 → 调 GetPoint 点起始点 → 排列 → finally 里恢复窗口。所有步骤用 try-catch 包住,出错也要能回到窗口。

写提示词的核心原则────────────────────────────────────────────────────────────────────────────────────────────────────

  • 先定身份先让 AI 进入专业 CAD 开发的角色,避免用错 API、写出行外代码。
  • 再划边界明确命令名、CAD 版本、运行环境,从根源减少兼容问题和报错。

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

  • 固定格式要完整代码、要注释、要部署说明,都明确提出来,输出直接能用。照着这个结构写,AI 输出代码的可用率至少提升 80%。

核心源码分享────────────────────────────────────────────────────────────────────────────────────────────────────

这是一部分代码,完整代码可以领取,见文末。

聚类算法(并查集 + 切比雪夫距离):

JAVA
✏️ 编辑

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

// 并查集

varparent=newint[n];

for (inti=0; i < n; i++) parent[i] = i;

intFind(int x)

{

while (parent[x] != x)

    {

        parent[x] = parent[parent[x]];

        x = parent[x];

    }

return x;

}

voidUnion(int a, int b)

{

intra= Find(a), rb = Find(b);

if (ra != rb) parent[ra] = rb;

}

// 两两判断包围盒距离

for (inti=0; i < n; i++)

{

for (intj= i + 1; j < n; j++)

    {

if (BoxDistance(exts[i], exts[j]) <= gapTol)

            Union(i, j);

    }

}

// 切比雪夫距离

privatestaticdoubleBoxDistance(Extents3d a, Extents3d b)

{

doubledx= Math.Max(0, Math.Max(

        a.MinPoint.X - b.MaxPoint.X,

        b.MinPoint.X - a.MaxPoint.X));

doubledy= Math.Max(0, Math.Max(

        a.MinPoint.Y - b.MaxPoint.Y,

        b.MinPoint.Y - a.MaxPoint.Y));

return Math.Max(dx, dy);

}

AI开发插件的完整流程────────────────────────────────────────────────────────────────────────────────────────────────────

把这次的实战经验,抽象成可复用的流程。

  1. 明确需求。用一句话概括"我想让 CAD 做什么",然后拆解成核心功能、交互步骤、参数设置。

  2. 编写提示词。包含技术方向、业务规则、界面风格参考。

  3. 第一轮生成。让 AI 给完整项目结构和代码。

  4. 编译测试。遇到报错,把完整堆栈发给 AI。

  5. 调参数。像"识别间距"这种跟具体图纸相关的参数,得拿真实图纸试,才能定下来合适的值。

  6. 优化体验。最后再打磨窗口样式、日志、拖拽这些细节。

成品领取 & 下期预告────────────────────────────────────────────────────────────────────────────────────────────────────

成品插件直接领

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

下期预告

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

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

声明本插件完全免费分享,仅供交流学习使用。严禁任何人将其用于商业倒卖或牟利。如需转载,请注明出处。请大家尊重作者的劳动成果,共同维护良好的交流环境。

相关学习资料