2014-12-11 3 views
1

나를 용서해주세요. 나는 파이썬을 믿을 수 없을 정도로 잘 이해하지 못했기 때문에 쉽게 시도해보십시오. Maya의 리그에서 Control Shapes 용 NURBS 서클을 만드는 기본 프로그램이 있으며 각 영역 (머리, 몸통 등)을 다른 레이어로 구분합니다. 먼저 레이어 색상을 변경하려면 어떻게해야합니까? 스크립트 편집기를보고,이 작동하지만해야하지 않습니다. 멍청한 놈의 아마 단지 구문 오류 : cmds.createDisplayLayer (. 이름 = 'Head_Control_Shapes', cmds.setAttr ('Head_Control_Shapes') 색상 = 4)Python에서 레이어 내에 객체 배치 - Maya

내 주요 질문하지만 한 번이 생성됩니다

(이 실행됩니다 스크립트 시작시), 그 안에 객체를 배치하려면 어떻게해야합니까? 이것은 관련 코드 조각입니다. 은 사전에 감사

import maya.cmds as cmds 
if cmds.window("RyanWindow", exists = True): 
    cmds.deleteUI("RyanWindow") 

myWindow = cmds.window(t="Ryan Window",w = 300, h = 300) 
form = cmds.formLayout() 

cmds.createDisplayLayer (name = 'Head_Control_Shapes', cmds.setAttr ('Head_Control_Shapes').color=4) 
cmds.createDisplayLayer (name = 'Torso_Control_Shapes', cmds.setAttr ('Torso_Control_Shapes').color=12) 
cmds.createDisplayLayer (name = 'Arms_Control_Shapes', cmds.setAttr ('Arms_Control_Shapes').color=13) 
cmds.createDisplayLayer (name = 'Legs_Control_Shapes', cmds.setAttr ('Legs_Control_Shapes').color=31) 
cmds.createDisplayLayer (name = 'Other_Control_Shapes', cmds.setAttr ('Other_Control_Shapes').color=2) 


cmds.columnLayout(adj = True) 
cmds.text("       Custom Control Shape Creator v1       ") 
cmds.separator(height = 15, style='double') 
cmds.separator(height = 15, style='double') 
cmds.setParent('..') 

tabs = cmds.tabLayout(innerMarginWidth=5, innerMarginHeight=5) 
cmds.formLayout(form, edit=True, attachForm=((tabs, 'top', 40), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0))) 

tab1 = cmds.rowColumnLayout(numberOfColumns=3) 
cmds.button(label='Circle', command = "makeCircle()") 
def makeCircle(): 
cmds.circle(nr=(0, 90, 1), c=(0, 0, 0)) 
cmds.button(label='Square', command = "makeSquare()") 
def makeSquare(): 
cmds.circle(nr=(0, 90, 1), c=(0, 0, 0)) 
cmds.button(label='Oval') 
cmds.setParent('..') 

답변

3

나는 그것이 작동되도록하는 것이 매우 약간의 코드를 리팩토링 :

import maya.cmds as cmds 
if cmds.window("RyanWindow", exists=True): 
    cmds.deleteUI("RyanWindow") 

myWindow = cmds.window(t="Ryan Window", w=300, h=300) 
form = cmds.formLayout() 

print cmds.createDisplayLayer (name='Head_Control_Shapes', empty=True) 
cmds.createDisplayLayer (name='Torso_Control_Shapes', empty=True) 
cmds.createDisplayLayer (name='Arms_Control_Shapes', empty=True) 
cmds.createDisplayLayer (name='Legs_Control_Shapes', empty=True) 
cmds.createDisplayLayer (name='Other_Control_Shapes', empty=True) 

cmds.setAttr ('Head_Control_Shapes.color', 4) 
cmds.setAttr ('Torso_Control_Shapes.color', 12) 
cmds.setAttr ('Arms_Control_Shapes.color', 13) 
cmds.setAttr ('Legs_Control_Shapes.color', 31) 
cmds.setAttr ('Other_Control_Shapes.color', 2) 

cmds.columnLayout(adj=True) 
cmds.text("       Custom Control Shape Creator v1       ") 
cmds.separator(height = 15, style='double') 
cmds.separator(height = 15, style='double') 
cmds.setParent('..') 

tabs = cmds.tabLayout(innerMarginWidth=5, innerMarginHeight=5) 
cmds.formLayout(form, edit=True, attachForm=((tabs, 'top', 40), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0))) 

tab1 = cmds.rowColumnLayout(numberOfColumns=3) 
cmds.button(label='Circle', command="makeCircle()") 
cmds.button(label='Square', command="makeSquare()") 
cmds.button(label='Oval') 
cmds.setParent('..') 


def makeCircle(): 
    cmds.circle(nr=(0, 90, 1), c=(0, 0, 0)) 


def makeSquare(): 
    cmds.circle(nr=(0, 90, 1), c=(0, 0, 0)) 


cmds.showWindow(myWindow) 

당신이 cmds.setAttr이었다 사용하던 방법 (I 코드 아래에 몇 가지 포인터를 포함합니다) 잘못된. setAttrcmds.createDisplayLayers 호출의 일부가 아니어야합니다. 별도의 명령입니다. 내가 지금처럼 두를 분할하는 이유는 다음과 같습니다

cmds.createDisplayLayer (name='Torso_Control_Shapes', empty=True) 
cmds.setAttr ('Head_Control_Shapes.color', 4) 

empty=True 플래그를 설정해야합니다. 그렇지 않으면, 스크립트를 실행하기 전에 선택된 모든 오브젝트가 새로 작성된 계층에 추가됩니다.

레이어를 생성하는 동안 레이어에 객체를 추가하려면 empty 플래그를 설정하지 않고 cmds.createDisplayLayers을 사용하여 객체를 미리 선택하고 레이어를 만들면됩니다. noRecurse=True 플래그를 설정하면 선택한 오브젝트 만 추가되고 그렇지 않으면 모든 오브젝트가 추가됩니다.

레이어를 만든 후 객체를 추가하려면 editDisplayLayerMembers 메서드를 사용합니다. 다음과 같이하면됩니다 :

cmds.editDisplayLayerMembers('Torso_Control_Shapes', object1, object2) 
# where object1 and object2 are strings containing the names of your objects 

참고 : 메서드 호출에서 '='기호 주위의 간격도 제거했습니다. Pep8은 메서드 호출에서 매개 변수를 할당하지 않는 것이 좋습니다. #

cmds.createDisplayLayer (이름 = "hidden_item 선택 변수를 생성 http://download.autodesk.com/us/maya/2010help/CommandsPython/editDisplayLayerMembers.html http://download.autodesk.com/us/maya/2010help/CommandsPython/createDisplayLayer.html

+0

주석 및 조언을 제공해 주셔서 감사합니다. 굉장히 유용하다. – Ryo123987

0

내 선택 사항 = cmds.ls (사실은 = SL) :

또한 더 많은 예제 및 옵션에 대한 문서를 체크 아웃 할 "숫자 = 1, 빈 = 참) # 빈 디스플레이 레이어를 만들

cmds.editDisplayLayerMembers 디스플레이 층

로 ('hidden_item', 내 선택 사항) # 매장 내 선택

cmds.setAttr ("hidden_item.visibility", 0) # 표시 레이어의 속성 변경

관련 문제