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




Проблемы длинных транзакций для объектов пользователя - часть 3


§         вышеупомянутое отображение мог также быть сделан изнутри wblockClone объекта () метод, если это уже отменяет.

§         если ссылка{*справочники*} - компонент данных объекта, который зарегистрирован из использования dwgOutFields (), тогда может быть возможно избежать длинного операционного испытания законности. Испытание сделано,  регистрируя из ИДЕНТИФИКАТОРОВ, использующих тип kIdFiler регистратора. Чтобы избегать испытания, делайте не файл из ИДЕНТИФИКАТОРОВ, которые не должны имитироваться, в течение этого типа записи в файл. Однако, не проведите{*держите*} никакое монопольное использование ИДЕНТИФИКАТОРАМИ из этой записи в файл, или других особенностей, которые используют этого регистратора, подобно частичному сохраняют{*экономят*} и загружают, не может должным образом обрабатывать ваши объекты. Единственные безопасные ИДЕНТИФИКАТОРЫ, чтобы отказать от этого регистратора - объекты AcDbSoftPointerId и AcDbHardPointerId.

§         если ИДЕНТИФИКАТОР - фактически в постоянном реакторе, возможно найти это, используя реактор iterator. Имеется пример того, как объект словаря находит и прибавляет его ИДЕНТИФИКАТОР к IdMap в течение beginWblockClone () уведомление.

beginWblockClone(..., AcDbIdMapping& idMap)

{

...

AcDbDictionaryIterator* pIter = pDict->newIterator();

AcDbObject* pObj;

for ( ; !pIter->done(); pIter->next()) {

acdbOpenObject(pObj, pIter->objectId(), kForRead);

AcDbVoidPtrArray* pReactors = pObj->reactors();

void* pReactor;

AcDbObjectId rId;

MyReactor* pMyReactor;

if (pReactors) {

for (int i = 0; i < pReactors->length(); i++) {

pReactor = pReactors->at(i);

if (acdbIsPersistentReactor(pReactor)) {

rId = acdbPersistentReactorObjectId(pReactor);

if (acdbOpenObject(pMyReactor, rId, kForRead) == eOk) {

pMyReactor->close();

AcDbIdPair idPair(rId,

AcDbObjectId::kNull, kFalse);

idMap.assign(idPair);

}

}

}

}

pObj->close();

}

delete pIter;

pDict->close();

}




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