⚠️ 此文章由Claude Code自动生成,非人类撰写,请勿相信!!

CAD 二次开发——批量编号插件分享

工作中经常需要对 CAD 图纸中的大量图元进行编号标注,手动操作效率低且易出错。于是我利用业余时间写了一个 CAD 批量编号插件,在这里分享给大家。

插件功能

该 DLL 插件实现了以下功能:

  1. 批量编号 — 选中多个对象,自动按顺序编号
  2. 自定义前缀 — 支持设置编号前缀(如 “B-“、”L-“)
  3. 文字样式 — 可指定文字样式、高度、颜色
  4. 排序方式 — 从左到右、从上到下等多种排序方式

使用方法

加载插件

在 CAD 命令行中输入:

NETLOAD

选择 BatchNumber.dll 文件加载。

执行命令

输入命令:

BATCHNUM

操作步骤

  1. 选择需要编号的图元
  2. 设置编号参数(前缀、起始数字、文字样式)
  3. 确认生成

核心代码片段

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace BatchNumber
{
    public class Commands
    {
        [CommandMethod("BATCHNUM")]
        public void BatchNumber()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            // 选择对象
            PromptSelectionOptions opts = new PromptSelectionOptions
            {
                MessageForAdding = "选择要编号的图元:"
            };
            PromptSelectionResult selResult = ed.GetSelection(opts);
            if (selResult.Status != PromptStatus.OK) return;

            // 获取编号参数
            PromptIntegerOptions intOpts = new PromptIntegerOptions("\n起始编号:");
            intOpts.DefaultValue = 1;
            intOpts.LowerLimit = 1;
            intOpts.UpperLimit = 9999;
            PromptIntegerResult intResult = ed.GetInteger(intOpts);
            if (intResult.Status != PromptStatus.OK) return;

            int startNum = intResult.Value;

            // 遍历选中对象,添加编号文字
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                foreach (SelectedObject so in selResult.Value)
                {
                    // 创建文字对象
                    DBText text = new DBText();
                    text.TextString = $"{startNum++}";
                    text.Height = 3.5;
                    // ... 设置位置、样式等
                    
                    // 添加到模型空间
                    BlockTableRecord btr = tr.GetObject(
                        db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
                    btr.AppendEntity(text);
                    tr.AddNewlyCreatedDBObject(text, true);
                }
                tr.Commit();
            }
        }
    }
}

其他工具预告

我还在开发以下小工具,完成后也会分享到博客:

  • 📄 批量导出 CAD 结构总说明到 Word
  • 📋 目录自动生成工具
  • 🔢 文字说明数字编号工具

下载链接BatchNumber.dll 下载(插件文件待上传)

欢迎下载使用,有任何问题请留言反馈!