查询着色节点 Maya Python

Querying a shading node Maya Python

我目前遇到一个问题,我想在maya中查询一个multiplyDivide节点的'inputX'并将查询到的数字放入另一个multiplyDivide节点的'inputX'。

该脚本当前为手臂设置了可伸缩 IK。使用肩膀和手腕之间的距离(在某个点,这是我想查询的),然后骨骼会伸展。所以很明显,我不想把两者联系在一起。

def stretchyIK(firstJointStore, lastJointStore, side, limb):

    GlobalMoveRig = cmds.rename ('GlobalMove_Grp_01')
    locFirstJoint = cmds.spaceLocator (n='Loc_' + firstJointStore + '_0#')
    locLastJoint = cmds.spaceLocator (n='Loc_' + lastJointStore + '_0#')
    pointLoc1 = cmds.pointConstraint (side + '_Fk_' + firstJointStore + suffix, locFirstJoint)
    pointLoc2 = cmds.pointConstraint (side + '_Fk_' + lastJointStore  + suffix, locLastJoint)
    cmds.delete (pointLoc1, pointLoc2)
    cmds.pointConstraint (side + '_FK_' + firstJointStore + suffix, locFirstJoint)
    cmds.pointConstraint (ikCtr, locLastJoint)
    cmds.parent (locFirstJoint, locLastJoint, 'Do_Not_Touch')
    #Creating Nodes for Stretchy IK
    IkStretch_DisNode = cmds.shadingNode ('distanceBetween', asUtility=True, n='DistBet_IkStretch_' + side + limb + '_#')
    cmds.connectAttr (locFirstJoint[0] + '.translate', IkStretch_DisNode + '.point1')
    cmds.connectAttr (locLastJoint[0] + '.translate', IkStretch_DisNode + '.point2')
    IkStretch_DivNode = cmds.shadingNode ('multiplyDivide', asUtility=True, n='Div_IkStretch_' + side + limb + '_#')
    cmds.setAttr (IkStretch_DivNode + '.operation', 2)
    input = cmds.connectAttr (IkStretch_DisNode + '.distance', IkStretch_DivNode + '.input1.input1X')   ########HELP NEEDED HERE
    cmds.setAttr (ikCtr + '.translateX', 2)
    IkStretch_MultNode = cmds.shadingNode ('multiplyDivide', asUtility=True, n='Mult_IkStretch_' + side + limb + '_#')
    cmds.setAttr (IkStretch_MultNode + '.input1X', IkStretch_DivNode + '.input1.input1X')#WAIT FOR PAUL
    cmds.connectAttr (GlobalMoveRig + '.scaleY', IkStretch_MultNode + '.input2X')
    cmds.connectAttr (IkStretch_MultNode + '.outputX', IkStretch_DivNode + '.input2X')
    IkStretch_Cond_Equ = cmds.shadingNode ('condition',  asUtility=True, n='Cond_Equ_IkStretch_' + side + limb + '_#')
    IkStretch_Cond_GrtEqu = cmds.shadingNode ('condition',  asUtility=True, n='Cond_GrtEqu_IkStretch_' + side + limb + '_#')
    cmds.setAttr (IkStretch_Cond_GrtEqu + '.operation', 3)
    cmds.connectAttr (ikCtr + '.Enable', IkStretch_Cond_Equ + '.firstTerm')
    cmds.setAttr (IkStretch_Cond_Equ + '.secondTerm', 1)
    cmds.connectAttr (IkStretch_DisNode + '.distance', IkStretch_Cond_GrtEqu + '.firstTerm')
    cmds.connectAttr (IkStretch_MultNode + '.outputX', IkStretch_Cond_GrtEqu + '.secondTerm')
    cmds.connectAttr (IkStretch_DivNode + '.outputX', IkStretch_Cond_GrtEqu + '.colorIfTrueR')
    cmds.connectAttr (IkStretch_Cond_GrtEqu + '.outColorR', IkStretch_Cond_Equ + '.colorIfTrueR')
    cmds.connectAttr (IkStretch_Cond_GrtEqu + '.outColorR', side + '_Ik_' + secondJointStore + suffix + '.scaleX')
    cmds.connectAttr (IkStretch_Cond_GrtEqu + '.outColorR', side + '_Ik_' + firstJointStore + suffix + '.scaleX')

是的,您的错误很有道理...您要查找的属性实际上只是 '.input1X' 而不是 '.input1.input1X'

我知道,这不是很清楚,但你以后就会知道了。顺便说一句,解决此类问题的一种简单方法是手动连接 Maya 中的内容并在脚本编辑器中查看 MEL 输出。您每次都会得到真正的优惠,然后将这些东西翻译成 Python 很快。

所以:

cmds.connectAttr(IkStretch_DisNode + '.distance', IkStretch_DivNode + '.input1X') 

顺便说一下,我不确定您为什么要将结果分配给 input。我承认我不确定那会是什么 return,但我看不出它有什么用!

另外:要回答你直接的问题,可以用getattr查询值。

cmds.setAttr(
    IkStretch_MultNode + '.input1X', 
    cmds.getattr(IkStretch_DivNode + '.input1X')
)

在我的例子中,分配给设置为新属性值的变量没有被正确评估。 setAttr 将变量值解释为文本,即使该值是作为浮点值输入的。

所以,我简单地分配了变量并将其设置为在命令中浮动变量。就我而言,我执行了以下操作:

cmds.setAttr(Node + '.input1X', float(variable))