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



         

Открытие и Закрытие Объектов Базы данных - часть 2


ads_name objName);

Вообще, Вы получаете объект через выбор, и это возвращено в форме ads_name. Вы тогда должны обменять ads_name на AcDbObjectId и открывать это. Следующая функция демонстрирует этот процесс:

AcDbEntity*

selectEntity(AcDbObjectId& eId, AcDb::OpenMode openMode)

{

ads_name en;

ads_point pt;

acedEntSel("\nSelect an entity: ", en, pt);

// Exchange the ads_name for an object ID.

//

acdbGetObjectId(eId, en);

AcDbEntity * pEnt;

acdbOpenObject(pEnt, eId, openMode);

return pEnt;

}

Вы можете открывать объект в одном из трех режимов:

  • kForRead. Объект может быть открыт для читаемого до 256 устройств считывания, пока объект не уже открытый для записи, или для уведомляют.
  • kForWrite. Объект может быть открыт для записи, если это не уже открыто. Иначе, открытые сбои.
  • kForNotify. Объект может быть открыт для уведомления, когда объект закрыт, открытым для чтения, или открытый для записи, но не, когда это уже открыто для, уведомляют. См. главу 15, “Уведомление”. Приложения будут редко должны открыться,  объект для уведомляет и посылает этому уведомление.
  • Следующая таблица показывает возвращенным кодам ошибки, когда Вы пытаетесь открывать объект в различных режимах, и объект уже открытый.

     

    Открытие объектов в различных режимах

    Object already opened for:

    kForRead

    kForWrite

    kForNotify

    openedForRead

    eAtMaxReaders

    (if readCount = 256;

    otherwise succeeds)

    eWasOpenForRead

    (Succeeds)

    openedForWrite

    eWasOpenForWrite

    eWasOpenForWrite

    (Succeeds)

    openedForNotify

    eWasOpenForNotify

    eWasOpenForNotify

    eWasOpenForNotify

    wasNotifying

    (Succeeds)

    eWasNotifying

    eWasNotifying

    Undo

    eWasOpenForUndo

    eWasOpenForUndo

    (Succeeds)

    Если Вы пробуете открывать объект для записи, и Вы получаете ошибку eWasOpenForRead, Вы можете использовать upgradeOpen () чтобы модернизировать открытого состояния, чтобы записать, если имеется только одно устройство считывания объекта. Тогда Вы использовали бы downgradeOpen () чтобы понизить его состояние, чтобы читать. Точно так же, если ваш объект открытый для, уведомляют — например, когда Вы получаете уведомление —, и Вы хотите открыть это для записи, Вы можете использовать upgradeFromNotify () чтобы модернизировать его открытого состояния, чтобы записать. Тогда Вы использовали бы downgradeToNotify () чтобы понизить его состояние, чтобы уведомить.

    Для получения дополнительной информации относительно того, как управлять комплексными последовательностями открытия и закрытия объектов, см. “ Менеджер Транзакции ” на странице 451.




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