一半君的总结纸

听话只听一半君

#85 如何判断一个 shape node 是否被 instance 过?

你可以把Maya的 instance 想象成同一个 shape 拥有多个 transforms – 每个 transform 代表了这个shape的一个instance的位置.

因此, 要知道一个shape有没有被instance过, 只需要查询他的 parent transforms 即可:

string $parents[] = `listRelatives -allParents $shape`;

如果返回的结果数组(array)里的元素个数大于1, 那说明这个shape被instance过了.

注意: 你要查询的是 shape node.

proc int isInstance( string $shape )
{
  $isInstance = 0;

  string $parents[] = `listRelatives -allParents $shape`;
  $isInstance = ( size( $parents ) > 1 );

  return $isInstance;
}

但是这不能告诉你这个shape在被instance之前,原本的路径是什么. 你有时候可能会想知道原node的路径.

‘allParents’ flag 会返回一个instanced shape的所有transforms, 而且是按照”instanced”顺序排序的. 在返回的数组中第一个parent就是这个node的原路径.

// 创建一个cube.
//
string $cube[] = `polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0
                           -tx 1 -name myCube`;
// Result: myCube polyCube1 //

// Instance这个cube.
//
string $dup[] = `instance -name instancedCube $cube[0]`;
// Result: instancedCube //

// 找到所有的cube的shape nodes的DAG paths.
//
string $cubeShape[] = `listRelatives -f -shapes $cube[0]`;
// Result: |myCube|myCubeShape //
string $dupeShape[] = `listRelatives -f -shapes $dup[0]`;
// Result: |instancedCube|myCubeShape //

// 找到每个 instance 的 parent transforms.
// 第一个 parent 就是最初的原 transform.
//
listRelatives -f -allParents $cubeShape[0];
// Result: |myCube |instancedCube //
listRelatives -f -allParents $dupeShape[0];
// Result: |myCube |instancedCube //

增强版:

我把pCube1 instance复制了一个

# 找到一个shape的所有instance
shape = pm.PyNode('pCubeShape1')
shape.getInstances()
# Result: [nt.Mesh(u'pCube1|pCubeShape1'), nt.Mesh(u'pCube2|pCubeShape1')] #

Related How-To’s

27 Aug 2004

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: