最後の旅を始めよう

-黒の英雄譚・零-

MAYA Python どっ基礎講座‗09 『関数』

2023年01月09日 | MAYA_Pyhon...
さて、ここまでで「3つの基礎」を完璧に理解して頂けたかと思います。
貴方は既にPythonでツールを作れる様に成っている事でしょう。

そうなると、そんなツールを
UIのボタンから発動させたくなるのが人の性では無いでしょうか。

それをするのに便利なのが「関数」です。



関数とは

関数とはなにかを平たく言うと、数学の授業でやった y=ax2 みたいなアレです。
変数ⅹに入力した数値によってyの値が変ってくるみたいなものです。
一次関数とか、二次関数とか、そういったやつです。
拒絶反応が出て来た人もご安心下さい。
解りやすく解説致しますので、この機会に関数が得意に成るかも知れませんよ。


それでは、試しに y=x*2 の式を
Pythonの関数にすると以下の様になります。
#---------------------------------------------
def fFunction( vValue ):
    return vValue * 2
    
print( fFunction( 7 ) )
print( fFunction( 5 ) )
print( fFunction( 3 ) )
#---------------------------------------------

fFunction()に任意の数値を入れる事で
それが二倍された値が吐かれます。

def 関数名( 値 ):
で関数を宣言して、以下のコードブロック内の処理が関数の中身となります。


サンプルコードとしてロケータを作成して親子付けする命令を関数にすると以下の様になります。
(戻り値が必要無ければ入力値を設定する必要はありません)
#---------------------------------------------
import maya.cmds as cmds
def fParentingLocator():
    oLoc_01 = cmds.spaceLocator( p = [0, 0, 0] )
    oLoc_02 = cmds.spaceLocator( p = [0, 0, 0] )
    cmds.parent( oLoc_02, oLoc_01 )
#---------------------------------------------

これを実行しても、何も作成はされませんが、
ここで定義した関数を実行するとロケータが作成されます。

#---------------------------------------------
fParentingLocator()
#---------------------------------------------


この様に一度関数を定義しておけば、複数の命令群を
関数の名前だけで実行する事が出来ます。

関数は、重複し易い処理を纏めておけるので
コードをスマートにする事が出来ます。


これを利用してUIのボタンを押した際にロケータを作成する様にします。
やり方は非情に簡単です。
以前、使ったUIの「command =""」に「fParentingLocator()」関数を指定するだけです。

#---------------------------------------------
import maya.cmds as cmds
cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="ボタン A", command ="fParentingLocator()" )
cmds.button( label ="ボタン B", command ="" )
cmds.button( label ="ボタン X", command ="" )
cmds.button( label ="ボタン Y", command ="" )
cmds.showWindow()

#---------------------------------------------


これで「ボタン A」を押すとロケータを作成する様になりました。
この要領で自分のオリジナルツールを作る事が出来ます。

次項 →10_ChatGPTの活用
前項 →08_リスト
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗08 『リスト』

2023年01月08日 | MAYA_Pyhon...
ここでは、
前項で出てきた「リスト」について詳しく解説していこうと思います。



リストとは

繰り返しの項では「イテラブルオブジェクト」の一つとして紹介させて頂きましたが
「リスト」とは、イテラブルオブジェクトとしても使える
「オブジェクト群」と認識して貰う方が正しいでしょう。

表記方法は、複数のオブジェクトを [] で囲み , で区切る事で表します。
また、以下の様にリスト自体を変数に代入して扱う事も出来ます。

#---------------------------------------------
lChildren = [ "Rei", "Shinji", "Asuka", "Touji" ]
print( lChildren )
#---------------------------------------------


リストに格納された個々のオブジェクトは「要素」と呼ばれます。
要素には格納順に「インデックス番号」が振られており、
その番号を指定する事で個別で要素を取得出来ます。

#---------------------------------------------
print( lChildren[1] )
print( lChildren[2] )
#---------------------------------------------





リストの使用方法

MayaPythonでのリストの使い処は、
イテラブルオブジェクトとして繰り返し処理に使うのが殆どの場合となるでしょう。

