使用回调时避免不必要地弄脏场景

有时,回调可能很有用,例如,在执行“文件 > 新建”(File > New)、“保存”(Save)或“加载”(Load)后,可以使用回调来自动执行重复任务或设置工作环境。例如,这种应用包括在执行“文件 > 新建”(File > New)后设置节点监察员或回调以从文件加载设置,或创建模板环境。但是,这些操作可能会导致场景不必要地变脏,这可能会使用户产生混淆,在不需要保存场景时认为需要保存场景。

若要解决此问题,可以使用 ` file -modified “true”|”false” ` 命令和标志重置场景的脏状况。

例如,请参考 Maya 安装目录中的 $MAYA_LOCATION/scripts/others/supportRenderers.mel 文件。

加载新场景时,Maya 会检查当前渲染器是否可用,如果不可用,Maya 会将当前渲染器设置为首选渲染器。此 setAttr 操作会导致场景变脏。如果只是打开了文件而未进行其他修改,则不必弄脏场景。

以下代码段执行下列操作:

{
    int $wasModified = `file -query -modified`;
    setAttr
        "defaultRenderGlobals.currentRenderer"
        -type "string"
        $preferredRenderer;
    // If the scene wasn't dirtied prior to setting the current renderer,
    // we want to set the scene as not modified to avoid dirtying the scene.
    if (!$wasModified)
    {
        file -modified false;
    }
}