0

私は MEL の初心者で、この MEL スクリプトを調べていたときに、まったく理解できない行をユーザーが書いていることがわかりました。それでも、なぜこの人がそれをしたのか知りたい..

とにかく、次のコードが最初に空の MEL を示し、次に Python を呼び出す理由を誰かが親切に説明できますか? Pythonを入れるだけの方が簡単ではないでしょうか?

commandまた、コマンドとsourceTypeを無効にしようとしましたが、スクリプトも正常に動作します。この場合、目的と実行内容がわかりませんsourceType...

-command ""
-sourceType "mel"
-actionIsSubstitute 0
-commandRepeatable 1
("shelfBtn_"  + $parent + "_AOV");

python("import aovsFunction as aovs; aovs.MenuFuncs.aovMenu('"+"shelfBtn_" + $parent + "_AOV"+"')"); 

ちなみに、$parentは以下から派生しています。

global proc apkg2dnc(string $parent)

次に、コードを次のように変更しようとしましたが、上記のように機能しますが...

-command ("import aovsFunction as aovs; aovs.MenuFuncs.aovMenu('"+"shelfBtn_" + $parent + "_AOV"+"')")
-sourceType "python"

括弧を削除しようとすると、最初にプラス記号+が検出されたことを示す構文エラー メッセージが表示されました。;行末にを追加しようとしましたが、まだ構文エラーが発生しており、今回は行頭を示しています

-command "import aovsFunction as aovs; aovs.MenuFuncs.aovMenu('" + "shelfBtn_" + $parent + "_AOV" + "')"
-sourceType "python"

では、括弧は MEL での読み取り方法に大きな影響を与えるのでしょうか?

4

1 に答える 1

4

あなたの例は不正です。一般に、コードの意味が失われるため、スイッチからコードを切り取ることはできません。次のようなスイッチ:

-command ""

実際の mel コマンドが呼び出される前の行を参照しています ( -command スイッチと混同しないでください)。この場合、コマンド全体が実際には次のようになると思います。

shelfButton 
    -command ""
    -sourceType "mel"
    -actionIsSubstitute 0
    -commandRepeatable 1
    ("shelfBtn_"  + $parent + "_AOV");

しかし、それを知るのは難しいです。呼び出されるコマンドを省略すると、コードの意味がすべて失われ、ほとんどの場合、意味がないため、そのように理解できなくなります。主語、述語、文脈のない文のようなものです。

それが明確になったので、実際に質問に答えることができます。なぜ aa に空の -command を入れるのですか? 少し冗長ですが、それでも意味があります。その理由は、ボタンに何を入力すればよいかわからないためです。コマンドソースタイプのフラグを省略できますが、違いはありません。(ソースタイプを省略すると、微妙に間違ってしまう可能性があります)

次のコマンドはバインドを行います。

python(...yada yada ... "('"+"shelfBtn_" + $parent + "_AOV"+"')"); 

いいえ、aovMenuが実際に何をするのかわかりませんが、ボタンの名前を渡しているので、意図はかなり明確です。aovMenu コマンド内にあるものは何でも、ボタンのコマンドを変更しています。これを-commandスイッチに直接入れると、機能しているように見えてしまいます (最初にボタンを押すとボタンが読み込まれるため)。しかし、それにもかかわらず、それは微妙に間違っています。

これは Maya プログラミングではよくあるパターンです。あなたがすることは、ボタンを事前に生成して最終的な名前を知ることです。これにより、相互に依存する 2 つのエンティティをその名前にバインドできます。

続けて Python を呼び出しますか? Pythonを入れるだけの方が簡単ではないでしょうか?

コードがまったく同じというわけではありません。誰が電話しているかにもよりますが、この方法の方が簡単かもしれません。ボタンをブートストラップしてから aovMenu 関数を呼び出す必要があります。他の誰かが作成した関数を呼び出すのは、まったく別の形式ではありません。

問題は、コードが少し悪いことです。微妙なエラーが発生する可能性がわずかにあります。Python で記述されているかどうかは関係ありませんが、Maya がどのように動作するかは重要です。ボタンが呼び出されることを実際に知ることはできません。

("shelfBtn_"  + $parent + "_AOV")

その名前が存在する場合、maya は名前を変更するか、最悪の場合、他の名前と同じ名前を付けます。フル パス名を使用するか、50% の確率でエラーが発生する必要があります。これを行う正しい方法は次のようになります。

$sButton = `shelfButton 
                -actionIsSubstitute 0
                -commandRepeatable 1
                 ("shelfBtn_"  + $parent + "_AOV")`;

python("import aovsFunction as aovs; aovs.MenuFuncs.aovMenu('"+$sButton+"')"); 
于 2014-03-21T08:43:06.637 に答える