リストはむしろ、取得方法が重要です。
特に良く使うのが「選択オブジェクトをリスト化」です。
任意のオブジェクトを複数選択した状態で、以下のコードを走らせると
lSelectObj変数に選択したオブジェクトのリストを作成します。

#---------------------------------------------
import maya.cmds as cmds
lSelectObj = cmds.ls( selection = True )
print( lSelectObj )
#---------------------------------------------



また、
オブジェクトのノードタイプを指定したリスト化も使い勝手が良いです。
以下のコードでは、タイプをジョイントに設定する事で、
シーン内の骨を全てリストとして取得出来ます。

#---------------------------------------------
import maya.cmds as cmds
lAllJoint = cmds.ls( type = "joint" )
print( lAllJoint )
#---------------------------------------------



ちなみに、ノードタイプを調べるには
対象のノードを選択して以下のコードを実行します。

#---------------------------------------------
import maya.cmds as cmds
lSelectObj = cmds.ls( selection = True )
print( cmds.nodeType( lSelectObj[0] ) )
#--------------------------------------------






次項 → 09_関数
前項 →07_繰り返し処理
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗07 『繰り返し処理』

2023年01月07日 | MAYA_Pyhon...
プログラム3つの基礎の最後
「繰り返し」について解説していきたいと思います。


繰り返し処理は
特にスクリプト制御の恩恵を得られる機能の一つでしょう。
単純な作業の連続を、迅速かつ正確に行うのは
人間よりもコンピュータの方が遥かに優れております。



for文を使った繰り返し

それでは、一番単純な形のコードを走らせてみましょう。
#---------------------------------------------
for i in range( 5 ):
    print( i )
#---------------------------------------------



これを走らせると、0~4までの数字がログにプリントされます。


もう、お解りかとは思いますが、
この「for」文は range( 5 ) に指定している回数分
コードブロック内の処理を実行します。


これを応用する事で、指定の回数だけ同じ処理を行う事が出来ます。
以下のコードは「ロケータを二つ作成し親子付けする」というものを5回繰り返します。
(ちなみに、ポジションXの値を i にする事で、X方向へずらす差分も設けております)
#---------------------------------------------
import maya.cmds as cmds
for i in range( 5 ):
    oLoc_01 = cmds.spaceLocator( p = [i, 0, 0] )
    oLoc_02 = cmds.spaceLocator( p = [i, 0, 0] )
    cmds.parent( oLoc_02, oLoc_01 )
#---------------------------------------------

この range の様な繰り返し処理の回数等を決める要素を
「イテラブルオブジェクト」といいます。

for 変数 in イテラブルオブジェクト:
繰り返し処理をするコード


イテラブルオブジェクトには、
rangeの代わりに「文字列のリスト」を使用する事も出来ます。
以下のコードを走らせると、リスト内の文字列を変数として繰り返しの処理を行います。
#---------------------------------------------
for o in [ "No1", "No2", "V3" ]:
    print( o )
#---------------------------------------------
リスト内の文字列が順番にログにプリントされましたでしょうか。

こちらも応用すると、繰り返し処理を指定の名前で行う事が出来ます。
以下のコードでは、スケルトンをリスト内の名前のジョイントで作成します。
#---------------------------------------------
import maya.cmds as cmds
iHeight = 0
for oName in [ "Root", "Hips", "Spine", "Neck", "Head" ]:
    cmds.joint( name = oName,  p = [0, iHeight, 0] )
    iHeight = iHeight + 5
#---------------------------------------------

この様に、繰り返し処理は、工夫次第でいくらでも効率を上げられる
そんな可能性を秘めた機能と言えるでしょう。



あと、あまり使う機会は無さそうですが
イテラブルオブジェクトには文字列をそのまま使う事も出来ます。
#---------------------------------------------
for s in "Maya":
    print( s )
#---------------------------------------------
このコードを走らせると、Mayaを一文字づつログにプリントします。

本当に何処に使えるのか解りませんが
覚えていたら何処かで使う機会もあるかも知れません。



while文を使った繰り返し

繰り返し処理には「while文」を使うという方法もあります。
回数で指定する「for文」に対して
「while文」は条件によって繰り返すか否かを決めます。
#---------------------------------------------
iNo = 0
while iNo < 5:
    print( iNo )
    iNo = iNo + 1
