quick dump

This commit is contained in:
aardschok 2017-10-18 17:02:36 +02:00
parent f07e0a31a4
commit 39c5bcac10
3 changed files with 35 additions and 23 deletions

View file

@ -1033,9 +1033,10 @@ def get_container_transforms(container, members=None, root=False):
Args: Args:
container (dict): the container container (dict): the container
members (list): optional and convenience argument members (list): optional and convenience argument
root (bool): return highest node in hierachy if True
Returns: Returns:
root (list / str): highest node in hierarchy root (list / str):
""" """
if not members: if not members:
@ -1043,6 +1044,8 @@ def get_container_transforms(container, members=None, root=False):
results = cmds.ls(members, type="transform", long=True) results = cmds.ls(members, type="transform", long=True)
if root: if root:
results = core.getHighestInHierarchy(results)[0] root = core.getHighestInHierarchy(results)
if root:
results = root[0]
return results return results

View file

@ -27,10 +27,12 @@ class CollectSetDress(pyblish.api.InstancePlugin):
containers = amaya.ls() containers = amaya.ls()
# Get all content from the instance # Get all content from the instance
topnode = cmds.sets(instance.name, query=True)[0]
instance_lookup = set(cmds.ls(instance, type="transform", long=True)) instance_lookup = set(cmds.ls(instance, type="transform", long=True))
data = defaultdict(list) data = defaultdict(list)
for container in containers: hierarchy_nodes = []
for i, container in enumerate(containers):
members = cmds.sets(container["objectName"], query=True) members = cmds.sets(container["objectName"], query=True)
transforms = lib.get_container_transforms(container, members) transforms = lib.get_container_transforms(container, members)
root = lib.get_container_transforms(container, root = lib.get_container_transforms(container,
@ -39,25 +41,35 @@ class CollectSetDress(pyblish.api.InstancePlugin):
if root not in instance_lookup: if root not in instance_lookup:
continue continue
# retrieve all matrix data # Retrieve all matrix data
matrix_data = self.get_matrix_data(sorted(transforms)) hierarchy = cmds.listRelatives(root, parent=True, fullPath=True)[0]
relative_hierarchy = hierarchy.replace(topnode, "*")
hierarchy_nodes.append(relative_hierarchy)
# Gather info for new data entry # Gather info for new data entry
reference_node = cmds.ls(members, type="reference")[0] reference_node = cmds.ls(members, type="reference")[0]
namespace = cmds.referenceQuery(reference_node, namespace=True) namespace = cmds.referenceQuery(reference_node, namespace=True)
representation_id = container["representation"] representation_id = container["representation"]
data[representation_id].append({
"loader": container["loader"], instance_data = {"loader": container["loader"],
"matrix": matrix_data, "hierarchy": hierarchy,
"namespace": namespace.strip(":") "namespace": namespace.strip(":")}
})
# Check if matrix differs from default and store changes
matrix_data = self.get_matrix_data(root)
if matrix_data:
instance_data["matrix"] = matrix_data
data[representation_id].append(instance_data)
instance.data["scenedata"] = dict(data) instance.data["scenedata"] = dict(data)
instance.data["hierarchy"] = list(set(hierarchy_nodes))
def get_file_rule(self, rule): def get_file_rule(self, rule):
return mel.eval('workspace -query -fileRuleEntry "{}"'.format(rule)) return mel.eval('workspace -query -fileRuleEntry "{}"'.format(rule))
def get_matrix_data(self, members): def get_matrix_data(self, node):
"""Get the matrix of all members when they are not default """Get the matrix of all members when they are not default
Each matrix which differs from the default will be stored in a Each matrix which differs from the default will be stored in a
@ -69,11 +81,8 @@ class CollectSetDress(pyblish.api.InstancePlugin):
dict dict
""" """
matrix_data = {} matrix = cmds.xform(node, query=True, matrix=True)
for idx, member in enumerate(members): if matrix == lib.DEFAULT_MATRIX:
matrix = cmds.xform(member, query=True, matrix=True) return
if matrix == lib.DEFAULT_MATRIX:
continue
matrix_data[idx] = matrix
return matrix_data return matrix

View file

@ -23,8 +23,8 @@ class ExtractSetDress(colorbleed.api.Extractor):
def process(self, instance): def process(self, instance):
parent_dir = self.staging_dir(instance) parent_dir = self.staging_dir(instance)
filename = "{}.abc".format(instance.name) hierarchy_filename = "{}.abc".format(instance.name)
path = os.path.join(parent_dir, filename) hierarchy_path = os.path.join(parent_dir, hierarchy_filename)
json_filename = "{}.json".format(instance.name) json_filename = "{}.json".format(instance.name)
json_path = os.path.join(parent_dir, json_filename) json_path = os.path.join(parent_dir, json_filename)
@ -33,10 +33,10 @@ class ExtractSetDress(colorbleed.api.Extractor):
json.dump(instance.data["scenedata"], filepath, ensure_ascii=False) json.dump(instance.data["scenedata"], filepath, ensure_ascii=False)
self.log.info("Extracting point cache ..") self.log.info("Extracting point cache ..")
cmds.select(instance) cmds.select(cmds.ls(instance.data["hierarchy"], long=True))
# Run basic alembic exporter # Run basic alembic exporter
extract_alembic(file=path, extract_alembic(file=hierarchy_path,
startFrame=1.0, startFrame=1.0,
endFrame=1.0, endFrame=1.0,
**{"step": 1.0, **{"step": 1.0,
@ -46,7 +46,7 @@ class ExtractSetDress(colorbleed.api.Extractor):
"uvWrite": True, "uvWrite": True,
"selection": True}) "selection": True})
instance.data["files"] = [json_path, path] instance.data["files"] = [json_path, hierarchy_path]
# Remove data # Remove data
instance.data.pop("scenedata", None) instance.data.pop("scenedata", None)