news 2026/4/16 14:02:03

【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构

文章目录

  • 相关教程
    • C#
    • Python
  • 相关文献
  • 遍历 Entity
    • 获取 ModelSpace 中所有实体数量
    • 📌 补充说明
    • 🔁 如果你想统计整个数据库中的所有 Entity(包括块定义中的)
  • 🧱 AutoCAD 核心对象层级结构(简化版)
    • 🔍 关键概念解释
      • 1. **Application**
      • 2. **Document**
      • 3. **Database(最重要!)**
      • 4. **Entity**
      • 5. **BlockTable & BlockTableRecord**
    • 📦 对应的 C# 类型(来自 `acdbmgd.dll`)
    • 🎯 总结一句话:

作者:小猪快跑

基础数学&计算数学,从事优化领域8年+,主要研究方向:MIP求解器、整数规划、随机规划、智能优化算法

笔者也是从零开始学习并使用 c# & Python 二次开发 AutoCad 2025。本系列教程会从最基础的项目构建开始,到最终完成复杂插件开发。

如有错误,欢迎指正。如有更好的算法,也欢迎交流!!!——@小猪快跑

相关教程

C#

  • 【AutoCad 2025】【C#】零基础教程(一)——Rider 构建 HELLO 插件-CSDN博客

Python

  • 【AutoCad 2025】【Python】零基础教程(一)——简单示例-CSDN博客

相关文献

  • AutoCAD 2025 .NET Developer’s Guide:
    Help > Developer Documentationin AutoCAD
  • ObjectARX SDK for AutoCAD 2025:
    https://www.autodesk.com/developer-network/platform-technologies/autocad/objectarx

遍历 Entity

获取 ModelSpace 中所有实体数量

usingSystem.Diagnostics;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.Runtime;usingApplication=Autodesk.AutoCAD.ApplicationServices.Core.Application;// 注册命令类[assembly:CommandClass(typeof(AutoCad_CSharp.CountEntities))]namespaceAutoCad_CSharp{publicclassCountEntities{[CommandMethod("CountAllEntities")]publicvoidCountAllEntitiesInModelSpace(){// 获取当前文档和数据库vardoc=Application.DocumentManager.MdiActiveDocument;vardb=doc.Database;vared=doc.Editor;varentityCount=0;// 启动事务using(vartr=db.TransactionManager.StartTransaction()){// 打开 BlockTablevarbt=tr.GetObject(db.BlockTableId,OpenMode.ForRead)asBlockTable;// 打开 ModelSpace(通常用于绘图)varmodelSpace=tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForRead)asBlockTableRecord;// 遍历 ModelSpace 中的所有对象foreach(varidinmodelSpace){// 检查是否为 Entity(图形实体,如 Line、Circle 等)if(id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(Entity)))){entityCount++;}}tr.Commit();}// 输出结果到命令行ed.WriteMessage($"\n模型空间中共有{entityCount}个实体。\n");}}}

于是我们载入插件,在 AutoCad 中运行


📌 补充说明

  • 如果你也想统计PaperSpace(布局空间)中的实体,可以类似地遍历BlockTableRecord.PaperSpace或其他布局对应的BlockTableRecord
  • 上述代码仅统计直接位于 ModelSpace 中的实体,不包括嵌套在块引用(BlockReference)内部的实体。如果你需要递归统计所有嵌套实体,逻辑会更复杂。
  • Entity是所有图形对象(Line、Circle、Polyline 等)的基类,但不包括非图形对象(如 Layer、TextStyle 等)。

🔁 如果你想统计整个数据库中的所有 Entity(包括块定义中的)

你可以遍历所有BlockTableRecord

foreach(ObjectIdbtrIdinbt){BlockTableRecordbtr=tr.GetObject(btrId,OpenMode.ForRead)asBlockTableRecord;foreach(ObjectIdidinbtr){if(id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(Entity)))){totalCount++;}}}

但注意:这会包含所有块定义中的实体,可能远多于用户看到的图形数量。

🧱 AutoCAD 核心对象层级结构(简化版)

Application │ └── Document (当前打开的 DWG 文件) │ ├── Database ← 所有图形数据的容器(核心!) │ │ │ ├── BlockTable ← 块表(存储所有 BlockTableRecord) │ │ │ │ │ ├── BlockTableRecord (ModelSpace) ← 模型空间 → 包含 Entity 对象 │ │ │ │ │ │ │ ├── Line ← Entity │ │ │ ├── Circle ← Entity │ │ │ ├── Polyline ← Entity │ │ │ └── ... ← 所有图形实体都继承自 Entity │ │ │ │ │ ├── BlockTableRecord (PaperSpace) ← 图纸空间 │ │ │ │ │ └── BlockTableRecord ("MyBlock") ← 自定义块定义(也包含 Entity) │ │ │ ├── LayerTable ← 图层表(LayerTableRecord) │ ├── LinetypeTable ← 线型表 │ ├── TextStyleTable ← 文字样式表 │ └── ... ← 其他命名对象表 │ └── Editor ← 用于用户交互(如提示输入、写消息)

🔍 关键概念解释

