夜雨聆风学习资料网

ARTICLE · 1177884

实战|用 AI 写 CAD 插件:局部放大(附源码 + 提示词)

实战|用 AI 写 CAD 插件:局部放大(附源码 + 提示词)
点击蓝字,关注我们
这是《零基础 CAD 插件从 0 到 1》第 23 篇

痛点:局部放大图的折磨────────────────────────────────────────────────────────────────────────────────────────────────────

做设计的都干过这个活。一张图里有个复杂节点,得放大了给施工的人看清楚。你怎么做?

复制一份 → 放大 3 倍 → 发现外面的线一起带进来了 → 用修剪一根一根剪 → 剪到一半发现标注还得重新标 → 标注完了发现尺寸数字变了 → 改尺寸数字 → 改完发现位置又不对了……

更崩溃的是,同一张图里画完了,师傅说"看不清",你所有的裁剪、标注、编号全得推倒重来。

插件效果:一个命令,框完就放大────────────────────────────────────────────────────────────────────────────────────────────────────

先看效果。

命令 LOCALZOOM,回车。

第一步,点一下圆心。

第二步,拖鼠标拉一个圆,屏幕上实时出现一个淡黄色的实线圆预览。圆拉多大,放大范围就是多大。

第三步,在空白处点一下放放大图的中心,屏幕上的淡黄色圆跟着鼠标走。

第四步,继续拖鼠标,圆实时变大变小——鼠标离中心越远,放大倍数越大,圆轮廓实时跟着变。点一下确认。

然后,插件自动完成剩下所有事:

  • 圆内的实体全部裁剪(跨界部分只在圆内保留,外面的一刀切掉)

  • 所有裁剪出来的内容 + 那个圆本身,打成一个块

  • 这个块按你拖出来的倍数放大,放到你指定的位置

整个过程,从拉圆到出图,不到 10 秒。

出来的东西是个块参照,点一下就整体选中,Ctrl+1 里还能直接改倍数,COPY 一份就是一张新的局部放大图。想改倍数?不用重新做,直接改比例就行。

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

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

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

复制、放大、裁剪、重标、改数字,每张局部放大图都要来一遍。这是纯粹的体力活,程序最适合干这种活。

2裁剪问题:外面的东西不能跟着进来。

直接 SCALE 的话,圆外面的线、墙、标注会一起被放大,把要突出的细节淹掉。插件要能在圆和实体的交点处把线切断,只保留圆内的那一段。

3组块问题:散的东西不好管。

如果是散着一堆线,放大完想整体移动、整体复制、整体改倍数都很麻烦。插件把裁剪出来的所有内容打成一个块,之后点一下就全选中,改倍数只需要改一个比例值。

4倍数问题:改倍数不该重新做。

"改成 5 倍",如果重做一遍,前面的所有裁剪都白费了。打块之后,倍数就是块参照的 ScaleFactors,直接在 Ctrl+1 里改就行,一秒钟的事。

5交互问题:看不见的框没法用。

如果只让用户点两个角点定义一个矩形,屏幕上啥都不显示,用户根本不知道自己框到哪儿了。插件用 DrawJig 做了实时预览——拉圆的时候看到一个淡黄色的圆跟着鼠标变,点放置点的时候看到一个圆跟着鼠标走,拖倍数的时候圆和一根引导线一起实时变化,所见即所得。

交互方式:一个命令搞定────────────────────────────────────────────────────────────────────────────────────────────────────

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

在 CAD 命令行输入这个命令,回车,然后跟着提示走四步:

  1. 指定圆心:点一下。

  2. 指定半径:拖鼠标,屏幕上出现淡黄色实线圆,圆多大就裁多大,点一下确认。

  3. 指定放置中心点:拖鼠标,那个淡黄色圆跟着鼠标走,到位置了点一下。

  4. 拖动确定倍数:继续拖鼠标,圆的半径 = 鼠标到中心的距离,鼠标越远倍数越大,旁边还有一根引导线提示方向,点一下确认。

结束。命令行会告诉你:取样完成

关于颜色的约定:

  • 拉圆、拖位置、拖倍数的时候,看到的是淡黄色实线——这是预览,还没确定。

  • 最终生成到图纸上时,圆的边界变成灰色虚线——表示"这是我裁过的范围",一眼就知道哪些是放大区。

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

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

1立项目标

