Skip to content

extract_rig

Extract rig as Maya Scene.

ExtractRig

Bases: MayaExtractorPlugin

Extract rig as Maya Scene.

Source code in client/ayon_maya/plugins/publish/extract_rig.py
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
class ExtractRig(plugin.MayaExtractorPlugin):
    """Extract rig as Maya Scene."""

    label = "Extract Rig (Maya Scene)"
    families = ["rig"]
    scene_type = "ma"

    def process(self, instance):
        """Plugin entry point."""
        maya_settings = instance.context.data["project_settings"]["maya"]
        ext_mapping = {
            item["name"]: item["value"]
            for item in maya_settings["ext_mapping"]
        }
        if ext_mapping:
            self.log.debug("Looking in settings for scene type ...")
            # use extension mapping for first family found
            for family in self.families:
                try:
                    self.scene_type = ext_mapping[family]
                    self.log.debug(
                        "Using '.{}' as scene type".format(self.scene_type))
                    break
                except AttributeError:
                    # no preset found
                    pass
        # Define extract output file path
        dir_path = self.staging_dir(instance)
        filename = "{0}.{1}".format(instance.name, self.scene_type)
        path = os.path.join(dir_path, filename)

        # Perform extraction
        self.log.debug("Performing extraction ...")
        with maintained_selection():
            cmds.select(instance, noExpand=True)
            cmds.file(path,
                      force=True,
                      typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary",  # noqa: E501
                      exportSelected=True,
                      preserveReferences=False,
                      channels=True,
                      constraints=True,
                      expressions=True,
                      constructionHistory=True)

        if "representations" not in instance.data:
            instance.data["representations"] = []

        representation = {
            'name': self.scene_type,
            'ext': self.scene_type,
            'files': filename,
            "stagingDir": dir_path
        }
        instance.data["representations"].append(representation)

        self.log.debug("Extracted instance '%s' to: %s", instance.name, path)

process(instance)

Plugin entry point.

Source code in client/ayon_maya/plugins/publish/extract_rig.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
def process(self, instance):
    """Plugin entry point."""
    maya_settings = instance.context.data["project_settings"]["maya"]
    ext_mapping = {
        item["name"]: item["value"]
        for item in maya_settings["ext_mapping"]
    }
    if ext_mapping:
        self.log.debug("Looking in settings for scene type ...")
        # use extension mapping for first family found
        for family in self.families:
            try:
                self.scene_type = ext_mapping[family]
                self.log.debug(
                    "Using '.{}' as scene type".format(self.scene_type))
                break
            except AttributeError:
                # no preset found
                pass
    # Define extract output file path
    dir_path = self.staging_dir(instance)
    filename = "{0}.{1}".format(instance.name, self.scene_type)
    path = os.path.join(dir_path, filename)

    # Perform extraction
    self.log.debug("Performing extraction ...")
    with maintained_selection():
        cmds.select(instance, noExpand=True)
        cmds.file(path,
                  force=True,
                  typ="mayaAscii" if self.scene_type == "ma" else "mayaBinary",  # noqa: E501
                  exportSelected=True,
                  preserveReferences=False,
                  channels=True,
                  constraints=True,
                  expressions=True,
                  constructionHistory=True)

    if "representations" not in instance.data:
        instance.data["representations"] = []

    representation = {
        'name': self.scene_type,
        'ext': self.scene_type,
        'files': filename,
        "stagingDir": dir_path
    }
    instance.data["representations"].append(representation)

    self.log.debug("Extracted instance '%s' to: %s", instance.name, path)