zoukankan      html  css  js  c++  java
  • PostSceneRead 事件和MSceneMessage::kAfterFileRead 的关系和区别

    在很多时候,我们需要在某个操作发生的时候处理一些自定义的任务,这个时候我们就需要用到MMessage类型来注册一些回调函数 callback.

    对于使用过MMessage的开发者来说,这个是很容易理解的,但Maya同时也提供了一些内部的事件来给开发者调用,这个是通过MEventMessage类型来实现的。用户可以通过MEventMessage::addEventCallback()来注册一个Maya内部的事件,具体函数如下:

    MCallbackId MEventMessage::addEventCallback ( const MString & eventName,
      MMessage::MBasicFunction func,
      void * clientData = NULL,
      MStatus * ReturnStatus = NULL
    )

    其中第一个字符串参数就是Maya内部的事件名称,我们这里要说的PostSceneRead也就是其中的一个内部事件,开发者可以通过 getEventNames 函数或者Mel命令 scriptJob -listEvents 去获取所有的内部事件。

    讲完了Maya的内部事件,让我们回到主题来看下PostSceneRead 内部事件和MSceneMessage::kAfterFileRead 事件到底是否完全一致呢?还是有啥区别?

    参考官方文档如下:

    PostSceneRead:
      after a scene has been read. Specifically after a file open, import or all child references have been read.

    kAfterFileRead
      Called immediately after any file read operation (open, import or reference) and while reading state (MFileIO::isReadingFile) is true.

    初步看起来,两者似乎一致,都是在文件打开,导入或者引用的时候被触发,但是通过实际测试,发现两者在引用的时候是不一样的,如文档所示,PostSceneRead 回调函数只会在所有的引用都被读入后才触发一次,但是kAfterFileRead会在每一个引用文件被读入时触发。举个例子:如果文件 main.ma 引用了 ref1.ma和ref2.ma, 那如果打开main.ma 时候,PostSceneRead回调只会在主文件和所有引用文件都读入的时候被触发一次;但是kAfterFileRead回调会在每个引用文件被读入时调用,也就先调用两次,并在最后文件全部读入时再调用一次,一共三次。

    所以如果您要对每个引用文件在读入时单独进行处理的话,请使用kAfterFileRead 。

  • 相关阅读:
    VS Code 快捷键(中英文对照版)
    一些网络资源
    VS Code插件
    Angular for TypeScript 语法快速指南 (基于2.0.0版本)
    Angular2 中的依赖包详解
    《ECMAScript 6 入门》阮一峰
    《JavaScript 标准参考教程》阮一峰
    Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器
    由angular命令行工具(angular-cli)生成的目录和文件
    Angular 4.x 修仙之路
  • 原文地址:https://www.cnblogs.com/johnonsoftware/p/3536139.html
Copyright © 2011-2022 走看看