DXF中关于扩展词典
ExtensionDictionary分析
一、基本知识
1、关于硬所有、软所有
在基于文本文件的DXF中,相互之间的关系存在所谓的硬所有(组代码360–369)或软所有(组代码350-359)。在AutoCAD开发人员文档中是这样描述的:
硬所有者句柄;指向同一个 DXF 文件或图形中的其他对象的任意硬所有者指针。
软所有者句柄;指向同一个 DXF 文件或图形中的其他对象的任意软所有者指针。
一般来说,硬所有是指除非先删除了引用,否则不能删除被引用对象。硬所有可以保护对象免受清理,而软参照则不能。
例如在词典中,如果词典没有对象的相应引用,词典就没有存在的必要。在这个意义上来说,词典引用通常是硬所有的引用。词典硬所有采用组代码360,软所有采用组代码350。
二、对象与扩展词典
1、对象拥有的扩展词典
一个对象可以没有扩展词典或者只有一个扩展词典,不能有两个扩展词典。在ActiveX Automation中,obj.HasExtensionDictionary判断对象obj是否有扩展词典
obj.GetExtensionDictionary返回对象obj的扩展词典对象,如果没有,则自动创建一个。
如果扩展词典已被附着到对象上,则下表显示的组码将被输出。
ACAD_XDICTIONARY 记录组码说明
102"{ACAD_XDICTIONARY" 表示扩展词典组的开始
360所有着词典的硬键指针标识符/句柄
102组的结束,"}"
例如:
在实体段实体句柄
0
LWPOLYLINE
5
50
后出现的:
102
{ACAD_XDICTIONARY
360
B5
102
}表示:此对象(句柄为50)拥有扩展词典(句柄为B5)。
2、扩展词典
词典是一个AcDbObject对象,类似于其它对象,所以词典具有AcDbObject的属性,例如句柄、所有者和xdata。词典用以存储用户自己定义的各类符号表及其他大量数据。
词典的DXF类名为DICTIONARY,子类名是AcDbDictionary。DXF中组的顺序是280 281 3 350/360(从3开始重复)。由于从3开始课伊重复,因此扩展字典可以拥有多个扩展记录。
例如:在对象段中:
0
SECTION
2
OBJECTS
。。。。。。
后:
0
DICTIONARY
5
B5
330
50
100
AcDbDictionary
280
1
281
1
3
XRecordAnnotation
360
B6
3
XRecordAnnotation22
360
CE
表示扩展字典(句柄为B5)拥有两个扩展记录:
名称为XrecordAnnotation,句柄为B6
名称为XrecordAnnotation2,句柄为CE
3、扩展记录
扩展记录的DXF类名为XRECORD ,子类名是AcDbXrecord。
(1)实体的扩展词典能引用多个AcDbXrecord对象,AcDbXrecords能包含2G的任意数据。
(2)AcDbXrecord是一个任意数据的容器,能包含从1到369(除了5和105外)之间以任意顺序出现的任意组。其中的数据没有任何限制,可以被任何其它对象所拥有。
扩展记录通常与数据库的特殊实体相关联。在ActiveX Automation中,使用GetXRecordData和SetXRecordData方法。它们将两组组代码和值作为参数,这些组将作为变量传递。
XRECORD下列组码是所有外部记录公用的组码。
组码说明 100子类标记 (AcDbXrecord)
例如在
0
DICTIONARY
。。。。。
后:
0
XRECORD
5
B6
102
{ACAD_REACTORS
330
B5
102
}
330
B5
100
AcDbXrecord
280
1
1
存储扩展记录431-2
6
批文号码431-2
0
XRECORD
5
CE
102
{ACAD_REACTORS
330
B5
102
}
330
B5
100
AcDbXrecord
280
1
1
存储扩展记录431-22
6
批文号码431-22