#---------------------------------------------

上記のコードは「iNo」変数の値が5以下の場合のみ
コードブロック内の処理を実行します。

その為、回数に縛られる事無く処理を行う事が出来ますが、
逆にコードブロック内の処理で、条件を達成出来ないと
無限に処理を繰り返す状態になってしまいます。

サンプルコード内の「iNo = iNo + 1」を消した状態で走らせると再現出来ますが
Mayaを強制終了するまで処理が止まらなくなるので、お勧めはしません。

ですので、
初心者のうちは「for文」の方をメインで使用する事を推奨致します。



次項 → 08_リスト
前項 → 06_インデント
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗06 『インデント』

2023年01月06日 | MAYA_Pyhon...

前項の条件分岐の際に
「インデント」の説明が全く出来なかったので
ここで解説したいと思います。



インデントとは
端的に言ってしまうと、行の頭に空白を入れて文字下げをする事です。
if文のサンプルコードで、分岐後の命令文の先頭にスペースが入っているアレの事です。
#---------------------------------------------
iTestInt = 7
if iTestInt > 5:
    print( "iTestInt は 5 以下です" )
# ↑ コレ
#---------------------------------------------

この、インデント、
多くのスクリプト言語の場合
「視認性を良くする」くらいの目的でしか使われず
別にやらなくても問題無いのですが、
いかんせんPythonの場合は、話が違ってきます。

たとえば、ifの条件分岐の後に処理される命令文は
ifの眷属として”一括りのもの”であるという扱いをする必要があります。
これを『コードブロック』と言います。
大抵の言語では、コードブロックを示すのに{}で囲むのですが、
Pythonではインデントがコードブロックとして使われているのです。





もし仮にインデントが無いコードを走らせた場合・・・

#---------------------------------------------
iTestInt = 7
if iTestInt > 5:
print( "iTestInt は 5 以下です" )
#---------------------------------------------



・・・と、怒られてしまいます。


この、インデントエラー
なかなかシビアな判定の為、初心者泣かせな仕様だったりします。

Pythonのインデントに対する厳しさには鬼気迫るものがあり
少しでも規律を乱す奴が居たら絶対に許してくれません。

たとえば・・・


何もないところでインデントを使う
#---------------------------------------------------------------------
    print( "インデントエラーになるサンプルコード―その①" )
#---------------------------------------------------------------------


コードブロック内でインデントが揃っていない
#---------------------------------------------------------------------
if 100 == 100:
    print( "-------------------------------------------------------" )
     print( "インデントエラーになるサンプルコード―その②" )
    print( "-------------------------------------------------------" )
#---------------------------------------------------------------------

等々・・・

その上、Mayaさんはインデントエラーだけ、何故かエラー箇所を教えてくれないので
慣れないうちは、悩みの種となる部分でもあります。

Maya2023から教えてくれる様になりました。



まあPythonは、これのおかげで
誰が書いていても、ある程度の視認性が約束されるので
むしろメリットの方が多いのですけどね。



ちなみに、
ちょっとした便利機能として
以下のショートカットでインデントの追加と削除が出来ます。

 Ctrl + [  (インデント除去)
 Ctrl + ]  (インデント追加)



次項 → 07_繰り返し処理
前項 → 05_条件分岐
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗05 『条件分岐』

2023年01月05日 | MAYA_Pyhon...
さて、寄り道が長くなりましたが、
プログラム3つの基礎の二つ目
「条件分岐」について解説していきたいと思います。


プログラムは基本的に上から順に実行されますが、
時と場合によって
“処理順を変えたい”、“状況に応じて処理の実行を切り替えたい”
という状況が出てきます。


サンプルとして以下のコードを走らせてみて下さい。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

if cmds.confirmDialog(message="分かれ道、どちらに進む?",button=["←","→"],icon="question") == "←":
    cmds.confirmDialog(message="熊さん に 出会った・・・",button=["close"],icon="warning")
else:
    cmds.confirmDialog(message="埋蔵金 を 発見!!",button=["close"],icon="information")
#---------------------------------------------------------------------------------------------------

この様に、ユーザーに選択を任せたい場合も
条件分岐で、実行される処理を変える事が出来ます。






