C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject

一、数据操作说明

//DBObject 基础类
DBObject dbObj = (DBObject)tr.GetObject(outerId, OpenMode.ForRead);
//Polyline 线段类
Polyline outerPolyline = (Polyline)tr.GetObject(outerId, OpenMode.ForRead);
//BlockTableRecord 块表类
BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(ObjectId.FromName(BlockTableRecord.ModelSpace), OpenMode.ForWrite);
  • tr 是一个 Transaction 对象,代表了对AutoCAD数据库的操作事务。所有对数据库中对象的读取或修改操作都应在事务的上下文中进行。

  • GetObject()Transaction 类的一个方法,它接收两个参数:

    • id 是一个 ObjectId 类型的对象,表示数据库中的一个特定图元对象的唯一标识符。
    • OpenMode.ForRead 指定了打开该对象的方式为只读模式,这意味着你只能访问对象的数据但不能修改它们。
  • as Entity 是C#中的类型转换运算符,它尝试将从 GetObject() 方法返回的对象转换为 Entity 类型。Entity 是AutoCAD .NET API中的一个基类,所有具体的图元对象(如直线、圆、块参照等)都继承自这个类。

  • BlockTableRecord:块表记录。

  • DBObject:所有数据库对象的基类,包括实体(如直线、圆、文字等)、图层、线型、视图等。

  • BlockReference:块参照对象,表示插入到绘图中的块实例。

  • Layer:图层对象,包含图层属性信息。

  • LineCircleText 等具体的几何图形实体类。

二、类型转换方法

cs 复制代码
ObjectId outerId = ...; // 获取某个对象的ObjectId
DBObject dbObj = (DBObject)tr.GetObject(outerId, OpenMode.ForRead);

// 判断并转换为具体类型
if (dbObj is BlockTableRecord)
{
    BlockTableRecord btr = (BlockTableRecord)dbObj;
    // 对块表记录进行操作...
}
else if (dbObj is Entity)
{
    Entity ent = (Entity)dbObj;
    // 对实体对象进行操作...
}

三、数据类型

cs 复制代码
Entity 类及其众多子类:

AcDbBlockReference:块参照
AcDbCircle:圆
AcDbLine:直线
AcDbPolyline:多段线
AcDb3dPolyline:三维多段线
AcDbArc:圆弧
AcDbEllipse:椭圆
AcDbText:文字
AcDbMText:多重行文本
AcDbDimension:尺寸标注
AcDbHatch:填充图案
AcDbLeader:引线标注
AcDbPoint:点
AcDbShape:预定义图形形状
等等
非实体对象:

AcDbBlockTableRecord:块表记录
AcDbLayerTableRecord:图层表记录
AcDbTextStyleTableRecord:文字样式表记录
AcDbLinetypeTableRecord:线型表记录
AcDbViewTableRecord:视图表记录
AcDbUCSTableRecord:用户坐标系(UCS)表记录
AcDbViewportTableRecord:视口表记录
AcDbDictionary:字典对象
AcDbDictionaryWithDefault:带默认值的字典对象
等等
其他特殊或高级对象类型:

AcDbXrefRecord:外部参照记录
AcDbRegAppTableRecord:注册应用程序表记录
AcDbPlotSettings:打印设置
AcDbLayout:布局(图纸空间)
AcDbRasterImage:光栅图像
AcDbUnderlayDefinition:底图定义
等等
上述列举并未穷尽所有可能的对象类型,但涵盖了AutoCAD中最常见和基础的对象。在实际开发中,根据需求可能会用到更多特定类型的对象。

//感谢大家的点赞,收藏,转发,关注

相关推荐
半桔1 分钟前
(C语言)文件操作
c语言·开发语言
向宇it16 分钟前
【unity小技巧】Unity 四叉树算法实现空间分割、物体存储并进行查询和碰撞检测
开发语言·算法·游戏·unity·游戏引擎
我真的太难了啊20 分钟前
学习QT第二天
开发语言·qt·学习
伏虎山真人23 分钟前
QT程序开机自启方案
开发语言·qt
lsx20240632 分钟前
Ruby 模块(Module)
开发语言
豆包MarsCode41 分钟前
我用豆包MarsCode IDE 做了一个 CSS 权重小组件
开发语言·前端·javascript·css·ide·html
铅华尽43 分钟前
Java---JDBC案例--手机信息管理系统
java·开发语言·智能手机
X 西安1 小时前
第十章JavaScript的应用
开发语言·javascript·ecmascript
特种加菲猫1 小时前
初阶数据结构之队列的实现
开发语言·数据结构·笔记
CV大法好1 小时前
刘铁猛C#入门 027 抽象和开闭原则
开发语言·c#