一半君的总结纸

听话只听一半君

#23 如何得到当前选择了的lights (或者其他节点类型(node type),像lights这样是一对transform/shape 的)?

也许你感觉这样就可以了:

string $selectedLights[] = `ls -sl -lights`;

虽然这样确实能返回选择了的lights, 但是仅当使用者选择了light的 shape node的时候才可以 . 通常情况下他们不会选到shape的(因为你在视窗里框选的时候选到的是transform,在outliner里通常选到的也是transform), 他们也不应该被强迫要求去选到shape.

幸好, “ls” 命令有个flag可以返回当前选中节点的shape nodes:

string $selectedShapes[] = `ls -selection -dag -leaf`;

如果像上面这样用的话, 你就不用管用户一开始选的是 transform 还是 shape 了.

然后, 你就可以用 “nodeType” 命令来查询这个 shape 是不是你要找的类型:

if ( "mesh" == `nodeType $shape` )
{
  // 对这个 mesh shape 进行某些处理.
}

if ( "camera" == `nodeType $shape` )
{
  // 对这个 camera 进行某些处理.
}

然而, “light” 不是一个节点类型; 同时, 一共有好几种类型的 lights: spotLight, directionalLight, 等等. 一个更通用的办法是使用 “getClassification” 命令. 这个命令能返回一个这种节点类型下的classification string . 注意他返回的是一个 string array 而不是一个 string.

getClassification spotLight;
// Result: light //

getClassification volumeLight;
// Result: light //

# lz在2014里试了试,好像现在有点不一样了
getClassification volumeLight;
// Result: drawdb/light/volumeLight:light //

getClassification lambert;
// Result: drawdb/shader/surface/lambert:shader/surface //

getClassification blinn;
// Result: drawdb/shader/surface/blinn:shader/surface //

下面的 procedure 演示了如何从当前选中物体中得到所有的lights.

proc string[] getSelectedLights()
{
  string $selectedLights[];

  string $select[] = `ls -sl -dag -leaf`;

  for ( $shape in $select )
  {
    // 看看他是不是 light.
    //
    string $class[] = getClassification( `nodeType $shape` );

    if ( ( `size $class` ) > 0 && ( "light" == $class[0] ) )
    {
      $selectedLights[ `size $selectedLights` ] = $shape;
    }
  }

  // 返回结果是当前 selection list里all lights included in
  // current .
  return $selectedLights;
}

增强版:

pm.ls(sl=True,type='light',dag=True,leaf=True)
# Result: [nt.PointLight(u'pointLightShape1'), nt.SpotLight(u'spotLightShape1')] # 

Related How-To’s

26 Sep 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 博主赞过: