Skip to content

load_usd

FusionLoadUSD

Bases: LoaderPlugin

Load USD into Fusion

Support for USD was added since Fusion 18.5

Source code in client/ayon_fusion/plugins/load/load_usd.py
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class FusionLoadUSD(load.LoaderPlugin):
    """Load USD into Fusion

    Support for USD was added since Fusion 18.5
    """

    product_types = {"*"}
    representations = {"*"}
    extensions = {"usd", "usda", "usdz"}

    label = "Load USD"
    order = -10
    icon = "code-fork"
    color = "orange"

    tool_type = "uLoader"

    @classmethod
    def apply_settings(cls, project_settings):
        super(FusionLoadUSD, cls).apply_settings(project_settings)
        if cls.enabled:
            # Enable only in Fusion 18.5+
            fusion = get_fusion_module()
            version = fusion.GetVersion()
            major = version[1]
            minor = version[2]
            is_usd_supported = (major, minor) >= (18, 5)
            cls.enabled = is_usd_supported

    def load(self, context, name, namespace, data):
        # Fallback to folder name when namespace is None
        if namespace is None:
            namespace = context["folder"]["name"]

        # Create the Loader with the filename path set
        comp = get_current_comp()
        with comp_lock_and_undo_chunk(comp, "Create tool"):

            path = self.fname

            args = (-32768, -32768)
            tool = comp.AddTool(self.tool_type, *args)
            tool["Filename"] = path

            imprint_container(tool,
                              name=name,
                              namespace=namespace,
                              context=context,
                              loader=self.__class__.__name__)

    def switch(self, container, context):
        self.update(container, context)

    def update(self, container, context):

        tool = container["_tool"]
        assert tool.ID == self.tool_type, f"Must be {self.tool_type}"
        comp = tool.Comp()

        repre_entity = context["representation"]
        path = get_representation_path(repre_entity)

        with comp_lock_and_undo_chunk(comp, "Update tool"):
            tool["Filename"] = path

            # Update the imprinted representation
            tool.SetData("avalon.representation", repre_entity["id"])

    def remove(self, container):
        tool = container["_tool"]
        assert tool.ID == self.tool_type, f"Must be {self.tool_type}"
        comp = tool.Comp()

        with comp_lock_and_undo_chunk(comp, "Remove tool"):
            tool.Delete()