Помогите с отменой действия программы! - Страница 4
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите с отменой действия программы!

Помогите с отменой действия программы!

Ответ
Поиск в этой теме
Непрочитано 09.10.2007, 18:05
Помогите с отменой действия программы!
480725
 
Москва
Регистрация: 06.10.2007
Сообщений: 132

Несколько программ вызываются каждая из своего пункта меню и производят зацикленные операции. Хотя нормальное завершение и предусмотрено, велика вероятность, что пользователь прервет программу вызовом другого пункта меню.
В этои сдучае оператор (command"_.undo""_begin") остается незавершенным и приходится в обработчик ошибок ставить анализ системной переменной UNDOCNL, т.к. иначе отмена вообще блокируется
При эксплуатации выявились две проблемы:
1) Если обработчик ошибок вовремя не сработал, а такое случается иногда т.к. какие-то действия пользователей способны вызвать прерывание работы самого обраработчика, то оператор (command"_.undo""_end") запущенный не сразу после работы программы, а после выполнения, например, каких-то построений в Автокаде, приведет в случае отмены одновременную отмену и результатов программы и этих построений.
2) Возникает масса ложных необходимостей выполнения (command"_.undo""_end") т.к. обращение к любой команде Автокада в меню устанавливает в переменной UNDOCTL признак незавершенности группы отмены. Предположительно из-за этого резко возрастает количество неоходимых операторов отмены (значительно более одного на одну операцию или программу), при этом результпт работы программы отменяется все-таки одним оператором, а не по частям, просто много операторв отмены расходуются вхолостую.
Думаю, виноват все-таки АвтоКАД, но может кто-то нашел решение.
Помогите!
Просмотров: 10392
 
Непрочитано 10.10.2007, 16:13
#61
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,432


http://dwg.ru/forum/viewtopic.php?t=...r=asc&start=26
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.10.2007, 19:10
#62
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Александр Ривилис
На всякий случай ответ Kean Walmsley (Autodesk Developer Technical Services) на мой запрос:

Цитата:
Hi Alexander,

This is very strange - the *error* function no longer appears to support the use of (command) (whether on its own or with arguments). I have submitted a change request for this functionality.

In the meantime, you can use a workaround as show in the attached file, using COM functions to call the commands you wish. It's not ideal, as these strings do not then respect CMDECHO, but it does function as you'd expect:

(vla-SendCommand (vla-get-ActiveDocument (vlax-get-acad-object)) (strcat (chr 27)(chr 27)"_.undo _e _.u "))
В любой программе, не только в *error* после этого оператора уже ничего больше не выполняется.. Зря я славил автодеск. перевелись добрые доктора.. А из командной строки нормально работала..
480725 вне форума  
 
Непрочитано 10.10.2007, 19:14
#63
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от 480725
В любой программе, не только в *error* после этого оператора уже ничего больше не выполняется.. Зря я славил автодеск. перевелись добрые доктора.. А из командной строки нормально работала..
Ты видимо чего-то не допонял. Эта строка посылается в командную строку и выполняется после (!!!) завершения lisp-программы, когда AutoCAD находтся в "ждущем" режиме. Поэтому в *error* этот код работает, но выполнен он будет только после всех остальных действий, когда они будут завершены.
И еще. Пока форум autocad.ru работает посмотри: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25986kt
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 10.10.2007, 20:43
#64
480725


 
Регистрация: 06.10.2007
Москва
Сообщений: 132


Цитата:
Сообщение от Александр Ривилис
Цитата:
Сообщение от 480725
В любой программе, не только в *error* после этого оператора уже ничего больше не выполняется.. Зря я славил автодеск. перевелись добрые доктора.. А из командной строки нормально работала..
Ты видимо чего-то не допонял. Эта строка посылается в командную строку и выполняется после (!!!) завершения lisp-программы, когда AutoCAD находтся в "ждущем" режиме. Поэтому в *error* этот код работает, но выполнен он будет только после всех остальных действий, когда они будут завершены.
И еще. Пока форум autocad.ru работает посмотри: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=25986kt
Интернет ломался. Два раза терял ответ.
Ты конечно прав. Но из-за неправильной интерпритации причины я не описал эффект до конца. Прерываю программу вызовм из меню команды отрезок. Программа прервалась а отрезок не вызвался. Повторное обращение к меню нормально вызывает отрезок. Т.е. виновата *ERROR* там только восстановление слоя и твой оператор.
480725 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите с отменой действия программы!

Реклама i