#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()
Надеюсь, это поможет.