2014-09-11 2 views
1

Я ищу способ отменить действие, выполняемое открытой функцией майя. Меня попросили сделать инструмент для Maya для масштабирования нескольких выбранных UV-оболочек относительно их собственных опорных точек. Это пошло хорошо, но мой код не приводит к чему-то, что можно отменить с помощью короткого сокращения.Как я могу заставить майю рассматривать действие, которое я выполняю с открытой майей, как отмененный?

Функция Я ищу, чтобы отменить это:

MFnMesh.setSomeUVs(uvIds, uValues, vValues, uvSet='')

После вытягивать старые значения УФ применяю масштаб, а затем использовать эту функцию, чтобы выдвинуть новые координаты обратно на UVs. Я ищу способ внести изменения в эту функцию в очередь отмены, чтобы пользователь мог отменить ошибку. Я пытаюсь избежать использования cmds, чтобы сделать масштабирование, поскольку это будет бесполезно с выбором UV.

Это мое первое программирование в Maya, поэтому любая помощь будет оценена по достоинству.

ответ

0

Вы можете просто кэшировать выделение в переменную или набор и восстановить его, выполнить работу в cmds. По умолчанию сценарий отменяется.

В качестве альтернативы вы можете реализовать свою функцию как MpxCommand. Если вы применяете методы doIt, undoIt и redoIt, вы будете в обычной очереди отмены. Однако вам решать их; вам нужно будет сохранить необходимые данные и отменить работу внутри вашего экземпляра MpxCommand.

+0

Если я понимаю, как использовать MpxCommand, майя отслеживает состояния классов в каждом событии, которое я хочу отменить. Я буду реализовывать, что делать, когда он отменяется, используя информацию, которая будет сохранена в этом сохраненном состоянии. Это верно? – Brandobaris

+0

Да, хранилище данных сохранения и восстановления является внутренним по отношению к экземпляру команды mpx: экземпляр - это то, что действительно входит в стек отмены. Майя сохранит объект для вас и вызовет его методы doIt и UndoIt, но вы несете ответственность за хранение достаточного количества данных для отмены отмены и повтора – theodox