if文の使い方

条件分岐には「if」という「もし~だったら」という構文を使います。
上記のコードは若干複雑なので、以下にシンプルなコードを用意しました。

#---------------------------------------------
iTestInt = 7
if iTestInt > 5:
    print( "iTestInt は 5 以上です" )
else:
    print( "iTestInt は 5 以下です" )
#---------------------------------------------

これを走らせるとスクリプトエディタのログに
以下の様な結果が吐かれます



「iTestInt は 5 以上です」と判定されました。

それでは、試しに「iTestInt = 7」を「iTestInt = 3」に書き換えて走らせてみます。



判定が、5以下に変わりました。


さて、
「iTestInt = 7」という、新要素である「変数」が
いきなり出てきて混乱されたかも知れませんが
全く難しいものではありませんので、ご安心下さいませ。

この「変数」というのは、
若き日に受けた数学の授業を思い出して頂きたいのですが
「x」や「y」といった、数値を代入出来る文字を「変数」と呼んでおりましたよね
正にアレです。

違う点としては、代入出来るのは「数値」だけではなく
「文字列」や「リスト」等、なんでも入れる事が出来ます。
(特にPythonは、変数の型を自動で定義してくれるので
本当に何でも入れられてしまいます)

更に「x・y・z」だけではなく、どんな文字列でも変数として扱う事が出来ます。
(ただし、一部例外もあります・・・コマンド名・フラグ名・環境変数等)
サンプルでは「x」ではなく「iTestInt 」を変数としている訳ですね。


つまり・・・


if iTestInt > 5:


↑この、サンプルのIF文の意味は、
「もし、変数 iTestIntの値 が 5 よりも大きかったら」となります。
大きかった場合に分岐後の処理を行うわけです。



else の使い方
もう、お分かりかとは思いますが
else:」は「If」で提示された条件以外の場合の処理となります。

サンプルコードの場合、
「もし iTestInt が 5 よりも大きかったら」以外の条件であれば、
else分岐後の処理を行います。

もちろん、条件を満たさない場合の処理が必要無ければ
else:」は作らなくても問題ありません。



if not の使い方
if文」には「not」を付けるだけで条件を「条件以外もの」に変更出来ます。

#---------------------------------------------
iTestInt = 7
if not iTestInt > 5:
    print( "iTestInt は 5 以下です" )
#---------------------------------------------

サンプルコードを「if not」にすると
「iTestInt」変数の値が「5」以上ではなく「5」以下のときに
ログがプリントされます。



elif の使い方
elif」は 「if」の条件に当てはまらなかった「else」の中から
更に条件をかけて分岐させるというものです。

#---------------------------------------------
iTestInt = 7
if iTestInt > 5:
    print( "iTestInt は 5 以上です" )
elif iTestInt > 2:
    print( "iTestInt は 2 以上です" )
else:
    print( "iTestInt は 2 以下です" )
#---------------------------------------------

サンプルコードに「elif」で2以上のものという条件を足しました。
これで「iTestInt」変数が「7」の場合は「iTestInt は 5 以上です」という結果を吐き、
「3」の場合は「iTestInt は 2 以上です」という結果を吐く様になります。



「条件分岐」の実践例として
よくある使われ方としては、
処理を走らせる前の「OK・キャンセル」のダイアログがあります。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

#UI作成
cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="ロケータを作成して親子付け", command ="fCreateLocatorParent()" )
cmds.showWindow()

#ロケータ作成関数
def fCreateLocatorParent():
   if cmds.confirmDialog(message="ロケータを作成しますか?",button=["OK","Cancel"],icon="question") == "OK":
        cmds.spaceLocator( p = [0, 0, 0] )
        cmds.spaceLocator( p = [0, 0, 0] )
        cmds.parent( "locator2", "locator1" )
#---------------------------------------------------------------------------------------------------





次項 → 06_インデント
前項 → 04 _コマンドリファレンスの使い方
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗03 『MELのログをPythonに翻訳』

2023年01月03日 | MAYA_Pyhon...
前項
処理の順番が上から行われるという事を解説しました。



ここまで解れば、
自分専用のツールを作りたく成って来るのではないでしょうか?

