找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 282|回复: 1

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

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 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. }
复制代码

0

主题

0

回帖

26

积分

管理员

积分
26
 楼主| 发表于 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. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 22:54 , Processed in 0.136962 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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