找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[每日一码] 删除一个图层上所有引用该层的实体,并删除图层定义

[复制链接]

1

主题

0

回帖

33

积分

管理员

积分
33
发表于 2024-3-14 20:49:11 | 显示全部楼层 |阅读模式
  1. void eraseLayer(CString layerName)
  2. {
  3.         AcDbDatabase *pDataBase = acdbHostApplicationServices()->workingDatabase();
  4.         // get the AcDbObjectId of the layer
  5.         AcDbLayerTable *pLayerTable;
  6.         if (pDataBase->getSymbolTable(pLayerTable, AcDb::kForRead) != Acad::eOk)
  7.         {
  8.                 return;
  9.         }
  10.         if (!pLayerTable->has(layerName))
  11.         {
  12.                 pLayerTable->close();
  13.                 return;
  14.         }
  15.         AcDbObjectId layerId;
  16.         if (pLayerTable->getAt(layerName, layerId) != Acad::eOk)
  17.         {
  18.                 pLayerTable->close();
  19.                 return;
  20.         }
  21.         pLayerTable->close();
  22.         // iterate through the AcDbBlockTable
  23.         AcDbBlockTable *pBlockTable;
  24.         if (pDataBase->getSymbolTable(pBlockTable, AcDb::kForRead) != Acad::eOk)
  25.         {
  26.                 return;
  27.         }
  28.         AcDbBlockTableIterator *pTableIterator;
  29.         if (pBlockTable->newIterator(pTableIterator) != Acad::eOk)
  30.         {
  31.                 pBlockTable->close();
  32.                 return;
  33.         }
  34.         pBlockTable->close();
  35.         while (!pTableIterator->done())
  36.         {
  37.                 AcDbBlockTableRecord *pRecord;
  38.                 if (pTableIterator->getRecord(pRecord, AcDb::kForRead) == Acad::eOk)
  39.                 {
  40.                         // iterate through the AcDbBlockTableRecord
  41.                         AcDbBlockTableRecordIterator *pRecordIterator;
  42.                         if (pRecord->newIterator(pRecordIterator) == Acad::eOk)
  43.                         {
  44.                                 while (!pRecordIterator->done())
  45.                                 {
  46.                                         AcDbEntity *pEntity;
  47.                                         if (pRecordIterator->getEntity(pEntity, AcDb::kForRead) == Acad::eOk)
  48.                                         {
  49.                                                 if (pEntity->layerId() == layerId)
  50.                                                 {
  51.                                                         if (pEntity->upgradeOpen() == Acad::eOk)
  52.                                                         {
  53.                                                                 pEntity->erase();
  54.                                                         }
  55.                                                 }
  56.                                                 pEntity->close();
  57.                                         }
  58.                                         pRecordIterator->step();
  59.                                 }
  60.                                 delete pRecordIterator;
  61.                         }
  62.                         pRecord->close();
  63.                 }
  64.                 pTableIterator->step();
  65.         }
  66.         delete pTableIterator;
  67.         // check if there is any other AcDbHardPointerId on the layer
  68.         // if not, erase the layer
  69.         AcDbObjectIdArray purgableIds;
  70.         purgableIds.append(layerId);
  71.         if (pDataBase->purge(purgableIds) == Acad::eOk)
  72.         {
  73.                 if (purgableIds.length() > 0)
  74.                 {
  75.                         AcDbLayerTableRecord *pLayer;
  76.                         if (acdbOpenObject(pLayer, layerId, AcDb::kForWrite) == Acad::eOk)
  77.                         {
  78.                                 pLayer->erase();
  79.                                 pLayer->close();
  80.                         }
  81.                 }
  82.         }
  83. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 20:46 , Processed in 0.150653 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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