Skip to content

validate_yeti_rig_input_in_instance

ValidateYetiRigInputShapesInInstance

Bases: MayaInstancePlugin, OptionalPyblishPluginMixin

Validate if all input nodes are part of the instance's hierarchy

Source code in client/ayon_maya/plugins/publish/validate_yeti_rig_input_in_instance.py
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
class ValidateYetiRigInputShapesInInstance(plugin.MayaInstancePlugin,
                                           OptionalPyblishPluginMixin):
    """Validate if all input nodes are part of the instance's hierarchy"""

    order = ValidateContentsOrder
    families = ["yetiRig"]
    label = "Yeti Rig Input Shapes In Instance"
    actions = [ayon_maya.api.action.SelectInvalidAction]
    optional = False

    def process(self, instance):
        if not self.is_active(instance.data):
            return
        invalid = self.get_invalid(instance)
        if invalid:
            raise PublishValidationError("Yeti Rig has invalid input meshes")

    @classmethod
    def get_invalid(cls, instance):

        input_set = next((i for i in instance if i == "input_SET"), None)
        assert input_set, "Current %s instance has no `input_SET`" % instance

        # Get all children, we do not care about intermediates
        input_nodes = cmds.ls(cmds.sets(input_set, query=True), long=True)
        dag = cmds.ls(input_nodes, dag=True, long=True)
        shapes = cmds.ls(dag, long=True, shapes=True, noIntermediate=True)

        # Allow publish without input meshes.
        if not shapes:
            cls.log.debug("Found no input meshes for %s, skipping ..."
                          % instance)
            return []

        # check if input node is part of groomRig instance
        instance_lookup = set(instance[:])
        invalid = [s for s in shapes if s not in instance_lookup]

        return invalid