まとめ
この記事では、アクティブな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/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: 起動時にNukeStudioでHiero Python コードを実行する方法
globモジュールの詳細については、 Python のドキュメントを参照してください。
Nukeでの PySide2 の操作に関する情報はここで見つけることができますが、詳細についてはQt for Python のドキュメントを参照する必要があります。
私たちはそれを聞いて申し訳ございません
理由をお聞かせください