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
|