Связать процедуру с каждой кнопкой команды maya

Я сделал этот скрипт, который создает два материала с разными значениями цвета. Как я могу прикрепить эту процедуру так, чтобы при нажатии кнопки "Цвет 1" он создавал цвет материала 1 и цвет 2 при нажатии второй кнопки. Если есть гораздо лучший способ добиться этого это питон. Пожалуйста, дайте мне знать

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;

1 ответ

Исходя из комментариев на ваш вопрос, это должно быть то, что вы ищете:

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()

По сути, этот код делает то же самое, что вы делаете в MEL, но с использованием "структуры" python (потому что python - независимый язык от Maya, имеет некоторые библиотеки, такие как functools, которые помогают вам делать более сложные вещи, чем те, что позволяет MEL).

Чтобы узнать больше об этом, просто загляните в документацию по Google для Python 2.7.10+ (которая использовалась в последней версии Maya).

Также у Maya есть некоторая документация о функции python, которую вы можете использовать вместо MEL.

Другие вопросы по тегам