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

       

Взаимодействие с AutoCAD


Взаимодействие Пользователя (типа acedGetPoint) от запроса Автоматизации должно быть обернуто вокруг ряда ObjectARX ВЫЗОВОВ API. Это позволяет Вам сохранять AutoCAD “состояние” перед взаимодействием и затем восстанавливать это впоследствии. Это также гарантирует, что любой другой из -процесса запросы Автоматизации отклонены для продолжительности вашего взаимодействия. Это предотвращает другого клиента Автоматизации от изменения командной строки или базы данных, в то время как Вы ожидаете ввод пользователя.

ObjectARX API, чтобы использовать при взаимодействии с пользователем включают следующие функции:

Adesk::Boolean acedSetOLELock(int handle, int flags=0);

Adesk::Boolean acedClearOLELock(int handle);

void acedPostCommandPrompt();

Например:

// Получить точку в AutoCAD, даже при том, что точка не используется.

//

STDMETHODIMP CMyApp::GetPoint()

{

// Установление блокировки сообщает AutoCAD, чтобы отклонить любой другой из -процесса запросы

// Автоматизации. Если этот запрос сделан от неизвестного контекста (например, не нормалью AutoCAD

// зарегистрированной командой или lisp), то это также сохраняет поток состояние AutoCAD.

//

if (acedSetOLELock(5) != Adesk::kTrue)

{

return E_FAIL;

}

// Do the input acquisition (interaction) ==  Делайте входное приобретение (взаимодействие).

//

ads_point result;

if(ads_getpoint(NULL, "Pick a point: ", result) != RTNORM)

{

return E_FAIL;

}

// Clear the lock to allow out-of-process Automation

// requests to be accepted again. If the AutoCAD state was saved

// during the call to acedSetOLELock(), then the saved state is

// restored.

// Очистить блокировку, чтобы позволить из -процесса запросам Автоматизации быть принятым

// снова. Если состояние AutoCAD было сохранено в течение запроса к acedSetOLELock (), то

// сохраненное состояние восстановлено.

//

acedClearOLELock(5);

//Вынуждает AutoCAD восстанавливать изображение приглашения ко вводу команды..

//

acedPostCommandPrompt();

return S_OK;

}



Содержание раздела