Button 玛雅·梅尔·谢尔布顿

Button 玛雅·梅尔·谢尔布顿,button,maya,mel,Button,Maya,Mel,我对MEL很陌生,当我探索这个MEL脚本时,我发现用户写了一些我完全不懂的行。 但我很想知道为什么这个人会这么做 不管怎样,有人能解释一下为什么下面的代码首先表示一个空MEL,然后再调用Python吗?把Python放进去不是更容易吗 我还尝试禁用命令和sourceType,脚本也可以正常工作,只是我不明白在这种情况下command和sourceType的目的是什么 -command "" -sourceType "mel" -actionIsSubstitute 0 -commandRepea

我对MEL很陌生,当我探索这个MEL脚本时,我发现用户写了一些我完全不懂的行。 但我很想知道为什么这个人会这么做

不管怎样,有人能解释一下为什么下面的代码首先表示一个空MEL,然后再调用Python吗?把Python放进去不是更容易吗

我还尝试禁用命令和sourceType,脚本也可以正常工作,只是我不明白在这种情况下
command
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中的阅读方式中起着重要作用吗?

您的示例格式不正确。一般来说,您不能像现在这样从开关中剪切代码,因为代码失去了意义。开关,如:

-command ""
是指调用实际mel命令之前的行(不要与-command开关混淆)。在这种情况下,我猜整个命令实际上是:

shelfButton 
    -command ""
    -sourceType "mel"
    -actionIsSubstitute 0
    -commandRepeatable 1
    ("shelfBtn_"  + $parent + "_AOV");
但这很难知道。如果您忽略了正在调用的命令,那么代码将失去所有意义,并且在大多数情况下可能无法以这种方式理解,因为它没有任何意义。它就像一个没有主语、谓语和上下文的句子

澄清了这一点,我们实际上可以回答这个问题。为什么要放一个空命令?是的,这有点多余,但它仍然有意义。原因是他不知道用什么填充按钮。您可以省略命令,而源类型标志应该没有什么区别。(省略源类型很可能会导致错误)

下一个命令执行绑定:

python(...yada yada ... "('"+"shelfBtn_" + $parent + "_AOV"+"')"); 
不,我不知道aovMenu真正的作用是什么,但是意图非常清楚,因为他正在传递按钮的名称。aovMenu命令中的任何内容都会更改按钮的命令。如果您直接将其置于-command开关中(因为第一次按下按钮将填充该按钮),这将看起来很有效。但无论如何,这将是微妙的错误

这是maya编程中非常常见的模式。您要做的是预生成按钮以了解其最终名称,以便可以将相互依赖的两个实体绑定到该名称

继续调用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+"')"); 

你的例子格式不正确。一般来说,您不能像现在这样从开关中剪切代码,因为代码失去了意义。开关,如:

-command ""
是指调用实际mel命令之前的行(不要与-command开关混淆)。在这种情况下,我猜整个命令实际上是:

shelfButton 
    -command ""
    -sourceType "mel"
    -actionIsSubstitute 0
    -commandRepeatable 1
    ("shelfBtn_"  + $parent + "_AOV");
但这很难知道。如果您忽略了正在调用的命令,那么代码将失去所有意义,并且在大多数情况下可能无法以这种方式理解,因为它没有任何意义。它就像一个没有主语、谓语和上下文的句子

澄清了这一点,我们实际上可以回答这个问题。为什么要放一个空命令?是的,这有点多余,但它仍然有意义。原因是他不知道用什么填充按钮。您可以省略命令,而源类型标志应该没有什么区别。(省略源类型很可能会导致错误)

下一个命令执行绑定:

python(...yada yada ... "('"+"shelfBtn_" + $parent + "_AOV"+"')"); 
不,我不知道aovMenu真正的作用是什么,但是意图非常清楚,因为他正在传递按钮的名称。aovMenu命令中的任何内容都会更改按钮的命令。如果您直接将其置于-command开关中(因为第一次按下按钮将填充该按钮),这将看起来很有效。但无论如何,这将是微妙的错误

这是maya编程中非常常见的模式。您要做的是预生成按钮以了解其最终名称,以便可以将相互依赖的两个实体绑定到该名称

继续调用Python?将Python放进去不是更容易吗?

不太可能,代码会完全相同。这样可能更容易,这取决于打电话的人。您仍然需要引导按钮,然后调用aovMenu函数。调用其他人创建的函数并没有什么不同

问题是代码有点糟糕,有一个微小的错误的机会。它是否用python编写并不重要,重要的是Maya的行为。您实际上无法知道按钮将被调用:

("shelfBtn_"  + $parent + "_AOV")
因为如果该名称存在,maya会将其重命名,或者更糟,将其命名为与其他名称相同的名称,然后