从变换中获取Shape的最佳方法

时间:2017-02-27 22:26:42

标签: mel pymel

使用ls -sl返回变换。我能找到获得变换形状的唯一方法是使用getRelatives,但与其他工作流程相比,这看起来很糟糕。有没有更好的标准方法从变换中获取Shape?

2 个答案:

答案 0 :(得分:0)

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

transform.getShape()

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

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

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

答案 1 :(得分:0)

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

但是; getShape()方法仅适用于转换nodeType。如果您要尝试解析未知的节点类型(例如网格或曲线),请说出getShape(),以检查是否可以使用该方法。

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

如果解析未知内容:listRelatives()shape标志设置为true的s命令

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