(defun c:commandname) + undo
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > (defun c:commandname) + undo

(defun c:commandname) + undo

Ответ
Поиск в этой теме
Непрочитано 13.03.2006, 09:55 #1
(defun c:commandname) + undo
Tramp
 
Регистрация: 12.01.2006
Сообщений: 114

Уважаемые, задал я lisp процедуру, определив её как команду AutoCAD (defun c:commandname). Процедура отрабатывает, как задумывалось, без проблем. А вот если сделать undo, после её применения, результаты её работы откатываются вместе с результатами работы команды, предшествовавшей ей. То есть, как я понимаю, undo процедуру эту вообще не видит, и срабатывает на команду, которая перед ней была. Это лечится как-то?
Просмотров: 2849
 
Непрочитано 13.03.2006, 10:02
#2
Кулик Алексей aka kpblc
Moderator

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


Да, лечится. В начале своего лиспа ставится либо
Код:
[Выделить все]
(command "_.undo" "_begin")
, либо
Код:
[Выделить все]
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
В конце - соответственно
Код:
[Выделить все]
(command "_.undo" "_e")
либо
Код:
[Выделить все]
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.03.2006, 10:26
#3
Tramp


 
Регистрация: 12.01.2006
Сообщений: 114


Спасибо, помогло :-)
Tramp вне форума  
 
Непрочитано 15.03.2006, 19:48
#4
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


для полной шоколадности я бы еще определил функцию
Код:
[Выделить все]
(defun *error*...
сработает в случае аварийного завершения, например Escапом, ну а в теле ее там уж то что надо - метку отката поставить или sysvar восстановить
Zouss вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > (defun c:commandname) + undo