admin 发表于 2024-9-25 13:24:02

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

<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;
页: [1]
查看完整版本: 如何克隆实体clone(),getTransformedCopy()