Maya - Как автоматизировать набор управляемых ключей с помощью Python? - PullRequest
0 голосов
/ 09 апреля 2019

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

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

Как мне написать такую ​​вещь на Python?

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

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

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

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

Example of switching driver's value

0 голосов
/ 10 апреля 2019

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

enter image description here

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

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

...