Implement get_container_members and fix #2507

- Remove special hardcoded case for "look" family where looks were still getting all nodes added to avalon container
- Refactor shader assignment + mayalookassigner logic to use new `get_container_members` logic to still work as intended.
This commit is contained in:
Roy Nieterau 2022-01-09 21:53:02 +01:00
parent 7ecfda3566
commit 027a642f8a
3 changed files with 17 additions and 27 deletions

View file

@ -153,24 +153,15 @@ class ReferenceLoader(api.Loader):
nodes = self[:]
if not nodes:
return
# FIXME: there is probably better way to do this for looks.
if "look" in self.families:
loaded_containers.append(containerise(
name=name,
namespace=namespace,
nodes=nodes,
context=context,
loader=self.__class__.__name__
))
else:
ref_node = get_reference_node(nodes, self.log)
loaded_containers.append(containerise(
name=name,
namespace=namespace,
nodes=[ref_node],
context=context,
loader=self.__class__.__name__
))
ref_node = get_reference_node(nodes, self.log)
loaded_containers.append(containerise(
name=name,
namespace=namespace,
nodes=[ref_node],
context=context,
loader=self.__class__.__name__
))
c += 1
namespace = None
@ -180,18 +171,18 @@ class ReferenceLoader(api.Loader):
"""To be implemented by subclass"""
raise NotImplementedError("Must be implemented by subclass")
def update(self, container, representation):
import os
from maya import cmds
from openpype.hosts.maya.api.lib import get_container_members
node = container["objectName"]
path = api.get_representation_path(representation)
# Get reference node from container members
members = cmds.sets(node, query=True, nodesOnly=True)
members = lib.get_container_members(node)
reference_node = get_reference_node(members, self.log)
file_type = {

View file

@ -69,8 +69,10 @@ class LookLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
path = api.get_representation_path(representation)
# Get reference node from container members
members = cmds.sets(node, query=True, nodesOnly=True)
reference_node = self._get_reference_node(members)
members = openpype.hosts.maya.api.lib.get_container_members(container)
reference_node = openpype.hosts.maya.api.lib.get_reference_node(
members
)
shader_nodes = cmds.ls(members, type='shadingEngine')
orig_nodes = set(self._get_nodes_with_shader(shader_nodes))
@ -174,7 +176,6 @@ class LookLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
<list> node names
"""
import maya.cmds as cmds
# Get container members
nodes_list = []
for shader in shader_nodes:
@ -225,5 +226,3 @@ class LookLoader(openpype.hosts.maya.api.plugin.ReferenceLoader):
if cmds.getAttr("{}.verticesOnlySet".format(node)):
self.log.info("Setting %s.verticesOnlySet to False", node)
cmds.setAttr("{}.verticesOnlySet".format(node), False)
# Add new nodes of the reference to the container
cmds.sets(content, forceElement=node)

View file

@ -88,7 +88,7 @@ def get_all_asset_nodes():
# Gather all information
container_name = container["objectName"]
nodes += cmds.sets(container_name, query=True, nodesOnly=True) or []
nodes += lib.get_container_members(container_name)
return nodes
@ -199,7 +199,7 @@ def remove_unused_looks():
unused = []
for container in host.ls():
if container['loader'] == "LookLoader":
members = cmds.sets(container['objectName'], query=True)
members = lib.get_container_members(container['objectName'])
look_sets = cmds.ls(members, type="objectSet")
for look_set in look_sets:
# If the set is used than we consider this look *in use*