でも、どうやったら作れるのか見当も付かない。。。

そんな初心者にオススメの方法が
『MELのログをPythonに翻訳』です。




MELログを取得

それでは、簡単な処理のログをとってみましょう。
試しに、ロケータを二つ作成してそれを親子付けしてみます。



するとスクリプトエディタのログ画面に、以下の様なログが生成されます。

CreateLocator;
spaceLocator -p 0 0 0;
// 結果: locator1
CreateLocator;
spaceLocator -p 0 0 0;
// 結果: locator2
parent locator2 locator1 ;
// 結果: locator2

この中からコマンドだけを抽出したいと思います。
試しにMELタブにコピーするとシンタックスハイライトで色分けされます。
ここで水色にハイライトされたものがコマンドです。




CreateLocator」は、ロケータを作成するコマンドです。
spaceLocator」は、ロケータの場所を決めるコマンドですが
実は、これだけでもロケータの作成が出来てしまいます。
その為、今回は「spaceLocator」コマンドのみを使います。


という訳で、以下の三行が必要なコマンドとなります。

spaceLocator -p 0 0 0;
spaceLocator -p 0 0 0;
parent locator2 locator1 ;

これをPythonに翻訳してすれば良い訳ですね。


やり方は、カンタンです。
以前、01_二行で解るMAYA Pythonの構造でやった構造、
要はアレに書き換えれば良い訳です。

試しに「spaceLocator」で行うとこんな感じです。

spaceLocator -p 0 0 0;
   ↓
cmds.spaceLocator( p = [0, 0, 0] )


・コマンドの頭にモジュール名「cmds.」を追加する
・フラグは()で囲いまとめる
・MELでフラグ名を表す「-」は要らないので削除
・フラグの引数は「=」で繋ぐ
・引数が複数存在する場合は[]等で囲い、間を「, 」で区切る(リスト型にする)
・MELのコマンドの終了を表す「;」は要らないので削除
・文字列は「’」「”」囲む(サンプルコードにはありませんが…)



これを全てに行うとこうなります。

cmds.spaceLocator( p = [0, 0, 0] )
cmds.spaceLocator( p = [0, 0, 0] )
cmds.parent( "locator2", "locator1" )

このスクリプトを実行すると
ロケータを二つ作成してそれを親子付けするという
一連の作業を再現してくれます。

この様に大抵のMayaの操作であれば、
MELのログを翻訳し並べる事でPythonスクリプトに置き換えツールを作る事が出来ます。



ちなみに、
作成したツールをUIのボタンから起動出来る様にする為には、関数を使用します。
関数については、『09_関数』にて詳しく解説しますが、
とりあえず以下の様にする事でボタンからの呼び出しが出来る様になります。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

#UI作成
cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="ロケータを作成して親子付け", command ="fCreateLocatorParent()" )
cmds.showWindow()

#ロケータ作成関数
def fCreateLocatorParent():
    cmds.spaceLocator( p = [0, 0, 0] )
    cmds.spaceLocator( p = [0, 0, 0] )
    cmds.parent( "locator2", "locator1" )
#---------------------------------------------------------------------------------------------------



次項 → 04_コマンドリファレンスの使い方
前項 → 02_処理の順番
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗02 『処理の順番』

2023年01月02日 | MAYA_Pyhon...
前項
「MAYA Pythonの構造」はご理解頂けたでしょうか。

頂けた方、素晴らしい!アナタにはプログラマーの素質があります!

良く解らなかったよ…という方もご安心下さい。
どんな素人でも以下の「3つの基礎」さえ押さえれば
プログラムはノープロブレムです。


 1・処理の順番
 2・条件分岐
 3・繰り返し



ちなみにこの3つは、
MAYA Python以外の言語でも共通した基礎となりますので
将来、他のスクリプトを触る事に成っても使える知識です。
覚えておいて損はありません。


ここでは、まず「処理の順番」から解説していきます。
処理の順番を理解する事はプログラムのアルゴリズムを構築する上で
必要不可欠な概念となります。

こんな風にカタカナ言葉を羅列されると
アレルギー反応を起こす人も居るかも知れませんが
実際には誰でも理解出来る簡単な内容ですので今しばらくお付き合い下さい。


それでは、Mayaで以下のコードを走らせてみましょう。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="ボタン A", command ="" )
cmds.button( label ="ボタン B", command ="" )

cmds.button( label ="ボタン Y", command ="" )
cmds.showWindow()

#---------------------------------------------------------------------------------------------------


3つのボタンの付いたUIが生成されれば成功です。




このスクリプトでは
window」コマンドで、ウィンドウを作成
columnLayout」コマンドで、カラム(縦列)のレイアウトを組む様に設定
button」コマンドで、ボタンを作成(複数作る事でボタンが縦に並ぶ)
showWindow」コマンドで、作成したウィンドウを表示させる
という事をしております。


次に"ボタン B"と"ボタン Y"の空いているところに
以下の"ボタン X"の命令を挿入して実行してみます。

cmds.button( label ="ボタン X", command ="" )


すると、今度はBとYの間にXボタンのあるUIが生成されます。



この様に、基本的にプログラムの命令は上から順に実行されます
つまり、プログラムでアルゴリズムを構築する為には
処理を行いたい順番に、上から書いていけば良い訳です。

ね、簡単でしょ?

ちなみに、
この挙動には「逐次処理」「順次処理」「シリアル処理」等の呼び名があります。

逆に、

・条件分岐で別の命令まで飛ばす
・繰り返し処理で同じ命令を複数回実行する

といった、上から順の法則から外れたアルゴリズムを組む事も出来ます。
(むしろ、そちらの方が頭を使うので大変だったりします)
つまり「3つの基礎」とは
アルゴリズムを組み立てる為に必要な知識という訳です。



ちなみに、
このUI、折角ボタンを作ったのなら
それを押した際に、何か命令を実行して欲しくなりますよね。

そんなときは
command =""」フラグの ""内に引数として命令を書けば
ボタンを押した際に実行してくれる様になります。

一例として、
試しにcommand フラグの引数として「ボタン生成コマンド」を入れると
以下の様に「生成ボタン」を押す度にボタンが増えるヘンテコなUIを作れます。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="生成ボタン", command ="cmds.button( label ='Newボタン' )" )
cmds.showWindow()

#---------------------------------------------------------------------------------------------------



次項 → 03_MELのログをPythonに翻訳
前項 → 01_二行で解る、MAYA Pythonの構造
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗はじめに

2023年01月01日 | MAYA_Pyhon...
はじめに

この講座は、
プログラミング知識を1㎜も知らないのデザイナーに向けたものです。
デザイナーにとって、スクリプトは非常にとっつき難い分野でもありますが、
逆に、使える様に成ればワークフロー効率を劇的に上げられる可能性も秘めています。

ここでは、
デザイナー脳でもMAYA Pythonスクリプトを
楽しく使いこなせる事を目指して解説していきます。



Pythonを使うメリット

ちなみに、ここでMELは一切やりませんのでご了承下さい。
(まあ、今更MELを勉強する気にならないというのが一番なのですけどね…)

もし Maya が、今は亡き Softimage の様に切り捨てられてしまったら
Mayaでしか動かないMELの知識は全て無駄になってしまいます。
その点、Pythonであれば、3dsMAX、Blender、Motionbulder といった
ほかのソフトでも応用が効くので、スキルが無駄になりません。
コーディングに慣れておくなら
断然 Python の方が、将来性は高いでしょう。


初心者にMayaPythonはオススメ

Mayaは自分でツールを作る事が前提だけあって
ネットには、それ関連記事が沢山あります。
初心者が勉強する為の恵まれた環境が他のDCCツールよりも
断然、整っております。

ここで基礎さえ押さえておけば、いくらでも勉強出来ますので
自分だけにチューニングされたオリジナルツールを作れる様になるでしょう。


次項 → 01_二行で解るMAYA Pythonの構造
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座_info

2023年01月01日 | MAYA_Pyhon...

ここでは、デザイナー思考の人でもMAYA Pythonプログラムを
使える様になる事を目指して基礎から解説していきたいと思います


