Mel 从变换中获取形状的最佳方法

Mel 从变换中获取形状的最佳方法,mel,pymel,Mel,Pymel,使用ls-sl返回一个转换。我能找到的唯一获得变换形状的方法是使用getRelatives,但与其他工作流相比,这似乎不可靠。有没有更好更标准的方法从变换中获取形状?PyMEL中从变换中获取形状的非常标准的方法: transform.getShape() 要从选择列表中获取形状,可以执行以下操作,生成形状列表 sel_shapes = [s.getShape() for s in pm.ls(sl=1)] 请注意,某些变换没有形状。与组节点一样,它基本上是一个空转换。请注意,从2018年起,

使用ls-sl返回一个转换。我能找到的唯一获得变换形状的方法是使用getRelatives,但与其他工作流相比,这似乎不可靠。有没有更好更标准的方法从变换中获取形状?

PyMEL中从变换中获取形状的非常标准的方法:

transform.getShape()
要从选择列表中获取形状,可以执行以下操作,生成形状列表

sel_shapes = [s.getShape() for s in pm.ls(sl=1)]

请注意,某些变换没有形状。与组节点一样,它基本上是一个空转换。

请注意,从2018年起,pymel
getShape()
存在缺陷(IMO),因为它假定每个节点只有一个形状,但情况并非总是如此。(99%的时候都是这样,所以我在挑剔)

但是,;getShape()方法仅适用于转换节点类型。如果您有一个未知的节点类型,您正试图解析它是网格还是曲线,例如,通过说getShape(),您将需要检查是否可以使用该方法

如果pm.nodeType(yourPyNode)==“transform”:
'shape=yourPyNode.getShape()

如果解析未知项:
listRelatives()
命令,且
shape
s
标志设置为true

selected_object = pm.ls(sl=True)[0]
shapes = pm.listRelatives(selected_object, s=True)
    if len(shapes) > 0:
    for shape in shapes:
        # Do something with your shapes here
        print('Shapes are: {}'.format(shape))

# or more pymel friendly

shapes = pm.selected_object.listRelatives(s=True)
for shape in shapes: 
    # Do something in here