Тема: Группировка штриховки и круга
Здравствуйте. Не могу объединить в группу штриховку и окружность.
objIds.length(); равна двум, т.е. оба объекта входят в объект AcDbGroup
Помогите пожалуйста. Спасибо.
// функция создания группы
void createGroup(AcDbObjectIdArray& objIds, TCHAR* pGroupName)
{
AcDbGroup *pGroup = new AcDbGroup(pGroupName);
AcDbDictionary *pGroupDict;
acdbHostApplicationServices()->workingDatabase()
->getGroupDictionary(pGroupDict, AcDb::kForWrite);
AcDbObjectId pGroupId;
pGroupDict->setAt(pGroupName, pGroup, pGroupId);
pGroupDict->close();
// Now that the group has been added, it has an ObjectID.
// This is important since the group will become a persistent
// reactor for the added entities...
for (int i = 0; i < objIds.length(); i++)
{
pGroup->append(objIds[i]);
}
pGroup->close();
}
// функция рисования
void Draw()
{
Acad::ErrorStatus es;
AcDbCircle *pCircle = new AcDbCircle();
pCircle->setLayer(_T("УЗЛЫ"));
pCircle->setDatabaseDefaults();
pCircle->setNormal(AcGeVector3d::kZAxis);
pCircle->setCenter(cenPt);
pCircle->setRadius(5.0);
AcDbObjectId cirId;
postToDb(pCircle, cirId);
// Создадим штриховку
AcDbHatch* pHatch = new AcDbHatch();
pHatch->setDatabaseDefaults();
// Установим нормаль штриховки
pHatch->setNormal(AcGeVector3d::kZAxis);
// Установим уровень штриховки
pHatch->setElevation(0.0);
// Установим шаблон штриховки
pHatch->setPattern(AcDbHatch::kPreDefined, _T("SOLID"));
// Установим ассоциативность
pHatch->setAssociative(Adesk::kTrue);
if(masUzel[i].TIP==5) pHatch->setColorIndex(ColorAb);
if(masUzel[i].TIP==6) pHatch->setColorIndex(ColorKol);
AcDbObjectIdArray dbObjIds;
//dbObjIds.setLogicalLength(0);
dbObjIds.append(cirId);
pHatch->appendLoop(AcDbHatch::kExternal, dbObjIds);
dbObjIds.setLogicalLength(0);
pHatch->appendLoop(AcDbHatch::kDefault, dbObjIds);
// Обработка контуров штриховки
pHatch->evaluateHatch();
AcDbObjectId hatchId;
dbObjIds.setLogicalLength(0);
pHatch->getAssocObjIds(dbObjIds);
postToDb(pHatch, hatchId);
// Добавим ассоциативность к окружностям
for (int j=0; j < dbObjIds.length(); j++)
{
AcDbObjectPointer<AcDbEntity> pEnt(dbObjIds[j],AcDb::kForWrite);
if ((es = pEnt.openStatus()) != Acad::eOk)
{
acutPrintf(_T("\nError open circle for write: %s"),acadErrorStatusText(es));
return;
}// end if
pEnt->addPersistentReactor(hatchId);
}// end for
// Добавляю штриховку
dbObjIds.append(hatchId);
// созаю группу
createGroup(dbObjIds, _T("УЗЕЛ"));
text->close();
pHatch->close();
pCircle->close();
}