mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-26 05:42:15 +01:00
adding menu.py and colorspace setting
This commit is contained in:
parent
925ece4a5c
commit
484d674b42
4 changed files with 128 additions and 26 deletions
|
|
@ -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..")
|
||||
|
|
|
|||
|
|
@ -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
12
pype/nuke/menu.py
Normal 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)
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue