Message 1 of 5
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
static void readBlockEntities(const AcDbObjectId& blkid , AcDbObjectIdArray &ids)
{
AcDbBlockTableRecordIterator* iter;
AcDbBlockReference* pBlkRef;
AcDbBlockTableRecord* pRecord;
Acad::ErrorStatus es = acdbOpenObject(pBlkRef, blkid, AcDb::kForRead);
if (es != Acad::eOk)
return;
AcDbObjectId blockTableRecordId = pBlkRef->blockTableRecord();
AcGeMatrix3d blkmat = pBlkRef->blockTransform();
pBlkRef->close();
es = acdbOpenObject(pRecord, blockTableRecordId, AcDb::kForWrite);
if (es != Acad::eOk || pRecord == NULL)
return;
pRecord->newIterator(iter);
for (iter->start(); !iter->done(); iter->step())
{
AcDbObjectId id;
AcDbEntity* pEnt1 = NULL;
es = iter->getEntityId(id);
es = iter->getEntity(pEnt1, AcDb::kForRead);
if (es != Acad::eOk || !id.isValid())continue;
AcDbObjectPointer<AcDbBlockReference> pEnt(id, AcDb::kForRead);
if (pEnt.openStatus() == Acad::eOk)
{
pEnt1->close();
AcDbObjectIdArray nestedIds;
readBlockEntities(id, nestedIds);
ids.append(nestedIds);
}
else
{
pEnt1->transformBy(blkmat);
ids.append(id);
pEnt1->close();
}
}
delete iter;
pRecord->close();
}
Solved! Go to Solution.