Объединение операций UNDO

Автор Тема: Объединение операций UNDO  (Прочитано 6922 раз)

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

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

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Объединение операций UNDO
« : 03-09-2018, 14:15:00 »
Здравствуйте!
Ситуация:
Выполняется стандартная команда AutoCAD, в результате которой изменяется какой-то объект (Этап1). После завершения команды запускается мой обработчик и выполняет дополнительные модификации объекта (Этап2). С точки зрения пользователей - это одна операция.
Проблема:
Если выполнять отмену (UNDO), то она происходит в два этапа: при первом UNDO отменяются мои модификации (Этап2), при втором - действия стандартной команды (Этап1). А мне нужно, чтобы обе отмены происходили одной операцией (однократным запуском UNDO).
Вопрос:
Есть ли какая-то возможность такое сделать?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение операций UNDO
« Ответ #1 : 03-09-2018, 14:40:04 »
После завершения команды запускается мой обработчик и выполняет дополнительные модификации объекта (Этап2)
Это происходит в обработчике события? Думаю что тут без вариантов. Можно попытаться отказаться от транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Объединение операций UNDO
« Ответ #2 : 03-09-2018, 15:51:45 »
Это происходит в обработчике события?
Да, именно так.
Можно попытаться отказаться от транзакции.
Сейчас попробую. Но, боюсь, что это добавит новых проблем...

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Объединение операций UNDO
« Ответ #3 : 03-09-2018, 18:21:15 »
Хм. А я ошибся. Если используется стандартная команда AutoCAD + мой последующий обработчик, то они отменяются одним UNDO. А вот если используется моя команда, которая выполняется с помощью Document.SendStringToExecute + мой последующий обработчик, то отмена выполняется в два этапа. Буду исследовать.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение операций UNDO
« Ответ #4 : 03-09-2018, 19:50:59 »
вот если используется моя команда, которая выполняется с помощью Document.SendStringToExecute + мой последующий обработчик, то отмена выполняется в два этапа.
Поиграйся с флагами команды ( https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-NET/files/GUID-F77E8FE0-8034-4704-93BD-F717608F8223-htm.html) Тут точно какие следует использовать в твоём случае я заранее не скажу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Объединение операций UNDO
« Ответ #5 : 04-09-2018, 13:04:58 »
Тут понимаете какая интересная ситуация. Если я оставляю команду пустой, то в списке отмены не появляется дополнительных пунктов:

Но стоит мне раскомментировать "внутренности" командного метода - появляются целых две дополнительные команды:

Поэтому, думаю, что флаги мне не помогут. Сам по себе механизм вызова команды ведёт себя адекватно.
Причём, при отмене первой "noname" команды ничего не происходит, при отмене второй - отменяются все изменения, которые происходят(по идее) в команде IterisPartsPropsChange, а при отмене собственно IterisPartsPropsChange опять ничего не происходит.
В логе событий документа есть интересные записи:
<...>
<DOC REACTOR: Шаблон_Газ.dwg> : [Document Lock Mode Will Change]
    MyCurMode:  Not Locked
    MyNewMode:  Write | Protected Auto Write
    CurMode:    Not Locked
    CmdName:    PARTIALREGEN
<DOC REACTOR: Шаблон_Газ.dwg> : [Document Lock Mode Changed]
    MyPrevMode: Not Locked
    MyCurMode:  Write | Protected Auto Write
    CurMode:    Write | Protected Auto Write
    CmdName:    PARTIALREGEN
<DOC REACTOR: Шаблон_Газ.dwg> : [Document Lock Mode Will Change]
    MyCurMode:  Write | Protected Auto Write
    MyNewMode:  Auto Write
    CurMode:    Write | Protected Auto Write
    CmdName:    #PARTIALREGEN
<DOC REACTOR: Шаблон_Газ.dwg> : [Document Lock Mode Changed]
    MyPrevMode: Write | Protected Auto Write
    MyCurMode:  Auto Write
    CurMode:    Not Locked
    CmdName:    #PARTIALREGEN
<...>
Вот подозреваю, что эта PARTIALREGEN как раз та самая команда, которая всё портит.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение операций UNDO
« Ответ #6 : 04-09-2018, 13:21:39 »
Но стоит мне раскомментировать "внутренности" командного метода - появляются целых две дополнительные команды:
Осталось понять что в этой "внутренности". Случайно не две последовательные транзакции?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Объединение операций UNDO
« Ответ #7 : 04-09-2018, 13:23:15 »
Вообще нет транзакций, была одна, удалил - не повлияло никак. Сейчас поочерёдно отключаю разные части, пытаюсь найти проблемное место.

Отмечено как Решение Дмитрий Загорулькин 04-09-2018, 18:32:22

Оффлайн Дмитрий ЗагорулькинАвтор темы

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Объединение операций UNDO
« Ответ #8 : 04-09-2018, 13:54:57 »
Поиграйся с флагами команды
Знаете, похоже, Вы снова оказались правы :)
Убрал флаг Session, убрал блокировку документа - проблема пропала!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Объединение операций UNDO
« Ответ #9 : 04-09-2018, 15:00:45 »
Знаете, похоже, Вы снова оказались правы :)
Интуиция однако! :-)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение