Тема: Копирование объектов между рисунками

Помогите разобраться, как скопировать комплексный объект с одного чертежа на другой, если объект не является графическим примитивом, например запись таблицы размерных стилей AcDbDimStyleTableRecord.
На форуме и в примерах нашел, как можно скопировать блоки, но с AcDbDimStyleTableRecord почему то так не выходит.

Re: Копирование объектов между рисунками

> роман
Приведи код, которым ты пытался скопировать.

Re: Копирование объектов между рисунками

Вот кусок кода, которым я питаюсь скопировать стиль.
При копировании получаю eInvalidOwnerObject
//Ищем в указанном файле нужный стиль
    std::auto_ptr<AcDbDatabase> pSourceDb(new AcDbDatabase( false, true ) );
    if( pSourceDb->readDwgFile( filePath, _SH_DENYNO ) != Acad::eOk ) return false;
    if( !GetDimStyleId( pSourceDb, styleName, styleId ) ) return false;
    //Получаем ownerID, для стиля из базы в которую копируем
    Acad::ErrorStatus es = Acad::eOk;
    AcDbObjectId ownerId;
    {       
        SmartAcDb<AcDbDimStyleTableRecord> pTempRecord;
        if( (es = pCurDb->getDimstyleData( (AcDbDimStyleTableRecord*&)pTempRecord ) ) != Acad::eOk) return false;
        ownerId = pTempRecord->ownerId();
    }
    //копируем
    AcDbObjectIdArray idArr;
    idArr.append( styleId );
    AcDbIdMapping idMap;
    idMap.setDestDb( pCurDb );
    if( ( es = pSourceDb->deepCloneObjects( idArr, ownerId, idMap ) ) != Acad::eOk ) return false;

Re: Копирование объектов между рисунками

> роман
Попробуй такое:

static int ads_copydimrec(void)
{
  AcString sFName, sDimName;
  acedRetVoid();
  struct resbuf *pArgs = acedGetArgs(), *rb = pArgs ;
  if (!rb || rb->restype != RTSTR) {
    acedRetInt(-1);
    return RSRSLT;
  }
  sFName = rb->resval.rstring; rb = rb->rbnext;
  if (!rb || rb->restype != RTSTR) {
    acedRetInt(-2);
    return RSRSLT;
  }
  sDimName = rb->resval.rstring;
  AcDbDatabase *pSourceDb = new AcDbDatabase( false, true );
  if( pSourceDb->readDwgFile(sFName, _SH_DENYNO) != Acad::eOk ) {
    acedRetInt(-3);
    delete pSourceDb; return RSRSLT;
  }
  AcDbObjectId idDimStyleTable = pSourceDb->dimStyleTableId();
  AcDbDimStyleTable *pDimStyleTable = NULL;
  if (pSourceDb->getDimStyleTable(pDimStyleTable,AcDb::kForRead) != Acad::eOk) {
    acedRetInt(-4); delete pSourceDb; return RSRSLT;
  }
  AcDbObjectId idDimStyleRecordSource;
  if (pDimStyleTable->getAt(sDimName,idDimStyleRecordSource) != Acad::eOk) {
    acedRetInt(-5); delete pSourceDb; return RSRSLT;
  }
  pDimStyleTable->close();
  //копируем
  AcDbObjectIdArray idArr; idArr.append( idDimStyleRecordSource);
  AcDbIdMapping idMap;
  idMap.setDestDb(acdbCurDwg());
  Acad::ErrorStatus es;
  if((es = pSourceDb->wblockCloneObjects(idArr, acdbCurDwg()->dimStyleTableId(), idMap, AcDb::kDrcReplace)) != Acad::eOk) {
    acutPrintf("\nes=%s",acadErrorStatusText(es));
    acedRetInt(-6); delete pSourceDb; return RSRSLT;
  }
  acedRetInt(0);
  delete pSourceDb;
  return (RSRSLT) ;
}

Главное отличие: не deepCloneObjects, а wblockCloneObjects

Re: Копирование объектов между рисунками

Сработало, спасибо, что помогли разобраться.
Не брал функцию wblockCloneObjects во внимание, из за словосочетания blockClone.