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 .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 StudioHieroでPythonスタートアップスクリプトを使用する方法の詳細については、次の記事を参照してください。Q100142 :起動時にNukeStudioHiero Pythonコードを実行する方法

glob モジュールの詳細については、Python のドキュメントを参照してください。

Nukeで PySide6 を使用する方法については、 こちらでいくつか情報を見つけることができますが、詳細についてはQt for Python のドキュメントを参照する必要があります。

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください