Maya – Как автоматизировать набор управляемых ключей с помощью Python?

#python #python-2.7 #maya

#python #python-2.7 #maya

Вопрос:

Я хотел создать отношение ключей, управляемое набором, таким образом, чтобы, если для видимости одного объекта установлено значение ON , все остальные объекты в наборе должны отключаться.

Например, в моей сцене есть 5 переключателей, где мне нужно, чтобы другие четыре переключателя включались OFF , когда я активирую один переключатель.

Как я могу закодировать такую вещь на Python?

Спасибо.

Ответ №1:

Вот более процедурный способ сделать это с помощью ключей, управляемых набором, чтобы у вас могло быть столько наборов с таким количеством объектов, сколько вы хотите.

Это создаст единый атрибут, который будет управлять видимостью всех элементов в разных наборах. При изменении значения драйвера будет отображаться только один набор.

 import maya.cmds as cmds


driver = "pSphere1"  # Define the object that will hold the switch attribute.
set_names = ["set1", "set2", "set3", "set4"]  # Define set names to effect.

cmds.addAttr(driver, ln="switch", at="long", keyable=True, min=0, max=len(set_names) - 1)  # Create switch attribute on driver.

for i, set_name in enumerate(set_names):
    set_members = cmds.sets(set_name, q=True) or []  # Collect all of the set's members.

    for member in set_members:
        for j in range(len(set_names)):
            cmds.setDrivenKeyframe(member, at="visibility", cd="{}.switch".format(driver), dv=j, v=i == j)  # Set an sdk on each member that will set its visibility
  

Пример переключения значения драйвера

Ответ №2:

Используйте этот код в качестве отправной точки:

введите описание изображения здесь

 import maya.cmds as cmds

def on1():
    cmds.setAttr('pSphere1.visibility', 1)
def on2():
    cmds.setAttr('pSphere2.visibility', 1)
def on3():
    cmds.setAttr('pSphere3.visibility', 1)
def on4():
    cmds.setAttr('pSphere4.visibility', 1)
def on5():
    cmds.setAttr('pSphere5.visibility', 1)

def off1(): 
    cmds.setAttr('pSphere1.visibility', 0)
def off2():
    cmds.setAttr('pSphere2.visibility', 0)
def off3():
    cmds.setAttr('pSphere3.visibility', 0)
def off4():
    cmds.setAttr('pSphere4.visibility', 0)
def off5():
    cmds.setAttr('pSphere5.visibility', 0)

cmds.window(width=100)
cmds.columnLayout(adjustableColumn=True)
cmds.radioCollection()
rb01 = cmds.radioButton(label='1', onc='on1()', ofc='off1(), off2(), off3(), off4(), off5()', sl=True)
rb02 = cmds.radioButton(label='2', onc='on2()', ofc='off1(), off2(), off3(), off4(), off5()')
rb03 = cmds.radioButton(label='3', onc='on3()', ofc='off1(), off2(), off3(), off4(), off5()')
rb04 = cmds.radioButton(label='4', onc='on4()', ofc='off1(), off2(), off3(), off4(), off5()')
rb05 = cmds.radioButton(label='5', onc='on5()', ofc='off1(), off2(), off3(), off4(), off5()')
cmds.showWindow()
  

Надеюсь, это поможет.