我有一个Maya MEL脚本,它插入了一些节点。评估似乎推迟到脚本完成。我想这来自于评估渲染器何时请求形状的管道,因此脏传播开始。
现在我想运行命令,如果插入的节点计算出如下的某个输出:
$node = `insertMyNode`;
dgdirty ($node+".outputAttr");
if(`getAttr ($node+".outputAttr")` == 1) {
print("true");
} else {
print("false");
}
这总是打印错误。当我插入节点然后在MEL编辑器中运行getAttr ($node+".outputAttr")
时,计算节点并得到1
。
我也尝试了dgeval
,但它也没有用。我认为原则上既不需要dgeval
也不需要dgdirty
,但getAttr
应该开始脏传播。
但它总是返回节点的默认值,而不是评估的节点。
dgdirty $node
对我有用,但我仍然只想弄脏我正在使用的输出(如果可能的话,自动,而不是用于记录用于调试目的的命令),因此节点不需要重新计算所有输出。
myNode
定义了inputMesh
参数,该参数在其C ++代码中使用outputAttr
影响输出bool attributeAffects
值。 insertMyNode
命令连接输入网格。没有连接到输出插头就不计算节点是正确的,但是在读取插头时应该计算它。当我打开节点编辑器并将鼠标悬停在输出插件上时,会正确计算节点。我希望getAttr
在上面的示例代码中也这样做。
答案 0 :(得分:1)
如果您弄脏输入属性并请求输出属性,则脏传播通常有效。似乎你弄脏了一个输入属性并尝试获得相同的输入属性。通常在一个节点中,这是用"影响"例如:affects(attrA, attrB).
如果请求了attrB,则调用compute()
方法。
所以我想如果你试图获得一个输出属性它会更好。