대부분의 노드 유형을 합리적으로 포함 할 수있는 선택 항목이 있습니다. 파이썬에서는 그룹 노드를 제외한 모든 것을 걸러 낼 필요가있다. 문제는 그룹 노드가 Maya에 의해 노드를 변환하는 것으로 읽혀 지므로 장면의 다른 모든 변환 노드에서 그룹 노드를 필터링하는 것이 어렵다는 것입니다. 이것을 할 수있는 방법이 있습니까? API에서 가능합니까?Maya에서 그룹 노드를 파이썬으로 분리하는 방법
감사합니다.
대부분의 노드 유형을 합리적으로 포함 할 수있는 선택 항목이 있습니다. 파이썬에서는 그룹 노드를 제외한 모든 것을 걸러 낼 필요가있다. 문제는 그룹 노드가 Maya에 의해 노드를 변환하는 것으로 읽혀 지므로 장면의 다른 모든 변환 노드에서 그룹 노드를 필터링하는 것이 어렵다는 것입니다. 이것을 할 수있는 방법이 있습니까? API에서 가능합니까?Maya에서 그룹 노드를 파이썬으로 분리하는 방법
감사합니다.
"그룹"노드는 실제로 transform
노드이며 실제 구분은 없습니다.
가장 명확한 구별 I 은 자식이 완전히 다른 transform
노드로 구성되어야한다고 생각할 수 있습니다. 는 "그룹"의 모양 노드를 양육 더 이상 "그룹"
첫째, transform
노드의 선택으로 간주되지 않습니다. 주어진 경우 변환 확인
selection = pymel.core.ls(selection=True, transforms=True)
다음, 함수 자체가 "그룹"입니다 : 나는 당신이 이미 이러한 라인을 따라 뭔가를 가정합니다.
transform
이 아닌 경우 False
을 반환하여 주어진 노드의 모든 자식에 대해 반복합니다. 그렇지 않으면 True
을 반환하십시오.
def is_group(node):
children = node.getChildren()
for child in children:
if type(child) is not pymel.core.nodetypes.Transform:
return False
return True
이제 당신은 당신이 가장 분명 찾을 수있는 스타일에 따라, 다음과 같은 두 가지 방법 중 하나에, 선택을 필터링해야합니다
selection = filter(is_group, selection)
또는
selection = [node for node in selection if is_group(node)]
이 방법이 오래되었다는 것을 알고 있습니다. 여기에 설명 된 방법은 maya.cmds 명령과 함께 사용할 때 제대로 작동하지 않았습니다. 여기 내 솔루션입니다 : 그들은 또한 그 정의에 맞게부터
import maya.cmds as cmds
def is_group(groupName):
try:
children = cmds.listRelatives(groupName, children=True)
for child in children:
if not cmds.ls(child, transforms = True):
return False
return True
except:
return False
for item in cmds.ls():
if is_group(item):
print item
else:
pass
mhlester의 대답은 관절 true를 돌려줍니다. 는 또한 빈 그룹
def isGroup(node):
if mc.objectType(node, isType = 'joint'):
return False
kids = mc.listRelatives(node, c=1)
if kids:
for kid in kids:
if not mc.objectType(kid, isType = 'transform'):
return false
return True
print isGroup(mc.ls(sl=1))
도움을 주셔서 감사합니다에 대한 계정을 나던! 그것은 내가 필요로했던 바로 그 것이었다. :디 – TheBeardedBerry