天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 122|回复: 0

使用ObjectARX来判断并获取不同类型的块的相关信息

[复制链接]
  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

    积分
    1393
    QQ
    发表于 2024-5-26 11:00:43 | 显示全部楼层 |阅读模式
    1. #include <aced.h>
    2. #include <adslib.h>
    3. #include <dbmain.h>
    4. #include <dbblocktablerecord.h>
    5. #include <dbblockref.h>
    6. #include <dbdynamicblockreffdata.h>
    7. void processEntity(AcDbEntity* entity)
    8. {
    9.     if (AcDbBlockReference* pBlockRef = AcDbBlockReference::cast(entity))
    10.     {
    11.         AcDbObjectId blockId = pBlockRef->blockTableRecord();
    12.         AcDbBlockTableRecord* pBlockRecord = nullptr;
    13.         if (acdbOpenObject(pBlockRecord, blockId, AcDb::kForRead) == Acad::eOk)
    14.         {
    15.             // 普通块或动态块
    16.             if (!pBlockRecord->isAnonymousBlock())
    17.             {
    18.                 if (pBlockRecord->hasAttributes())
    19.                 {
    20.                     // 属性块
    21.                     // 注意:此处简化处理,实际上需要遍历属性并获取每个属性的值
    22.                     acutPrintf("\n属性块 - 块名: %s", pBlockRecord->getName());
    23.                     // 获取属性值的逻辑需要进一步实现,通常涉及遍历AcDbAttributeDefinition和AcDbAttributeReference
    24.                 }
    25.                 else if (AcDbDynamicBlockReferenceData* pDynBlockData = pBlockRef->dynamicBlockData())
    26.                 {
    27.                     // 动态块
    28.                     acutPrintf("\n动态块 - 块名: %s", pBlockRecord->getName());
    29.                     // 获取动态块参数值的逻辑需要进一步实现,使用pDynBlockData
    30.                 }
    31.                 else
    32.                 {
    33.                     // 普通块
    34.                     acutPrintf("\n普通块 - 块名: %s", pBlockRecord->getName());
    35.                 }
    36.             }
    37.             else
    38.             {
    39.                 // 匿名块
    40.                 acutPrintf("\n匿名块 - 名称值: %s", pBlockRecord->getName());
    41.             }
    42.             pBlockRecord->close();
    43.         }
    44.     }
    45. }
    46. void iterateAndProcessBlocks()
    47. {
    48.     AcDbDatabase* pCurDb = acdbHostApplicationServices()->workingDatabase();
    49.     AcDbBlockTable* pBlockTable = pCurDb->getBlockTable();
    50.     if (pBlockTable != nullptr)
    51.     {
    52.         AcDbBlockTableIterator* pBlkTblIter;
    53.         if (pBlockTable->newIterator(pBlkTblIter, AcDb::kForRead) == Acad::eOk)
    54.         {
    55.             for (; !pBlkTblIter->done(); pBlkTblIter->step())
    56.             {
    57.                 AcDbObjectId blkId = pBlkTblIter->objectId();
    58.                 AcDbBlockTableRecord* pRec;
    59.                 if (acdbOpenObject(pRec, blkId, AcDb::kForRead) == Acad::eOk)
    60.                 {
    61.                     if (!pRec->isAnonymousBlock())
    62.                     {
    63.                         // 这里我们只关心块的引用,跳过块定义的处理
    64.                     }
    65.                     else
    66.                     {
    67.                         // 对于匿名块,直接处理块表记录
    68.                         processEntity(pRec);
    69.                     }
    70.                     pRec->close();
    71.                 }
    72.             }
    73.             pBlkTblIter->close();
    74.         }
    75.     }
    76. }
    77. // 主函数或命令函数调用iterateAndProcessBlocks()开始处理
    复制代码

     

     

     

     

    使用ObjectARX来判断并获取不同类型的块的相关信息
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-5 12:32 , Processed in 0.131396 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表