mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
from avalon import api
|
|
|
|
|
|
class AssemblyLoader(api.Loader):
|
|
|
|
families = ["assembly"]
|
|
representations = ["json"]
|
|
|
|
label = "Load Set Dress"
|
|
order = -9
|
|
icon = "code-fork"
|
|
color = "orange"
|
|
|
|
def load(self, context, name, namespace, data):
|
|
|
|
from avalon.maya.pipeline import containerise
|
|
from avalon.maya import lib
|
|
|
|
asset = context['asset']['name']
|
|
namespace = namespace or lib.unique_namespace(
|
|
asset + "_",
|
|
prefix="_" if asset[0].isdigit() else "",
|
|
suffix="_",
|
|
)
|
|
|
|
from pype import setdress_api
|
|
|
|
containers = setdress_api.load_package(filepath=self.fname,
|
|
name=name,
|
|
namespace=namespace)
|
|
|
|
self[:] = containers
|
|
|
|
# Only containerize if any nodes were loaded by the Loader
|
|
nodes = self[:]
|
|
if not nodes:
|
|
return
|
|
|
|
return containerise(
|
|
name=name,
|
|
namespace=namespace,
|
|
nodes=nodes,
|
|
context=context,
|
|
loader=self.__class__.__name__)
|
|
|
|
def update(self, container, representation):
|
|
|
|
from pype import setdress_api
|
|
return setdress_api.update_package(container,
|
|
representation)
|
|
|
|
def remove(self, container):
|
|
"""Remove all sub containers"""
|
|
|
|
from avalon import api
|
|
from pype import setdress_api
|
|
import maya.cmds as cmds
|
|
|
|
# Remove all members
|
|
member_containers = setdress_api.get_contained_containers(container)
|
|
for member_container in member_containers:
|
|
self.log.info("Removing container %s",
|
|
member_container['objectName'])
|
|
api.remove(member_container)
|
|
|
|
# Remove alembic hierarchy reference
|
|
# TODO: Check whether removing all contained references is safe enough
|
|
members = cmds.sets(container['objectName'], query=True) or []
|
|
references = cmds.ls(members, type="reference")
|
|
for reference in references:
|
|
self.log.info("Removing %s", reference)
|
|
fname = cmds.referenceQuery(reference, filename=True)
|
|
cmds.file(fname, removeReference=True)
|
|
|
|
# Delete container and its contents
|
|
if cmds.objExists(container['objectName']):
|
|
members = cmds.sets(container['objectName'], query=True) or []
|
|
cmds.delete([container['objectName']] + members)
|
|
|
|
# TODO: Ensure namespace is gone
|