ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: Алексей Кулик от 25-04-2017, 20:52:33
Название: Как определить корректное завершение штатной команды?
Отправлено: Алексей Кулик от 25-04-2017, 20:52:33
Раньше все было просто: command (равно как command-s) всегда возвращали nil - что в случае успешного завершения команды, что в случае ее отмены. vl-cmdf в этом отношении была более адекватна: если команда была завершена корректно, возвращался t, если отменена - nil. В AutoCAD2016x64 (установлены все обновления) Eng и Rus элементарный код не работает так, как нужно:
Когда бы я ни нажимал на Esc, все равно выводится "ok". Начиная с какой версии так подсуропили (то ли 2014, то ли 2015) - не столь суть важно. Важно то, что каким образом теперь определить, выполнил команду пользователь или отменил ее? Неужели придется извращаться по полной программе? P.S. К сожалению, приходится пока обходиться только lisp'ом, другие варианты решения не покатят :(
Название: Re: Как определить корректное завершение штатной команды?
Отправлено: Александр Ривилис от 26-04-2017, 09:19:50
Документация говорит, что (vl-cmdf) всегда возвращает T: https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-6F1AAB6B-D5B1-426A-A463-0CBE93E4D956-htm.html
Название: Re: Как определить корректное завершение штатной команды?
Отправлено: Алексей Кулик от 26-04-2017, 09:22:11
Ага, я видел. В том-то и проблема: если в ACAD2013 запустить код, то при нажатии Esc - что на первый pause, что на второй - вернется nil. В 2016 такой номер уже не срабатывает :( А определить, нажал пользователь Esc или нет - сильно хочется.
Название: Re: Как определить корректное завершение штатной команды?
Отправлено: frostmourn от 28-04-2017, 17:09:09
Какая причина не запрашивать заранее параметры и потом передавать в команду? Нужна интерактивность во время её выполнения? И, кстати, что конкретно за команда?
Название: Re: Как определить корректное завершение штатной команды?
Отправлено: Алексей Кулик от 28-04-2017, 19:14:10
Например, _.-insert (динамическая вставка блока, блок "болтается" на курсоре). Или _.change (аналогичные условия). Если для _.-insert в принципе можно получить последний примитив, после выполнения посмотреть, что изменилось - в общем, выкрутиться, то для _.change начинается уже значительно более мозголомная логика. Похоже, придется переписывать часть библиотечных функций :( Печально...
Название: Re: Как определить корректное завершение штатной команды?
Отправлено: frostmourn от 02-05-2017, 16:21:40
Для _.change можно попробовать запоминать состояние примитива, что-то типа такого: