nuke: refactory publishing backdrop to new publisher

This commit is contained in:
Jakub Jezek 2022-10-03 12:58:38 +02:00
parent 495ea78414
commit 72dd122809
No known key found for this signature in database
GPG key ID: 730D7C02726179A7
3 changed files with 30 additions and 21 deletions

View file

@ -1,3 +1,4 @@
from pprint import pformat
import pyblish.api
from openpype.hosts.nuke.api import lib as pnlib
import nuke
@ -14,8 +15,14 @@ class CollectBackdrops(pyblish.api.InstancePlugin):
families = ["nukenodes"]
def process(self, instance):
self.log.debug(pformat(instance.data))
bckn = instance[0]
# new publisher way
if instance.data.get("transientData"):
bckn = instance.data["transientData"]["node"]
else:
# or backward compatible
bckn = instance[0]
# define size of the backdrop
left = bckn.xpos()
@ -23,6 +30,7 @@ class CollectBackdrops(pyblish.api.InstancePlugin):
right = left + bckn['bdwidth'].value()
bottom = top + bckn['bdheight'].value()
instance.data["transientData"]["childNodes"] = []
# iterate all nodes
for node in nuke.allNodes():
@ -37,13 +45,13 @@ class CollectBackdrops(pyblish.api.InstancePlugin):
and (node.ypos() + node.screenHeight() < bottom):
# add contained nodes to instance's node list
instance.append(node)
instance.data["transientData"]["childNodes"].append(node)
# get all connections from outside of backdrop
nodes = instance[1:]
nodes = instance.data["transientData"]["childNodes"]
connections_in, connections_out = pnlib.get_dependent_nodes(nodes)
instance.data["nodeConnectionsIn"] = connections_in
instance.data["nodeConnectionsOut"] = connections_out
instance.data["transientData"]["nodeConnectionsIn"] = connections_in
instance.data["transientData"]["nodeConnectionsOut"] = connections_out
# make label nicer
instance.data["label"] = "{0} ({1} nodes)".format(

View file

@ -26,8 +26,14 @@ class ExtractBackdropNode(publish.Extractor):
families = ["nukenodes"]
def process(self, instance):
tmp_nodes = list()
nodes = instance[1:]
tmp_nodes = []
child_nodes = instance.data["transientData"]["childNodes"]
# all connections outside of backdrop
connections_in = instance.data["transientData"]["nodeConnectionsIn"]
connections_out = instance.data["transientData"]["nodeConnectionsOut"]
self.log.debug("_ connections_in: `{}`".format(connections_in))
self.log.debug("_ connections_out: `{}`".format(connections_out))
# Define extract output file path
stagingdir = self.staging_dir(instance)
filename = "{0}.nk".format(instance.name)
@ -35,20 +41,14 @@ class ExtractBackdropNode(publish.Extractor):
# maintain selection
with maintained_selection():
# all connections outside of backdrop
connections_in = instance.data["nodeConnectionsIn"]
connections_out = instance.data["nodeConnectionsOut"]
self.log.debug("_ connections_in: `{}`".format(connections_in))
self.log.debug("_ connections_out: `{}`".format(connections_out))
# create input nodes and name them as passing node (*_INP)
# create input child_nodes and name them as passing node (*_INP)
for n, inputs in connections_in.items():
for i, input in inputs:
inpn = nuke.createNode("Input")
inpn["name"].setValue("{}_{}_INP".format(n.name(), i))
n.setInput(i, inpn)
inpn.setXYpos(input.xpos(), input.ypos())
nodes.append(inpn)
child_nodes.append(inpn)
tmp_nodes.append(inpn)
reset_selection()
@ -63,13 +63,13 @@ class ExtractBackdropNode(publish.Extractor):
if d.name() in n.name()), 0), opn)
opn.setInput(0, n)
opn.autoplace()
nodes.append(opn)
child_nodes.append(opn)
tmp_nodes.append(opn)
reset_selection()
# select nodes to copy
# select child_nodes to copy
reset_selection()
select_nodes(nodes)
select_nodes(child_nodes)
# create tmp nk file
# save file to the path
nuke.nodeCopy(path)

View file

@ -60,7 +60,8 @@ class ValidateBackdrop(pyblish.api.InstancePlugin):
actions = [SelectCenterInNodeGraph]
def process(self, instance):
connections_out = instance.data["nodeConnectionsOut"]
child_nodes = instance.data["transientData"]["childNodes"]
connections_out = instance.data["transientData"]["nodeConnectionsOut"]
msg_multiple_outputs = (
"Only one outcoming connection from "
@ -78,10 +79,10 @@ class ValidateBackdrop(pyblish.api.InstancePlugin):
self.log.debug(
"Amount of nodes on instance: {}".format(
len(instance))
len(child_nodes))
)
if len(instance) == 1:
if child_nodes == []:
raise PublishXmlValidationError(
self,
msg_no_nodes,