Example #1
0
    def process(self, instance):
        import os
        from maya import cmds
        from pyblish_starter import api

        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        filename = "source.ma"

        path = os.path.join(dirname, filename)

        # Perform extraction
        self.log.info("Performing extraction..")
        cmds.file(path,
                  force=True,
                  typ="mayaAscii",
                  exportAll=True,
                  preserveReferences=False,
                  constructionHistory=True)

        # Store reference for integration
        if "files" not in instance.data:
            instance.data["files"] = list()

        instance.data["files"].append(filename)
        instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {path}".format(**locals()))
Example #2
0
    def process(self, instance):
        import os
        from maya import cmds
        from mindbender import api
        from pyblish_maya import maintained_selection

        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            time=instance.context.data["time"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        filename = "{name}.ma".format(**instance.data)

        path = os.path.join(dirname, filename)

        # Perform extraction
        self.log.info("Performing extraction..")
        with maintained_selection():
            self.log.info("Extracting %s" % str(list(instance)))
            cmds.select(instance, noExpand=True)
            cmds.file(
                path,
                force=True,
                typ="mayaAscii",
                exportSelected=True,
                preserveReferences=False,

                # Shader assignment is the responsibility of
                # riggers, for animators, and lookdev, for rendering.
                shader=False,

                # Construction history inherited from collection
                # This enables a selective export of nodes relevant
                # to this particular plug-in.
                constructionHistory=False)

        # Store reference for integration
        if "files" not in instance.data:
            instance.data["files"] = list()

        instance.data["files"].append(filename)
        instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {path}".format(**locals()))
Example #3
0
    def process(self, instance):
        import os
        from maya import cmds
        from mindbender import api, maya

        self.log.debug("Loading plug-in..")
        cmds.loadPlugin("AbcExport.mll", quiet=True)

        self.log.info("Extracting animation..")
        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            time=instance.context.data["time"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        filename = "{name}.abc".format(**instance.data)

        maya.export_alembic(
            nodes=instance,
            file=os.path.join(dirname, filename).replace("\\", "/"),
            frame_range=(instance.data["startFrame"],
                         instance.data["endFrame"]),

            # Include UVs
            write_uv=True,

            # Include Visibility
            write_visibility=True,

            # Include all attributes prefixed with this
            attribute_prefix="mb")

        # Store reference for integration
        if "files" not in instance.data:
            instance.data["files"] = list()

        instance.data["files"].append(filename)
        instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {dirname}".format(**locals()))
    def process(self, instance):
        import os
        from maya import cmds
        from pyblish_starter import api, maya

        self.log.debug("Loading plug-in..")
        cmds.loadPlugin("AbcExport.mll", quiet=True)

        self.log.info("Extracting animation..")
        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        filename = "{name}.abc".format(**instance.data)

        maya.export_alembic(nodes=instance,
                            file=os.path.join(dirname,
                                              filename).replace("\\", "/"),
                            frame_range=(cmds.playbackOptions(query=True,
                                                              ast=True),
                                         cmds.playbackOptions(query=True,
                                                              aet=True)),
                            uv_write=True)

        # Store reference for integration
        if "files" not in instance.data:
            instance.data["files"] = list()

        instance.data["files"].append(filename)
        instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {dirname}".format(**locals()))
Example #5
0
    def process(self, instance):
        import os
        import contextlib
        from mindbender import api
        from pyblish_maya import maintained_selection

        from maya import cmds

        @contextlib.contextmanager
        def sliced_connections():
            connections = list()

            try:
                # Slice connection from A -/> B
                for input_ in cmds.sets("in_SET", query=True):
                    shape = cmds.listRelatives(input_, shapes=True)[0]
                    dst = shape + ".inMesh"

                    for src in cmds.listConnections(dst, plugs=True):
                        pair = src, dst
                        cmds.disconnectAttr(*pair)
                        connections.append(pair)

                yield

            finally:
                # Restore connection
                for src, dst in connections:
                    cmds.connectAttr(src, dst, force=True)

        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            time=instance.context.data["time"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        self.log.info("Extracting lookdev..")
        filename = "{name}.ma".format(**instance.data)
        path = os.path.join(dirname, filename)

        with contextlib.nested(sliced_connections(), maintained_selection()):

            # Export
            cmds.select(instance, noExpand=True)

            cmds.file(
                path,
                force=True,
                type="mayaAscii",
                exportSelected=True,
                preserveReferences=False,
                constructionHistory=True,
            )

            # Store reference for integration
            if "files" not in instance.data:
                instance.data["files"] = list()

            instance.data["files"].append(filename)
            instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {path}".format(**locals()))
Example #6
0
    def process(self, instance):
        import os
        import json

        from mindbender import api
        from mindbender.maya import lib
        from pyblish_maya import maintained_selection

        from maya import cmds

        dirname = api.format_staging_dir(
            root=instance.context.data["workspaceDir"],
            time=instance.context.data["time"],
            name=instance.data["name"])

        try:
            os.makedirs(dirname)
        except OSError:
            pass

        filename = "{name}.json".format(**instance.data)

        path = os.path.join(dirname, filename)

        self.log.info("Serialising shaders..")
        relationships = lib.serialise_shaders(instance)

        self.log.info("Extracting serialisation..")
        with open(path, "w") as f:
            json.dump(
                relationships,
                f,

                # This makes the output human-readable,
                # by padding lines to look visually pleasing.
                indent=4
            )

        # Store reference for integration
        if "files" not in instance.data:
            instance.data["files"] = list()

        instance.data["files"].append(filename)

        # Write individual shaders
        # TODO(marcus): How about exporting 1 scene, and
        # maintaining a reference to the shader node name,
        # as opposed to the file?
        self.log.info("Extracting shaders..")
        filename = "{name}.ma".format(**instance.data)
        path = os.path.join(dirname, filename)

        with maintained_selection():
            cmds.select(relationships.keys(), replace=True, noExpand=True)
            cmds.file(path,
                      force=True,
                      options="v=0;",
                      type="mayaAscii",
                      preserveReferences=False,
                      exportSelected=True,
                      constructionHistory=False)

        instance.data["files"].append(filename)
        instance.data["stagingDir"] = dirname

        self.log.info("Extracted {instance} to {path}".format(**locals()))