一半君的总结纸

听话只听一半君

#49 怎样让MEL script 以后台进程的方式运行?

简而言之, 你不能. 因为Maya 运行 MEL commands 的时候是不允许用户输入的.

但是有些间接方式可以达到类似的效果. 我们的 H2O script里我们用了一个ProgressBar plug-in (其实就是一个显示 “n% done” 的简单小窗口,带一个普通的进度条而已) 来显示一个需要运行较长时间的script的进度. 因为这个 plug-in 是在他自己的线程里显示窗口的, 一个副作用就是当script还在运行中的时候,你也可以在Maya的UI里进行操作,这其实是比较危险的,因为如果我们选择或者删除了某个script正在操作的物体,可能会让script运行出错 .

另外一个办法是使用 scriptJobs :

// Set up a scriptJob to continue the script task whenever Maya is idle
int $backgroundJob = `scriptJob -idleEvent "continueMyScript()"`;

global proc continueMyScript()
{
  global string $whereWasI;

  eval $whereWasI;
}

global proc spitsAndSpurts( int $step )
{
  global string $whereWasI;

  switch ( $step )
  {
    case 1:
      // Do step 1 here
      $whereWasI = "spitsAndSpurts 2";
      break;

    case 2:
      // Do step 2 here
      $whereWasI = "spitsAndSpurts 3";
      break;

    // and so on...

    default:
      // Done!
      print( "spitsAndSpurts is DONE!\n" );
      $whereWasI = "";
      scriptJob -kill $backgroundJob;
  }
}

同样道理, 你最好不要改变场景里的任何东西,直到你的script完全运行完了.不然可能出错。

Tuesday, December 05, 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 博主赞过: