Q100487:如何在正在运行的 Nuke Studio / Hiero 会话中刷新任务预设

概括

本文将概述如何在正在运行的Nuke Studio / Hiero会话中刷新任务预设。

更多信息

默认情况下, Nuke StudioHiero只会在应用程序重启后刷新其任务预设。但是,通过使用 Python,您可以动态地重新加载保存在共享位置的现有任务预设,或向任务预设目录添加新的任务预设。以下是一个简单的示例,说明如何实现此操作:

 #remove all presets that are currently loaded as this prevents them being duplicated
R = hiero .exporters.registry
presetNamesToRemove = hiero .exporters.registry.processorPresetNames()

for presetName in presetNamesToRemove:
R.removeProcessorPreset(presetName)

#reload the presets in again
#where ~/.nuke/TaskPresets/16.0/ is the path to your Export Presets
R.loadPresets("~/.nuke/TaskPresets/16.0") #change this path to your Export Presets directory

 上面的代码通过查找当前已加载的任务预设列表并将其删除来工作,这样可以防止在使用hiero ()再次加载它们时出现重复

要使上述代码按原样运行,每次想要刷新任务预设时,都需要在脚本编辑器中运行它。不过,您可以将其封装成按钮或控件,从而进一步扩展其功能。例如,以下代码会将此功能添加到右键菜单中:

import hiero .core, hiero .ui, nuke , glob, os
from hiero .core import events

try:
from PySide2 import QtWidgets
from PySide2.QtWidgets import QMessageBox

except:
from PySide6 import QtWidgets
from PySide6.QtWidgets import QMessageBox
from PySide6 import QtGui as QtWidgets


class refreshTaskPresets(QtWidgets.QAction):
    def __init__(self, event): 
        QtWidgets.QAction.__init__(self, "", None) 
        self.event = event
        self.triggered.connect(self.doit)

  def doit(self):
        presetPath = os.path.expanduser("~")+"/.nuke/TaskPresets/16.0" #change this path to your Export Presets directory

        #checking if the path given path contains xml files
        if len(glob.glob(presetPath+"/*/*/*.xml")) > 1:
            
            #remove all presets that are currently loaded as this prevents them being duplicated
            R = hiero .exporters.registry

            presetNamesToRemove = hiero .exporters.registry.processorPresetNames()

            for presetName in presetNamesToRemove:
                R.removeProcessorPreset(presetName)

            #reload the presets in again
            R.loadPresets(presetPath)

            #if the path is invalid, a warning error will appear
        else:
            msgBox = QMessageBox()
            msgBox.setText("Task Presets could not be refreshed. Please check if the path set in refreshTaskPresets.py is valid: "+presetPath)
          msgBox.exec()


def AddActionToMenu(event):
    menu = event.menu
    menu.addAction("Refresh Task Presets", lambda: refreshTaskPresets(event).trigger())


events.registerInterest((events.EventType.kShowContextMenu), AddActionToMenu)


此脚本的工作原理是将第一个示例代码作为 QAction 添加到 QWidget 中。然后,它会检查用户在脚本中设置的路径(
presetPath )是否包含 XML 文件,如果包含,则刷新任务预设。如果不包含,则会向用户显示错误消息。

您可以将此脚本添加到~/.nuke/Python/Startup目录中,现在您应该可以在右键菜单中看到“刷新任务预设”选项。例如,如果您右键单击时间轴:

延伸阅读

以下文章包含有关如何查找任务预设 XML 文件的更多信息:
Q100294: Nuke StudioHiero导出预设的目录位置

您可以在以下文章中找到有关在Nuke StudioHiero中使用 Python 启动脚本的更多信息: Q100142:如何在NukeStudio启动时执行Hiero Python 代码

有关 glob 模块的更多信息,请参阅Python 文档。

您可以在这里找到一些关于在Nuke中使用 PySide6 的信息,但是,您需要参考Qt for Python 文档以获取更多信息。

    我们很遗憾听到

    请告诉我们