![]() |
最初は、表を作成するMayaのコマンド、scriptTableから見てみましょう。
■scriptTable(Python) http://help.autodesk.com/cloudhelp/2015/JPN/Maya-Tech-Docs/CommandsPython/scriptTable.html おおまかなコマンドの説明は上記 ドキュメント が示しているので まずは、以下のようなスクリプトからスタートしてみます。
![]()
という記述がありますが、これ必ず必要です。 これは、cmds.scriptTable(rows=4, columns=2, label=[(1,"Column 1"), (2,"Column 2")], cellChangedCmd=edit_cell) とオフションの最後にedit_cell があり、”セルに変化が起こったら編集する”と設定しています。 この記述が無いと、あれ?セルに値を記入しても受け付けない、という状態になります。 ![]() 表をtableとして、 また、2つの行追加と削除ボタンをaddButtonとdeleteButtonとしてformLayoutを使って並べます。
こうすることによって、windowサイズの変更に応じて大きさが変化する2つのボタンをウィンドウ下部に配置します。 行をドンドン追加していくと、表示しているウィンドウのサイズ以上に表が増えた場合は、右側にスライダーを出現して表の追加を続行します。 ただ、気が付くのは、行の追加と削除は 最後の行に対して動作することです。 ![]()
![]() 内容としては選択行番号をcmds.scriptTable('table', query=True, selectedRows=True)[0]で求め、 その番号行に対して以下を実行しています。 行の挿入cmds.scriptTable('table', edit=True,insertRow=selected_row) 行の削除cmds.scriptTable('table', edit=True,deleteRow=selected_row) |
CSVファイルの読み込み/書き込み CSV (Comma Separated Values、カンマ区切り値列)ファイルは、単に”、”(カンマ)で区切られたテキストファイルですが、
■csvhttp://docs.python.jp/2/library/csv.htmlExcelでは表として開ける便利なファイル形式です。 また、Maya Pythonからも扱い易く、import csvと冒頭に書くだけで利用できるライブラリー対応です。 このサンプルファイルをMayaのユーザーディレクトリー以下に置いたとして、以下を実行します。
このように、openとcloseに挟んで reader で内容を上から行毎に文字どうり読むことが出来ます。 では次のステップとして、今は出来ている前章の表に上の値を一旦手で入力しておいて、 その内容をCSVファイルに書き込むということをしてみます。 まずは、表にconstraint_table_00.csvの値を記入します。(第1行はヘッダーの為、2行目からになります) ![]() そして、以下のスクリプトでMayaユーザーディレクトリーにconstraint_table_01.csvとして保存してみます。
Mayaのユーザーディレクトリー以下に新しくconstraint_table_01.csv というファイルが作成されます。 最初の open 記述部分が if 文で分岐になっている部分は面白く、 その指定したファイル名の CSVファイルが無かった場合、つまり新規の場合は tmp_csv_file = open(o_file, 'w' ,os.O_CREAT)でファイルを作って開けと設定しています。 中の記述も確認します。テキストとして開くと
となっています。 後は、この部分のスクリプトがボタンを押した時に動作すれば良いということになります。 残る動作対応としては、上記の逆、ですね。 手入力して表を埋めるのではなく、新しく作成したconstraint_table_01.csvファイルから表に書き込みをします。 もう一度表を作るスクリプトを実行して、表の中身が全て空のものを用意します。 そして、以下を実行します。
結果は ![]() です。
このように、表とCSVファイルを利用したツール作成が簡単に出来ることがわかります。 |
表データに基づくコンストレイント 表のデータからの実行ですが、これはもう表を順に上から読み取って
データの種類によって異なるコンストレイントを設定しているだけです。
追加の情報としては、キャラクターRigを作成することを前提に考えられているツールなので コンストレイントの元と先にそれぞれ別のネームスペースが付けられるようになっています。 ![]() その部分のスクリプトです。(多少長いです。)
ここでは、exec を使って、得たテキスト内容を実行しています。おもしろいですね。 |
constraint_table ツールの説明です。 まずは、表を記入する行を左側のボタンを使って選択状態にします。 ![]() コンストレイントの種類、オフセットの有無、オフセット無しを選んだ場合のカスタム値(無記入は0,0,0になる) の順に、次々と行を埋めていきます。 その表を保存したい場合は、[SAVE LIST to .CSV] ボタンで、一番上に書かれているファイルに記入されます。 別名にしておけば、新規ファイルとして保存されます。 ネームスペースを新たに追加したい場合は[SourceNamespace] / [DestinationNamespace] の下の空欄に記入します。 [Do All Constraint] を押すと、表に書かれているものに従って全てのコンストレイントが実行されます。 ![]() 例えば、Rig作成時に、いつも決まった骨名同士に付ける各種コンストレイントはCSVとしてデータ化しておいて、 いざMayaでRigを組む時は一発で設定を完了させたり、 ネームスペースの有る無しでも同じコンストレイント設定を一発で実現したり、 或いは、Maya上でアニメーションベイクをするとコンストレイントが外れてしまう場合、 一発で元のコンストレイントを復活できるようにする・・・等々です。 色々とカスタマイズすると、更に良いかも知れません。 以上です。 |
constraint_table.py という訳でconstraint_table.pyを公開します。 ( Pyファイルは シェルフにボタン登録するか、プルダウンメニューに登録して実行します。) あくまでも自己責任でお使いください。 use as your own risk. |
という訳で、次回は... What's Next ... 乞う、ご期待!!Stay tuned ..
|