词典
来源:互联网 发布:苹果手机淘宝没有了 编辑:程序博客网 时间: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 未找到相应的对象