Отмена действий

Автор Тема: Отмена действий  (Прочитано 15816 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Отмена действий
« : 13-07-2017, 11:36:02 »
Искал ответ на вопрос, но не нашёл. Наверно, плохо искал.  :'(
Суть вопроса:
1. делаю выборку по признаку ACAD_PROXY_ENTITY
2. ставлю метку (vla-startundomark adoc)
3. расчленяю набор командой (vl-cmdf "_explode" (ssname ss i))
4. ставлю метку (vla-endundomark adoc)
5. теперь делаю выборку по признаку "CIRCLE" среди расчлененных элементов
6. если окружности в новом наборе имеются, то продолжаю дальнейшие действия.

А если в новом наборе нет окружностей, то как мне отменить действия между метками?
(vl-cmdf "_undo" ... ? )
Что записать в команде? Какие параметры?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отмена действий
« Ответ #1 : 13-07-2017, 12:07:33 »
3. расчленяю набор командой (vl-cmdf "_explode" (ssname ss i))
Тут расчленяется не набор, а один выбранный примитив.
6. если окружности в новом наборе имеются, то продолжаю дальнейшие действия.

А если в новом наборе нет окружностей, то как мне отменить действия между метками?
(vl-cmdf "_undo" ... ? )
Что записать в команде? Какие параметры?
Попробуй:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_u")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Re: Отмена действий
« Ответ #2 : 13-07-2017, 12:46:09 »
Тут расчленяется не набор, а один выбранный примитив.
У меня там идет перебор в цикле, не стал расписывать досконально в сообщении.
(vl-cmdf "_u")
Не работает, т.е. прокси-объекты (вернее их остатки) остаются расчлененными.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отмена действий
« Ответ #3 : 13-07-2017, 14:40:51 »
Можно еще попробовать
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "1")
Только я вот думаю, что в этом контексте не поможет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Re: Отмена действий
« Ответ #4 : 13-07-2017, 15:28:12 »
Можно еще попробовать
Код - Auto/Visual Lisp [Выбрать]
(vl-cmdf "_undo" "1")
Только я вот думаю, что в этом контексте не поможет.
Нет, не работает.
Наверно, надо в
1. делаю выборку по признаку ACAD_PROXY_ENTITY
сделать копию выбранного в качестве образца ACAD_PROXY_ENTITY на промежуточный слой, расчленить его, потом анализ на содержание в нем круга и удаление (очистка) промежуточного слоя.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отмена действий
« Ответ #5 : 13-07-2017, 15:53:48 »
сделать копию выбранного в качестве образца ACAD_PROXY_ENTITY на промежуточный слой, расчленить его, потом анализ на содержание в нем круга и удаление (очистка) промежуточного слоя.
Это правильно, но не всегда возможно - далеко не все прокси-примитивы можно копировать, а тем более менять им слой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Re: Отмена действий
« Ответ #6 : 13-07-2017, 20:51:06 »
(vl-cmdf "_undo" "1")
Попробовал такой вариант:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "5")
Вроде работает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отмена действий
« Ответ #7 : 13-07-2017, 23:37:45 »
Попробовал такой вариант:
Код - Auto/Visual Lisp [Выбрать]

    (vl-cmdf "_undo" "5")

Вроде работает.
По меньшей мере странно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Re: Отмена действий
« Ответ #8 : 14-07-2017, 03:12:37 »
По меньшей мере странно.

1 - авто;
2 - управление;
3 - начало;
4 - конец;
5 - метка;
6 - обратно.

Вы предложили <1>, не сработало. А вот <5> (возврат к метке) - работает. Вроде логично. Погоняю еще немного на работе с разными файлами.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Re: Отмена действий
« Ответ #9 : 14-07-2017, 07:55:19 »
Мне кажется, что 5 в данном случае будет пониматься не как "Метка", а как количество отменяемых шагов.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн 1958Автор темы

  • ADN OPEN
  • **
  • Сообщений: 93
  • Карма: 0
Re: Отмена действий
« Ответ #10 : 14-07-2017, 08:13:13 »
Мне кажется, что 5 в данном случае будет пониматься не как "Метка", а как количество отменяемых шагов.
Возможно. Но, Вы посмотрите рисунок запроса действий на команду undo.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Re: Отмена действий
« Ответ #11 : 14-07-2017, 11:48:28 »
Смотрел. Много раз смотрел :)
Делать видео лениво, поэтому сделаем небольшой код:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (defun tt (/ adoc x s)
  4.   (setq x    0.
  5.         s    50.
  6.         adoc (vla-get-activedocument (vlax-get-acad-object))
  7.         ) ;_ end of setq
  8.   (repeat 15
  9.     (vla-startundomark adoc)
  10.     (entmakex (list '(0 . "circle") (cons 10 (list x 0. 0.)) (cons 40 (* s 0.4))))
  11.     (setq x (+ x s))
  12.     (vla-endundomark adoc)
  13.     ) ;_ end of repeat
  14.   (princ)
  15.   ) ;_ end of defun
После выполнения делаем _.undo и нажимаем, к примеру, 8. Смотрим на результат :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: Отмена действий
« Ответ #12 : 14-07-2017, 14:05:48 »
А параметр "Mark" не работает? Я имею ввиду, что-то вроде:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "M")

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1116
  • Карма: 173
Re: Отмена действий
« Ответ #13 : 14-07-2017, 14:09:15 »
Конечно работает! 1958, как мне кажется, просто перепутал количество отменяемых действий и порядковый номер опции :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Отмечено как Решение 1958 15-07-2017, 19:36:56

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Отмена действий
« Ответ #14 : 14-07-2017, 14:11:31 »
А параметр "Mark" не работает? Я имею ввиду, что-то вроде:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "M")
Тогда уж так. Отмечаем точку, до которой нужно откатиться:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "_mark")
Если нужно откатиться, то вызываем:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_undo" "_back")
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение