2016-03-23 17 views
0

Ich bin neu in der Verwendung von MEL zum Schreiben von Skripten. Ich habe zwei Radio-Tasten, eins und zwei. Wenn der Optionsschalter 'two' ausgewählt ist, möchte ich, dass das Skript die zwei Würfelobjekte auswählt, die ich in meiner Szene erstellt habe (cube1 und cube2), so dass, wenn ich meinen 'Drehen'-Knopf (einen normalen Druckknopf) benutze Die Würfel drehen sich.MEL Eine ausgewählte Schaltfläche abfragen

Auf der anderen Seite, wenn der Radiobutton "one" ausgewählt ist, sollte nur einer von ihnen (cube1) rotieren, wenn ich den Drehknopf drücke.

Ich habe meine Radio-Buttons wie folgt:

$radio1 = `radioCollection`;   
         //my radio buttons 
         $one = `radioButton -label "1 cube"`; 
         $two = `radioButton -label "2 cubes"`; 

radioCollection -edit -select $one $radio1; //so that this one is selected by default 

und für die Dreh-Taste Ich habe dies, dass der Würfel-Objekt ‚cube1‘ um 30 Grad dreht. Dies ist zur Zeit NICHT mit meinen Radio Buttons verbunden.

button -label "rotate" -command "setAttr cube1.rotateZ `floatSliderGrp -q -value 30.0`"; 

Gedanken? Soll ich den Status des Optionsfelds abfragen? Das wäre für mich in einer anderen Sprache so viel einfacher! Ich konnte sehen, mich so etwas wie sagen „wenn $ radiotwo.pressed, dann cube1.rotateZ & & cube2.rotateZ“

Antwort

1

Alle Maya UI-Artikel sind völlig zwingend notwendig: Sie haben Befehle zu erteilen und Ergebnisse zu erzielen, gibt es keine 'state': der 'button' oder was auch immer nur der String-Name des Objekts sein wird, das Sie für die Ausgabe der Befehle verwenden werden

Um den Status der Radiocollection zu erhalten, rufen Sie radioCollection -q -select auf die Sammlung, die den Namen zurückgibt des ausgewählten Optionsfelds; Sie würden das verwenden, um Ihre Logik zu steuern.

string $w = `window`; 
string $c = `columnLayout`; 
string $radiocol = `radioCollection "radio buttons"`; 
string $one_cube = `radioButton -label "1 cube"`; 
string $two_cube = `radioButton -label "2 cubes"`; 
radioCollection -edit -select $one_cube $radiocol; 


showWindow $w; 

global proc string get_radio_state(string $radio) 
{ 
    string $selected = `radioCollection -q -select $radio`; 
    return `radioButton -q -label $selected`; 
} 

print `get_radio_state($radiocol)`; 

Geige mit den Radiobuttons und get_radio_state($radiocol); Es sollte den Namen der ausgewählten Schaltfläche zurückgeben.

Wenn Sie bereits mit anderen Sprachen vertraut sind, sollten Sie wahrscheinlich MEL überspringen und direkt zu Maya Python springen: es ist viel fähiger und weniger zwielichtig. Viel Diskussion here und here

Zum Vergleich, hier ist eine Python-Version der gleichen Idee:

w = cmds.window() 
c =cmds.columnLayout() 
rc = cmds.radioCollection() 
cmds.radioButton('one', label="1 cube") 
cmds.radioButton('two', label = "2 cubes") 

def print_selected(*ignore): 
    print "selected", cmds.radioCollection(rc, q=True, select=True) 

btn = cmds.button("print selected", command=print_selected) 

cmds.showWindow(w) 

Hier wird die Taste tut das Gleiche wie die print-Anweisung in dem früheren Beispiel

+0

Danke, Aber zum Drucken des Status wird "Ungültiger Aufruf von" Drucken "angezeigt. Überprüfen Sie die Anzahl und Arten von Argumenten, die von der Prozedur erwartet werden." – user3295674

+0

behoben. war Backsticks misssing – theodox

+0

Vielen Dank, ich hatte festgestellt, das war auch schön mit Radio-Gruppen zu tun :) – user3295674