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

Best way to get Shape from a Transform

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

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

transform.getShape()

要从选择列表中获取形状,您可以执行以下操作以生成形状列表。

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

A 注意 某些转换没有形状。就像一个组节点,它基本上是一个空的转换。

请注意,截至 2018 年,pymel getShape() 存在缺陷(IMO),因为它假设每个节点只有一个形状,但情况并非总是如此。 (虽然 99% 的情况都是如此,所以我在吹毛求疵)

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

if pm.nodeType(yourPyNode) == 'transform': 'shape = yourPyNode.getShape()

如果解析未知数:listRelatives() 命令,shapes 标志设置为真

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