LoginSignup
5

More than 5 years have passed since last update.

[#Maya] Mayaのメニューからスクリプトを呼び出す

Posted at

すぐ忘れてしまうのでメモ。

エントリポイント

Mayaが最初に呼び出すスクリプトディレクトリにuserSetup.pyを置きます。
Windowsの場合は
C:\Users\user\Documents\maya\scripts
以下に置くことになります。

このディレクトリは、

  • MAYA_SCRIPT_PATH
  • PYTHONPATH

に任意のパスを追加しておくことで変更することができます。
自分の場合、ツールごとにgit管理しているので、意図的にスクリプトフォルダを開発用ディレクトリに差し替えています。

# 例
set MAYA_SCRIPT_PATH=MAYA_SCRIPT_PATH;D:\dev\mayatool
set PYTHONPATH=PYTHON_PATH;D:\dev\mayatool

中身はこんな感じにしておきます

userSetup.py
# -*- coding: utf-8 -*-

from maya import utils
from MyTool import menu

utils.executeDeferred(menu.main)

executeDeferredでMAYAシステム上のすべてのGUIコンポーネントがロードされた後に実行されます。

メニュー登録用スクリプト

それぞれのツール用ディレクトリにメニュー追加用スクリプトを用意しておいて、userSetup.pyから呼ぶ形にします。

root/
 ├ userSetup.py
 ├ MyTool/
 │ ├ __init__.py
 │ ├ menu.py
 │ └ Animation/
 │   ├ __init__.py
 │   └ gui.py

MyTool内のスクリプトはモジュール化しておいたほうが都合がよいので、__init__.pyも仕込んでいます。
メニューに追加するスクリプトは次のようにします。

menu.py
# -*- coding: utf-8 -*-

import maya.cmds as cmds

def main():
    cmds.menu(l='MyTool', p='MayaWindow', to=True)
    cmds.menuItem(l='Animation', to=True, sm=True)
    cmds.menuItem(l='MyAnimator',
                    c='from MyTool.Animation import gui;reload(gui);gui.main()')

reloadを挟むことで、毎回メニューをクリックした際にGUIのスクリプトに更新を走らせることができるので、
自分は入れる派ですがなくても大丈夫です。

これで追加することができました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5