はじめに(←特に読まなくても大丈夫です)
01_二行で解るMAYA Pythonの構造
02_処理の順番
03_MELのログをPythonに翻訳
04_コマンドリファレンスの使い方
05_条件分岐
06_インデント
07_繰り返し処理
08_リスト
09_関数
10_ChatGPTの活用
11_UIテンプレート





関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
編集

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗01 『二行で解る、MAYA Pythonの構造』

2023年01月01日 | MAYA_Pyhon...


まずは、
さっそくMayaで以下のコードを走らせてみましょう。

#------------------------------------------------------------------------------------------------------------------------------
import maya.cmds as cmds
cmds.confirmDialog(title="MayaPython",message="Pythonスクリプトを始めますか?",button=["Yes","OK"],icon="question")

#------------------------------------------------------------------------------------------------------------------------------




#手順

①スクリプトエディタを開きます。




②「Python」タブを開きます。




③タブ内に上記のコードをコピーして、ツールバーの「すべて実行」アイコンを押します。








いかがでしたか?
無事、スクリプトは走りましたか?




もし、上手くいかなくても
「やっぱり俺なんかにスクリプトが理解出来る訳ねぇんだっ!」なんて悲観する事はありません。
手順を再確認して、原因を考え、走るまで何度でもトライし続ければ
いつか成功する…ハズです!





MAYA Pythonの構造
それでは、先ほどのダイアログボックスを出すスクリプトで
MAYA Python の基本的な構造をご説明致します。






maya.cmdsモジュールをインポート

MAYA Python は、この「import」から入る事となります。
Python は基本機能以外に、モジュールをインポートする事で機能を拡張する事が出来ます。
このコードの場合「maya.cmds」というモジュールを読み込む事で
Mayaを制御するコマンドが使える様になります。

ちなみに「as cmds」は、以降のスクリプト内で
「maya.cmds」を呼び出す際に略称の「cmds」でも呼べる様にしています。



②「confirmDialog」コマンド

これは、ダイアログボックスを出す為のコマンドです。
MAYAに何かをしてもらう為には、この「コマンド」を使います。
コマンドが何かを平たく言うと、
ドラクエでいうところのAボタンを押した際に出てくる
「はなす」や「じゅもん」といったアレです。
アレを選択ではなく、文面(コード)で命令しているのがスクリプトという訳です。


たとえば…
トンヌラの持っている薬草を捨てたい場合は、
#---------------------------------------------
DQモジュール.どうぐ( すてる = "やくそう", なかま = "トンヌラ" )
#---------------------------------------------

という感じです。


ゲレゲレに魔獣の牙を装備させたい場合は、
#---------------------------------------------
DQモジュール.どうぐ( そうび = "まじゅうのきば", なかま = "ゲレゲレ" )
#---------------------------------------------

という感じになります。


一周回って解り難くなっている気もしますが…まあ、そんな感じです。
この場合は以下の様な役割名が割り振られております。

 「どうぐ」  ・・・  コマンド
 「すてる」  ・・・  フラグ
 「やくそう」 ・・・  引数


厳密には、こう書いた方が正しいですかね?
#---------------------------------------------
DQモジュール.どうぐ( "やくそう", すてる = True, なかま = "トンヌラ" )
#---------------------------------------------

・・・どうでも良いですかね。。。

いまひとつピンと来ていない人も大丈夫です。
やっているうちに解ってくるので、このタイミングで全て覚える必要はありません。
とりあえず「そういうルールがあるんだなぁ」くらいの認識で結構です。


ちなみに、
先ほどのダイアログボックスも、引数であるテキストを書き換えれば
表示される文章を変更出来ます。


icon(アイコン) も
"question"以外に、"information"、"warning"、"critical"があり変更可能です。




試しに、色々なところを書き換えて遊んでみて下さい。
ありものコードの中身を変えて反応を観察する事はスクリプトの理解に有用です。





コメントアウト
勘の良い人は、もうお気付きかも知れませんが、念の為のオマケ的な解説です。
Pythonでは「#」以降の文字列はコードの命令文として扱わなくなります。
この様な機能を「コメントアウト」と言います。
コメントアウトを活用する事でコードを整理して視認性や可読性を上げる事が出来ます。



次項 → 02_処理の順番
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
スクリプトエディタ(Adobe公式マニュアル)
編集

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする