Bases: MayaInstancePlugin
Validates that the geometry has been triangulated.
Source code in client/ayon_maya/plugins/publish/validate_skeletalmesh_triangulated.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 | class ValidateSkeletalMeshTriangulated(plugin.MayaInstancePlugin):
"""Validates that the geometry has been triangulated."""
order = ValidateContentsOrder
families = ["skeletalMesh"]
label = "Skeletal Mesh Triangulated"
optional = True
actions = [
SelectInvalidAction,
RepairAction
]
def process(self, instance):
invalid = self.get_invalid(instance)
if invalid:
raise PublishValidationError(
"The following objects needs to be triangulated: "
"{}".format(invalid))
@classmethod
def get_invalid(cls, instance):
geo = instance.data.get("geometry")
invalid = []
for obj in cmds.listRelatives(
cmds.ls(geo), allDescendents=True, fullPath=True):
n_triangles = cmds.polyEvaluate(obj, triangle=True)
n_faces = cmds.polyEvaluate(obj, face=True)
if not (isinstance(n_triangles, int) and isinstance(n_faces, int)):
continue
# We check if the number of triangles is equal to the number of
# faces for each transform node.
# If it is, the object is triangulated.
if cmds.objectType(obj, i="transform") and n_triangles != n_faces:
invalid.append(obj)
return invalid
@classmethod
def repair(cls, instance):
for node in cls.get_invalid(instance):
cmds.polyTriangulate(node)
|