1.Application

  • 表示整个 AutoCAD 应用程序。
  • 通过Autodesk.AutoCAD.ApplicationServices.Application访问。
  • 可获取所有打开的文档:Application.DocumentManager.

2.Document

  • 表示一个打开的.dwg文件(即一个绘图窗口)。

  • 每个Document有一个唯一的Database

  • 获取方式:

    Documentdoc=Application.DocumentManager.MdiActiveDocument;

3.Database(最重要!)

  • 所有图形数据的根容器
  • 不管是实体(Line)、图层(Layer)、块(Block),都存在Database中。
  • 实体并不直接属于Document,而是属于Database中的BlockTableRecord(如 ModelSpace)。

纠正误区
❌ “Document 下面有 Entity” →不准确
✅ “Document → Database → BlockTable → BlockTableRecord (ModelSpace) → Entity”

4.Entity

  • 所有图形对象的基类(抽象类)。
  • 派生类包括:Line,Circle,Polyline,Text,MText,Dimension等。
  • 只有 Entity 或其子类才会在图形中显示
  • 所有Entity都必须位于某个BlockTableRecord中(通常是 ModelSpace 或 PaperSpace)。

5.BlockTable & BlockTableRecord

  • BlockTable:数据库中的“块表”,类似目录。
  • BlockTableRecord:代表一个具体的“空间”或“块定义”。
    • BlockTableRecord.ModelSpace:模型空间(主绘图区)
    • BlockTableRecord.PaperSpace:图纸空间(布局)
    • 其他:用户自定义的块(如 “Chair” 块)

每个BlockTableRecord内部是一个ObjectId 集合,每个ObjectId指向一个数据库对象(可能是 Entity,也可能是其他对象如 DimensionStyle,但通常我们只关心 Entity)。


📦 对应的 C# 类型(来自acdbmgd.dll

AutoCAD 概念.NET 类名
ApplicationAutodesk.AutoCAD.ApplicationServices.Application
DocumentAutodesk.AutoCAD.ApplicationServices.Document
DatabaseAutodesk.AutoCAD.DatabaseServices.Database
BlockTableAutodesk.AutoCAD.DatabaseServices.BlockTable
BlockTableRecordAutodesk.AutoCAD.DatabaseServices.BlockTableRecord
Entity(基类)Autodesk.AutoCAD.DatabaseServices.Entity
Line / Circle 等Line,Circle等(均继承自Entity

🎯 总结一句话:

AutoCAD 中的所有图形实体(Entity)都存储在 Database 的 BlockTableRecord(如 ModelSpace)中,而 Document 是用户界面与 Database 之间的桥梁。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:16:51

YOLOv5模型压缩终极指南:剪枝、量化、蒸馏三合一实战

YOLOv5模型压缩终极指南:剪枝、量化、蒸馏三合一实战 【免费下载链接】yolov5 yolov5 - Ultralytics YOLOv8的前身,是一个用于目标检测、图像分割和图像分类任务的先进模型。 项目地址: https://gitcode.com/GitHub_Trending/yo/yolov5 你是否正在…

作者头像 李华
网站建设 2026/4/16 12:29:16

Phar反序列化-NSSCTF-prize_z1

一、环境描述1、打开环境&#xff0c;是一段PHP代码。<META http-equiv"Content-Type" content"text/html; charsetutf-8" /> <?php highlight_file(__FILE__); class getflag {function __destruct() {echo getenv("FLAG");} }class …

作者头像 李华
网站建设 2026/4/8 20:12:11

运放新手全流程教学:从添加工艺库到后仿真的实战指南

运放新手教程&#xff0c;全流程教学&#xff0c;从添加工艺库到原理图&#xff0c;前仿真&#xff0c;版图步骤&#xff0c;后仿真 GPDK45nm&#xff0c;二级弥勒补偿运放 文档141页电路版图testbench 第一步&#xff0c;教初始环境怎么配置&#xff0c;怎么添加工艺库 第二步…

作者头像 李华
网站建设 2026/4/16 12:42:03

08章 向量内存操作 - “Vega“ 7nm Instruction Set ArchitectureReference Guide

向量内存&#xff08;VMEM&#xff09;指令将每个工作项的数据分别读取或写入VGPR中。这与标量内存指令形成对比&#xff0c;标量内存指令移动的是波前中所有线程共享的单个数据块。所有向量内存&#xff08;VM&#xff09;操作都由纹理缓存系统&#xff08;一级和二级缓存&…

作者头像 李华
网站建设 2026/4/16 12:35:31

数据洪流时代的存储革命:从磁带到云原生的进化之路

数据洪流时代的存储革命&#xff1a;从磁带到云原生的进化之路在数字化浪潮席卷全球的今天&#xff0c;存储数据已从简单的信息保存升华为驱动社会运转的核心基础设施。从企业核心业务系统到个人手机相册&#xff0c;从科学研究的海量实验数据到人工智能训练的庞大数据集&#…

作者头像 李华
网站建设 2026/4/15 10:04:52

springboot基于vue的城中村民宿租赁管理系统_29mv7m34

目录已开发项目效果实现截图已开发项目效果实现截图开发技术系统开发工具&#xff1a;核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部…

作者头像 李华