如何自定义 AEnewNonNumericMulti.mel 以禁用按钮?

 
 
 

请执行以下操作,以自定义 AEnewNonNumericMulti.mel,来禁用“添加新项目”按钮等按钮:

方法 1:

修改 AEnewNonNumericMulti.mel(在 runTime/scripts/AETemplates 中),以检查 $nodeName 的类型。例如,如果要在相关节点类型是“fooType”时禁用一个字段,使用以下两个语句中的一个:

int $showField = nodeType( $nodeName ) != "fooType";
int $showField = !`objectType -isa "fooType" $nodeName`;

通过给适当的 UI 控件添加标志 "-m $showField" 来适当设定每个字段的管理状态,以隐藏或显示相应字段(例如,按钮、文本、行布局)。还需要在 AEreplaceNonNumericMulti 中执行类似操作,以在使用该模板加载新节点时启用或禁用同一字段。

方法 2:

  1. AEnewNonNumericMulti.mel 复制到 originalAEnewNonNumericMulti.mel。重命名所有 foo 函数为 originalFoo。
  2. 创建您自己的 AEnewNonNumericMulti.mel 版本,并将其命名为 myAEnewNonNumericMulti.mel。重命名所有 foo 函数为 myFoo。
  3. 修改原始 AEnewNonNumericMulti.mel,以便每个函数可以调用 originalFoo 或 myFoo,这取决于节点类型(或给定栓的节点类型,就如同 AEremoveMultiElement 一样)。
  4. 需要再次在 AEreplaceNonNumericMulti 中执行类似操作,以处理使用该模板加载新节点。
警告

一旦过程正在执行中(例如,触发对 AEnewNonNumericMulti 的调用),则不应从会导致重新定义所述过程的过程中源化脚本。否则,会出现错误。

提示

某些脚本,如 finalGatherMergeFileUtils.mel,明确源化 AEnewNonNumericMulti.mel,因此无法只源化您自己的脚本版本来覆盖过程 AEnewNonNumericMulti 的定义。如要检查在哪里定义了过程,使用 whatIs

例如,如果源化自己的 AEnewNonNumericMulti.mel,并输入:

whatIs “AEnewNonNumericMulti”;

Maya 将依据 // Result: Mel procedure found in <somePath>/myAEnewNonNumericMulti.mel // 的各个行返回相应内容

但是,如果随后打开“渲染设置”(Render Settings)窗口,并选择“间接照明”(Indirect Lighting)选项卡,原始 AEnewNonNumericMulti.mel 文件将被源化,并重新定义该过程。如果现在输入:

whatIs “AEnewNonNumericMulti”;

Maya 将依据 // Result: Mel procedure found in <somePath>/runTime/scripts/AETemplates/AEnewNonNumericMulti.mel // 的各个行返回相应内容

后者确认使用的过程来自默认脚本文件,而不是来自您自己的版本。