我有一个可以合理地包含大多数节点类型的选择。在python中,我需要过滤掉除组节点之外的所有内容。问题是maya将组节点读取为变换节点,因此很难将它们从场景中的所有其他变换节点中过滤出来。有没有办法做到这一点?可能在API中?
谢谢!
答案 0 :(得分:6)
正如你所提到的," group"节点实际上只是transform
节点,没有真正的区别。
然而, 在"组"下为一个形状节点提供父母。将不再被视为"组"
首先,选择transform
个节点。我假设你已经有了这些方面的东西:
transform
接下来,检查给定变换本身是否为"组"的函数。
迭代给定节点的所有子节点,如果其中任何节点不是selection = pymel.core.ls(selection=True, transforms=True)
,则返回False
。否则返回transform
。
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)
答案 1 :(得分:2)
我知道这是旧的,这里描述的方法仅在与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
答案 2 :(得分:1)
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))