Skip to content

validate_skeleton_top_group_hierarchy

ValidateSkeletonTopGroupHierarchy

Bases: MayaInstancePlugin, OptionalPyblishPluginMixin

Validates top group hierarchy in the SETs Make sure the object inside the SETs are always top group of the hierarchy

Source code in client/ayon_maya/plugins/publish/validate_skeleton_top_group_hierarchy.py
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
class ValidateSkeletonTopGroupHierarchy(plugin.MayaInstancePlugin,
                                        OptionalPyblishPluginMixin):
    """Validates top group hierarchy in the SETs
    Make sure the object inside the SETs are always top
    group of the hierarchy
    """
    order = ValidateContentsOrder + 0.05
    label = "Skeleton Rig Top Group Hierarchy"
    families = ["rig.fbx"]
    optional = True

    @classmethod
    def get_attr_defs_for_instance(cls, create_context, instance):
        """Publish attribute definitions for an instance.

        Attributes available for all families in plugin's `families` attribute.

        Args:
            create_context (CreateContext): Create context.
            instance (CreatedInstance): Instance for which attributes are
                collected.

        Returns:
            list[AbstractAttrDef]: Attribute definitions for plugin.

        """
        if instance.product_base_type != "rig":
            return []

        return cls.get_attribute_defs()

    def process(self, instance):
        if not self.is_active(instance.data):
            return

        skeleton_mesh_nodes = instance.data("skeleton_mesh", [])
        if not skeleton_mesh_nodes:
            return

        invalid = get_non_root_nodes(skeleton_mesh_nodes)
        if invalid:
            raise PublishValidationError(
                "The skeletonMesh_SET includes the object which "
                "is not at the top hierarchy: {}".format(invalid))

get_attr_defs_for_instance(create_context, instance) classmethod

Publish attribute definitions for an instance.

Attributes available for all families in plugin's families attribute.

Parameters:

Name Type Description Default
create_context CreateContext

Create context.

required
instance CreatedInstance

Instance for which attributes are collected.

required

Returns:

Type Description

list[AbstractAttrDef]: Attribute definitions for plugin.

Source code in client/ayon_maya/plugins/publish/validate_skeleton_top_group_hierarchy.py
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@classmethod
def get_attr_defs_for_instance(cls, create_context, instance):
    """Publish attribute definitions for an instance.

    Attributes available for all families in plugin's `families` attribute.

    Args:
        create_context (CreateContext): Create context.
        instance (CreatedInstance): Instance for which attributes are
            collected.

    Returns:
        list[AbstractAttrDef]: Attribute definitions for plugin.

    """
    if instance.product_base_type != "rig":
        return []

    return cls.get_attribute_defs()

get_non_root_nodes(nodes)

Return all nodes that are not root nodes (they have parents)

Parameters:

Name Type Description Default
nodes list[str]

Maya nodes.

required

Returns:

Type Description

list[str]: Non-root maya node (long names)

Source code in client/ayon_maya/plugins/publish/validate_skeleton_top_group_hierarchy.py
10
11
12
13
14
15
16
17
18
19
20
21
22
def get_non_root_nodes(nodes):
    """Return all nodes that are not root nodes (they have parents)

    Arguments:
        nodes (list[str]): Maya nodes.

    Returns:
        list[str]: Non-root maya node (long names)
    """
    nodes = cmds.ls(nodes, long=True)  # ensure long names
    return [
        node for node in nodes if node.count("|") > 2
    ]