2016-01-18 1 views
0

Я использую Autodesk Maya 2016 + Python.Как получить доступ к главному меню и панели инструментов майя?

У меня была проблема. Мне нужно заменить функции стандартных пунктов меню и панелей инструментов. Например, вы должны добавить функцию для сохранения функции записи. И поскольку разные люди используют разную функциональность, вам нужно все сразу менять. Кто-то нажимает Ctrl+S, другие идут в меню File->Save, а некоторые нажимают на панели инструментов. Во всех областях необходимо заменить функциональность. Я понимаю, что проблема сводится к тому, чтобы получить доступ к меню, панелям инструментов и комбинациям клавиш. Затем найдите элемент associates в поместье, чтобы узнать, какая функция теперь называется. Затем замените его своей причиной и в конце функции, которая была вызвана ранее в этом меню.

  1. Как получить главное меню майя (например, File и другие)?
  2. Как получить главную панель инструментов Maya?
  3. Как получить горячие клавиши Maya?

Майя основана на QT. Так что просто нужно получить объекты, а затем стандартные средства QT могут делать все.

Как это сделать?

+0

Я не уверен, вы хотите полностью переопределить функцию сохранения и заменить ее на свой собственный? Или вы хотите вызвать часть своего кода, а затем вызвать функцию сохранения? – DrHaze

ответ

1

Все три способа сделать это: runTimeCommand по имени SaveScene. Переопределите эту команду, и вы захватили все три описанных вами способа. Это немного сложно, так как команда отмечена флагом -default, что делает невозможным их изменение на лету. Вы можете привязать их там, где они сначала определены. Они определены в файле:

  • Mayadir/скрипты/запуск/defaultRunTimeCommands.mel

Скопируйте этот файл на профиль пользователя майа каталог сценария или студии сценария directry. Они будут иметь приоритет заводского сценария из-за порядка разрешения. Не перезаписать заводской файл. Затем измените -command в линиях,

runTimeCommand -default true 
    -annotation (uiRes("m_defaultRunTimeCommands.kSaveSceneAnnot")) 
    -category ("File") 
    -command ("checkForUnknownNodes(); FileMenu_SaveItem") 
    SaveScene; 

к чему-то еще. Лучше всего было бы просто добавить здесь крючок.

Очевидно, вы также можете изменить кнопку/menuitem и горячую клавишу. Так что вы сделать, это запустить следующие Mel (это проще сделать это в Mel, так как большая часть команд построены таким образом, порт для питона или C++, если вы должны):

runTimeCommand 
    -annotation "Print the word \"Hello\"" 
    -command ("print \"foo\"") 
    MySave; 
nameCommand   
    -annotation "Print the word \"Hello\"" 
    -command ("print \"foo\"") 
    MySaveNamed; 
buildFileMenu(); 
menuItem -e -c "MySave" "MayaWindow|mainFileMenu|saveItem"; 
iconTextButton -e -c "MySave2" openSceneButton; 
hotkey -keyShortcut "s" -ctl -name ("MySaveNamed"); 

Предупреждение: Горячая клавиша будет постоянным в префиксах, пока вы не измените его или не переустановите префикс.

Обратите внимание:: Есть, по крайней мере, два других способа, которыми пользователь мог бы сэкономить, и вы не могли бы полностью контролировать их, даже если бы захотели.

+0

Я смог перехватить всю активность, кроме одного. Я не могу понять, что вызвало, когда пользователь выбирает файл в Recent Files? Как подключить функцию для обработки последних файлов? – MaxKu

+0

@MaxKu прессовое управление и сдвиг вниз при выборе открытия последнего файла, это делает ярлык для этого пункта меню на полке. Затем вы видите, что он вызывает функцию 'openRecentFile'. Теперь переопределите это. Как я уже сказал, нет реального способа быть абсолютно безопасным. (Кстати, я могу легко увидеть это, потому что я сделал инструмент самоанализа, который показывает ** любой элемент ** GUI, когда я держу shift control alt и нажимаю на него правой кнопкой мыши, я предлагаю вам построить один, он также экономит много времени) – joojaa

+0

tnx. все сработало) – MaxKu