2017-12-08 8 views
1

Ich habe 3 Attribute, von denen 2 zusammen verwendet werden, um den Wert des 3. zu bestimmen.Maya Python Attribute aktualisieren

Trig-Funktion - Der Benutzer wählt aus, welche Triggerfunktion er verwenden möchte. Jetzt ist es nur Sünde und cos

Radianten - Benutzer gibt den Radiantenwert für die Triggerfunktion ein.

Ausgabe - Dieser Wert wird mit einem Attribut für eine Noise-Textur verbunden.

Mein Problem ist, wie stelle ich dies so, dass, wenn ich die Werte von "Trig Function" & "Radians" ändern den Ausgabewert aktualisiert wird?

Beispielcode:

import maya.cmds as cmds 
import math 

cmds.window(title="Simple UI in Maya", width=300) 
theMasterLayout = cmds.columnLayout() 
groupName = "testGrp" 
cmds.group(empty=True, name=groupName) 
cmds.addAttr(ln="WaveType", at='enum', en="sin:cos") 
cmds.addAttr(ln="radians", at='double', min=0, max=10, dv=0.2, k=True) 
cmds.addAttr(ln='WaveValue', at='double', dv=0) 
if cmds.getAttr(groupName + ".WaveType") == "sin": 
    wave = math.sin(cmds.getAttr(groupName + ".radians")) 
else: 
    wave = math.cos(cmds.getAttr(groupName + ".radians")) 
cmds.setAttr(groupName + ".WaveValue", wave) 

# Display the window 
cmds.showWindow() 
+0

Haben Sie etwas recherchiert und versucht? – user1767754

+0

Fragen Sie nach Codebeispielen? – Berkyjay

Antwort

1

konnte ich eine Lösung für dieses Problem finden. Im Grunde genommen benutzt man nur Ausdrücke. Aber wenn jemand eine alternative Methode kennt, würde ich es immer noch gerne hören.

import maya.cmds as cmds 

groupName = "testGrp" 
cmds.group(empty=True, name=groupName) 
cmds.addAttr(ln="WaveType", at='enum', en="sin:cos") 
cmds.addAttr(ln="radians", at='double', min=0, max=10, dv=0.2, k=True) 
cmds.addAttr(ln='WaveValue', at='double', dv=0) 
expString = 'if ('+ groupName + '.WaveType == 0){\n' 
expString += groupName + '.WaveValue = sin(' + groupName + '.radians);\n}' 
expString += '\nelse {\n' + groupName + '.WaveValue = cos(' + groupName + '.radians);\n}' 
cmds.expression(s=expString, 
       o=groupName, 
       n="WaveResult", 
       ae=1, 
       uc=all)