|
在arx中,组是一个容器,保存有序的实体集合。组可以被看成是一个可以永久保存的有名称的的选择集。
组的信息保存在图形数据库的有名对象字典中,在ObjectARX中对组的操作实际上就是对有名对象字典中组字典的操作,组字典在有名对象字典的根字典中的关键字是“ACAD_GROUP”,因此可以通过有名对象字典的getAt函数来获得组字典的指针。不过,AcDbDatabase对象另外提供了getGroupDictionary函数,可以直接获取组字典的指针,在实际操作中,我们一般采用这种方式。
下面的代码创建了一个匿名组。
//创建一个匿名组
void CmdAddGroupXData()
{
//提示用户选择多个实体
TCHAR* prompts[2] = { _T("\n请选择实体"),_T("删掉一个实体") };
ads_name ss;
if (RTNORM != acedSSGet(_T(":$"), prompts, NULL, NULL, ss))
return;
Adesk::Int32 lLen;
acedSSLength(ss, &lLen);
AcDbObjectId id;
AcDbGroup* pGroup = new AcDbGroup;
for (Adesk::Int32 i = 0; i < lLen; i++)
{
ads_name ent;
if (RTNORM == acedSSName(ss, i, ent))
{
if (Acad::eOk == acdbGetObjectId(id, ent))
{
pGroup->append(id);
}
}
}
AcDbDictionary* pGroupDict = NULL;
acdbHostApplicationServices()->workingDatabase()->getGroupDictionary(pGroupDict, AcDb::kForWrite);
CString sGroupName = _T("*"); //匿名组的名称为“*”
AcDbObjectId idGroup;
Acad::ErrorStatus es;
es = pGroupDict->setAt(sGroupName, pGroup, idGroup);
pGroup->close();
pGroupDict->close();
} |
|