adding CreateWrite,

updating pype.nuke modules
This commit is contained in:
Jakub Jezek 2018-11-28 22:51:45 +01:00
parent ddcb6f88de
commit 3943b0c3dc
5 changed files with 141 additions and 55 deletions

View file

@ -7,6 +7,8 @@ from .. import api as pype
from pype.nuke import menu
from .lib import create_write_node
import nuke
# removing logger handler created in avalon_core
@ -81,6 +83,7 @@ def reload_config():
"{}.templates".format(AVALON_CONFIG),
"{}.nuke".format(AVALON_CONFIG),
"{}.nuke.lib".format(AVALON_CONFIG),
"{}.nuke.templates".format(AVALON_CONFIG),
"{}.nuke.menu".format(AVALON_CONFIG)
):
log.info("Reloading module: {}...".format(module))
@ -105,6 +108,10 @@ def install():
# Disable all families except for the ones we explicitly want to see
family_states = [
"render",
"still"
"lifeGroup",
"backdrop",
"imagesequence",
"mov"
"camera",

View file

@ -1,4 +1,5 @@
import sys
from collections import OrderedDict
from pprint import pprint
from avalon.vendor.Qt import QtGui
import avalon.nuke
@ -12,6 +13,39 @@ self = sys.modules[__name__]
self._project = None
def create_write_node(name, avalon_data, data_templates):
from .templates import (
get_dataflow,
get_colorspace
)
nuke_dataflow_writes = get_dataflow(**data_templates)
nuke_colorspace_writes = get_colorspace(**data_templates)
data = OrderedDict({
"file": "pathToFile/file.exr"
})
# adding dataflow template
{data.update({k: v})
for k, v in nuke_dataflow_writes.items()
if k not in ["id", "previous"]}
# adding dataflow template
{data.update({k: v})
for k, v in nuke_colorspace_writes.items()}
data = avalon.nuke.lib.fix_data_for_node_create(data)
log.info(data)
instance = avalon.nuke.lib.add_write_node(
name,
**data
)
instance = avalon.nuke.lib.imprint(instance, avalon_data)
return instance
def update_frame_range(start, end, root=None):
"""Set Nuke script start and end frame range

35
pype/nuke/templates.py Normal file
View file

@ -0,0 +1,35 @@
from pype import api as pype
log = pype.Logger.getLogger(__name__, "nuke")
def get_dataflow(**kwarg):
host = kwarg.get("host", "nuke")
cls = kwarg.get("cls", None)
family = kwarg.get("family", None)
assert any([host, cls]), log.error("nuke.templates.get_dataflow():"
"Missing mandatory kwargs `host`, `cls`")
nuke_dataflow = getattr(pype.Dataflow, str(host), None)
nuke_dataflow_node = getattr(nuke_dataflow.nodes, str(cls), None)
if family:
nuke_dataflow_node = getattr(nuke_dataflow_node, str(family), None)
log.info("Dataflow: {}".format(nuke_dataflow_node))
return nuke_dataflow_node
def get_colorspace(**kwarg):
host = kwarg.get("host", "nuke")
cls = kwarg.get("cls", None)
family = kwarg.get("family", None)
assert any([host, cls]), log.error("nuke.templates.get_colorspace():"
"Missing mandatory kwargs `host`, `cls`")
nuke_colorspace = getattr(pype.Colorspace, str(host), None)
nuke_colorspace_node = getattr(nuke_colorspace, str(cls), None)
if family:
nuke_colorspace_node = getattr(nuke_colorspace_node, str(family), None)
log.info("Colorspace: {}".format(nuke_colorspace_node))
return nuke_colorspace_node

View file

@ -0,0 +1,65 @@
import avalon.api
import avalon.nuke
from pype.nuke import (
create_write_node
)
from pype import api as pype
log = pype.Logger.getLogger(__name__, "nuke")
class CrateWriteRender(avalon.nuke.Creator):
name = "WriteRender"
label = "Create Write Render"
hosts = ["nuke"]
family = "render"
icon = "sign-out"
def process(self):
instance = super(CrateWriteRender, self).process()
if not instance:
data_templates = {
"cls": "write",
"family": self.family
}
create_write_node(self.name, self.data, data_templates)
return
class CrateWritePrerender(avalon.nuke.Creator):
name = "WritePrerender"
label = "Create Write Prerender"
hosts = ["nuke"]
family = "prerender"
icon = "sign-out"
def process(self):
instance = super(CrateWritePrerender, self).process()
if not instance:
data_templates = {
"cls": "write",
"family": self.family
}
create_write_node(self.name, self.data, data_templates)
return None
class CrateWriteStill(avalon.nuke.Creator):
name = "WriteStill"
label = "Create Write Still"
hosts = ["nuke"]
family = "still"
icon = "image"
def process(self):
instance = super(CrateWriteStill, self).process()
if not instance:
data_templates = {
"cls": "write",
"family": self.family
}
create_write_node(self.name, self.data, data_templates)
return

View file

@ -1,55 +0,0 @@
import os
from pprint import pprint
import avalon.api
import avalon.nuke
import nuke
from app import api
class CrateWriteExr(avalon.api.Creator):
name = "Write_exr"
label = "Create Write: exr"
hosts = ["nuke"]
family = "write"
icon = "sign-out"
# TODO: create container of metadata into user knob
# TODO: if write node selected it will add metadata
# def __init__(self, *args, **kwargs):
# super(CrateWriteExr, self).__init__(*args, **kwargs)
# self.data.setdefault("subset", "this")
def process(self):
templates = api.Templates(type=["dataflow", "metadata", "colorspace"])
templates = templates.format()
pprint(templates)
# nuke = getattr(sys.modules["__main__"], "nuke", None)
data = {}
ext = "exr"
# todo: improve method of getting current environment
# todo: pref avalon.Session over os.environ
workdir = os.path.normpath(os.environ["AVALON_WORKDIR"])
filename = "{}.####.exr".format(self.name)
filepath = os.path.join(
workdir,
"render",
ext,
filename
).replace("\\", "/")
with avalon.nuke.viewer_update_and_undo_stop():
w = nuke.createNode(
"Write",
"name {}".format(self.name))
# w.knob('colorspace').setValue()
w.knob('file').setValue(filepath)
w.knob('file_type').setValue(ext)
w.knob('datatype').setValue("16 bit half")
w.knob('compression').setValue("Zip (1 scanline)")
w.knob('create_directories').setValue(True)
w.knob('autocrop').setValue(True)
return data