一半君的总结纸

听话只听一半君

#66 如何控制 Graph Editor 里的 Outliner 和 Graph panels?

Graph Editor 在MEL script里被定义成 scriptedPanelType:

C:\Program Files\Autodesk\Maya2014\scripts\startup\initScriptedPanels.mel

具体是在下面这个script里创建的:

C:\Program Files\Autodesk\Maya2014\scripts\others\graphEditorPanel.mel

他是由一个 outlinerEditor 和一个 animCurveEditor 组成的. Graph Editor editors 里显示的内容是由 selectionConnections 控制的. 下面是他们协同作用的概述:

  • outlinerEditor 的 -mainListConnection flag里指定了他由 “graphEditorList” 控制.  “mainListConnection” 决定了哪些物体属性会出现在 editor 的列表里.
  • The outlinerEditor 的 -selectionConnection 指定了一个 selectionConnection object (他是随着 GraphEditor的 scriptedPanel 创建的时候随之创建的). 他会 “通知”  animCurveEditor 当前哪些属性在 Outliner 里被选中了, 然后 animCurveEditor 就会相应的随之改变自身显示的内容.
  • 依据上面的推理, animCurveEditor 也在他自己的 -mainListConnection flag里指定了同一个outlinerEditor的 selectionConnection. 所以当你在 outlinerEditor里选择了某个物体属性的话,他将会随之«出现» 在 animCurveEditor里.

所以, 不管你是想得到 Graph Editor 里当前选了什么,或是想在他里面选什么, 都得通过控制他的Outliner的-selectionConnection 来达到. 这将直接导致相应的属性的曲线在Graph Editor的 animCurveEditor里随之被 “选中”  , 这是因为有上面写到的selectionConnection的关系.

首先,你得知道如何在Graph Editor里选中某个物体:

Graph Editor的 scriptedPanelType 是 “graphEditor“:

getPanel -scriptType "graphEditor";
// Result: graphEditor1 //

上面得到的是 scripted panel, 而不是panel的 editor(s). 现在可以打开 “graphEditorPanel.mel” script里面看看. 你会发现 自动桌使用了固定的( hardcoded)的名字来命名 Graph Editor的 editors :

string $graphEd = ($whichPanel + "GraphEd");
string $outlineEd = ($whichPanel + "OutlineEd");
string $outlineConn = ($whichPanel + "FromOutliner");

从第一个开始他们分别是:  animCurveEditor, outlinerEditor 和 outlinerEditor使用的 selectionConnection .  $whichPanel variable 是 scripted panel的 main control 的名字; 例如.

scriptedPanel -q -control graphEditor1;
// Result: graphEditor1Window|TearOffPane|graphEditor1 //

注意只有在GraphEditor当前可见的时候,上面的命令才能得到一个有效的返回值.

如果你想偷个懒, 你可以假设他们的名字分别是:

      animCurveEditor: "graphEditor1GraphEd"
       outlinerEditor: "graphEditor1OutlineEd"
  selectionConnection: "graphEditor1FromOutliner"

举例

查询在Graph Editor的 Outliner里列出的物体的名字:

string $graphEditorObjects[] = `selectionConnection -q -object graphEditorList`;

查询在Graph Editor的 Outliner里哪些物体被选中了:

string $graphEditorSelection[] = `selectionConnection -q -object graphEditor1FromOutliner`;

你可以像下面这样来替换 Maya的 global selection,所以当你选中outliner里的某些物体时,他们同时也会显示在 Channel Box里:

select $graphEditorSelection;

To clear the selection of the Graph Editor:

selectionConnection -e -clear graphEditor1FromOutliner;

取消 Graph Editor 里选择的所有物体:

string $graphEditorObjects[] = `selectionConnection -q -object graphEditorList`;

for ( $object in $graphEditorObjects )
{
  selectionConnection -e -select $object graphEditor1FromOutliner;
}

替换 Graph Editor 里当前显示的物体为 pSphere1 并且在animCurveEditor里显示他的 .translateY channel :

select -r pSphere1;   // Maya的 global selection 控制着
                      // 在 Graph Editor的 Outliner里显示的物体

selectionConnection -e -clear graphEditor1FromOutliner;
selectionConnection -e -select pSphere1.translateY graphEditor1FromOutliner;

如果想选中 animCurveEditor里的物体, 可以用 ‘selectKey’ MEL command:

// 在graph里选择 sphere的 .translateY channel
selectKey pSphere1_translateY;

// 清空 graph 选择
selectKey -clear;

// 选择.translateY channel上的 112 到 180 之间的所有keys.
// 注意你得事先自己得到animCurve的名字.
selectKey -add -t "112:180" pSphere1_translateY ;

Related How-To’s

06 March 2003

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