Skip to content

validate_transform_zero

ValidateTransformZero

Bases: MayaInstancePlugin, OptionalPyblishPluginMixin

Transforms can't have any values

To solve this issue, try freezing the transforms. So long as the transforms, rotation and scale values are zero, you're all good.

Source code in client/ayon_maya/plugins/publish/validate_transform_zero.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
88
89
90
91
class ValidateTransformZero(plugin.MayaInstancePlugin,
                            OptionalPyblishPluginMixin):
    """Transforms can't have any values

    To solve this issue, try freezing the transforms. So long
    as the transforms, rotation and scale values are zero,
    you're all good.

    """

    order = ValidateContentsOrder
    families = ["model"]
    label = "Transform Zero (Freeze)"
    actions = [ayon_maya.api.action.SelectInvalidAction]

    _identity = [1.0, 0.0, 0.0, 0.0,
                 0.0, 1.0, 0.0, 0.0,
                 0.0, 0.0, 1.0, 0.0,
                 0.0, 0.0, 0.0, 1.0]
    _tolerance = 1e-30
    optional = True

    @classmethod
    def get_invalid(cls, instance):
        """Returns the invalid transforms in the instance.

        This is the same as checking:
        - translate == [0, 0, 0] and rotate == [0, 0, 0] and
          scale == [1, 1, 1] and shear == [0, 0, 0]

        .. note::
            This will also catch camera transforms if those
            are in the instances.

        Returns:
            list: Transforms that are not identity matrix

        """

        transforms = cmds.ls(instance, type="transform")

        invalid = []
        for transform in transforms:
            if ('_LOC' in transform) or ('_loc' in transform):
                continue
            mat = cmds.xform(transform, q=1, matrix=True, objectSpace=True)
            if not all(abs(x - y) < cls._tolerance
                       for x, y in zip(cls._identity, mat)):
                invalid.append(transform)

        return invalid

    def process(self, instance):
        """Process all the nodes in the instance "objectSet"""
        if not self.is_active(instance.data):
            return
        invalid = self.get_invalid(instance)
        if invalid:
            names = "\n".join(
                " - {}".format(node) for node in invalid
            )

            raise PublishValidationError(
                title="Transform Zero",
                description=self.get_description(),
                message="The model publish allows no transformations. You must"
                        " 'freeze transformations'. to continue.\n\n"
                        "Nodes found with transform values:\n"
                        "{0}".format(names))

    @staticmethod
    def get_description():
        return inspect.cleandoc("""### Transform can't have any values

        The model publish allows no transformations.

        You must **freeze transformations** to continue.

        """)

get_invalid(instance) classmethod

Returns the invalid transforms in the instance.

This is the same as checking: - translate == [0, 0, 0] and rotate == [0, 0, 0] and scale == [1, 1, 1] and shear == [0, 0, 0]

.. note:: This will also catch camera transforms if those are in the instances.

Returns:

Name Type Description
list

Transforms that are not identity matrix

Source code in client/ayon_maya/plugins/publish/validate_transform_zero.py
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
@classmethod
def get_invalid(cls, instance):
    """Returns the invalid transforms in the instance.

    This is the same as checking:
    - translate == [0, 0, 0] and rotate == [0, 0, 0] and
      scale == [1, 1, 1] and shear == [0, 0, 0]

    .. note::
        This will also catch camera transforms if those
        are in the instances.

    Returns:
        list: Transforms that are not identity matrix

    """

    transforms = cmds.ls(instance, type="transform")

    invalid = []
    for transform in transforms:
        if ('_LOC' in transform) or ('_loc' in transform):
            continue
        mat = cmds.xform(transform, q=1, matrix=True, objectSpace=True)
        if not all(abs(x - y) < cls._tolerance
                   for x, y in zip(cls._identity, mat)):
            invalid.append(transform)

    return invalid

process(instance)

Process all the nodes in the instance "objectSet

Source code in client/ayon_maya/plugins/publish/validate_transform_zero.py
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def process(self, instance):
    """Process all the nodes in the instance "objectSet"""
    if not self.is_active(instance.data):
        return
    invalid = self.get_invalid(instance)
    if invalid:
        names = "\n".join(
            " - {}".format(node) for node in invalid
        )

        raise PublishValidationError(
            title="Transform Zero",
            description=self.get_description(),
            message="The model publish allows no transformations. You must"
                    " 'freeze transformations'. to continue.\n\n"
                    "Nodes found with transform values:\n"
                    "{0}".format(names))