def test_alembic_export(): """Exporting Alembic works""" cube, generator = cmds.polyCube(name="myCube_GEO") transform = cmds.ls(selection=True) visibility_keys = [(10, True), (20, False), (30, True)] for time, value in visibility_keys: cmds.setKeyframe(transform, time=time, attribute="visibility", value=value) maya.create("animationDefault", family="mindbender.animation", options={"useSelection": True}) cmds.file(save=True) publish() # Import and test result cmds.file(new=True, force=True) asset = io.find_one({"type": "asset", "name": ASSET_NAME}) subset = io.find_one({ "parent": asset["_id"], "type": "subset", "name": "animationDefault" }) version = io.find_one({ "parent": subset["_id"], "type": "version", "name": 1 }) assert version representation = io.find_one({ "parent": version["_id"], "type": "representation", "name": "abc" }) assert representation is not None nodes = maya.load(representation["_id"]) print("Nodes: %s" % nodes) cube = cmds.ls(nodes, type="mesh") transform = cmds.listRelatives(cube, parent=True)[0] for time, value in visibility_keys: cmds.currentTime(time, edit=True) assert cmds.getAttr(transform + ".visibility") == value, ( "Cached visibility did not match original visibility")
def process(self, project, asset, subset, version, representation): # def process(self, representation): # project, asset, subset, version = io.parenthood(representation) template = project["config"]["template"]["publish"] data = { "root": api.registered_root(), "project": project["name"], "asset": asset["name"], "silo": asset["silo"], "subset": subset["name"], "version": version["name"], "representation": representation["name"].strip("."), } fname = template.format(**data) assert os.path.exists(fname), "%s does not exist" % fname namespace = maya.unique_namespace(asset["name"], suffix="_") name = subset["name"] nodes = cmds.file(fname, namespace=namespace, reference=True, returnNewNodes=True, groupReference=True, groupName=namespace + ":" + name) # Containerising maya.containerise(name=name, namespace=namespace, nodes=nodes, asset=asset, subset=subset, version=version, representation=representation, loader=type(self).__name__) # TODO(marcus): We are hardcoding the name "out_SET" here. # Better register this keyword, so that it can be used # elsewhere, such as in the Integrator plug-in, # without duplication. output = next((node for node in nodes if node.endswith("out_SET")), None) assert output, "No output in rig, this is a bug." with maya.maintained_selection(): # Select contents of output cmds.select(output, noExpand=False) # TODO(marcus): Hardcoding the exact family here. # Better separate the relationship between loading # rigs and automatically assigning an instance to it. maya.create(name=maya.unique_name(asset["name"], suffix="_SET"), family="mindbender.animation", options={"useSelection": True}) return nodes
def test_modeling_to_rigging(): transform, generator = cmds.polyCube(name="body_PLY") group = cmds.group(transform, name="ROOT") cmds.select(group, replace=True) maya.create("modelDefault", family="mindbender.model", options={"useSelection": True}) # Comply with save validator cmds.file(save=True) publish() cmds.file(new=True, force=True) representation = io.locate( [PROJECT_NAME, ASSET_NAME, "modelDefault", 1, "ma"]) nodes = maya.load(representation) assembly = cmds.ls(nodes, assemblies=True)[0] assert_equals(assembly, "Bruce01_:modelDefault") # Rig it mesh = cmds.ls(nodes, type="mesh") transform = cmds.listRelatives(mesh, parent=True)[0] ctrl = cmds.circle(name="main_CTL") cmds.parentConstraint(ctrl, transform) cmds.select([assembly] + ctrl, replace=True) group = cmds.group(name="ROOT") cmds.select(mesh, replace=True) out_set = cmds.sets(name="out_SET") cmds.select(ctrl) controls_set = cmds.sets(name="controls_SET") cmds.select([group, out_set, controls_set], noExpand=True) maya.create("rigDefault", family="mindbender.rig", options={"useSelection": True}) cmds.file(rename="temp.ma") cmds.file(save=True) publish() cmds.file(new=True, force=True) representation = io.locate( [PROJECT_NAME, ASSET_NAME, "rigDefault", 1, "ma"]) nodes = maya.load(representation) assembly = cmds.ls(nodes, assemblies=True)[0] assert_equals(assembly, "Bruce01_:rigDefault")
def test_update(): """Updating works""" transform, generator = cmds.polyCube(name="body_PLY") group = cmds.group(transform, name="ROOT") cmds.select(group, replace=True) maya.create("modelDefault", family="mindbender.model", options={"useSelection": True}) # Comply with save validator cmds.file(save=True) publish() publish() publish() # Version 3 cmds.file(new=True, force=True) asset = io.find_one({"type": "asset", "name": ASSET_NAME}) subset = io.find_one({ "parent": asset["_id"], "type": "subset", "name": "modelDefault" }) version = io.find_one({ "parent": subset["_id"], "type": "version", "name": 2 }) assert version representation = io.find_one({ "parent": version["_id"], "type": "representation", "name": "ma" }) maya.load(representation["_id"]) container = next(maya.ls()) maya.update(container, 3)
def test_modeling(): """Modeling workflow is functional""" transform, generator = cmds.polyCube(name="body_PLY") group = cmds.group(transform, name="ROOT") cmds.select(group, replace=True) maya.create("modelDefault", family="mindbender.model", options={"useSelection": True}) # Comply with save validator cmds.file(save=True) publish() asset = io.find_one({"type": "asset", "name": ASSET_NAME}) assert asset subset = io.find_one({ "parent": asset["_id"], "type": "subset", "name": "modelDefault" }) assert subset version = io.find_one({ "parent": subset["_id"], "type": "version", }) assert version assert io.find_one({ "parent": version["_id"], "type": "representation", "name": "ma" }) is not None