| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  | import bpy | 
					
						
							|  |  |  | import typing | 
					
						
							|  |  |  | from . import UTIL_naming_convension, UTIL_functions, UTIL_icons_manager | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BBP_OT_regulate_objects_name(bpy.types.Operator): | 
					
						
							|  |  |  |     """Regulate Objects Name by Virtools Group and Naming Convention""" | 
					
						
							|  |  |  |     bl_idname = "bbp.regulate_objects_name" | 
					
						
							|  |  |  |     bl_label = "Regulate Objects Name" | 
					
						
							|  |  |  |     bl_options = {'UNDO'} | 
					
						
							| 
									
										
										
										
											2025-01-11 21:36:11 +08:00
										 |  |  |     bl_translation_context = 'BBP_OT_regulate_objects_name' | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def invoke(self, context, event): | 
					
						
							|  |  |  |         wm = context.window_manager | 
					
						
							|  |  |  |         return wm.invoke_confirm(self, event) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def execute(self, context): | 
					
						
							|  |  |  |         _rename_core( | 
					
						
							|  |  |  |             UTIL_naming_convension.VirtoolsGroupConvention.parse_from_object, | 
					
						
							|  |  |  |             UTIL_naming_convension.YYCToolchainConvention.set_to_object | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         return {'FINISHED'} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BBP_OT_auto_grouping(bpy.types.Operator): | 
					
						
							|  |  |  |     """Auto Grouping Objects by Its Name and Name Convention""" | 
					
						
							|  |  |  |     bl_idname = "bbp.auto_grouping" | 
					
						
							|  |  |  |     bl_label = "Auto Grouping" | 
					
						
							|  |  |  |     bl_options = {'UNDO'} | 
					
						
							| 
									
										
										
										
											2025-01-11 21:36:11 +08:00
										 |  |  |     bl_translation_context = 'BBP_OT_auto_grouping' | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def invoke(self, context, event): | 
					
						
							|  |  |  |         wm = context.window_manager | 
					
						
							|  |  |  |         return wm.invoke_confirm(self, event) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def execute(self, context): | 
					
						
							|  |  |  |         _rename_core( | 
					
						
							|  |  |  |             UTIL_naming_convension.YYCToolchainConvention.parse_from_object, | 
					
						
							|  |  |  |             UTIL_naming_convension.VirtoolsGroupConvention.set_to_object | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         return {'FINISHED'} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BBP_OT_convert_to_imengyu(bpy.types.Operator): | 
					
						
							|  |  |  |     """Convert Objects Name from YYC Convention to Imengyu Convention.""" | 
					
						
							|  |  |  |     bl_idname = "bbp.convert_to_imengyu" | 
					
						
							|  |  |  |     bl_label = "Convert to Imengyu" | 
					
						
							|  |  |  |     bl_options = {'UNDO'} | 
					
						
							| 
									
										
										
										
											2025-01-11 21:36:11 +08:00
										 |  |  |     bl_translation_context = 'BBP_OT_convert_to_imengyu' | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def invoke(self, context, event): | 
					
						
							|  |  |  |         wm = context.window_manager | 
					
						
							|  |  |  |         return wm.invoke_confirm(self, event) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def execute(self, context): | 
					
						
							|  |  |  |         _rename_core( | 
					
						
							|  |  |  |             UTIL_naming_convension.YYCToolchainConvention.parse_from_object, | 
					
						
							|  |  |  |             UTIL_naming_convension.ImengyuConvention.set_to_object | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |         return {'FINISHED'} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _rename_core( | 
					
						
							|  |  |  |     fct_get_info: typing.Callable[[bpy.types.Object, UTIL_naming_convension.RenameErrorReporter], UTIL_naming_convension.BallanceObjectInfo | None], | 
					
						
							|  |  |  |     ftc_set_info: typing.Callable[[bpy.types.Object, UTIL_naming_convension.BallanceObjectInfo, UTIL_naming_convension.RenameErrorReporter], bool] | 
					
						
							|  |  |  |     ) -> None: | 
					
						
							|  |  |  |     # get selected objects. allow nested collection | 
					
						
							|  |  |  |     selected_objects: typing.Iterable[bpy.types.Object] = bpy.context.view_layer.active_layer_collection.collection.all_objects | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     # create reporter | 
					
						
							|  |  |  |     with UTIL_naming_convension.RenameErrorReporter() as reporter: | 
					
						
							|  |  |  |         # iterate objects | 
					
						
							|  |  |  |         for obj in selected_objects: | 
					
						
							|  |  |  |             reporter.enter_object(obj) | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             # try get info | 
					
						
							|  |  |  |             info: UTIL_naming_convension.BallanceObjectInfo | None = fct_get_info(obj, reporter) | 
					
						
							|  |  |  |             if info is not None: | 
					
						
							|  |  |  |                 # if info is valid, try assign it | 
					
						
							|  |  |  |                 if not ftc_set_info(obj, info, reporter): | 
					
						
							|  |  |  |                     reporter.add_error('Fail to set info to object.') | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 reporter.add_error('Fail to get info from object.') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # end obj process | 
					
						
							|  |  |  |             reporter.leave_object(obj) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # report data | 
					
						
							| 
									
										
										
										
											2025-01-20 22:38:29 +08:00
										 |  |  |         tr_text_title: str = bpy.app.translations.pgettext_rpt('Rename System Report', 'BBP/OP_OBJECT_naming_convention._rename_core()') | 
					
						
							| 
									
										
										
										
											2025-01-12 15:15:29 +08:00
										 |  |  |         tr_text_1: str = bpy.app.translations.pgettext_rpt('View console to get more detail', 'BBP/OP_OBJECT_naming_convention._rename_core()') | 
					
						
							|  |  |  |         tr_text_2: str = bpy.app.translations.pgettext_rpt('All: {0}', 'BBP/OP_OBJECT_naming_convention._rename_core()') | 
					
						
							|  |  |  |         tr_text_3: str = bpy.app.translations.pgettext_rpt('Failed: {0}', 'BBP/OP_OBJECT_naming_convention._rename_core()') | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  |         UTIL_functions.message_box( | 
					
						
							|  |  |  |             ( | 
					
						
							| 
									
										
										
										
											2025-01-12 15:15:29 +08:00
										 |  |  |                 tr_text_1, | 
					
						
							|  |  |  |                 tr_text_2.format(reporter.get_all_objs_count()), | 
					
						
							|  |  |  |                 tr_text_3.format(reporter.get_failed_objs_count()) | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  |             ), | 
					
						
							| 
									
										
										
										
											2025-01-20 22:38:29 +08:00
										 |  |  |             tr_text_title, | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  |             UTIL_icons_manager.BlenderPresetIcons.Info.value | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-12 11:42:09 +08:00
										 |  |  | def register() -> None: | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  |     bpy.utils.register_class(BBP_OT_regulate_objects_name) | 
					
						
							|  |  |  |     bpy.utils.register_class(BBP_OT_auto_grouping) | 
					
						
							|  |  |  |     bpy.utils.register_class(BBP_OT_convert_to_imengyu) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-12 11:42:09 +08:00
										 |  |  | def unregister() -> None: | 
					
						
							| 
									
										
										
										
											2023-12-31 17:35:15 +08:00
										 |  |  |     bpy.utils.unregister_class(BBP_OT_convert_to_imengyu) | 
					
						
							|  |  |  |     bpy.utils.unregister_class(BBP_OT_auto_grouping) | 
					
						
							|  |  |  |     bpy.utils.unregister_class(BBP_OT_regulate_objects_name) |