天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 75|回复: 0

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

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
在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);

 

 

 

 

ObjectARX编程(八) --------有名对象字典、用户字典和字典...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:31 , Processed in 0.128361 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表