AutoCAD.NET二次开发:扩展数据之XData

本文介绍了AutoCAD.NET二次开发中关于扩展数据XData的使用,包括ResultBuffer类的详细解释,如何创建和管理ResultBuffer,以及如何添加、获取、修改和删除扩展数据。XData允许开发者在数据库对象上附加自定义数据,这些数据以ResultBuffer形式存储,具有高效存储的特点。文章还提到了RegAppTableRecord的注册和管理,以及处理多个应用程序扩展数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结果缓存——ResultBuffer

  结果缓存即 Autodesk.AutoCAD.DatabaseServices.ResultBuffer 类型,使用 ResultBuffer 对象时需要提供一个数据对,每个数据对包含一个数据类型描述和一个值,这些数据对是 Autodesk.AutoCAD.DatabaseServices.TypedValue 类的实例。

  TypedValue.TypeCode 属性是一个16位整型数据,它指明 TypedValue.Value 属性的数据类型,可接受的 TypeCode 值取决于 ResultBuffer 实例的使用范围,例如,适用于扩展记录定义的 TypeCode 值就不适合于 XData。而Autodesk.AutoCAD.DatabaseServices.DxfCode 枚举类型定义的码值则描述了 ResultBuffer 可能的数据类型。

  TypedValue.Value 属性是一个 System.Object 的实例,它可以包含任何类型的数据;但是,Value 的数据必须符合由 TypeCode 指明的类型。

  创建 ResultBuffer 方法有两种:

  一种是使用构造函数创建,即在声明 ResultBuffer 时将一个 TypedValue 作用参数传给 ResultBuffer:

ResultBuffer  resBuf = new ResultBuffer(new TypedValue((int)DxfCode.Text, "我的扩展数据"));

  另一种是使用 ResultBuffer.Add() 方法来添加 TypedValue,可以添加多个TypedValue,但总数据大小不能超过128K:

ResultBuffer resBuf = new ResultBuffer (); 
resBuf.Add(new TypedValue ((int)DxfCode.Text, "我的扩展数据")); 
resBuf.Add(new TypedValue ((int)DxfCode.Real, 20.0)); 
resBuf.Add(new TypedValue((int)DxfCode.Int32, 5));

 

扩展数据——XData

  AutoCAD 数据库对象都可以灵活的添加一定数量的自定义数据,供开发者使用,这些数据的含义由开发者自行解释,AutoCAD 只维护这些数据而不管其具体的含义,这些数据被称为扩展数据(XData),扩展数据以结果缓存形式附加在实体上,因此,能够有效的利用存储空间,对于添加轻量的数据非常方便的。

  可以通过实体 DBObject 类及其派生类的 XData 属性获取或设置扩展数据。实体的扩展数据由应用程序创建, 附着在实体的扩展数据可以包含一个或多个组。每一组均以一个互不相同的注册应用程序名开头,扩展数据 XData 所支持的TypedValue.TypeCode 属性值(DXF 组码)只能采用 1000~1071 之间的组码值,不同组码对应不同类型的信息,各个组码的说明如下表所示:

DXF 组码值  扩展数据内容
1000~1009

字符串 (最多不超过 255 个字
符)

1001  Xdata 的应用程序名
1002  Xdata 的控制字符串
1003 图层名
1004 二进制数据
1005 数据库对象句柄
1010~1059  浮点数
1010,1020,1030  三维点(x, y , z)
1011,1021,1031  三维空间位置
1012,1022,1032  三维空间距离
1013,1023,1033  三维空间方向
1040  Xdata 中的浮点数
1041  Xdata 中的距离值
1042 Xdata 中的比例系数
1060~1070  16 位整数
1071  32 位整数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  由于每个数据库对象可以附加多个应用程序的数据,所以在 ResultBuffer 中,应用程序名是每段扩展数据的第一个数据,其后的结果缓冲数据都归此应用程序名所有。(也可以使用其他的特殊标识作为第一个数据,总之目的是为了便于区分,方便后期查询此扩展数据)

  AutoCAD 将注册的应用程序名称保存于数据库中的 RegAppTable 表中,在使用之前,必须首先检测是否已经存在 RegAppTable 表中,如果没有则需要注册,也就是创建一个 RegAppTableRecord 表记录, 注册程序的名字最长可达 31 个字符,以下代码完成 RegAppTableRecord 表记录的创建:

RegAppTable appTbl = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite) as
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值