guohq 发表于 2012-12-11 20:51:05

关于添加扩展数据的问题?

dim resBuf as new ResultBuffer

..........

obj.xdata.add(resbuf)   为某个对象添加扩展数据时,怎样判断 resbuf能否作为扩展数据添加到此对象中去??
如果定义resbuf时,没有符合要求,会直接导致CAD崩溃。所以想在添加之前做一个能否添加的检测,此代码怎么写?

kvstone 发表于 2012-12-11 21:50:40

哪些 ResultBuffer 是不符合要求的?

难道不是dxfcode里面定义的数据类型?

sieben 发表于 2012-12-12 08:59:11

1public Autodesk.AutoCAD.DatabaseServices.ResultBuffer GetXDataForApplication(string applicationName)
    Autodesk.AutoCAD.DatabaseServices.DBObject 的成员
这个可以查询对象当前是否附加某个名字的扩展数据
2,public virtual Autodesk.AutoCAD.DatabaseServices.ResultBuffer XData { set; get; }
    Autodesk.AutoCAD.DatabaseServices.DBObject 的成员
这个则可以查询对象是否附加了扩展数据

sieben 发表于 2012-12-12 09:03:21

本帖最后由 sieben 于 2012-12-12 09:23 编辑

扩展数据的DXFCode 要求是1000之后,好像是1000~1005,具体可以看 Autodesk.AutoCAD.DatabaseServices.DxfCode里面X开头的,扩展数据对DXFCode的使用有严格要求,不同的数值对应不同的数据类型,比如1000对应文本,1005对应句柄,其他整数,实数的等各有对应,具体可看DxfCode enum X开头的项;有个特例注册应用程序名字对应的是DxfCode.ExtendedDataRegAppName

sieben 发表于 2012-12-12 09:05:39

ResultBuffer 可以用于扩展数据XData及数据词典Xrecord,两者的DXFCode是不同的

guohq 发表于 2012-12-12 11:37:38

由于构建 ResultBuffer 的相关数据是来源于一个外部配置文件,通过配置文件,用户可以很方便的写入符合自己要求的扩展数据。此方法虽然灵活,缺点也很明显,就是不能保证数据的合理性。如果在写入扩展数据前不对 ResultBuffer 进行检查,可能会导致CAD崩溃。 程序中又没办法使用 Try
页: [1]
查看完整版本: 关于添加扩展数据的问题?