adding menu.py and colorspace setting

This commit is contained in:
Jakub Jezek 2018-11-27 08:27:49 +01:00
parent 925ece4a5c
commit 484d674b42
4 changed files with 128 additions and 26 deletions

View file

@ -2,20 +2,22 @@ import os
import sys
from avalon import api as avalon
from pyblish import api as pyblish
from pype.api import Logger
# import logging
from ..api import Logger
from pype.nuke import menu
import nuke
# removing logger handler created in avalon_core
loggers = [handler
for handler in Logger.logging.root.handlers[:]]
if len(loggers) > 2:
Logger.logging.root.removeHandler(loggers[0])
for name, handler in [(handler.get_name(), handler)
for handler in Logger.logging.root.handlers[:]]:
if "pype" not in str(name).lower():
Logger.logging.root.removeHandler(handler)
log = Logger.getLogger(__name__, "nuke")
AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype")
PARENT_DIR = os.path.dirname(__file__)
PACKAGE_DIR = os.path.dirname(PARENT_DIR)
PLUGINS_DIR = os.path.join(PACKAGE_DIR, "plugins")
@ -38,35 +40,57 @@ class NukeHandler(Logger.logging.Handler):
def __init__(self):
Logger.logging.Handler.__init__(self)
self.set_name("Pype_Nuke_Handler")
def emit(self, record):
# Formated message:
msg = self.format(record)
# if record.levelname.lower() is "warning":
# nuke.warning(msg)
elif record.levelname.lower() in ["critical", "fatal", "error"]:
nuke.message(record.message)
# elif record.levelname.lower() is "info":
# log.info(msg)
#
# elif record.levelname.lower() is "debug":
# log.debug(msg)
# else:
# sys.stdout.write(msg)
if record.levelname.lower() in [
"warning",
"critical",
"fatal",
"error"
]:
nuke.message(msg)
'''Adding Nuke Logging Handler'''
nuke_handler = NukeHandler()
log.addHandler(nuke_handler)
if nuke_handler.get_name() \
not in [handler.get_name()
for handler in Logger.logging.root.handlers[:]]:
Logger.logging.getLogger().addHandler(nuke_handler)
if not self.nLogger:
self.nLogger = log
self.nLogger = Logger
def reload_config():
"""Attempt to reload pipeline at run-time.
CAUTION: This is primarily for development and debugging purposes.
"""
import importlib
for module in (
"{}".format(AVALON_CONFIG),
"{}.nuke".format(AVALON_CONFIG),
"{}.nuke.lib".format(AVALON_CONFIG),
"{}.nuke.menu".format(AVALON_CONFIG)
):
log.info("Reloading module: {}...".format(module))
module = importlib.import_module(module)
try:
reload(module)
except Exception:
importlib.reload(module)
def install():
reload_config()
log.info("Registering Nuke plug-ins..")
pyblish.register_plugin_path(PUBLISH_PATH)
avalon.register_plugin_path(avalon.Loader, LOAD_PATH)
@ -86,6 +110,8 @@ def install():
avalon.data["familiesStateDefault"] = False
avalon.data["familiesStateToggled"] = family_states
menu.install()
def uninstall():
log.info("Deregistering Nuke plug-ins..")

View file

@ -1,10 +1,13 @@
import sys
from pprint import pprint
from avalon.vendor.Qt import QtGui
import avalon.nuke
from app.api import Logger
import nuke
log = Logger.getLogger(__name__, "nuke")
self = sys.modules[__name__]
self._project = None
@ -58,3 +61,59 @@ def get_additional_data(container):
]
return {"color": QtGui.QColor().fromRgbF(rgba[0], rgba[1], rgba[2])}
def check_viewers(viewer):
filter_knobs = [
"viewerProcess",
"wipe_position"
]
viewers = [n for n in nuke.allNodes() if n.Class() == 'Viewer']
erased_viewers = []
for v in viewers:
v['viewerProcess'].setValue(str(viewer.viewerProcess))
if str(viewer.viewerProcess) not in v['viewerProcess'].value():
copy_inputs = v.dependencies()
copy_knobs = {k: v[k].value() for k in v.knobs()
if k not in filter_knobs}
pprint(copy_knobs)
# delete viewer with wrong settings
erased_viewers.append(v['name'].value())
nuke.delete(v)
# create new viewer
nv = nuke.createNode("Viewer")
# connect to original inputs
for i, n in enumerate(copy_inputs):
nv.setInput(i, n)
# set coppied knobs
for k, v in copy_knobs.items():
print(k, v)
nv[k].setValue(v)
# set viewerProcess
nv['viewerProcess'].setValue(str(viewer.viewerProcess))
if erased_viewers:
log.warning(
"Attention! Viewer nodes {} were erased."
"It had wrong color profile".format(erased_viewers))
def set_colorspace():
from app.api import Templates
t = Templates(type=["colorspace"])
colorspace = t.colorspace
nuke_colorspace = getattr(colorspace, "nuke", None)
check_viewers(nuke_colorspace.viewer)
try:
for key in nuke_colorspace:
log.info("{}".format(key))
except TypeError:
log.error("Nuke is not in templates! \n\n\n"
"contact your supervisor!")

12
pype/nuke/menu.py Normal file
View file

@ -0,0 +1,12 @@
import nuke
from avalon.api import Session
from pype.nuke import lib
def install():
menubar = nuke.menu("Nuke")
menu = menubar.findItem(Session["AVALON_LABEL"])
menu.addSeparator()
menu.addCommand("Set colorspace...", lib.set_colorspace)

View file

@ -1,7 +1,9 @@
import os
from pprint import pprint
import avalon.api
import avalon.nuke
import nuke
from app import api
class CrateWriteExr(avalon.api.Creator):
@ -12,12 +14,15 @@ class CrateWriteExr(avalon.api.Creator):
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"