2015-02-26 4 views
0

У меня возникла проблема, когда я хочу запросить «inputX» узла multiplyDivide в майе и поместить запрошенный номер в «inputX» другого узла multiplyDivide.Выполнение запроса на затенение узла Maya Python

Сценарий в настоящее время создает растянутый 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') 
+0

Какое ваше сообщение об ошибке? Если у вас его нет, каково результирующее поведение этого скрипта и что вы ожидали? Мои знания в оснащении действительно ограничены, поэтому я постараюсь помочь вам как можно больше. – DrHaze

+0

Ошибка ... «Ошибка чтения элемента данных номер 1: Div_IkStretch_lArm_1.input1.input1X» Спасибо, что вернетесь ко мне быстро! – robek

ответ

1

Да, ваша ошибка имеет смысл ... Атрибут вы ищете на самом деле просто '.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') 
) 
+0

Ах, это имеет смысл, спасибо. Я слишком долго смотрел на это, так что не видел этого, но теперь я чувствую себя глупо! Большое спасибо! – robek

+0

@robek Не беспокойтесь. Я помню, у меня даже была такая же проблема в первый раз, поэтому я могу рассказать;) (Если это ответили на ваш вопрос, пожалуйста, не забудьте отметить ответ зеленым тиком!) – Eithos

+0

Прости, это был мой первый раз задавая вопрос, поэтому я не понял! Еще раз спасибо! – robek

0

В моем случае переменная, назначенная как новое значение атрибута, не оценивалась должным образом. setAttr интерпретировал значение переменной как текст, хотя значение было введено как значение поплавка.

Итак, я просто назначил переменную и установил ее для плавания переменной внутри этой команды. В моем случае я сделал следующее:

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