找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 24|回复: 0

arx炸开图纸上所有的块

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-10-10 16:03:02 | 显示全部楼层 |阅读模式
  1. static void explodeBlock1()
  2. {
  3.         AcDbObjectIdArray explodedBrefs;
  4.         AcDbVoidPtrArray  brefFragments;
  5.         AcDbDatabase* pDB = acdbCurDwg();
  6.         Acad::ErrorStatus es;
  7.         // Get the modelspace
  8.         AcDbObjectId IdModelSpace = acdbSymUtil()->blockModelSpaceId(pDB);
  9.         AcDbObjectPointer<AcDbBlockTableRecord> modelspace(IdModelSpace, AcDb::kForRead);
  10.         if (modelspace.openStatus() == Acad::eOk) {
  11.                 // Now let's iterate over all entities in the modelspace
  12.                 AcDbBlockTableRecordIterator* it = nullptr;
  13.                 es = modelspace->newIterator(it);
  14.                 if (it && (es == Acad::eOk)) {
  15.                         AcDbObjectId entityId;
  16.                         for (it->start(); !it->done(); it->step()) {
  17.                                 es = it->getEntityId(entityId);
  18.                                 AcDbObjectPointer<AcDbBlockReference> bref(entityId, AcDb::kForRead);
  19.                                 if (bref.openStatus() == Acad::eOk) {
  20.                                         // We found a BREF!
  21.                                         AcDbVoidPtrArray entitySet;
  22.                                         es = bref->explode(entitySet);
  23.                                         if (es == Acad::eOk) {
  24.                                                 brefFragments.append(entitySet);
  25.                                                 explodedBrefs.append(entityId);
  26.                                         }
  27.                                         // Don't append the fragments while iterating over the modelspace
  28.                                 }
  29.                         }
  30.                         delete it;
  31.                 }
  32.                 // Now append the new explosion fragment entities
  33.                 es = modelspace->upgradeOpen(); // must be write enabled now.
  34.                 for (void* p : brefFragments) {
  35.                         AcDbEntity* ent = (AcDbEntity*)p;
  36.                         es = modelspace->appendAcDbEntity(ent);
  37.                         if (es == Acad::eOk)
  38.                                 ent->close();
  39.                         else
  40.                                 delete ent; // avoid memory leak.
  41.                 }
  42.         }
  43.         // Now erase the exploded BREFs
  44.         for (AcDbObjectId& brefId : explodedBrefs) {
  45.                 AcDbObjectPointer<AcDbBlockReference> bref(brefId, AcDb::kForWrite);
  46.                 if (bref.openStatus() == Acad::eOk)
  47.                         bref->erase();
  48.         }
  49. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 06:32 , Processed in 0.183514 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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