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 。

  • 相关阅读:
    从万元户到千万富翁:6招助你蜕变
    16款有助于提升工作效率的工具
    8个身家百万的儿童创业者
    关于航模无刷电机发热问题的假想解决方案
    折腾了2个晚上无刷电调(ESC),电机终于转起来了,特此记录一下
    PWM占空比和分辨率(转)
    MSB与LSB(转)
    树莓派3uart wifi模块调试 (浪费了我3天时间的宝贵经验)
    USB加minicom使用串口
    【转】使用BBB的device tree和cape(重新整理版)
  • 原文地址:https://www.cnblogs.com/johnonsoftware/p/3536139.html
Copyright © 2011-2022 走看看