ObjectARX开发笔记(四)——有名对象字典

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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值