簡體   English   中英

查詢着色節點Maya Python

[英]Querying a shading node Maya Python

我目前遇到一個問題,我想查詢瑪雅人中的multipliDivide節點的“ 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' ……您要查找的屬性實際上只是'.input1X'而不是'.input1.input1X'

我知道,這還不是很清楚,但是將來您會知道的。 順便說一句,弄清此類內容的一種簡單方法是在Maya中手動連接內容,並在腳本編輯器中查看MEL輸出。 您每次都會得到真正的一筆交易,然后將這些內容快速翻譯成Python。

因此

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

順便說一句,我不確定為什么將結果分配給input 我承認我不確定會返回什么,但是我看不出它有什么用!

另外 :要回答您的直接問題,可以使用getattr查詢值。

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

在我的情況下,被賦值設置為新屬性值的變量沒有得到正確評估。 即使將值作為浮點值輸入, setAttr將變量值解釋為文本。

因此,我只是簡單地分配了變量並將其設置為在命令內浮動該變量。 就我而言,我做了以下工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM