• ObjectARX学习笔记(三十)---如何克隆实体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;
     

  • 相关阅读:
    递归获取指定盘符下的所有文件及文件夹
    单例模式和多线程有没有关系?
    eclipse启动tomcat时设置端口
    dozer转化对象
    枚举
    dubbo
    json
    配网失败问题
    esp_err_t esp_event_loop_init(system_event_cb_t cb, void *ctx);
    base64编码
  • 原文地址:https://www.cnblogs.com/mjgw/p/12392794.html
Copyright © 2020-2023  润新知