Skip to content

plugin

Base plugin class for 3DEqualizer.

Note

3dequalizer 7.1v2 uses Python 3.7.9 3dequalizer 8.0 uses Python 3.9

EqualizerCreator

Bases: Creator

Base class for creating instances in 3DEqualizer.

Source code in client/ayon_equalizer/api/plugin.py
 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
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
class EqualizerCreator(Creator):
    """Base class for creating instances in 3DEqualizer."""
    skip_discovery = True
    settings_category = "equalizer"

    def create(
        self,
        product_name: str,
        instance_data: dict,
        pre_create_data: dict,
    ) -> CreatedInstance:
        """Create a subset in the host application.

        Args:
            product_name (str): Name of the subset to create.
            instance_data (dict): Data of the instance to create.
            pre_create_data (dict): Data from the pre-create step.

        Returns:
            ayon_core.pipeline.CreatedInstance: Created instance.

        """
        self.log.debug("EqualizerCreator.create")
        product_type = instance_data.get("productType")
        if not product_type:
            product_type = self.product_base_type
        instance = CreatedInstance(
            product_base_type=self.product_base_type,
            product_type=product_type,
            product_name=product_name,
            data=instance_data,
            creator=self,
        )
        self._add_instance_to_context(instance)

        host: EqualizerHost = self.host
        host.add_publish_instance(instance.data_to_store())

        return instance

    def collect_instances(self) -> None:
        """Collect instances from the host application.

        Returns:
            list[openpype.pipeline.CreatedInstance]: List of instances.

        """
        host: EqualizerHost = self.host
        for instance_data in host.get_publish_instances():
            if instance_data["creator_identifier"] != self.identifier:
                continue
            created_instance = CreatedInstance.from_existing(
                instance_data, self
            )
            self._add_instance_to_context(created_instance)

    def update_instances(self, update_list: list[dict]) -> None:
        """Update instances in the host application."""
        host: EqualizerHost = self.host

        current_instances = host.get_publish_instances()
        cur_instances_by_id = {}
        for instance_data in current_instances:
            # sourcery skip: use-named-expression
            instance_id = instance_data.get("instance_id")
            if instance_id:
                cur_instances_by_id[instance_id] = instance_data

        for instance, changes in update_list:
            instance_data = changes.new_value
            cur_instance_data = cur_instances_by_id.get(instance.id)
            if cur_instance_data is None:
                current_instances.append(instance_data)
                continue
            for key in set(cur_instance_data) - set(instance_data):
                cur_instance_data.pop(key)
            cur_instance_data.update(instance_data)
        host.write_create_instances(current_instances)

    def remove_instances(self, instances: list[CreatedInstance]) -> None:
        """Remove instances from the host application."""
        host: EqualizerHost = self.host
        for instance in instances:
            self._remove_instance_from_context(instance)
            host.remove_create_instance(instance.id)

collect_instances()

Collect instances from the host application.

Returns:

Type Description
None

list[openpype.pipeline.CreatedInstance]: List of instances.

Source code in client/ayon_equalizer/api/plugin.py
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
def collect_instances(self) -> None:
    """Collect instances from the host application.

    Returns:
        list[openpype.pipeline.CreatedInstance]: List of instances.

    """
    host: EqualizerHost = self.host
    for instance_data in host.get_publish_instances():
        if instance_data["creator_identifier"] != self.identifier:
            continue
        created_instance = CreatedInstance.from_existing(
            instance_data, self
        )
        self._add_instance_to_context(created_instance)

create(product_name, instance_data, pre_create_data)

Create a subset in the host application.

Parameters:

Name Type Description Default
product_name str

Name of the subset to create.

required
instance_data dict

Data of the instance to create.

required
pre_create_data dict

Data from the pre-create step.

required

Returns:

Type Description
CreatedInstance

ayon_core.pipeline.CreatedInstance: Created instance.

Source code in client/ayon_equalizer/api/plugin.py
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
def create(
    self,
    product_name: str,
    instance_data: dict,
    pre_create_data: dict,
) -> CreatedInstance:
    """Create a subset in the host application.

    Args:
        product_name (str): Name of the subset to create.
        instance_data (dict): Data of the instance to create.
        pre_create_data (dict): Data from the pre-create step.

    Returns:
        ayon_core.pipeline.CreatedInstance: Created instance.

    """
    self.log.debug("EqualizerCreator.create")
    product_type = instance_data.get("productType")
    if not product_type:
        product_type = self.product_base_type
    instance = CreatedInstance(
        product_base_type=self.product_base_type,
        product_type=product_type,
        product_name=product_name,
        data=instance_data,
        creator=self,
    )
    self._add_instance_to_context(instance)

    host: EqualizerHost = self.host
    host.add_publish_instance(instance.data_to_store())

    return instance

remove_instances(instances)

Remove instances from the host application.

Source code in client/ayon_equalizer/api/plugin.py
102
103
104
105
106
107
def remove_instances(self, instances: list[CreatedInstance]) -> None:
    """Remove instances from the host application."""
    host: EqualizerHost = self.host
    for instance in instances:
        self._remove_instance_from_context(instance)
        host.remove_create_instance(instance.id)

update_instances(update_list)

Update instances in the host application.

