如何使用 python 在 Maya 的活动视图中 show/hide 项(?)?

How to show/hide items(?) in active view on maya with python?

现在我知道如何隐藏活动视口上的所有 nurbs 曲线了。但是我怎样才能同时对视口上的显示菜单上的所有项目(例如相机、操纵器、网格等)做同样的事情呢?

我认为我需要为此使用 for 循环,但我需要一些指导。谢谢。

import maya.cmds as cmds

actView = cmds.getPanel(wf=True)

if cmds.modelEditor(actView, q=True, nurbsCurves=True) == 1:
    cmds.modelEditor(actView, e=True, nurbsCurves=False)

这是隐藏所有内容的方法:

actView = cmds.getPanel(wf=True) # actView='modelPanel4'
# list the flag we use to hide, not that alo hide nearly everything
hide_attrs = ['alo', 'manipulators', 'grid', 'hud', 'hos', 'sel']
# value is used to make visible or to hide (0 is for hiding)
value = 0
# flags is used to create a dictionary that will be used in the command to do : manipulators = 0
flags = { i : value for i in hide_attrs }
# the double star unpack a python dictionnary the key = value, i.e in this case : alo = 0, hud = 0....
cmds.modelEditor(actView, e=1, **flags)

如果你想更具体一点,你可以再建一个可见属性词典

# merge dictionnaries
def merge_two_dicts(x, y):
    # In Python 3.5 or greater, : z = {**x, **y}
    # or w = {'foo': 'bar', 'baz': 'qux', **y}

    z = x.copy()  # start with x's keys and values
    z.update(y)  # modifies z with y's keys and values & returns None
    return z

actView = cmds.getPanel(wf=True) # actView='modelPanel4'
hide_attrs = ['alo', 'manipulators', 'grid', 'hud', 'hos']
vis_attrs = ['sel']
hide_flags = { i : 0 for i in hide_attrs }
vis_flags = { i : 1 for i in vis_attrs }
flags = merge_two_dicts(hide_flags, vis_flags)
cmds.modelEditor(actView, e=1, **flags)

但如果我是你,我会把它封装成一个 def :

def set_actviewVis(value, attrs=list):
    actView = cmds.getPanel(wf=True) # actView='modelPanel4'    
    flags = { i : value for i in attrs }
    cmds.modelEditor(actView, e=1, **flags)

hide_attrs = ['alo', 'manipulators', 'grid', 'hud', 'hos']
set_actviewVis(0, hide_attrs)
vis_attrs = ['sel']
set_actviewVis(1, vis_attrs)