Bases: MayaContextPlugin, OptionalPyblishPluginMixin
Check if the Maya units are set correct
Source code in client/ayon_maya/plugins/publish/validate_maya_units.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 | class ValidateMayaUnits(plugin.MayaContextPlugin,
OptionalPyblishPluginMixin):
"""Check if the Maya units are set correct"""
order = ValidateSceneOrder
label = "Maya Units"
actions = [RepairContextAction]
validate_linear_units = True
validate_angular_units = True
validate_fps = True
nice_message_format = (
"- <b>{setting}</b> must be <b>{required_value}</b>. "
"Your scene is set to <b>{current_value}</b>"
)
log_message_format = (
"Maya scene {setting} must be '{required_value}'. "
"Current value is '{current_value}'."
)
optional = False
def process(self, context):
if not self.is_active(context.data):
return
# Collected units
linearunits = context.data.get('linearUnits')
angularunits = context.data.get('angularUnits')
fps = context.data.get('fps')
folder_attributes = context.data["folderEntity"]["attrib"]
folder_fps = mayalib.convert_to_maya_fps(folder_attributes["fps"])
self.log.info('Units (linear): {0}'.format(linearunits))
self.log.info('Units (angular): {0}'.format(angularunits))
self.log.info('Units (time): {0} FPS'.format(fps))
invalid = []
project_settings: dict = context.data["project_settings"]
linear_units, angular_units = get_scene_units_settings(
project_settings
)
# Check if units are correct
if (
self.validate_linear_units
and linearunits
and linearunits != linear_units
):
invalid.append({
"setting": "Linear units",
"required_value": linear_units,
"current_value": linearunits
})
if (
self.validate_angular_units
and angularunits
and angularunits != angular_units
):
invalid.append({
"setting": "Angular units",
"required_value": angular_units,
"current_value": angularunits
})
if self.validate_fps and fps and fps != folder_fps:
invalid.append({
"setting": "FPS",
"required_value": folder_fps,
"current_value": fps
})
if invalid:
issues = []
for data in invalid:
self.log.error(self.log_message_format.format(**data))
issues.append(self.nice_message_format.format(**data))
issues = "\n".join(issues)
raise PublishXmlValidationError(
plugin=self,
message="Invalid maya scene units",
formatting_data={"issues": issues}
)
@classmethod
def repair(cls, context):
"""Fix the current FPS setting of the scene, set to PAL(25.0 fps)"""
linear_units, angular_units = get_scene_units_settings()
if cls.validate_angular_units:
cls.log.info("Setting angular unit to '{}'".format(angular_units))
cmds.currentUnit(angle=angular_units)
if cls.validate_linear_units:
cls.log.info("Setting linear unit to '{}'".format(linear_units))
cmds.currentUnit(linear=linear_units)
cls.log.info("Setting time unit to match project")
folder_entity = context.data["folderEntity"]
mayalib.set_scene_fps(folder_entity["attrib"]["fps"])
|
repair(context) classmethod
Fix the current FPS setting of the scene, set to PAL(25.0 fps)
Source code in client/ayon_maya/plugins/publish/validate_maya_units.py
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119 | @classmethod
def repair(cls, context):
"""Fix the current FPS setting of the scene, set to PAL(25.0 fps)"""
linear_units, angular_units = get_scene_units_settings()
if cls.validate_angular_units:
cls.log.info("Setting angular unit to '{}'".format(angular_units))
cmds.currentUnit(angle=angular_units)
if cls.validate_linear_units:
cls.log.info("Setting linear unit to '{}'".format(linear_units))
cmds.currentUnit(linear=linear_units)
cls.log.info("Setting time unit to match project")
folder_entity = context.data["folderEntity"]
mayalib.set_scene_fps(folder_entity["attrib"]["fps"])
|