1 说明
在AutoCAD每个图形数据库中都包含一个有名对象字典,在该字典中包含了组、图层、材料、颜色、布局和打印信息等,如下图所示。例如,如果在AutoCAD中用GROUP命令创建了一个组实体,由组成特定组的相关实体的组对象(AcDbGroup)将置于有名对象字典中。组记录由组名构成,为一个AcDbGroup对象的映像。需要在有名对象字典中保存自定义数据时,应首先在根字典下新增一个新的字典,然后将数据保存在新添加的字典中。这样可以避免与字典的基本对象混淆。
2 相关函数
在有名对象字典添加数据用到AcDbDictionary类的getAt()、setAt()等函数,其用法与在扩展字典中添加数据时相同。唯一的区别在于获取字典的方式上,扩展字典是属于特定实体(AcDbObject类),有名对象字典属于图形数据库( AcDbDatabase类)。因此,获取有名对象字典需要用到AcDbDatabase类的函数。
getNamedObjectsDictionary()
- 定义:
Acad::ErrorStatus getNamedObjectsDictionary(
AcDbDictionary*& pDict,
AcDb::OpenMode mode
);
-
参数:
pDict —— 返回指向有名对象字典的指针;
OpenMode mode —— 打开有名对象字典的模式。 -
作用:以指定的模式打开图形数据库的有名对象字典。 指针pDict返回有名对象字典的地址。
-
返回值:如果打开成功,则返回Acad :: eOk。
getXXXXXDictionary()
函数名称中“XXXXX”可以用“Color ”、“Group”、“Layout”、“Material”等字符串替代,以获取图形数据库的颜色、组、图层、材料等字典。
- 定义:
Acad::ErrorStatus getXXXXXDictionary(
AcDbDictionary*& pDict,
AcDb::OpenMode mode
);
-
参数:
pDict —— 返回指向“XXXXX”字典的指针;
OpenMode mode —— 打开“XXXXX”字典的模式。 -
作用:以指定的模式打开图形数据库的“XXXXX”字典。 指针pDict返回“XXXXX”字典的地址。
-
返回值:如果打开成功,则返回Acad :: eOk。
3 思路
3.1 在有名对象字典中添加字典
在图形数据库的有名对象字典中添加一个字典,可以按以下步骤:
- 使用getNamedObjectsDictionary()函数获取有名对象字典;
- 然后通过使用setAt()函数在有名对象字典添加一个字典;
- 使用setAt()函数在新增字典中添加对象。
这样就完成了为有名对象字典添加字典的工作。
3.2 在有名对象字典中查看字典
在图形数据库的有名对象字典中查看一个字典,可以按以下步骤:
- 使用getNamedObjectsDictionary()函数获取有名对象字典;
- 然后通过使用getAt()函数获取指定名称的字典;
- 使用getAt()函数指定名称的字典中获取自定名称的对象。
这样就完成了在有名对象字典中查看字典的工作。
3.3 从有名对象字典中删除字典
在图形数据库的有名对象字典中删除一个字典,可以按以下步骤:
- 使用getNamedObjectsDictionary()函数获取有名对象字典;
- 然后通过使用remove()函数删除指定名称的字典;
这样就完成了在有名对象字典中删除字典的工作。
4 步骤
在有名对象字典中添加一个新的字典,代码如下:
//在有名对象字典中添加字典
static void MyGroupcreateDict()
{
//提示用户输入要添加的字典的名称
TCHAR DictName[200], objString[200];
DictName[0] = objString[0] = _T('\0');
acedGetString(NULL, _T("Enter Dictionary name: "), DictName);
acedGetString(NULL, _T("Enter Object Name to be added: "), objString);
//获取当前图形数据库的有名对象字典
AcDbObjectId objId;
AcDbDictionary *pNameObjDict = NULL, *pDict = NULL;
acdbHostApplicationServices() -> workingDatabase()-> getNamedObjectsDictionary(pNameObjDict,AcDb::kForWrite