把块中不同图层的实体放到统一图层上的方法

//  得到层ID
 AcDbObjectId layerId;
 AcDbLayerTable 
* pLayerTbl  =  NULL;
 
if  (acdbHostApplicationServices() -> workingDatabase()
  
-> getLayerTable(pLayerTbl, AcDb::kForRead)  !=  Acad::eOk)
  
return ;
 
if  (pLayerTbl -> getAt( " 0 " , layerId)  !=  Acad::eOk)
 
{
  pLayerTbl
->close();
  
return;
 }

 pLayerTbl
-> close();
 
 
//  打开块表进行操作
 Acad::ErrorStatus es;
 AcDbBlockTable 
* pBlockTable  =  NULL;
    es 
=  acdbHostApplicationServices() -> workingDatabase()
        
-> getSymbolTable(pBlockTable, AcDb::kForRead);
 
if  (es  !=  Acad::eOk)  return ;
 
 AcDbBlockTableIterator 
* pBlkIter  =  NULL;
 
if  (pBlockTable -> newIterator(pBlkIter)  !=  Acad::eOk)
 
{
  pBlockTable
->close();
  
return;
 }

 pBlockTable
-> close();
 
 
//  遍历所有块表记录,找出插入快,设置新层
 AcDbBlockTableRecord  * pRecord  =  NULL;
 AcDbBlockTableRecordIterator 
* pRcdIter  =  NULL;
 AcDbEntity 
* pEnt  =  NULL;
 AcDbObjectIdArray Ids;
 
for  (;  ! pBlkIter -> done(); pBlkIter -> step()) 
 
{
  
if (pBlkIter->getRecord(pRecord, AcDb::kForWrite) != Acad::eOk)
  
{
   
continue;
  }

  
// 判断是否是插入块
  if (pRecord->getBlockReferenceIds(Ids) != Acad::eOk || Ids.length() == 0)
  
{
   pRecord
->close();
   
continue;
  }

  
  
if (pRecord->newIterator(pRcdIter) != Acad::eOk)
  
{
   pRecord
->close();
   
continue;
  }

  
// 遍历该块表记录,设置新层
  for (; !pRcdIter->done(); pRcdIter->step())
  
{
   
if (pRcdIter->getEntity(pEnt, AcDb::kForWrite) != Acad::eOk)
   
{
    
continue;
   }

   pEnt
->setLayer(layerId);
   pEnt
->close();
  }

  delete pRcdIter;
  pRcdIter 
= NULL;
  pRecord
->close();
 }

 
 delete pBlkIter;
 pBlkIter 
=  NULL;
 
 acDocManager
-> sendStringToExecute(acDocManager -> curDocument(),  " regen  " );
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值