2017-12-15 5 views
2

녀석. 나는이 간단한 스크립트를 써서 선택된 물체에 대한 뒤쪽면 컬링을 설정했다. 그러나 나는 이것을 선택된 그룹에도 적용하는 방법을 알 수 없다.속성을 그룹에도 설정 하시겠습니까?

import maya.cmds as cmds 

sel = cmds.ls(sl = True) 
for i in range(len(sel)): 
    cmds.setAttr((sel[i] + '.backfaceCulling'), 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) 
+0

마지막으로 ""'채택 .format()'일부 마야 개발자 : D – user1767754

+0

AHAH, 나는이 촬영했습니다 habbits는 마야가 파이썬 3.0으로 전환 할 것이기 때문에 지금은 더 읽기 쉽다는 것을 알게되었습니다. – DrWeeny

+0

친절하게 설명 해주셔서 감사합니다. 그러나 다른 속성을 추가로 설정하려면 어떻게해야합니까? for 루프에서 여러 attrs를 만들려면 어떻게해야합니까? – user8972552

관련 문제