找回密码
 立即注册

QQ登录

只需一步,快速开始

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

如何克隆实体clone(),getTransformedCopy()

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-9-25 13:24:02 | 显示全部楼层 |阅读模式
  1. <pre name="code" class="cpp">AcDbDatabase *pDataBase = NULL;
  2.                 pDataBase = acdbCurDwg();  //根据需要传入不同AcDbDatabase 就可以做到不同dwg克隆实体
  3.        
  4.                 Acad::ErrorStatus es = Acad::eOk;
  5.                        
  6.                 //
  7.                 AcDbBlockTable *pBlockTable = NULL;
  8.                 es = pDataBase->getBlockTable(pBlockTable, AcDb::kForRead); //得到块表指针
  9.                 if (Acad::eOk != es)
  10.                         return false;
  11.                 AcDbBlockTableRecord *pBlockTableRecord = NULL;
  12.                 es = pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);        //得到块表记录指针
  13.                 if (Acad::eOk != es)
  14.                         return false;
  15.                 pBlockTable->close();
  16.                 pBlockTable = NULL;
  17.                 AcDbBlockTableRecordIterator *pBlockIter = NULL;
  18.                 es = pBlockTableRecord->newIterator(pBlockIter);
  19.                 if (Acad::eOk != es)
  20.                         return false;
  21.                 AcDbEntity *pEntity = NULL;
  22.                 AcGeMatrix3d xform;
  23.                 xform.setToTranslation(AcGeVector3d(100,500,0));
  24.                 AcDbObjectId objTmpId = AcDbObjectId::kNull;
  25.                 for (pBlockIter->start(); !pBlockIter->done(); pBlockIter->step())
  26.                 {
  27.                         pBlockIter->getEntityId(objTmpId);
  28.                         AcDbObjectPointer<AcDbEntity> pEnt(objTmpId, AcDb::kForWrite);
  29.                         if (pEnt.openStatus() == Acad::eOk)
  30.                         {
  31.                                        
  32.                                         //pEntity = AcDbEntity::cast(pEnt->clone());//克隆不移动
  33.                                         pEnt->getTransformedCopy(xform,(AcDbEntity*&)pEntity); //克隆移动实体
  34.                                         pEntity->setColorIndex(1);                       
  35.                         }
  36.                 }
  37.                 pBlockTableRecord->appendAcDbEntity(objTmpId,pEntity);
  38.                 pEntity->close();
  39.                 pBlockTableRecord->close();
  40.                 pBlockTableRecord = NULL;
  41.        
  42.                 if (pBlockIter != NULL)
  43.                 {
  44.                         delete pBlockIter;
  45.                         pBlockIter = NULL;
  46.                 }
  47.                 return true;
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 22:26 , Processed in 0.112045 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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