一半君的总结纸

听话只听一半君

#41 如何使用MEL模拟Frame Selected(f键) 和 Frame All(a键)的快捷键功能?

Maya的对应这两个功能的内建命令( built-in command )是 viewFit. 使用前你必须选中一些物体,然后你才能按f来”Frame Selected”.

比如, 你想在当前的camera view里只 “frame selected” 物体 “pSphere1” :

select -r pSphere1;
viewFit;

在当前的 camera view里”frame all”:

viewFit -all;

Maya在你按 ‘f’ 或者 ‘a’ 键的时候调用的内部的MEL script在 “fitPanel.mel“里. 他需要一个 string 参数– “−all” 或者 “−selected” (虽然其他任何都可以,只要不是 “−all” 都被认为是”−selected“).

这个script 会自己知道你是在 model views 里还是在其他各种 editors/panels里. 如果在其他的 editors 里,他其实是在调用不同的命令来达到 framing selected items的效果的.

综上, 你需要加到你的script里的那行命令应该是:

// 在当前鼠标指针下方的panel里Frame selected
fitPanel -selected;

// 在当前鼠标指针下方的panel里Frame all
fitPanel -all;

fitPanel’ procedure 只影响当前鼠标指针下的panel , 不管他是不是当前激活的窗口(with active focus).

自己指定要Framing 的 Panels

如果你想在一个特定的panel里进行 “fit” 操作,而不管鼠标指针当前在哪里, 你可以这样:

  1. 找到所有当前存在的panel( instance(s) ).
  2. 在其中找到你想进行“fit”的panel instance.
  3. 使用这种 panel type的 命令格式来进行 view fit.

上面这几步操作的示例在 “fitPanel.mel” script里可以找到(显然啊,这个script就是为了此目的被写出来的).

举例

Perspective Camera ( 或者任意其他 Camera)

这种情况下我们不用做前两步. 当 camera view you can use the ‘viewFit’ command which accepts the name of a camera.

  1. 找到所有当前存在的panel( instance(s) ).
  2. 在其中找到你想进行“fit”的panel instance.
  3. 使用这种 panel type的 命令格式来进行 view fit.
      // 在 persp camera view里Frame selected items
      viewFit persp;
    

HyperGraph

      1. 找到所有当前存在的panel( instance(s) ).
          string $hyperGraphPanels[] = `getPanel -scriptType hyperGraphPanel`;
          // Result: hyperGraphPanel1 hyperGraphPanel2 //
        
      2. 在其中找到你想进行“fit”的panel instance.默认的 HyperGraph panel 的label是 “Hypergraph”; 如果你还有其他的一个tearoff copies , 那他的label则会是 “Hyper Graph Panel 2″, 以此类推.(lz在2014里试了下,现在似乎默认的HyperGraph的label变成“Hypergraph Hierarchy”了,如果你新打开一个HyperGraph,他也有可能是”Hypergraph InputOutput”, 取决于你选的是哪个菜单)
          string $mainHyperGraph = "";
          for ( $panel in $hyperGraphPanels )
          {
            // 查找 main HyperGraph panel
            if ( "Hypergraph" == `scriptedPanel -q -label $panel` )
            {
              $mainHyperGraph = $panel;
              break;
            }
          }
          // Result: hyperGraphPanel1 //
        
      3. 使用这种 panel type 相应的命令格式来进行 view fit. 如果是 HyperGraph, 那你该用的 MEL command 是 ‘hyperGraph’. 但是他的使用方法有点绕. 因为你平时使用的HyperGraph 其实是一个位于scriptedPanel里面的 ‘hyperPanel’ object . 我们上面找到的名字其实是个 scriptedPanel. Maya 的命名规范是通常是这样,如果是 hyperPanel的 editor,那他的名字会是上面找到的scriptedPanel的名字后面再加上  “HyperGraphEd” .
          // 确认我们已经找到了需要的 HyperGraph panel
          if ( "" != $mainHyperGraph )
          {
            string $hyperGraphEditor = ( $mainHyperGraph + "HyperGraphEd" );
            // 在这个 HyperGraph 里Frame selected items
            hyperGraph -e -frame $hyperGraphEditor;
        
            // frame all items 的用法是:
            // hyperGraph -e -frameGraph ...
          }
        

注意: 你可以用同样的方法在HyperShade Editor里frame selected items .同样还是用命令 ‘hyperGraph’ , 但是UI的名字是在后面添加 “HyperShadeEd” (上面举的例子里是 添加”HyperGraphEd”).

Graph Editor

Graph Editor 同样也是一个 scriptedPanel:

  1. 找到所有当前存在的panel( instance(s) ).
      string $graphEditors[] = `getPanel -scriptType graphEditor`;
      // Result: graphEditor1 graphEditor2 //
    
  2. 在其中找到你想进行“fit”的panel instance.”主”Graph Editor 的label是 “Graph Editor”; tearoff copies 的名字是像 “Graph Editor 2”, 等等这样的.
      string $mainGraphEditor = "";
      for ( $panel in $graphEditors )
      {
        // 找到 main Graph Editor
        if ( "Graph Editor" == `scriptedPanel -q -label $panel` )
        {
          $mainGraphEditor = $panel;
          break;
        }
      }
      // Result: graphEditor1 //
    
  3. 使用这种 panel type 相应的命令格式来进行 view fit. 和上面同样的, Graph Editor 也是一个 scriptedPanel, Maya 对这种内嵌的editor的命名方法是在他的名字后面加上字符串”GraphEd”. 访问他的 MEL command 是  ‘animCurveEditor’.
      if ( "" != $mainGraphEditor )
      {
        string $graphEditor = ( $mainGraphEditor + "GraphEd" );
        animCurveEditor -e -lookAt selected $graphEditor;
    
        // frame all items 的命令语法是:
        // animCurveEditor -e -lookAt all ...
      }
    

注意: 以上都是从 Maya v2.5.1 以后才有的. 不知道这些在 v3.0之后会不会有改变.(lz验证过到2014还是可以的)

Related How-To’s

Friday, September 29, 2000

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