ObjectARX, AutoCAD. Среда программирования библиотеки C++




Обработка жестких ссылок к AcDbEntities в течение WblockClone (): СЛУЧАЙ 1 - часть 8


().

//  Если это - команда WBLOCK, это спрашивает пользователя, если все текстовые стили были wblocked.

//  Иначе, только те текстовые стили, упомянутые примитивами, являющимися wblocked

будут

//  включены (заданное по умолчанию поведение wblock's).

//  AsdkEdReactor is derived from AcEditorReactor.

//

void

AsdkEdReactor::beginDeepCloneXlation(AcDbIdMapping& idMap, Acad::ErrorStatus* es)

{

if (idMap.deepCloneContext() == AcDb::kDcWblock && getYorN("Wblock all Text Styles"))

{

AcDbDatabase *pOrigDb, *pDestDb;

if (idMap.origDb(pOrigDb) != Acad::eOk)

return;

*es = idMap.destDb(pDestDb);

if (*es != Acad::eOk)

return;

AcDbTextStyleTable *pTsTable;

*es = pOrigDb->getSymbolTable(pTsTable, AcDb::kForRead);

if (*es != Acad::eOk)

return;

AcDbTextStyleTableIterator *pTsIter;

*es = pTsTable->newIterator(pTsIter);

if (*es != Acad::eOk) {

pTsTable->close();

return;

}

AcDbTextStyleTableRecord *pTsRecord;

AcDbObject *pClonedObj;

for (; !pTsIter->done(); pTsIter->step()) {

*es = pTsIter->getRecord(pTsRecord, AcDb::kForRead);

if (*es != Acad::eOk) {

delete pTsIter;

pTsTable->close();

return;

}

// It is not necessary to check for already cloned

// records. If the text style is already

// cloned, wblockClone() will return Acad::eOk

// and pCloneObj will be NULL.

//

pClonedObj = NULL;

*es = pTsRecord->wblockClone(pDestDb, pClonedObj, idMap, Adesk::kFalse);

if (*es != Acad::eOk) {

pTsRecord->close();

delete pTsIter;

pTsTable->close();

return;

}

*es = pTsRecord->close();

if (*es != Acad::eOk) {

delete pTsIter;

pTsTable->close();

return;

}

if (pClonedObj != NULL) {

*es = pClonedObj->close();

if (*es != Acad::eOk) {

delete pTsIter;

pTsTable->close();

return;

}

}

}

delete pTsIter;

*es = pTsTable->close();

}

}




Содержание  Назад  Вперед