Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 03-09-2018, 14:15:00

Название: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 03-09-2018, 14:15:00
Здравствуйте!
Ситуация:
Выполняется стандартная команда AutoCAD, в результате которой изменяется какой-то объект (Этап1). После завершения команды запускается мой обработчик и выполняет дополнительные модификации объекта (Этап2). С точки зрения пользователей - это одна операция.
Проблема:
Если выполнять отмену (UNDO), то она происходит в два этапа: при первом UNDO отменяются мои модификации (Этап2), при втором - действия стандартной команды (Этап1). А мне нужно, чтобы обе отмены происходили одной операцией (однократным запуском UNDO).
Вопрос:
Есть ли какая-то возможность такое сделать?
Название: Re: Объединение операций UNDO
Отправлено: Александр Ривилис от 03-09-2018, 14:40:04
После завершения команды запускается мой обработчик и выполняет дополнительные модификации объекта (Этап2)
Это происходит в обработчике события? Думаю что тут без вариантов. Можно попытаться отказаться от транзакции.
Название: Re: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 03-09-2018, 15:51:45
Это происходит в обработчике события?
Да, именно так.
Можно попытаться отказаться от транзакции.
Сейчас попробую. Но, боюсь, что это добавит новых проблем...
Название: Re: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 03-09-2018, 18:21:15
Хм. А я ошибся. Если используется стандартная команда AutoCAD + мой последующий обработчик, то они отменяются одним UNDO. А вот если используется моя команда, которая выполняется с помощью Document.SendStringToExecute + мой последующий обработчик, то отмена выполняется в два этапа. Буду исследовать.
Название: Re: Объединение операций UNDO
Отправлено: Александр Ривилис от 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) Тут точно какие следует использовать в твоём случае я заранее не скажу.
Название: Re: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 04-09-2018, 13:04:58
Тут понимаете какая интересная ситуация. Если я оставляю команду пустой, то в списке отмены не появляется дополнительных пунктов:
(https://s8.postimg.cc/6itus2cdd/Empty_Cmd.png) (https://postimg.cc/image/6itus2cdd/)
Но стоит мне раскомментировать "внутренности" командного метода - появляются целых две дополнительные команды:
(https://s8.postimg.cc/k2aoy0azl/Full_Cmd.png) (https://postimg.cc/image/k2aoy0azl/)
Поэтому, думаю, что флаги мне не помогут. Сам по себе механизм вызова команды ведёт себя адекватно.
Причём, при отмене первой "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 как раз та самая команда, которая всё портит.
Название: Re: Объединение операций UNDO
Отправлено: Александр Ривилис от 04-09-2018, 13:21:39
Но стоит мне раскомментировать "внутренности" командного метода - появляются целых две дополнительные команды:
Осталось понять что в этой "внутренности". Случайно не две последовательные транзакции?
Название: Re: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 04-09-2018, 13:23:15
Вообще нет транзакций, была одна, удалил - не повлияло никак. Сейчас поочерёдно отключаю разные части, пытаюсь найти проблемное место.
Название: Re: Объединение операций UNDO
Отправлено: Дмитрий Загорулькин от 04-09-2018, 13:54:57
Поиграйся с флагами команды
Знаете, похоже, Вы снова оказались правы :)
Убрал флаг Session, убрал блокировку документа - проблема пропала!
Название: Re: Объединение операций UNDO
Отправлено: Александр Ривилис от 04-09-2018, 15:00:45
Знаете, похоже, Вы снова оказались правы :)
Интуиция однако! :-)