Взаимодействие с 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;
}