2017-10-02 3 views
0

Ich habe dieses Skript, das zwei Material mit unterschiedlichen Farbwerten erstellt. Wie kann ich dieses Verfahren anhängen, wenn ich auf Farbe 1 Schaltfläche erstelle Materialfarbe 1 und Farbe 2, wenn ich den zweiten Button klicken .Wenn es eine viel bessere Möglichkeit, dies zu erreichen ist, python.Please michLink-Prozedur zu jedem Button-Befehl maya

global string $list_of_names[]; 
global float $matColor[]; 
$list_of_names = {"color1","color2"}; 
$matColor = { 1.0,0.355,0.5,0.545,0.5,1.0}; 


global proc create() { 
global string $list_of_names[]; 
global float $matColor[]; 

    for ($i=0; $i<`size $list_of_names`; ++$i){ 
     shadingNode -asShader VRayMtl -n $list_of_names; 
     setAttr ($list_of_names[$i] + ".color") -type double3 $matColor[($i*3)] $matColor[($i*3)+1] $matColor[($i*3)+2];     
    } 

} 


window -width 150; 
columnLayout -adjustableColumn true; 

for ($i=0; $i<`size $list_of_names`; ++$i){ 
    button -label $list_of_names[$i] -command "create()"; 
} 

showWindow; 
+0

Ich bin nicht sicher zu verstehen, was du meinst. Sie möchten etwas Python-Code, der genau das Gleiche tut wie bei MEL? Es würde eine Menge __unterschiedlicher__ (und nicht _besserer_) Wege geben, dieses Ding in Python zu machen (und auch in MEL, um ehrlich zu sein), also kannst du besser erklären, was meinst du bitte? –

+0

Ich bin immer noch ein Neuling im Scripting und ich habe gerade begonnen, grundlegende Mel Codierung zu lernen. Ich machte eine Prozedur, die zwei Materialien erstellt und ihnen zwei verschiedene Farben zuweist.Jetzt bin ich stecken bei der Zuweisung dieser Prozedur zu Tasten basierend auf seinem Namen.So dass, wenn Ich klicke Farbe1 es sollte nur Farbe1 Material erstellen. Ich bin sicher, es gibt verschiedene Möglichkeiten, dies in Mel und besonders in Python als auch zu erreichen.Ich bin in Ordnung, wenn es einfach ist, das Problem in Python zu lösen, da ich interessiert bin zu sehen, wie es aussieht als nächsten Schritt ist es, Python zu lernen. – skb

Antwort

0

Basierend auf den Kommentaren auf Ihre Frage wissen lassen, sollte das sein, was Sie suchen,: Grundsätzlich

import functools 

import maya.cmds 

buttons = { 
    'color1': (1.0, 0.0, 0.0), 
    'color2': (0.0, 1.0, 0.0), 
} 

def button_callback(shader_color): 
    print shader_color 
    maya.cmds.shadingNode(...) 
    maya.cmds.setAttr(...) 


w = maya.cmds.window(width=150) 
maya.cmds.columnLayout(adjustableColumn=True) 

for btn in buttons: 
    maya.cmds.button(
     label=btn, 
     command=functools.partial(button_callback, buttons[btn]) 
    ) 

maya.cmds.showWindow() 

Dieser Code tut das gleiche, was Sie in MEL tun, aber mit Pyth auf "Struktur" (weil Python eine unabhängige Sprache von Maya ist, hat einige Bibliotheken wie functools, die Ihnen helfen, komplexere Dinge zu tun, die Sie MEL machen können).

Um mehr darüber zu verstehen, schauen Sie einfach in Google nach Python 2.7.10 Dokumentation (das ist das aus der letzten Version von Maya verwendet).

Auch Maya hat einige Dokumentation über die Python-Funktion, die Sie verwenden können, anstelle der MEL.