mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
Merge pull request #5836 from BigRoy/chore/maya_remove_renderlayer_observers
This commit is contained in:
commit
f6723fa157
2 changed files with 0 additions and 200 deletions
|
|
@ -102,8 +102,6 @@ _alembic_options = {
|
||||||
INT_FPS = {15, 24, 25, 30, 48, 50, 60, 44100, 48000}
|
INT_FPS = {15, 24, 25, 30, 48, 50, 60, 44100, 48000}
|
||||||
FLOAT_FPS = {23.98, 23.976, 29.97, 47.952, 59.94}
|
FLOAT_FPS = {23.98, 23.976, 29.97, 47.952, 59.94}
|
||||||
|
|
||||||
RENDERLIKE_INSTANCE_FAMILIES = ["rendering", "vrayscene"]
|
|
||||||
|
|
||||||
|
|
||||||
DISPLAY_LIGHTS_ENUM = [
|
DISPLAY_LIGHTS_ENUM = [
|
||||||
{"label": "Use Project Settings", "value": "project_settings"},
|
{"label": "Use Project Settings", "value": "project_settings"},
|
||||||
|
|
@ -3021,194 +3019,6 @@ class shelf():
|
||||||
cmds.shelfLayout(self.name, p="ShelfLayout")
|
cmds.shelfLayout(self.name, p="ShelfLayout")
|
||||||
|
|
||||||
|
|
||||||
def _get_render_instances():
|
|
||||||
"""Return all 'render-like' instances.
|
|
||||||
|
|
||||||
This returns list of instance sets that needs to receive information
|
|
||||||
about render layer changes.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
list: list of instances
|
|
||||||
|
|
||||||
"""
|
|
||||||
objectset = cmds.ls("*.id", long=True, exactType="objectSet",
|
|
||||||
recursive=True, objectsOnly=True)
|
|
||||||
|
|
||||||
instances = []
|
|
||||||
for objset in objectset:
|
|
||||||
if not cmds.attributeQuery("id", node=objset, exists=True):
|
|
||||||
continue
|
|
||||||
|
|
||||||
id_attr = "{}.id".format(objset)
|
|
||||||
if cmds.getAttr(id_attr) != "pyblish.avalon.instance":
|
|
||||||
continue
|
|
||||||
|
|
||||||
has_family = cmds.attributeQuery("family",
|
|
||||||
node=objset,
|
|
||||||
exists=True)
|
|
||||||
if not has_family:
|
|
||||||
continue
|
|
||||||
|
|
||||||
if cmds.getAttr(
|
|
||||||
"{}.family".format(objset)) in RENDERLIKE_INSTANCE_FAMILIES:
|
|
||||||
instances.append(objset)
|
|
||||||
|
|
||||||
return instances
|
|
||||||
|
|
||||||
|
|
||||||
renderItemObserverList = []
|
|
||||||
|
|
||||||
|
|
||||||
class RenderSetupListObserver:
|
|
||||||
"""Observer to catch changes in render setup layers."""
|
|
||||||
|
|
||||||
def listItemAdded(self, item):
|
|
||||||
print("--- adding ...")
|
|
||||||
self._add_render_layer(item)
|
|
||||||
|
|
||||||
def listItemRemoved(self, item):
|
|
||||||
print("--- removing ...")
|
|
||||||
self._remove_render_layer(item.name())
|
|
||||||
|
|
||||||
def _add_render_layer(self, item):
|
|
||||||
render_sets = _get_render_instances()
|
|
||||||
layer_name = item.name()
|
|
||||||
|
|
||||||
for render_set in render_sets:
|
|
||||||
members = cmds.sets(render_set, query=True) or []
|
|
||||||
|
|
||||||
namespace_name = "_{}".format(render_set)
|
|
||||||
if not cmds.namespace(exists=namespace_name):
|
|
||||||
index = 1
|
|
||||||
namespace_name = "_{}".format(render_set)
|
|
||||||
try:
|
|
||||||
cmds.namespace(rm=namespace_name)
|
|
||||||
except RuntimeError:
|
|
||||||
# namespace is not empty, so we leave it untouched
|
|
||||||
pass
|
|
||||||
orignal_namespace_name = namespace_name
|
|
||||||
while(cmds.namespace(exists=namespace_name)):
|
|
||||||
namespace_name = "{}{}".format(
|
|
||||||
orignal_namespace_name, index)
|
|
||||||
index += 1
|
|
||||||
|
|
||||||
namespace = cmds.namespace(add=namespace_name)
|
|
||||||
|
|
||||||
if members:
|
|
||||||
# if set already have namespaced members, use the same
|
|
||||||
# namespace as others.
|
|
||||||
namespace = members[0].rpartition(":")[0]
|
|
||||||
else:
|
|
||||||
namespace = namespace_name
|
|
||||||
|
|
||||||
render_layer_set_name = "{}:{}".format(namespace, layer_name)
|
|
||||||
if render_layer_set_name in members:
|
|
||||||
continue
|
|
||||||
print(" - creating set for {}".format(layer_name))
|
|
||||||
maya_set = cmds.sets(n=render_layer_set_name, empty=True)
|
|
||||||
cmds.sets(maya_set, forceElement=render_set)
|
|
||||||
rio = RenderSetupItemObserver(item)
|
|
||||||
print("- adding observer for {}".format(item.name()))
|
|
||||||
item.addItemObserver(rio.itemChanged)
|
|
||||||
renderItemObserverList.append(rio)
|
|
||||||
|
|
||||||
def _remove_render_layer(self, layer_name):
|
|
||||||
render_sets = _get_render_instances()
|
|
||||||
|
|
||||||
for render_set in render_sets:
|
|
||||||
members = cmds.sets(render_set, query=True)
|
|
||||||
if not members:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# all sets under set should have the same namespace
|
|
||||||
namespace = members[0].rpartition(":")[0]
|
|
||||||
render_layer_set_name = "{}:{}".format(namespace, layer_name)
|
|
||||||
|
|
||||||
if render_layer_set_name in members:
|
|
||||||
print(" - removing set for {}".format(layer_name))
|
|
||||||
cmds.delete(render_layer_set_name)
|
|
||||||
|
|
||||||
|
|
||||||
class RenderSetupItemObserver:
|
|
||||||
"""Handle changes in render setup items."""
|
|
||||||
|
|
||||||
def __init__(self, item):
|
|
||||||
self.item = item
|
|
||||||
self.original_name = item.name()
|
|
||||||
|
|
||||||
def itemChanged(self, *args, **kwargs):
|
|
||||||
"""Item changed callback."""
|
|
||||||
if self.item.name() == self.original_name:
|
|
||||||
return
|
|
||||||
|
|
||||||
render_sets = _get_render_instances()
|
|
||||||
|
|
||||||
for render_set in render_sets:
|
|
||||||
members = cmds.sets(render_set, query=True)
|
|
||||||
if not members:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# all sets under set should have the same namespace
|
|
||||||
namespace = members[0].rpartition(":")[0]
|
|
||||||
render_layer_set_name = "{}:{}".format(
|
|
||||||
namespace, self.original_name)
|
|
||||||
|
|
||||||
if render_layer_set_name in members:
|
|
||||||
print(" <> renaming {} to {}".format(self.original_name,
|
|
||||||
self.item.name()))
|
|
||||||
cmds.rename(render_layer_set_name,
|
|
||||||
"{}:{}".format(
|
|
||||||
namespace, self.item.name()))
|
|
||||||
self.original_name = self.item.name()
|
|
||||||
|
|
||||||
|
|
||||||
renderListObserver = RenderSetupListObserver()
|
|
||||||
|
|
||||||
|
|
||||||
def add_render_layer_change_observer():
|
|
||||||
import maya.app.renderSetup.model.renderSetup as renderSetup
|
|
||||||
|
|
||||||
rs = renderSetup.instance()
|
|
||||||
render_sets = _get_render_instances()
|
|
||||||
|
|
||||||
layers = rs.getRenderLayers()
|
|
||||||
for render_set in render_sets:
|
|
||||||
members = cmds.sets(render_set, query=True)
|
|
||||||
if not members:
|
|
||||||
continue
|
|
||||||
# all sets under set should have the same namespace
|
|
||||||
namespace = members[0].rpartition(":")[0]
|
|
||||||
for layer in layers:
|
|
||||||
render_layer_set_name = "{}:{}".format(namespace, layer.name())
|
|
||||||
if render_layer_set_name not in members:
|
|
||||||
continue
|
|
||||||
rio = RenderSetupItemObserver(layer)
|
|
||||||
print("- adding observer for {}".format(layer.name()))
|
|
||||||
layer.addItemObserver(rio.itemChanged)
|
|
||||||
renderItemObserverList.append(rio)
|
|
||||||
|
|
||||||
|
|
||||||
def add_render_layer_observer():
|
|
||||||
import maya.app.renderSetup.model.renderSetup as renderSetup
|
|
||||||
|
|
||||||
print("> adding renderSetup observer ...")
|
|
||||||
rs = renderSetup.instance()
|
|
||||||
rs.addListObserver(renderListObserver)
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def remove_render_layer_observer():
|
|
||||||
import maya.app.renderSetup.model.renderSetup as renderSetup
|
|
||||||
|
|
||||||
print("< removing renderSetup observer ...")
|
|
||||||
rs = renderSetup.instance()
|
|
||||||
try:
|
|
||||||
rs.removeListObserver(renderListObserver)
|
|
||||||
except ValueError:
|
|
||||||
# no observer set yet
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
def update_content_on_context_change():
|
def update_content_on_context_change():
|
||||||
"""
|
"""
|
||||||
This will update scene content to match new asset on context change
|
This will update scene content to match new asset on context change
|
||||||
|
|
|
||||||
|
|
@ -580,20 +580,11 @@ def on_save():
|
||||||
lib.set_id(node, new_id, overwrite=False)
|
lib.set_id(node, new_id, overwrite=False)
|
||||||
|
|
||||||
|
|
||||||
def _update_render_layer_observers():
|
|
||||||
# Helper to trigger update for all renderlayer observer logic
|
|
||||||
lib.remove_render_layer_observer()
|
|
||||||
lib.add_render_layer_observer()
|
|
||||||
lib.add_render_layer_change_observer()
|
|
||||||
|
|
||||||
|
|
||||||
def on_open():
|
def on_open():
|
||||||
"""On scene open let's assume the containers have changed."""
|
"""On scene open let's assume the containers have changed."""
|
||||||
|
|
||||||
from openpype.widgets import popup
|
from openpype.widgets import popup
|
||||||
|
|
||||||
utils.executeDeferred(_update_render_layer_observers)
|
|
||||||
|
|
||||||
# Validate FPS after update_task_from_path to
|
# Validate FPS after update_task_from_path to
|
||||||
# ensure it is using correct FPS for the asset
|
# ensure it is using correct FPS for the asset
|
||||||
lib.validate_fps()
|
lib.validate_fps()
|
||||||
|
|
@ -630,7 +621,6 @@ def on_new():
|
||||||
with lib.suspended_refresh():
|
with lib.suspended_refresh():
|
||||||
lib.set_context_settings()
|
lib.set_context_settings()
|
||||||
|
|
||||||
utils.executeDeferred(_update_render_layer_observers)
|
|
||||||
_remove_workfile_lock()
|
_remove_workfile_lock()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue