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/14.0/ is the path to your Export Presets
R.loadPresets("~/.nuke/TaskPresets/14.0")

 上記のコードは、現在ロードされているタスク プリセットのリストを検索し削除するだけで機能します。これにより、 hiero .exporters.registry.loadPresets()で再度ロードされたときにタスク プリセットが複製されなくなります。

上記のコードがそのまま機能するには、タスク プリセットを更新するたびにスクリプト エディターでコードを実行する必要があります。ただし、コードをボタンまたはウィジェットにラップすることで、これに基づいて構築することもできます。たとえば、次のコードはこれを右クリック メニューに追加します。

 import hiero .core, hiero .ui, nuke 
from PySide2 import QtWidgets
from PySide2.QtWidgets import QMessageBox
from hiero .core import events
import glob

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 = "~/.nuke/TaskPresets/14.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: 起動時にNukeStudioHiero Python コードを実行する方法

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

Nukeでの PySide2 の操作に関する情報はここで見つけることができますが、詳細についてはQt for Python のドキュメントを参照する必要があります

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

    理由をお聞かせください