Fix Nuke workfile template builder so representations get loaded next to each other for a single placeholder

This commit is contained in:
Fabià Serra Arrizabalaga 2023-05-30 13:06:13 +02:00
parent a068bd9b05
commit 00b6880506
3 changed files with 25 additions and 14 deletions

View file

@ -250,7 +250,7 @@ class MayaPlaceholderLoadPlugin(PlaceholderPlugin, PlaceholderLoadMixin):
def get_placeholder_options(self, options=None):
return self.get_load_plugin_options(options)
def cleanup_placeholder(self, placeholder, failed):
def cleanup_placeholder(self, placeholder):
"""Hide placeholder, add them to placeholder set
"""
node = placeholder._scene_identifier

View file

@ -156,8 +156,10 @@ class NukePlaceholderLoadPlugin(NukePlaceholderPlugin, PlaceholderLoadMixin):
)
return loaded_representation_ids
def _before_repre_load(self, placeholder, representation):
def _before_placeholder_load(self, placeholder):
placeholder.data["nodes_init"] = nuke.allNodes()
def _before_repre_load(self, placeholder, representation):
placeholder.data["last_repre_id"] = str(representation["_id"])
def collect_placeholders(self):
@ -189,7 +191,7 @@ class NukePlaceholderLoadPlugin(NukePlaceholderPlugin, PlaceholderLoadMixin):
def get_placeholder_options(self, options=None):
return self.get_load_plugin_options(options)
def cleanup_placeholder(self, placeholder, failed):
def cleanup_placeholder(self, placeholder):
# deselect all selected nodes
placeholder_node = nuke.toNode(placeholder.scene_identifier)
@ -603,7 +605,7 @@ class NukePlaceholderCreatePlugin(
def get_placeholder_options(self, options=None):
return self.get_create_plugin_options(options)
def cleanup_placeholder(self, placeholder, failed):
def cleanup_placeholder(self, placeholder):
# deselect all selected nodes
placeholder_node = nuke.toNode(placeholder.scene_identifier)

View file

@ -1457,8 +1457,15 @@ class PlaceholderLoadMixin(object):
context_filters=context_filters
))
def _before_placeholder_load(self, placeholder):
"""Can be overridden. It's called before placeholder representations
are loaded.
"""
pass
def _before_repre_load(self, placeholder, representation):
"""Can be overriden. Is called before representation is loaded."""
"""Can be overridden. It's called before representation is loaded."""
pass
@ -1491,7 +1498,7 @@ class PlaceholderLoadMixin(object):
return output
def populate_load_placeholder(self, placeholder, ignore_repre_ids=None):
"""Load placeholder is goind to load matching representations.
"""Load placeholder is going to load matching representations.
Note:
Ignore repre ids is to avoid loading the same representation again
@ -1513,7 +1520,7 @@ class PlaceholderLoadMixin(object):
# TODO check loader existence
loader_name = placeholder.data["loader"]
loader_args = placeholder.data["loader_args"]
loader_args = self.parse_loader_args(placeholder.data["loader_args"])
placeholder_representations = self._get_representations(placeholder)
@ -1535,6 +1542,9 @@ class PlaceholderLoadMixin(object):
self.project_name, filtered_representations
)
loaders_by_name = self.builder.get_loaders_by_name()
self._before_placeholder_load(
placeholder
)
for repre_load_context in repre_load_contexts.values():
representation = repre_load_context["representation"]
repre_context = representation["context"]
@ -1547,24 +1557,24 @@ class PlaceholderLoadMixin(object):
repre_context["subset"],
repre_context["asset"],
loader_name,
loader_args
placeholder.data["loader_args"],
)
)
try:
container = load_with_repre_context(
loaders_by_name[loader_name],
repre_load_context,
options=self.parse_loader_args(loader_args)
options=loader_args
)
except Exception:
failed = True
self.load_failed(placeholder, representation)
else:
failed = False
self.load_succeed(placeholder, container)
self.cleanup_placeholder(placeholder, failed)
# Cleanup placeholder after load of all representations
self.cleanup_placeholder(placeholder)
def load_failed(self, placeholder, representation):
if hasattr(placeholder, "load_failed"):
@ -1574,7 +1584,7 @@ class PlaceholderLoadMixin(object):
if hasattr(placeholder, "load_succeed"):
placeholder.load_succeed(container)
def cleanup_placeholder(self, placeholder, failed):
def cleanup_placeholder(self, placeholder):
"""Cleanup placeholder after load of single representation.
Can be called multiple times during placeholder item populating and is
@ -1583,7 +1593,6 @@ class PlaceholderLoadMixin(object):
Args:
placeholder (PlaceholderItem): Item which was just used to load
representation.
failed (bool): Loading of representation failed.
"""
pass