Связать процедуру с каждой кнопкой команды 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.