Source code in client/ayon_equalizer/api/plugin.py
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
def update_instances(self, update_list: list[dict]) -> None:
    """Update instances in the host application."""
    host: EqualizerHost = self.host

    current_instances = host.get_publish_instances()
    cur_instances_by_id = {}
    for instance_data in current_instances:
        # sourcery skip: use-named-expression
        instance_id = instance_data.get("instance_id")
        if instance_id:
            cur_instances_by_id[instance_id] = instance_data

    for instance, changes in update_list:
        instance_data = changes.new_value
        cur_instance_data = cur_instances_by_id.get(instance.id)
        if cur_instance_data is None:
            current_instances.append(instance_data)
            continue
        for key in set(cur_instance_data) - set(instance_data):
            cur_instance_data.pop(key)
        cur_instance_data.update(instance_data)
    host.write_create_instances(current_instances)

ExtractScriptBase

Bases: OptionalPyblishPluginMixin

Base class for extract script plugins.

Source code in client/ayon_equalizer/api/plugin.py
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
class ExtractScriptBase(OptionalPyblishPluginMixin):
    """Base class for extract script plugins."""

    hide_reference_frame = False
    export_uv_textures = False
    overscan_percent_width = 100
    overscan_percent_height = 100
    units = "mm"

    @classmethod
    def apply_settings(
            cls, project_settings: dict,
            system_settings: dict) -> None:  # noqa: ARG003
        """Apply settings from the configuration."""
        settings = project_settings["equalizer"]["publish"][
            "ExtractMatchmoveScriptMaya"]

        cls.hide_reference_frame = settings.get(
            "hide_reference_frame", cls.hide_reference_frame)
        cls.export_uv_textures = settings.get(
            "export_uv_textures", cls.export_uv_textures)
        cls.overscan_percent_width = settings.get(
            "overscan_percent_width", cls.overscan_percent_width)
        cls.overscan_percent_height = settings.get(
            "overscan_percent_height", cls.overscan_percent_height)
        cls.units = settings.get("units", cls.units)

    @classmethod
    def get_attribute_defs(cls) -> list:
        """Get attribute definitions for the plugin."""
        defs = super().get_attribute_defs()

        defs.extend([
            BoolDef("hide_reference_frame",
                    label="Hide Reference Frame",
                    default=cls.hide_reference_frame),
            BoolDef("export_uv_textures",
                    label="Export UV Textures",
                    default=cls.export_uv_textures),
            NumberDef("overscan_percent_width",
                      label="Overscan Width %",
                      default=cls.overscan_percent_width,
                      decimals=0,
                      minimum=1,
                      maximum=1000),
            NumberDef("overscan_percent_height",
                      label="Overscan Height %",
                      default=cls.overscan_percent_height,
                      decimals=0,
                      minimum=1,
                      maximum=1000),
            EnumDef("units",
                    ["mm", "cm", "m", "in", "ft", "yd"],
                    default=cls.units,
                    label="Units"),
            BoolDef("point_sets",
                    label="Export Point Sets",
                    default=True),
            BoolDef("export_2p5d",
                    label="Export 2.5D Points",
                    default=True),
        ])
        return defs

apply_settings(project_settings, system_settings) classmethod

Apply settings from the configuration.

Source code in client/ayon_equalizer/api/plugin.py
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
@classmethod
def apply_settings(
        cls, project_settings: dict,
        system_settings: dict) -> None:  # noqa: ARG003
    """Apply settings from the configuration."""
    settings = project_settings["equalizer"]["publish"][
        "ExtractMatchmoveScriptMaya"]

    cls.hide_reference_frame = settings.get(
        "hide_reference_frame", cls.hide_reference_frame)
    cls.export_uv_textures = settings.get(
        "export_uv_textures", cls.export_uv_textures)
    cls.overscan_percent_width = settings.get(
        "overscan_percent_width", cls.overscan_percent_width)
    cls.overscan_percent_height = settings.get(
        "overscan_percent_height", cls.overscan_percent_height)
    cls.units = settings.get("units", cls.units)

get_attribute_defs() classmethod

Get attribute definitions for the plugin.

Source code in client/ayon_equalizer/api/plugin.py
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
@classmethod
def get_attribute_defs(cls) -> list:
    """Get attribute definitions for the plugin."""
    defs = super().get_attribute_defs()

    defs.extend([
        BoolDef("hide_reference_frame",
                label="Hide Reference Frame",
                default=cls.hide_reference_frame),
        BoolDef("export_uv_textures",
                label="Export UV Textures",
                default=cls.export_uv_textures),
        NumberDef("overscan_percent_width",
                  label="Overscan Width %",
                  default=cls.overscan_percent_width,
                  decimals=0,
                  minimum=1,
                  maximum=1000),
        NumberDef("overscan_percent_height",
                  label="Overscan Height %",
                  default=cls.overscan_percent_height,
                  decimals=0,
                  minimum=1,
                  maximum=1000),
        EnumDef("units",
                ["mm", "cm", "m", "in", "ft", "yd"],
                default=cls.units,
                label="Units"),
        BoolDef("point_sets",
                label="Export Point Sets",
                default=True),
        BoolDef("export_2p5d",
                label="Export 2.5D Points",
                default=True),
    ])
    return defs