Bases: MayaContextPlugin
, OptionalPyblishPluginMixin
Check if the Maya units are set correct
Source code in client/ayon_maya/plugins/publish/validate_maya_units.py
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
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
126
127
128
129
130
131 | class ValidateMayaUnits(plugin.MayaContextPlugin,
OptionalPyblishPluginMixin):
"""Check if the Maya units are set correct"""
order = ValidateSceneOrder
label = "Maya Units"
actions = [RepairContextAction]
validate_linear_units = True
linear_units = "cm"
validate_angular_units = True
angular_units = "deg"
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
@classmethod
def apply_settings(cls, project_settings):
"""Apply project settings to creator"""
settings = (
project_settings["maya"]["publish"]["ValidateMayaUnits"]
)
cls.validate_linear_units = settings.get("validate_linear_units",
cls.validate_linear_units)
cls.linear_units = settings.get("linear_units", cls.linear_units)
cls.validate_angular_units = settings.get("validate_angular_units",
cls.validate_angular_units)
cls.angular_units = settings.get("angular_units", cls.angular_units)
cls.validate_fps = settings.get("validate_fps", cls.validate_fps)
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 = []
# Check if units are correct
if (
self.validate_linear_units
and linearunits
and linearunits != self.linear_units
):
invalid.append({
"setting": "Linear units",
"required_value": self.linear_units,
"current_value": linearunits
})
if (
self.validate_angular_units
and angularunits
and angularunits != self.angular_units
):
invalid.append({
"setting": "Angular units",
"required_value": self.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)"""
cls.log.info("Setting angular unit to '{}'".format(cls.angular_units))
cmds.currentUnit(angle=cls.angular_units)
current_angle = cmds.currentUnit(query=True, angle=True)
cls.log.debug(current_angle)
cls.log.info("Setting linear unit to '{}'".format(cls.linear_units))
cmds.currentUnit(linear=cls.linear_units)
current_linear = cmds.currentUnit(query=True, linear=True)
cls.log.debug(current_linear)
cls.log.info("Setting time unit to match project")
folder_entity = context.data["folderEntity"]
mayalib.set_scene_fps(folder_entity["attrib"]["fps"])
|
apply_settings(project_settings)
classmethod
Apply project settings to creator
Source code in client/ayon_maya/plugins/publish/validate_maya_units.py
38
39
40
41
42
43
44
45
46
47
48
49
50
51 | @classmethod
def apply_settings(cls, project_settings):
"""Apply project settings to creator"""
settings = (
project_settings["maya"]["publish"]["ValidateMayaUnits"]
)
cls.validate_linear_units = settings.get("validate_linear_units",
cls.validate_linear_units)
cls.linear_units = settings.get("linear_units", cls.linear_units)
cls.validate_angular_units = settings.get("validate_angular_units",
cls.validate_angular_units)
cls.angular_units = settings.get("angular_units", cls.angular_units)
cls.validate_fps = settings.get("validate_fps", cls.validate_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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131 | @classmethod
def repair(cls, context):
"""Fix the current FPS setting of the scene, set to PAL(25.0 fps)"""
cls.log.info("Setting angular unit to '{}'".format(cls.angular_units))
cmds.currentUnit(angle=cls.angular_units)
current_angle = cmds.currentUnit(query=True, angle=True)
cls.log.debug(current_angle)
cls.log.info("Setting linear unit to '{}'".format(cls.linear_units))
cmds.currentUnit(linear=cls.linear_units)
current_linear = cmds.currentUnit(query=True, linear=True)
cls.log.debug(current_linear)
cls.log.info("Setting time unit to match project")
folder_entity = context.data["folderEntity"]
mayalib.set_scene_fps(folder_entity["attrib"]["fps"])
|