ObjectARX学习笔记(二十六)--如何炸开块AcDbBlockReference

来源:互联网 发布:linux alias hadoop 编辑:程序博客网 时间:2024/04/19 04:11
    AcDbBlockTable *pBlockTable = NULL;Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase->getBlockTable(pBlockTable, AcDb::kForRead); //得到块表指针AcDbBlockTableRecord *pBlockTableRecord = NULL;es = pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//得到块表记录指针pBlockTable->close();pBlockTable = NULL;AcDbBlockTableRecordIterator *pBlockIter = NULL;es = pBlockTableRecord->newIterator(pBlockIter);for (pBlockIter->start(); !pBlockIter->done(); pBlockIter->step()){AcDbObjectId objTmpId = AcDbObjectId::kNull;pBlockIter->getEntityId(objTmpId);//块在模型空间中是以AcDbBlockReference存在 所以打开这个直接炸开就可以了AcDbObjectPointer<AcDbBlockReference> pEnt(objTmpId, AcDb::kForRead);if (pEnt.openStatus() == Acad::eOk){AcDbVoidPtrArray entitySet;es = pEnt->explode(entitySet);if (es != Acad::eOk){acutPrintf(_T("\n炸开块失败"));}else{for (int i = 0; i < entitySet.length(); i++){AcDbEntity* pEnty = (AcDbEntity*)entitySet.at(i);if (pEnty != NULL){pBlockTableRecord->appendAcDbEntity(pEnty);//将炸开的实体添加到模型空间中pEnty->close();}}}}}pBlockTableRecord->close();pBlockTableRecord = NULL;if (pBlockIter != NULL){delete pBlockIter;pBlockIter = NULL;}

1 0