首页 > 技术文章 > ObjectARX学习笔记(三十)---如何克隆实体clone(),getTransformedCopy()

mjgw 2020-03-01 22:52 原文

<pre name="code" class="cpp">AcDbDatabase *pDataBase = NULL;
pDataBase = acdbCurDwg(); //根据需要传入不同AcDbDatabase 就可以做到不同dwg克隆实体

Acad::ErrorStatus es = Acad::eOk;

//
AcDbBlockTable *pBlockTable = NULL;
es = pDataBase->getBlockTable(pBlockTable, AcDb::kForRead); //得到块表指针
if (Acad::eOk != es)
return false;

AcDbBlockTableRecord *pBlockTableRecord = NULL;
es = pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite); //得到块表记录指针
if (Acad::eOk != es)
return false;

pBlockTable->close();
pBlockTable = NULL;

AcDbBlockTableRecordIterator *pBlockIter = NULL;
es = pBlockTableRecord->newIterator(pBlockIter);
if (Acad::eOk != es)
return false;
AcDbEntity *pEntity = NULL;
AcGeMatrix3d xform;
xform.setToTranslation(AcGeVector3d(100,500,0));
AcDbObjectId objTmpId = AcDbObjectId::kNull;
for (pBlockIter->start(); !pBlockIter->done(); pBlockIter->step())
{
pBlockIter->getEntityId(objTmpId);
AcDbObjectPointer<AcDbEntity> pEnt(objTmpId, AcDb::kForWrite);
if (pEnt.openStatus() == Acad::eOk)
{

//pEntity = AcDbEntity::cast(pEnt->clone());//克隆不移动
pEnt->getTransformedCopy(xform,(AcDbEntity*&)pEntity); //克隆移动实体
pEntity->setColorIndex(1);
}

}

pBlockTableRecord->appendAcDbEntity(objTmpId,pEntity);
pEntity->close();
pBlockTableRecord->close();
pBlockTableRecord = NULL;

if (pBlockIter != NULL)
{
delete pBlockIter;
pBlockIter = NULL;
}
return true;
 

推荐阅读