まとめ
この記事では、アクティブな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 .exporters.registry.loadPresets()を使用して再度ロードされたときに重複が防止されます。
上記のコードをそのまま動作させるには、タスクプリセットを更新するたびにスクリプトエディタで実行する必要があります。しかし、このコードをボタンやウィジェットにラップすることで、さらに拡張することができます。例えば、以下のコードは右クリックメニューにこれを追加します。
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 のドキュメントを参照する必要があります。
私たちはそれを聞いて申し訳ございません
理由をお聞かせください