词典

来源:互联网 发布:苹果手机淘宝没有了 编辑:程序博客网 时间:2024/06/10 09:21

词典主要有以下4种:

组词典(Group Dictionary)、多线样式词典(MLINE Style dictionary)、布局词典(LayoutDictionary)、打印样式名称词典(plot name style Dictionary)

添加词典

Acad::ErrorStatus AcDbDictionary::setAt(constchar* pSrchKey,

AcDbObject* pNewValue,

AcDbObjectId& retObjId)

该函数将pNewValue指向的条目添加到字典中去,如果已存在,则替换掉原来的条目。

pSrchKey为新条目的名称/retObjId为新条目的对象ID。

当对象删除时,词典会自动的删除其中对象。

组词典AcDbGroup

组是一个容器对象,包含多个数据库实体对象,组中的对象被删除,组也会自动删除该对象。组可以通过setColor()/setLayer()/setLinetype()/setVisibility/setHighlight()可以为组中所有的实体设置属性。

组应该放入组词典中,当前数据库的组词典可以这样获取:

AcDbDictionary* pGrpDict = acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pGroupDict,AcDb::kForWrite);

 


创建字典的过程(以组词典为例):

void groupsp()

{

         //生成组词典,描述词典信息

         AcDbGroup*pGroup = new AcDbGroup(_T("GroupDictionaryDescription"));

         AcDbDictionary*pGroupDict;

         //获取当前数据库的组词典

         acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pGroupDict,AcDb::kForWrite);                 

         AcDbObjectIdpObjId;

         //将生成组词典添加到当前数据库组词典中。

         pGroupDict->setAt(_T("GroupDict"),pGroup, pObjId);

         pGroupDict->close();

         pGroup->close();

         makeGroup(pObjId);

         removeNoLine(pObjId);

}

 

void makeGroup(AcDbObjectId& pObjId)

{

//获取选择集

         ads_namesset;

         if((acedSSGet(NULL, NULL, NULL, NULL, sset)) != RTNORM)

         {

                   acutPrintf(_T("PleaseInput Some Entity!"));

                   return;

         }

         AcDbGroup*pGroup;

         acdbOpenObject(pGroup,pObjId, AcDb::kForWrite);

         longi, length;

         AcDbObjectIdentId;

         ads_nameename;

         //获取选择集长度

         acedSSLength(sset,&length);

         for(i = 0; i < length; i++)

         {

                   //取出选择集中实体的ads_name

                   acedSSName(sset,i, ename);

                   acdbGetObjectId(entId,ename);

                   //将实体添加进入组词典

                   if(pGroup->append(entId) != Acad::eOk)

                   {

                            acutPrintf(_T("Insertinto Group has failure!"));

                            return;

                   }

         }

         pGroup->close();

         acedSSFree(sset);

}

 

void removeNoLine(AcDbObjectId& pObjId)

{

         AcDbGroup*pGroup;

         acdbOpenObject(pGroup,pObjId, AcDb::kForWrite);

         AcDbGroupIterator*pIter = pGroup->newIterator();

         AcDbObject*pObj;

         AcDbDictionarypgroup;

         for(; !pIter->done();pIter->next())

         {

                   pIter->getObject(pObj,AcDb::kForRead);

                   if(pObj->isKindOf(AcDbLine::desc()))

                   {

                            pObj->close();

                            pGroup->remove(pIter->objectId());

                   }

                   else

                   {

                            pObj->close();

                   }

         }

         deletepIter;

         pGroup->setColorIndex(3);

         pGroup->close();

}

函数GetSymbolTable获取指针类型相对应的符号表。

从屏幕上拖动,获取选择集

AcedSSGet(NULL,NULL,NULL,NULL,sset)!=RTNORM

pObj->isKindOf(AcDbLine::desc()) 判断是否为AcDbLine对象

获取命名对象字典:然后再从命名对象字典中找到要打开的字典对象。

AcDbDictionary* pNameObj;

acdbHostApplicationServices()->workingDatabase()->getNameObjectsDictionary(pNameObj,AcDb::kforWrite);

pNameObj->getAt(XXXX)的返回值为:

Acad::eInvidKey       输入关键字无效

Acad::eKeyNotFound   未找到相应的对象


0 0