mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-26 05:42:15 +01:00
Merge pull request #36 from aardschok/PLN-0033
Resolves PLN-33 * Check for loaded look based on container's representation ID * Let the loader take care of containerize etc
This commit is contained in:
commit
7c9276b699
2 changed files with 28 additions and 53 deletions
|
|
@ -798,7 +798,7 @@ def assign_look_by_version(nodes, version_id):
|
|||
|
||||
Args:
|
||||
nodes(list): nodes to assign look to
|
||||
version_id (bson.ObjectId)
|
||||
version_id (bson.ObjectId): database id of the version
|
||||
|
||||
Returns:
|
||||
None
|
||||
|
|
@ -806,23 +806,28 @@ def assign_look_by_version(nodes, version_id):
|
|||
# TODO: make `iter_loader` available in as a more global function
|
||||
from avalon.tools.cbloader import lib as loaderlib
|
||||
|
||||
# get representations of shader file and relationships
|
||||
# Get representations of shader file and relationships
|
||||
look_representation = io.find_one({"type": "representation",
|
||||
"parent": version_id,
|
||||
"name": "ma"})
|
||||
|
||||
connection_represenations = io.find_one({"type": "representation",
|
||||
"parent": version_id,
|
||||
"name": "json"})
|
||||
json_representation = io.find_one({"type": "representation",
|
||||
"parent": version_id,
|
||||
"name": "json"})
|
||||
|
||||
# Load file
|
||||
shader_filepath = api.get_representation_path(look_representation)
|
||||
shader_relation = api.get_representation_path(connection_represenations)
|
||||
|
||||
reference_node = get_reference_node(shader_filepath)
|
||||
if reference_node is None:
|
||||
log.info("Loading lookdev for the first time..")
|
||||
# See if representation is already loaded, if so reuse it.
|
||||
host = api.registered_host()
|
||||
representation_id = str(look_representation['_id'])
|
||||
for container in host.ls():
|
||||
if (container['loader'] == "LookLoader" and
|
||||
container['representation'] == representation_id):
|
||||
log.info("Reusing loaded look ..")
|
||||
container_node = container['objectName']
|
||||
break
|
||||
else:
|
||||
log.info("Using look for the first time ..")
|
||||
|
||||
# Load file
|
||||
loaders = list(loaderlib.iter_loaders(look_representation["_id"]))
|
||||
Loader = next((i for i in loaders if i.__name__ == "LookLoader"), None)
|
||||
if Loader is None:
|
||||
|
|
@ -830,16 +835,17 @@ def assign_look_by_version(nodes, version_id):
|
|||
|
||||
# Reference the look file
|
||||
with maya.maintained_selection():
|
||||
shader_nodes = pipeline.load(Loader, look_representation)
|
||||
container_node = pipeline.load(Loader, look_representation)
|
||||
|
||||
else:
|
||||
log.info("Reusing existing lookdev '{}'".format(reference_node))
|
||||
shader_nodes = cmds.referenceQuery(reference_node, nodes=True)
|
||||
# Get container members
|
||||
shader_nodes = cmds.sets(container_node, query=True)
|
||||
|
||||
# Assign relationships
|
||||
# Load relationships
|
||||
shader_relation = api.get_representation_path(json_representation)
|
||||
with open(shader_relation, "r") as f:
|
||||
relationships = json.load(f)
|
||||
|
||||
# Assign relationships
|
||||
apply_shaders(relationships, shader_nodes, nodes)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -25,44 +25,13 @@ class LookLoader(colorbleed.maya.plugin.ReferenceLoader):
|
|||
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import maya.cmds as cmds
|
||||
from avalon import maya
|
||||
import colorbleed.maya.lib as lib
|
||||
|
||||
# try / except here is to ensure that the get_reference_node
|
||||
# does not fail when the file doesn't exist yet
|
||||
reference_node = None
|
||||
try:
|
||||
reference_node = lib.get_reference_node(self.fname)
|
||||
except:
|
||||
pass
|
||||
|
||||
if reference_node is None:
|
||||
self.log.info("Loading lookdev for the first time ...")
|
||||
with maya.maintained_selection():
|
||||
nodes = cmds.file(self.fname,
|
||||
namespace=namespace,
|
||||
reference=True,
|
||||
returnNewNodes=True)
|
||||
else:
|
||||
self.log.info("Reusing existing lookdev ...")
|
||||
nodes = cmds.referenceQuery(reference_node, nodes=True)
|
||||
|
||||
# Assign shaders
|
||||
self.fname = self.fname.rsplit(".", 1)[0] + ".json"
|
||||
if not os.path.isfile(self.fname):
|
||||
self.log.warning("Look development asset "
|
||||
"has no relationship data.")
|
||||
return nodes
|
||||
|
||||
with open(self.fname) as f:
|
||||
relationships = json.load(f)
|
||||
|
||||
# Get all nodes which belong to a matching name space
|
||||
# Currently this is the safest way to get all the nodes
|
||||
# Pass empty list as nodes to assign to in order to only load
|
||||
lib.apply_shaders(relationships, nodes, [])
|
||||
with maya.maintained_selection():
|
||||
nodes = cmds.file(self.fname,
|
||||
namespace=namespace,
|
||||
reference=True,
|
||||
returnNewNodes=True)
|
||||
|
||||
self[:] = nodes
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue