示例#1
0
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(name="animationDefault",
                asset=ASSET_NAME,
                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

    container = maya.load(representation)
    nodes = cmds.sets(container, query=True)
    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")
示例#2
0
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(name="modelDefault",
                asset=ASSET_NAME,
                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)
示例#3
0
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(name="modelDefault",
                asset=ASSET_NAME,
                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"])

    container = maya.load(representation)
    nodes = cmds.sets(container, query=True)
    assembly = cmds.ls(nodes, assemblies=True)[0]
    assert_equals(assembly, "Bruce_01_: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(
        name="rigDefault",
        asset=os.environ["AVALON_ASSET"],
        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"])

    container = maya.load(representation)
    nodes = cmds.sets(container, query=True)
    assembly = cmds.ls(nodes, assemblies=True)[0]
    assert_equals(assembly, "Bruce_01_:rigDefault")
示例#4
0
    def process(self, name, namespace, context, data):
        from maya import cmds
        from avalon import maya, api

        cmds.loadPlugin("atomImportExport.mll", quiet=True)

        # Load the rig using the RigLoader
        loader = {
            Loader.__name__: Loader
            for Loader in api.discover(avalon.maya.Loader)
        }.get("RigLoader", None)
        if loader is None:
            raise RuntimeError("Unable to find RigLoader")

        rig = context["representation"]["dependencies"][0]
        container = maya.load(
            loader,
            rig,
            name=name,
            namespace=namespace,

            # Skip creation of Animation instance
            data={"post_process": False})

        try:
            control_set = next(node
                               for node in cmds.sets(container, query=True)
                               if node.endswith("controls_SET"))
        except StopIteration:
            raise TypeError("%s is missing controls_SET")

        cmds.select(control_set)
        options = ";".join([
            "",
            "",
            "targetTime=3",
            "option=insert",
            "match=hierarchy",
            "selected=selectedOnly",
            "search=",
            "replace=",
            "prefix=",
            "suffix=",
            "mapFile=",
        ])

        cmds.select(
            control_set,
            replace=True,

            # Support controllers being embedded in
            # additional selection sets.
            noExpand=False)

        nodes = cmds.file(
            self.fname,
            i=True,
            type="atomImport",
            renameAll=True,
            namespace=namespace,
            options=options,
            returnNewNodes=True,
        )

        self[:] = nodes + cmds.sets(container, query=True) + [container]

        # Trigger post process only if it's not been set to disabled
        if data.get("post_process", True):
            self._post_process(name, namespace, context, data)