From 767bb4ba0eb7ed556fdcd4070300a79395e074b7 Mon Sep 17 00:00:00 2001 From: Roy Nieterau Date: Sun, 9 Jan 2022 22:06:12 +0100 Subject: [PATCH] Refactor more relevant code to use `lib.get_container_members` --- openpype/hosts/maya/api/lib.py | 38 ++++++++++++++++++- .../tools/mayalookassigner/vray_proxies.py | 2 +- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/openpype/hosts/maya/api/lib.py b/openpype/hosts/maya/api/lib.py index 52ebcaff64..c62a221678 100644 --- a/openpype/hosts/maya/api/lib.py +++ b/openpype/hosts/maya/api/lib.py @@ -1314,6 +1314,40 @@ def apply_attributes(attributes, nodes_by_id): set_attribute(attr, value, node) +def get_container_members(container): + """Returns the members of a container. + This includes the nodes from any loaded references in the container. + """ + if isinstance(container, dict): + # Assume it's a container dictionary + container = container["objectName"] + + members = cmds.sets(container, query=True) or [] + members = cmds.ls(members, long=True, objectsOnly=True) or [] + members = set(members) + + # Include any referenced nodes from any reference in the container + # This is required since we've removed adding ALL nodes of a reference + # into the container set and only add the reference node now. + for ref in cmds.ls(members, exactType="reference", objectsOnly=True): + + # Ignore any `:sharedReferenceNode` + if ref.rsplit(":", 1)[-1].startswith("sharedReferenceNode"): + continue + + # Ignore _UNKNOWN_REF_NODE_ (PLN-160) + if ref.rsplit(":", 1)[-1].startswith("_UNKNOWN_REF_NODE_"): + continue + + reference_members = cmds.referenceQuery(ref, nodes=True) + reference_members = cmds.ls(reference_members, + long=True, + objectsOnly=True) + members.update(reference_members) + + return members + + # region LOOKDEV def list_looks(asset_id): """Return all look subsets for the given asset @@ -1376,7 +1410,7 @@ def assign_look_by_version(nodes, version_id): container_node = pipeline.load(Loader, look_representation) # Get container members - shader_nodes = cmds.sets(container_node, query=True) + shader_nodes = get_container_members(container_node) # Load relationships shader_relation = api.get_representation_path(json_representation) @@ -1602,7 +1636,7 @@ def get_container_transforms(container, members=None, root=False): """ if not members: - members = cmds.sets(container["objectName"], query=True) + members = get_container_members(container) results = cmds.ls(members, type="transform", long=True) if root: diff --git a/openpype/tools/mayalookassigner/vray_proxies.py b/openpype/tools/mayalookassigner/vray_proxies.py index d2f345e628..f6e98f91bf 100644 --- a/openpype/tools/mayalookassigner/vray_proxies.py +++ b/openpype/tools/mayalookassigner/vray_proxies.py @@ -202,7 +202,7 @@ def load_look(version_id): container_node = api.load(loader, look_representation) # Get container members - shader_nodes = cmds.sets(container_node, query=True) + shader_nodes = lib.get_container_members(container_node) return shader_nodes