【Maya】最近のツール配布構成

今年配布したものとその構成

Maya Squid

【Maya】MayaSquid(v1.0.0)リリース - するめとめがね
汎用的に使える便利ツールを詰め込んだやつになっていく予定のもの。
現在はInspectorと、個別配布もしているFBXImporterが入っています。

複数のツールを含むという点から、Maya起動時に処理をしたいという都合も出てくるだろうなーというところでモジュール形式の構成になっています。

モジュールまわりの説明は以下をご覧ください。
(もうちょっとわかりやすく書き直したい)
tm8r.hateblo.jp

ツールを使用するには、モジュール設定ファイルを自身の環境にあわせて書き換えた上で所定の位置に配置する必要があります。
モジュールって何?という方には分かりづらいし、分かっている人でも若干インストールが面倒です。

インストールを楽にする方法はいくつか考えられますが、これはまた別の機会に…。
(1つは後述のおまけに記載します)

Maya FBX Importer

GitHub - tm8r/MayaFBXImporter
名前の通りFBXのImporter。
Add、Merge、ExMergeの操作ができ、かつネームスペースにも対応しています。

こちらはウィンドウ1つで完結するタイプのツールになるので、melまたはpythonをドラッグアンドドロップすることでシェルフに登録する形になってます。

Maya RecentFiles Plus

【Maya】MayaRecentFilesPlus(v1.0.1)リリース - するめとめがね
Mayaで標準で保存される最近開いたファイルをウィンドウ表示し、Open、Import、Referenceの操作を可能にするツールです。

こちらもウィンドウ1つで完結するツールなのでmelまたはpythonをドラッグアンドドロップすることでインストールできます。
FBX Importerの方と異なり、シェルフ登録に加えてホットキーへの登録もできるようになってます。

ドラッグアンドドロップでインストールできるようにする

というわけで、早速上のツールで採用しているドラッグアンドドロップでインストール出来るようにする方法を解説していきます。

シェルフに登録する形式

Maya2017.3以上であればpythonだけで完結するんですが、それより前のバージョンにも対応するためにはmelも必要になります。

というわけで起点となるmelはこちらになります。

studioLibraryリスペクト。

流れは以下のような感じです。

  • whatIsで自身のメソッド名を指定して自身のファイルパスを取得
  • 「Mel procedure found in: C:/Users/tm8r/Documents/dev/python/MayaFBXImporter/install.mel」という結果が返ってくる
  • matchとsubstituteを使用して「Mel procedure found in: 」以降のパス部分だけを取得
  • substituteで「install_shelf.mel」を「install_shelf.py」に置換することでpythonファイルのパスを生成
  • impモジュールを用いて、上で生成したpythonをロード

次にpythonはこちら。

Maya2017.3以上の場合はpythonファイルをドラッグアンドドロップしたとき「onMayaDroppedPythonFile」が実行されます。
mel経由で実行した場合、上のmelでimp.load_sourceの第一引数に「_installShelfTm8rRecentFilesPlus」を指定したため61行目の条件に入って「onMayaDroppedMelFile」が実行されます。

メインの処理は「_create_shelf」に記述されていますが、ようは以下のような処理をしているだけです。

  • シェルフが実行するコマンドを文字列で定義し、スクリプトのパスだけ変数にしておく
  • ドラッグアンドドロップしたときの自身のファイルパスからスクリプトのパスを生成し、上の変数部分に入れる
  • コマンド内
    • sys.pathにこのツールのスクリプトパスが含まれてなければ追加
    • ツールのモジュールをimportして実行
  • 生成したコマンド文字列を使用して現在アクティブなシェルフタブにシェルフを登録

ユーザーはドラッグアンドドロップするだけで済むし、作者はmelとpython一個ずつ用意するだけで済むのでよいのでお手軽ですね。

さらにツール自体はどこに置いておいてもいいというのも何も考えなくてよいので楽ちんです。
(インストール後に移動しちゃうと動かないですが、それはだいたいどのインストール方法でも同じ)

ホットキーに登録する形式

次にホットキーに登録する場合ですが、起点となるmelは同じです。

pythonはこのような感じ。

python側もシェルフのときとそう大きく変わらず、シェルフに登録する部分がランタイムコマンドの登録とホットキーの登録に置き換わっているだけです。
かんたん!

おまけ(その他の方法)

ApplicationPlugins

モチオさんのSiShelfやysさんのSIWeightEditorが採用している方式です。

詳細はあんどうさんの以下の記事が最高なのでご参照ください。
fereria.github.io

この方式だとMayaバージョンごとに設定する必要がないのがよいですね。

maya-module-installer

github.com
こちらはモジュール設定ファイルの中身を自分で書き換えて所定の場所に配置するという手順を、melのドラッグアンドドロップに置き換えた最高のやつです。

ドラッグアンドドロップされたパスを取得するあたりは上の解説と同じようなことをしてます。

次に環境変数「MAYA_MODULE_PATH」で取得した最初のディレクトリにモジュール設定ファイルを配置します。

モジュール設定ファイルはmelと同改装に以下のようなテンプレートがあり、この「<PATH>」の部分を上で取得したパスに置き換えています。

+ helloWorld 0.0.1 <PATH>

ただし上で書いたとおり、環境変数「MAYA_MODULE_PATH」で取得した最初のディレクトリに配置されるので、これが仮に別のツールで設定したモジュールパスだったりすると、そのツールを削除した場合に影響を受けてしまいます。

ので、環境変数「MAYA_MODULE_PATH」で取得したパスのうち、ドキュメント配下のMayaバージョンディレクトリを優先的に使う形に改良してあげると安全性が高まりそうですね。

おわり

以上、少しでもツール配布のときの参考になれば幸いです!

明日はlie_871221さんの「mayaコマンドを使ったUIの書き方」です!。

明日以降のMaya Advent Calendarもおたのしみに!
qiita.com

スポンサーリンク