().
// Если это - команда 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();
}
}