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


         

Вы получаете объект через выбор,


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.


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