수색…


이름으로 객체 찾기

ls() 명령을 사용하여 이름별로 객체를 찾습니다.

freds = cmds.ls("fred") 
#finds all objects in the scene named exactly 'fred', ie [u'fred', u'|group1|fred']

* 를 와일드 카드로 사용 :

freds = cmds.ls("fred*")
# finds all objects whose name starts with 'fred'
# [u'fred', u'frederick', u'fred2']

has_fred = cmds.ls("*fred*")
# [u'fred', u'alfred', u'fredericka']

ls ()는 여러 개의 필터 문자열 인수를 취합니다.

cmds.ls("fred", "barney") 
# [u'fred', u'|group1|barney']

iterable 인자를 받아 들일 수도 있습니다 :

look_for = ['fred', 'barney']
# cmds.ls(look_for)
# [u'fred', u'|group1|barney']

ls () 결과 다루기

ls ()를 필터로 사용하면 때때로 이상한 결과를 얻을 수 있습니다. 실수로 필터 인자를 넘겨주고 인자없이 ls() 를 호출하는 것을 잊어 버렸다 면 Maya 장면모든 노드 목록을 얻을 수 있습니다 :

 cmds.ls()
 # [u'time1', u'sequenceManager1', u'hardwareRenderingGlobals', u'renderPartition'...] etc

이것의 일반적인 원인은 ls() 내부의 * args를 사용하는 것입니다.

cmds.ls(["fred", "barney"]) # OK, returns ['fred', 'barney']
cmds.ls([]) # OK, returns [] 
cmds.ls(*[]) # not ok: returns all nodes!

Maya 2015 및 이전 버전

Maya 2015 및 이전 버전에서는 아무것도 찾지 못하는 ls() 쿼리가 빈 목록 대신 None 을 반환합니다. 결과를 사용하는 경우 예외가 발생할 수 있습니다.

 for item in cmds.ls("don't_exist"):
     print item
 # Error: TypeError: file <maya console> line 1: 'NoneType' object is not iterable 

이 문제를 해결하기위한 가장 깨끗한 관용구는 None이 반환 or [] ls() 연산 후에 or [] 반환 할 때 항상 대체 출력을 추가하는 것입니다. 그러면 복귀가 None 아닌 빈 목록이됩니다.

 for item in cmds.ls("don't_exist") or []:
     print item
 # prints nothing since there's no result -- but no exception

유형별 개체 찾기

ls() 에는 type 플래그가 포함되어있어 특정 타입의 장면 노드를 찾을 수 있습니다. 예 :

 cameras = cmds.ls(type='camera')
 // [u'topShape', u'sideShape', u'perspShape', u'frontShape']

동일한 통화에서 여러 유형을 검색 할 수 있습니다.

 geometry = cmds.ls(type=('mesh', 'nurbsCurve', 'nurbsSurface'))

Maya의 내부 클래스 계층 구조에 해당하는 '추상'유형을 검색 할 수도 있습니다. 특정 객체가 나타내는 노드 유형을 찾으려면 nodeType 명령을 사용하십시오.

cmds.nodeType('pCubeShape1', i=True)  # 'i' includes the inherited object types
// Result: [u'containerBase',
 u'entity',
 u'dagNode',
 u'shape',
 u'geometryShape',
 u'deformableShape',
 u'controlPoint',
 u'surfaceShape',
 u'mesh'] //
 # in this example, ls with any of the above types will return `pCubeShape1`

ls ()를 사용하여 객체가 있는지 확인하기

ls() 는 이름으로 객체를 찾고 있기 때문에, 객체가 장면에 존재 하는지를 알아내는 편리한 방법입니다. ls() 는 객체 목록을 가지고 장면에있는 것만 반환합니다.

 available_characters = cmds.ls('fred', 'barney', 'wilma', 'dino')
 # available_characters will contain only the named characters that are present

구성 요소 선택 작업

버텍스 나 UV 포인트와 같은 컴포넌트로 작업 할 때, Maya는 개별 항목보다는 콜론으로 분리 된 범위를 반환하는 것을 기본으로합니다 :

 print cmds.ls('pCube1.vtx[*]')  # get all the vertices in the cube
 # [u'pCube1.vtx[0:7]']

flatten 옵션과 함께 ls 사용하여 Maya가 범위 표기법을 개별 컴포넌트 엔트리로 확장하도록 할 수있다.

expanded = cmds.ls('pCube1.vtx[*]', flatten=True)
print expanded
# [u'pCube1.vtx[0]', u'pCube1.vtx[1]', u'pCube1.vtx[2]', u'pCube1.vtx[3]', u'pCube1.vtx[4]', u'pCube1.vtx[5]', u'pCube1.vtx[6]', u'pCube1.vtx[7]']

pCube1.vtx[0:7] 와 같은 문자열을 여러 개의 개별 항목으로 변환하는 코드를 작성하지 않았기 pCube1.vtx[0:7] 형식은 보통 루핑 할 때 더 좋습니다.

filterExpand 명령을 사용하여 동일한 결과를 얻을 수도 있습니다.

ls에서 단일 객체를 안전하게 얻습니다.

많은 ls() 질의는 하나의 객체를 찾기위한 것이지만 ls 항상 목록을 반환합니다 (또는 이전 Maya에서는 단일 None ). 이것은 간단한 질문에 대해 복잡한 오류 검사를 만듭니다.

어떠한 상황에서도 ls 에서 단일 값을 얻는 가장 쉬운 방법은 다음과 같습니다.

result = (cmds.ls('your query here') or [None])[0]

or 최소한 하나의 None 포함하는 목록을 얻을 수 있으므로 항상 색인을 생성 할 수 있습니다.

이 스타일은 하나 이상의 결과를 얻었 으면 알려주지 않습니다. 단일 결과를 가정하는 것이 안전합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow