ObjectARX编程(八) --------有名对象字典、用户字典和字典中的对象

来源:互联网 发布:南城整形医院知美 编辑:程序博客网 时间:2024/06/07 03:44
在AutoCAD数据库中,对象字典是字典类型数据库对象的总称。按其层次关系可分为两类,一是有AutoCAD数据库直接管理的第一层对象字典; 二是有第一层对象字典管理的第二层对象字典。为了便于区别,我们把第一层对象字典称为有名对象字典,用于在应用程序中定义的字典称为用户字典,多线样式字典、组字典都属于第二类对象字典。

对象字典的第三层位字典中的对象。如组是组字典中的对象,多线样式是多线样式中的对象。在用户对象字典中,可以包含任何类型的对象,如实体对象、自定义对象和数据对象等。在有名对象字典中,各用户字典间通过字典名称来标识;

向字典中添加条目时,字典自动为该条目附加一个反应器,如果该对象被擦除,字典被通知,并将它从字典中除去。

对象字典是AutoCAD图形数据库的组成部分之一,它由三个部分组成:
组字典(Group Dictionary)、多线样式字典(Mline style Dictionary)、用户定义对象字典

组和组字典
组是实体等数据对象的有序集合,值组字典的成员。从层次关系来看,组是管理其所包含对象的容器,而组字典是管理组对象的容器。

组字典的操作和使用技术
1>. 获取数据库中指向组字典的指针
A. Acad::ErrorStatus getGroupDictionary(AcDbDictionary*& pDict,AcDb::OpenMode mode);

//从对象字典中获得
B. Acad::ErrorStatus getAt(const char* entryName,AcDbObject* newValue,AcDbObjectId& entryObj)const;
2>. //将组加入组字典中 srchKey: 组名; newValue: 为加入到组字典中的新的组的指针;
// retObject为函数返回的已加入到组字典中组对象的ID
Acad::ErrorStatus setAt(const char* srchKey,AcDbObject* newValue,AcDbObjectId& retObjectId);

3>. AcDbGroup类常用的成员函数
Acad::ErrorStatus append(AcDbObject id); //将对象加入组中
Acad::ErrorStatus remove(AcDbObjectId id); //移去组中id表示的对象
Acad::ErrorStatus setColor(const AcDmColor& color); //设置颜色
Acad::ErrorStatus setDescription(char* grpDesc); //设置组说明
Acad::ErrorStatus setLinetype(const char* newVal); //设置线型
Acad::ErrorStatus setLayer(const char* newVal); //设置组中实体
Acad::ErrorStatus setVisibility(AcDb::Visibility newBal); //设置可见

4>. 组字典的操作步骤
① 通过getGroupDictionary()函数获得指向图形数据库组字典的指针。
② 用组字典构造函数AcDbGroup() 创建组对象。
③ 用AcDbDictionary类的成员函数setAt()将所建立的组加入字典中。
④ 调用有关函数设置组的属性,如设置线型、颜色、图层、可见性等。

用户对象字典的操作和使用技术
在有名对象字典中定义一个用户字典的实质是创建一个AcDbdictionary的对象,并将它加入到有名对象字典中。其步骤如下:
a.调用ACDBDatabase类的成员函数getNamedObjectDictionary()得到有名对象字典的指针。
b. 定义新的用户对象字典并加入有名对象字典中。
AcDbDictionary *pNameObj; //定义指向有名对象字典的指针
acdbHostApplicationServices()->workingDatabase()->getNamedObjectDictionary(pNamedObj,AcDb::kForWrite);
AcDbDictionary *pDict = new AcDbDictionary;
AcDbObjectId dictId;
pNamedObject->setAt("TEST_DICT",pDcit,DictId);