connect custom write node script to the OP setting

This commit is contained in:
Kayla Man 2023-06-08 00:04:41 +08:00
parent 65e5aa40cf
commit 4c4eeb29be

View file

@ -1,6 +1,11 @@
""" OpenPype custom script for setting up write nodes for non-publish """
import os
import nuke
from openpype.hosts.nuke.api.lib import set_node_knobs_from_settings
import nukescripts
from openpype.hosts.nuke.api.lib import (
set_node_knobs_from_settings,
get_nuke_imageio_settings
)
frame_padding = 5
@ -53,24 +58,76 @@ knobs_setting = {
}
def main():
write_selected_nodes = [
s for s in nuke.selectedNodes() if s.Class() == "Write"]
class WriteNodeKnobSettingPanel(nukescripts.PythonPanel):
""" Write Node's Knobs Settings Panel """
def __init__(self):
nukescripts.PythonPanel.__init__(self, "Set Knobs Value(Write Node)")
ext = None
knobs = knobs_setting["knobs"]
for knob in knobs:
if knob["name"] == "file_type":
ext = knob["value"]
for w in write_selected_nodes:
# data for mapping the path
data = {
"work": os.getenv("AVALON_WORKDIR"),
"subset": w["name"].value(),
"frame": "#" * frame_padding,
"ext": ext
}
file_path = temp_rendering_path_template.format(**data)
file_path = file_path.replace("\\", "/")
w["file"].setValue(file_path)
set_node_knobs_from_settings(w, knobs)
knobs_value = self.get_node_knobs_override()
# create knobs
self.typeKnob = nuke.Enumeration_Knob(
'override_subsets', 'override subsets', knobs_value)
# add knobs to panel
self.addKnob(self.typeKnob)
def process(self):
""" Process the panel values. """
write_selected_nodes = [
s for s in nuke.selectedNodes() if s.Class() == "Write"]
node_knobs = self.typeKnob.value()
ext = None
knobs = None
if node_knobs:
knobs = self.get_node_knobs_setting(node_knobs)
if not knobs:
nuke.message("No knobs value found in subset group..\nDefault setting will be used..") # noqa
knobs = knobs_setting["knobs"]
else:
knobs = knobs_setting["knobs"]
for knob in knobs:
if knob["name"] == "file_type":
ext = knob["value"]
for w in write_selected_nodes:
# data for mapping the path
data = {
"work": os.getenv("AVALON_WORKDIR"),
"subset": w["name"].value(),
"frame": "#" * frame_padding,
"ext": ext
}
file_path = temp_rendering_path_template.format(**data)
file_path = file_path.replace("\\", "/")
w["file"].setValue(file_path)
set_node_knobs_from_settings(w, knobs)
def get_node_knobs_setting(self, value):
settings = [
node for node in get_nuke_imageio_settings()["nodes"]["overrideNodes"]
]
if not settings:
return
for i, setting in enumerate(settings):
if value in settings[i]["subsets"]:
return settings[i]["knobs"]
def get_node_knobs_override(self):
knobs_value = []
settings = [
node for node in get_nuke_imageio_settings()["nodes"]["overrideNodes"]
]
if not settings:
return
for setting in settings:
if setting["nukeNodeClass"] == "Write" and setting["subsets"]:
for knob in setting["subsets"]:
knobs_value.append(knob)
return knobs_value
def main():
p_ = WriteNodeKnobSettingPanel()
if p_.showModalDialog():
print(p_.process())