天气与日历 切换到窄版

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

判断一个图块是否为动态块isDynamicBlock

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-2-12 22:24:03 | 显示全部楼层 |阅读模式
         
    1. bool IsThisDynamicBlockByXData(AcDbBlockReference *pBlockReference) {
    2.         AcDbObjectId idDynBTR; // We are looking for this: The named dynamic "root block".
    3.         AcDbObjectId idBTR = pBlockReference->blockTableRecord();
    4.         AcDbBlockTableRecord *pBTR;
    5.         Acad::ErrorStatus es;
    6.         es = acdbOpenObject(pBTR, idBTR, AcDb::kForRead);
    7.         if (!es) {
    8.                 if (pBTR->isAnonymous()) {
    9.                         resbuf *rbx = pBTR->xData(L"AcDbBlockRepBTag");
    10.                         if (rbx) {
    11.                                 //The resbuf list looks like this:
    12.                                 //1001, "AcDbBlockRepBTag",                        kDxfRegAppName
    13.                                 //1070, 1                                        kDxfXdInteger16
    14.                                 //1005, <Handle of the dynamic root block>,        kDxfXdHandle
    15.                                 //walk to kDxfXdHandle
    16.                                 for (resbuf *r = rbx; r; r = r->rbnext) {
    17.                                         if (r->restype == AcDb::kDxfXdHandle)        {
    18.                                                 AcDbDatabase *pDb = pBlockReference->database();
    19.                                                 AcDbHandle handle(r->resval.rstring);
    20.                                                 es = pDb->getAcDbObjectId(idDynBTR, false, handle);
    21.                                                 if (!es)
    22.                                                         break; // success!
    23.                                         }
    24.                                 }
    25.                                 acutRelRb(rbx);
    26.                         }
    27.                 }
    28.                 else
    29.                         idDynBTR = idBTR; // If it isn't anonymous, it must be the dynamic block itself
    30.         }
    31.         bool bIsDynamic = false;
    32.         if (!es && !idDynBTR.isNull())        {
    33.                 AcDbDynBlockTableRecord testDynBtr(idDynBTR);
    34.                 if (bIsDynamic = testDynBtr.isDynamicBlock())         {
    35.                         // verify that idBTR is an anonymous block from idDynBTR
    36.                         AcDbObjectIdArray anonymousIds;
    37.                         es = testDynBtr.getAnonymousBlockIds(anonymousIds);
    38.                         if (!anonymousIds.contains(idBTR))  {
    39.                                 acutPrintf(L"\nVerificatio FAILED!");
    40.                                 bIsDynamic = false;
    41.                         }
    42.                 }
    43.                 if (bIsDynamic) {
    44.                         es = acdbOpenObject(pBTR, idDynBTR, AcDb::kForRead);
    45.                         if (!es)        {
    46.                                 const ACHAR *pBlockName = nullptr;
    47.                                 pBTR->getName(pBlockName);
    48.                                 acutPrintf(L"\nDynamic BREF to block '%s'.", pBlockName);
    49.                                 pBTR->close();
    50.                         }
    51.                 }
    52.         }
    53.         return bIsDynamic;
    54. }
    复制代码

     

     

     

     

    判断一个图块是否为动态块isDynamicBlock
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
     楼主| 发表于 2024-2-12 22:24:20 | 显示全部楼层
    1. bool IsThisDynamicBlock(AcDbBlockReference *pBlockReference)
    2. {
    3.         bool bIsDynamicBlock;
    4.         bIsDynamicBlock = AcDbDynBlockReference::isDynamicBlock(pBlockReference->blockTableRecord());
    5.         //or:
    6.         AcDbDynBlockTableRecord testDynBtr(pBlockReference->blockTableRecord());
    7.         bIsDynamicBlock = testDynBtr.isDynamicBlock();
    8.         return bIsDynamicBlock;
    9. }
    复制代码

     

     

     

     

    判断一个图块是否为动态块isDynamicBlock
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-11-1 11:34 , Processed in 0.147299 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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