TA的每日心情 | 开心 7 小时前 |
---|
签到天数: 20 天 [LV.4]偶尔看看III
管理员
- 积分
- 1393
|
- #include <aced.h>
- #include <adslib.h>
- #include <dbmain.h>
- #include <dbblocktablerecord.h>
- #include <dbblockref.h>
- #include <dbdynamicblockreffdata.h>
- void processEntity(AcDbEntity* entity)
- {
- if (AcDbBlockReference* pBlockRef = AcDbBlockReference::cast(entity))
- {
- AcDbObjectId blockId = pBlockRef->blockTableRecord();
- AcDbBlockTableRecord* pBlockRecord = nullptr;
- if (acdbOpenObject(pBlockRecord, blockId, AcDb::kForRead) == Acad::eOk)
- {
- // 普通块或动态块
- if (!pBlockRecord->isAnonymousBlock())
- {
- if (pBlockRecord->hasAttributes())
- {
- // 属性块
- // 注意:此处简化处理,实际上需要遍历属性并获取每个属性的值
- acutPrintf("\n属性块 - 块名: %s", pBlockRecord->getName());
- // 获取属性值的逻辑需要进一步实现,通常涉及遍历AcDbAttributeDefinition和AcDbAttributeReference
- }
- else if (AcDbDynamicBlockReferenceData* pDynBlockData = pBlockRef->dynamicBlockData())
- {
- // 动态块
- acutPrintf("\n动态块 - 块名: %s", pBlockRecord->getName());
- // 获取动态块参数值的逻辑需要进一步实现,使用pDynBlockData
- }
- else
- {
- // 普通块
- acutPrintf("\n普通块 - 块名: %s", pBlockRecord->getName());
- }
- }
- else
- {
- // 匿名块
- acutPrintf("\n匿名块 - 名称值: %s", pBlockRecord->getName());
- }
- pBlockRecord->close();
- }
- }
- }
- void iterateAndProcessBlocks()
- {
- AcDbDatabase* pCurDb = acdbHostApplicationServices()->workingDatabase();
- AcDbBlockTable* pBlockTable = pCurDb->getBlockTable();
- if (pBlockTable != nullptr)
- {
- AcDbBlockTableIterator* pBlkTblIter;
- if (pBlockTable->newIterator(pBlkTblIter, AcDb::kForRead) == Acad::eOk)
- {
- for (; !pBlkTblIter->done(); pBlkTblIter->step())
- {
- AcDbObjectId blkId = pBlkTblIter->objectId();
- AcDbBlockTableRecord* pRec;
- if (acdbOpenObject(pRec, blkId, AcDb::kForRead) == Acad::eOk)
- {
- if (!pRec->isAnonymousBlock())
- {
- // 这里我们只关心块的引用,跳过块定义的处理
- }
- else
- {
- // 对于匿名块,直接处理块表记录
- processEntity(pRec);
- }
- pRec->close();
- }
- }
- pBlkTblIter->close();
- }
- }
- }
- // 主函数或命令函数调用iterateAndProcessBlocks()开始处理
复制代码 |
|