概括
本文将概述如何在正在运行的Nuke Studio / Hiero会话中刷新任务预设。
更多信息
默认情况下, Nuke Studio和Hiero只会在应用程序重启后刷新其任务预设。但是,通过使用 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 Studio和Hiero导出预设的目录位置
您可以在以下文章中找到有关在Nuke Studio和Hiero中使用 Python 启动脚本的更多信息: Q100142:如何在NukeStudio启动时执行Hiero Python 代码
有关 glob 模块的更多信息,请参阅Python 文档。
您可以在这里找到一些关于在Nuke中使用 PySide6 的信息,但是,您需要参考Qt for Python 文档以获取更多信息。
我们很遗憾听到
请告诉我们