Bases: MayaContextPlugin, OptionalPyblishPluginMixin
Check if the Maya units are set correct
Source code in client/ayon_maya/plugins/publish/validate_maya_units.py
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
120
121
122
123
124
125 | 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
scene_linear_units = context.data.get("linearUnits")
scene_angular_units = context.data.get("angularUnits")
scene_fps = context.data.get("fps")
self.log.info(f"Units (linear): {scene_linear_units}")
self.log.info(f"Units (angular): {scene_angular_units}")
self.log.info(f"Units (time): {scene_fps} FPS")
context_fps = mayalib.convert_to_maya_fps(
self._get_context_fps(context)
)
project_settings: dict = context.data["project_settings"]
linear_units, angular_units = get_scene_units_settings(
project_settings
)
invalid = []
# Check if units are correct
if (
self.validate_linear_units
and scene_linear_units
and scene_linear_units != linear_units
):
invalid.append({
"setting": "Linear units",
"required_value": linear_units,
"current_value": scene_linear_units
})
if (
self.validate_angular_units
and scene_angular_units
and scene_angular_units != angular_units
):
invalid.append({
"setting": "Angular units",
"required_value": angular_units,
"current_value": scene_angular_units
})
if self.validate_fps and scene_fps and scene_fps != context_fps:
invalid.append({
"setting": "FPS",
"required_value": context_fps,
"current_value": scene_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(f"Setting angular unit to '{angular_units}'")
cmds.currentUnit(angle=angular_units)
if cls.validate_linear_units:
cls.log.info(f"Setting linear unit to '{linear_units}'")
cmds.currentUnit(linear=linear_units)
context_fps = cls._get_context_fps(context)
cls.log.info(f"Setting time unit to match context: {context_fps}")
mayalib.set_scene_fps(context_fps)
@staticmethod
def _get_context_fps(context: pyblish.api.Context) -> float:
return context.data["taskEntity"]["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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 | @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(f"Setting angular unit to '{angular_units}'")
cmds.currentUnit(angle=angular_units)
if cls.validate_linear_units:
cls.log.info(f"Setting linear unit to '{linear_units}'")
cmds.currentUnit(linear=linear_units)
context_fps = cls._get_context_fps(context)
cls.log.info(f"Setting time unit to match context: {context_fps}")
mayalib.set_scene_fps(context_fps)
|