一、本节课程
C++ ARX二次开发扩展字典、有名对象字典
二、本节要讲解的知识点
扩展字典的使用和有名对象字典的使用(AddXRecord、ViewXRecord、AddNameDict、ViewNameDict)。
三、具体内容
1、访问实体的扩展字典?扩展字典与特定的实体关联的,但是一个实体在默认情况下是不包含扩展字典的,如果要利用扩展字典保存与实体关联的数据,可以使用createExtentionDictionary函数来为实体建立扩展字典,如果实体已经包含了扩展字典,那么该函数不产生任何影响。 实体的extentionDictionary函数可以获得扩展字典。
2、访问有名对象字典?每个AUTOCAD图形数据库都有一个有名对象字典,默认情况下字典包含了组,多线样式,布局,打印等信息。例如,用户在AUTOCAD中创建一个组,就会有一个代表该组的元素被添加到组字典中。如果需要在有名对象字典中保存自己的数据,一个可以在有名对象字典中添加一个根字典,然后再向根字典添加新的字典,进而在新字典中保存数据。这样的好处是不会与有名对象字典的基本字典相混淆。
3、建立实体的扩展字典,向其中添加扩展记录:
static void YunyouMyGroupAddXRecord() { AcDbEntity *pEnt=NULL; AcGePoint3d pickPoint; if (CSelectUtil::PromptSelctEnts(TEXT("\n选择所要添加扩展记录的实体:"),AcDbEntity::desc(),pEnt,pickPoint)) { //向实体添加扩展字典 pEnt->createExtensionDictionary(); AcDbObjectId dictObjId=pEnt->extensionDictionary(); pEnt->close();
//创建扩展记录实体 AcDbXrecord *pXrec=new AcDbXrecord;
//向扩展字典中添加一条记录 AcDbObjectId xRecObjId; AcDbDictionary *pDict=NULL; if (acdbOpenObject(pDict,dictObjId,AcDb::kForWrite)==Acad::eOk) { pDict->setAt(TEXT("XRecord"),pXrec,xRecObjId); pDict->close(); } //设置扩展记录的内容 struct resbuf *pRb=acutBuildList(AcDb::kDxfText,TEXT("测试字符串数据"), AcDb::kDxfInt32,12, AcDb::kDxfReal,3 |