还要将属性设置为组?

时间:2017-12-15 21:00:22

标签: python attributes maya culling

人。我写了这个简单的脚本来设置背面剔除选定的对象。但我无法弄清楚如何将其应用于所选组?

import maya.cmds as cmds

sel = cmds.ls(sl = True)
for i in range(len(sel)):
    cmds.setAttr((sel[i] + '.backfaceCulling'), 0)

1 个答案:

答案 0 :(得分:2)

import maya.cmds as cmds
# dag flag is used to find everything below (like shapes)
# so we specify we want only tansform nodes
sel = cmds.ls(sl = True,  dag=True, type='transform')
for i in sel:
    # we create a string attr for the current object 'i' because we will
    # use it multiple times
    attr = '{0}.backfaceCulling'.format(i)
    # We check if this transform node has an attribute backfaceCulling
    if cmds.ls(attr):
        # if yes, let's set the Attr
        cmds.setAttr(attr, 0)

编辑---多个属性的一个示例:

import maya.cmds as cmds
# dag flag is used to find everything below (like shapes)
# so we specify we want only tansform nodes
sel = cmds.ls(sl = True,  dag=True, type='transform')
# Multiple choices for multiple attr to change :
# attrs = ['backfaceCulling', 'visibility']
# OR if you have different values
# attrs =  [['backfaceCulling', 0], 
#           ['visibility', 1]]
# OR better go with dictionnaries if you have multiple values :
attr_dic = {'backfaceCulling' : 0, 
            'visibility': 1}
# you may add type if you need to
# attr_dic = {'translate' : (0,1,3), 
#             'visibility': 1,
#             'type_translate' : 'double3',
#             'backfaceCulling':1}


for a in attr_dic.keys():
    # keys return : backfaceCulling and visibility
    fullAttr = ['{0}.{1}'.format(i, a) for i in sel if cmds.ls('{0}.{1}'.format(i, a)) if cmds.ls('{0}.{1}'.format(i, a))]
    # This list comprehension return :['pSphere1.visibility','pSphere2.visibility','pSphere3.visibility','pSphere4.visibility','pSphere5.visibility']
    # syntax of list comprehension : [i for i in list if condition], it is used instead of normal for loop because it is really fast
    for attr in fullAttr:
        #for each obj, set value
        cmds.setAttr(attr, attr_dic[a])
        # if you are using type :
        # if not attr_dic.get('type_{0}'.format(a)):
        #     cmds.setAttr(attr, attr_dic[a])
        # else:
        #     t = attr_dic['type_{0}'.format(a)]
        #     cmds.setAttr(attr, *attr_dic[a], type=t)