夜雨聆风学习资料网

ARTICLE · 1144603

实战|用 AI 写 CAD 插件:超级拉伸(附源码 + 提示词)

实战|用 AI 写 CAD 插件:超级拉伸(附源码 + 提示词)

       点击蓝字,关注我们

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

画全屋定制施工图,绕不开一个字:改。

柜体宽度从 600 改 800,门板高度从 2000 改 2200,层板深度调 20mm……每一次改动,都要用拉伸命令。

但原生 拉伸命令 有三个让人牙痒痒的地方:

  1. 拉一次就得重新选一次。 改 5 个柜子,就要框 5 次。

  2. 拖的时候看不到结果。 必须松手才知道拉成什么样,拉错了要 Ctrl+Z 重来。

  3. 填充图案不动。 柜体的阴影填充拉完还留在原地,得单独再拉一次。

我花了几个晚上,用 AI 写了一个 SS 命令,把这三个问题一次性解决了。

先看效果,一次命令连续拉伸────────────────────────────────────────────────────────────────────────────────────────────────────

三个直接体感:

  • 选一次,可以拉 N 次,直到按 X 或 Esc

  • 拉的时候实时预览,还没松手就知道结果

  • 填充图案跟着走,不用单独处理

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

插件解决了什么问题

问题 1:原生 拉伸 没有"连续拉伸"的概念

原生流程是:选 → 拉 → 结束 → 重新选 → 重新拉。

SS 改成了:选一次 → 拉 N 次 → 主动退出。

对全屋定制场景尤其重要——一个柜体从 600 调到 800,再从 800 调到 900,中间要试好几次。原生每次都要重新框选,SS 全程不用换手。

问题 2:填充图案拉不动

这是最深的坑。

关联填充的边界是跟着矩形/多段线自动更新的,直接去动填充本身会被 CAD 覆盖回去。SS 的处理方案是:

  • 非关联填充 → 直接改它的边框顶点

  • 关联填充 → 让 CAD 按已经拉伸的边界自动重算

听起来简单,但真正把它做对,需要在先后顺序、处理时机、窗口跟随三个地方都做对才行。

交互方式:一键拉伸持续拉伸────────────────────────────────────────────────────────────────────────────────────────────────────

第一步,用户拖框选择对象,系统显示和 CAD 一样的蓝框 / 绿框。

第二步,用户松手,系统画一个绿色粗框,显示选择范围,固定在原始位置不动。

第三步,用户点基点,绿色框依然不动。

第四步,用户拖第二点,系统实时预览拉伸效果。

第五步,用户松手,系统执行拉伸,命令行报出距离。

第六步,用户重复第三到第五步,同一批对象可以继续拉,不用重新选。

第七步,用户按 X,命令结束,绿色框消失。

设计要点

绿色选择框固定在原始位置,不跟着拉伸位移——告诉你"你当初框的是这里"。

就算图重新生成一次,框也不会消失。

命令结束才清除,中间任何时刻都能看到这次操作影响的范围。

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

还是那句话

用 AI 写插件写出来的功能不对,本质是需求没说细。下面是实测多轮、输出稳定能用的提示词模板,直接复制就能用:

PYTHON✏️ 编辑代码

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

41

角色设定:你是资深 CAD .NET 二次开发工程师,精通 C# 与 AutoCAD 原生 API,

面向全屋定制设计场景开发插件。

功能需求:开发一个「超级拉伸」插件,命令名 SS。

核心逻辑:

1. 使用 AutoCAD 原生的对象选择方式,让用户用蓝框/绿框正常框选。

2. 通过 CAD 的点拾取事件,偷偷记下用户拖框时点的两个角点,

   作为这次拉伸的精确范围。

3. 蓝框选择 / 单点选择 / 预选:整块移动。

   绿框选择:按框内的点做局部拉伸。

4. 选一次对象后,支持连续拉伸多轮,按 X 或 Esc 退出命令。

5. 拉伸时要有实时预览,预览和实际拉伸必须用同一套逻辑。

拉伸规则:

- 直线:端点落在框内就移动

- 多段线:顶点落在框内就移动

- 圆 / 弧 / 椭圆:圆心落在框内就移动

- 样条曲线:控制点落在框内就移动

- 文字 / 块 / 点:插入点落在框内就移动

- 填充:让 CAD 按已经拉伸的边界自动重算

- 其他对象:中心点落在框内就整体移动

关键实现要点:

- 每个被选中的对象必须独立保存一份框的坐标副本,

  不能所有对象共用同一份,否则框会被移动很多次,越跑越远。

- 框的坐标更新必须在拉伸执行完之后,不能放在之前,

  否则本轮判定用的是已经移动过的框,一个点都匹配不上。

- 填充要分两阶段处理:先处理所有非填充对象,再处理填充,

  保证边界先动、填充后算。

交互设计:

- 选择完成后,画一个绿色粗框显示选择范围,固定在原始位置,

  命令结束才清除。

- 命令行输出每次拉伸的距离、方向、影响对象数。

环境:.NET Framework 4.8,AutoCAD 2021,引用 AcMgd、AcDbMgd;

输出要求:

- 给出完整可复制编译的代码

- 关键逻辑加中文注释

- 说明编译和加载方法

写提示词的核心原则

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

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

讲清规则 —— "怎么选、怎么拉伸、每类对象怎么处理",每一步规则都说死,不给 AI 自由发挥的空间。

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

踩过的坑要写进去 —— 比如"框的坐标不能共用""必须拉伸完之后再更新框",这些坑 AI 不知道,你不说它就一定会踩。

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

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

偷偷记下用户拖框的角点

CSHARP✏️ 编辑代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

privateList<Point3d> _capturedPoints = newList<Point3d>();

privatevoidOnPromptedForPoint(object sender, PromptPointResultEventArgs e)

{

if (e.Result.Status != PromptStatus.OK) return;

    _capturedPoints.Add(e.Result.Value);

}

ed.PromptedForPoint += handler;

try

{

    psr = ed.GetSelection(options);

}

finally

{

    ed.PromptedForPoint -= handler;

}

◆

先拉伸,再更新框的位置

CSHARP✏️ 编辑代码

1

2

3

4

5

6

7

8

9

// ✅ 正确顺序

int affected = ApplyStretch(db, selectionItems, offset);

foreach (StretchSelectionItem item in selectionItems)

{

if (item.Window == null) continue;

for (int i = 0; i < item.Window.Count; i++)

        item.Window[i] = item.Window[i] + offset;

}

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

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

需求拆解

把「超级拉伸」拆成四个模块,逐个让 AI 实现,不要一次性丢完整需求:

第一块是选择部分,用 CAD 原生的框选。

第二块是拉伸部分,按对象类型分别处理。

第三块是预览部分,拖动时能看到效果。

第四块是视觉部分,显示绿色选择框。

分步验证

先写选择和拉伸逻辑,测准"能选中、能拉伸"。

再加预览,测"拖动时能看到效果"。

再加选择框,测"框显示在哪、什么时候消失"。

最后处理填充,测"填充能不能跟着走"。

每一步跑通再往下,出问题好定位。

实测优化

挂着插件画半天图,测试会不会卡顿、会不会打断命令、大图纸会不会出错。

踩过的坑一定要回头补进提示词里。比如上面那三条"关键实现要点",都是我们这轮开发中真实踩过的。

细节调整

默认参数(快捷键、提示语、颜色)都可以根据自己的习惯改,让 AI 直接调就行。

成品领取 & 下期预告 成品插件直接领────────────────────────────────────────────────────────────────────────────────────────────────────

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

下期预告

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

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

声明

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

E

N

D

相关学习资料