我跟 AI 说,我想做一个 CAD 局部放大工具,用 C# 和 .NET。需求有五条:

  • 让用户在图上指定一个圆心和半径,画一个圆作为取景框。

  • 把圆内的实体全部复制一份,跨界的部分在圆和实体的交点处剪断,只保留圆内的一段。

  • 复制出来的内容 + 圆本身,打成一个块。

  • 这个块按用户指定的倍数放大,放到用户指定的位置。

  • 拉圆、拖位置、拖倍数三步都要有实时预览,预览用淡黄色实线,最终生成的圆用灰色虚线。

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

2解决裁剪问题

第一版做出来之后,我发现曲线裁剪是错的,圆外面的一半也跟着来了。

于是我跟 AI 说:每个实体先判断它跟圆的交点。没有交点就看它整体在圆内还是圆外,圆内保留圆外丢弃。有交点就用 GetSplitCurves 在交点处切开,一段一段判断中点是否在圆内,只保留中点在内的段。注意交点要去重,重合交点会让 GetSplitCurves 报错。

3加实时预览

裁剪对了之后,我又跟 AI 说:加实时预览。用 DrawJig 实现,拉半径、拖放置点、拖倍数三步都要有 jig。预览用淡黄色(色号 51)实线画圆。拖倍数那一步再加一根从中心到鼠标的引导线,让人看得出方向。

4改颜色约定

预览能跑了,但我发现预览和最终的圆颜色一样,看着乱。于是跟 AI 说:预览全部改成淡黄实线,最终生成的圆用灰色(8 号色)虚线,线型选 DASHED,线型比例设 20 让虚线看得清。如果 DASHED 线型加载不成功,退回用 HIDDEN,再不行就实线,别报错。

5解决块名报错

打块的代码跑起来报 eInvalidInput。把错误日志完整发给 AI,AI 一眼看出问题:*U_ 开头的块名是 AutoCAD 保留给匿名块的,用户代码手动设这个名字会报错。改成 LocalZoom_ 开头的普通名字就好了。

6优化顺序

最后跟 AI 说:把"先打块、再放大"的顺序明确写在代码里。先收集裁剪后的所有实体,把它们平移到"以圆心为原点"的坐标系(这样块的基点天然就是圆心),然后创建块定义把这些实体塞进去,最后在当前空间插入一个块参照,插入位置是放置点,ScaleFactors 设成放大倍数。

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

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

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

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

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

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

CSHARP
✏️ 编辑

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

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

// ============================================================

// Jig 3:拖动鼠标决定倍数 —— 淡黄实线预览 + 引导线

// ============================================================

internalclassScaleJig : DrawJig

{

public Point3d PlacePt;

publicdouble Radius;

publicdouble Factor = 1.0;

public Point3d MousePt;

publicScaleJig(Point3d place, double radius)

    {

        PlacePt = place;

        Radius = radius;

        MousePt = new Point3d(place.X + radius, place.Y, place.Z);

    }

protectedoverride SamplerStatus Sampler(JigPrompts prompts)

    {

var opt = new JigPromptPointOptions(

"\n拖动鼠标确定放大倍数(圆半径=鼠标到中心的距离),点击确认: ")

        {

            BasePoint = PlacePt,

            UseBasePoint = true,

            UserInputControls = UserInputControls.Accept3dCoordinates

        };

var r = prompts.AcquirePoint(opt);

if (r.Status != PromptStatus.OK) return SamplerStatus.Cancel;

        MousePt = r.Value;

double dist = MousePt.DistanceTo(PlacePt);

double newFactor = Radius > 1e-9 ? dist / Radius : 1.0;

if (newFactor < 0.01) newFactor = 0.01;

if (Math.Abs(newFactor - Factor) < 1e-6) return SamplerStatus.NoChange;

        Factor = newFactor;

return SamplerStatus.OK;

    }

protectedoverrideboolWorldDraw(WorldDraw draw)

    {

// 放大后的圆轮廓(淡黄实线)

using (var c = new Circle(PlacePt, Vector3d.ZAxis, Radius * Factor))

        {

            c.ColorIndex = 51;

            draw.Geometry.Draw(c);

        }

// 引导线:中心 → 鼠标

using (var line = new Line(PlacePt, MousePt))

        {

            line.ColorIndex = 51;

            draw.Geometry.Draw(line);

        }

returntrue;

    }

}

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

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

  • 明确需求。用一句话概括"我想让 CAD 做某事",然后拆解成核心功能、交互步骤、视觉要求。

  • 编写提示词。包含技术方向、业务规则、视觉约定、分批目标。

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

  • 编译测试。遇到报错,把错误内容完整发给 AI。

  • 加调试日志。让 AI 加日志系统,看看到底哪一步没生效。

  • 优化体验。最后再打磨预览、颜色、交互手感这些细节。

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

成品插件直接领

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

下期预告

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

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

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

相关学习资料