From bbf4957f47fb550ed7f39248a43537f6ca1bfd8d Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Sun, 4 Aug 2019 20:18:20 +0200 Subject: [PATCH] feat(nuke): adding outut node for later use in Load Precomp --- .../nuke/publish/collect_active_viewer.py | 1 + .../nuke/publish/extract_ouput_node.py | 42 +++++++++++++++++++ .../plugins/nuke/publish/remove_ouput_node.py | 22 ++++++++++ 3 files changed, 65 insertions(+) create mode 100644 pype/plugins/nuke/publish/extract_ouput_node.py create mode 100644 pype/plugins/nuke/publish/remove_ouput_node.py diff --git a/pype/plugins/nuke/publish/collect_active_viewer.py b/pype/plugins/nuke/publish/collect_active_viewer.py index 3bcc1367f3..5dc17d8768 100644 --- a/pype/plugins/nuke/publish/collect_active_viewer.py +++ b/pype/plugins/nuke/publish/collect_active_viewer.py @@ -12,3 +12,4 @@ class CollectActiveViewer(pyblish.api.ContextPlugin): def process(self, context): context.data["ViewerProcess"] = nuke.ViewerProcess.node() + context.data["ActiveViewer"] = nuke.activeViewer() diff --git a/pype/plugins/nuke/publish/extract_ouput_node.py b/pype/plugins/nuke/publish/extract_ouput_node.py new file mode 100644 index 0000000000..4d7533f010 --- /dev/null +++ b/pype/plugins/nuke/publish/extract_ouput_node.py @@ -0,0 +1,42 @@ +import nuke +import pyblish.api +from avalon.nuke import maintained_selection + +class CreateOutputNode(pyblish.api.ContextPlugin): + """Adding output node for each ouput write node + So when latly user will want to Load .nk as LifeGroup or Precomp + Nuke will not complain about missing Output node + """ + label = 'Output Node Create' + order = pyblish.api.ExtractorOrder + 0.4 + families = ["workfile"] + hosts = ['nuke'] + + def process(self, context): + # capture selection state + with maintained_selection(): + # deselect all allNodes + self.log.info(context.data["ActiveViewer"]) + + active_viewer = context.data["ActiveViewer"] + active_input = active_viewer.activeInput() + active_node = active_viewer.node() + + + last_viewer_node = active_node.input(active_input) + + name = last_viewer_node.name() + self.log.info("Node name: {}".format(name)) + + # select only instance render node + last_viewer_node['selected'].setValue(True) + output_node = nuke.createNode("Output") + + # deselect all and select the original selection + output_node['selected'].setValue(False) + + # save script + nuke.scriptSave() + + # add node to instance node list + context.data["outputNode"] = output_node diff --git a/pype/plugins/nuke/publish/remove_ouput_node.py b/pype/plugins/nuke/publish/remove_ouput_node.py new file mode 100644 index 0000000000..a5e80e511b --- /dev/null +++ b/pype/plugins/nuke/publish/remove_ouput_node.py @@ -0,0 +1,22 @@ +import nuke +import pyblish.api + + +class RemoveOutputNode(pyblish.api.ContextPlugin): + """Removing output node for each ouput write node + + """ + label = 'Output Node Remove' + order = pyblish.api.IntegratorOrder + families = ["workfile"] + hosts = ['nuke'] + + def process(self, context): + try: + output_node = context.data["outputNode"] + name = output_node["name"].value() + self.log.info("Removing output node: '{}'".format(name)) + + nuke.delete(output_node) + except Exception: + return