| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | bl_info = { | 
					
						
							|  |  |  |     "name": "Ballance Blender Plugin", | 
					
						
							|  |  |  |     "description": "Ballance mapping tools for Blender", | 
					
						
							|  |  |  |     "author": "yyc12345", | 
					
						
							|  |  |  |     "version": (4, 0), | 
					
						
							|  |  |  |     "blender": (3, 6, 0), | 
					
						
							|  |  |  |     "category": "Object", | 
					
						
							|  |  |  |     "support": "COMMUNITY", | 
					
						
							|  |  |  |     "warning": "Please read document before using this plugin.", | 
					
						
							|  |  |  |     "doc_url": "https://github.com/yyc12345/BallanceBlenderHelper", | 
					
						
							|  |  |  |     "tracker_url": "https://github.com/yyc12345/BallanceBlenderHelper/issues" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #region Reload and Import | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # import core lib | 
					
						
							|  |  |  | import bpy | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  | import typing, collections | 
					
						
							| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | # reload if needed | 
					
						
							|  |  |  | if "bpy" in locals(): | 
					
						
							|  |  |  |     import importlib | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endregion | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-11 22:24:22 +08:00
										 |  |  | from . import PROP_virtools_material | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  | from . import OP_UV_flatten_uv | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #region Menu | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ===== Menu Defines ===== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BBP_MT_View3DMenu(bpy.types.Menu): | 
					
						
							|  |  |  |     """Ballance 3D operators""" | 
					
						
							|  |  |  |     bl_idname = "BBP_MT_View3DMenu" | 
					
						
							|  |  |  |     bl_label = "Ballance" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def draw(self, context): | 
					
						
							|  |  |  |         layout = self.layout | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         layout.operator(OP_UV_flatten_uv.BBP_OT_flatten_uv.bl_idname) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # ===== Menu Drawer ===== | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | MenuDrawer_t = typing.Callable[[typing.Any, typing.Any], None] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def menu_drawer_view3d(self, context): | 
					
						
							|  |  |  |     layout = self.layout | 
					
						
							|  |  |  |     layout.menu(BBP_MT_View3DMenu.bl_idname) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endregion | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | #region Register and Unregister. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  | g_Classes: tuple[typing.Any, ...] = ( | 
					
						
							|  |  |  |     OP_UV_flatten_uv.BBP_OT_flatten_uv, | 
					
						
							|  |  |  |     BBP_MT_View3DMenu, | 
					
						
							| 
									
										
										
										
											2023-10-11 22:24:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     PROP_virtools_material.BBP_PG_virtools_material, | 
					
						
							| 
									
										
										
										
											2023-10-12 22:15:21 +08:00
										 |  |  |     PROP_virtools_material.BBP_OT_apply_virtools_material, | 
					
						
							|  |  |  |     PROP_virtools_material.BBP_OT_preset_virtools_material, | 
					
						
							| 
									
										
										
										
											2023-10-11 22:24:22 +08:00
										 |  |  |     PROP_virtools_material.BBP_PT_virtools_material, | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MenuEntry(): | 
					
						
							|  |  |  |     mContainerMenu: bpy.types.Menu | 
					
						
							|  |  |  |     mIsAppend: bool | 
					
						
							|  |  |  |     mMenuDrawer: MenuDrawer_t | 
					
						
							|  |  |  |     def __init__(self, cont: bpy.types.Menu, is_append: bool, menu_func: MenuDrawer_t): | 
					
						
							|  |  |  |         self.mContainerMenu = cont | 
					
						
							|  |  |  |         self.mIsAppend = is_append | 
					
						
							|  |  |  |         self.mMenuDrawer = menu_func | 
					
						
							|  |  |  | g_Menus: tuple[MenuEntry, ...] = ( | 
					
						
							|  |  |  |      MenuEntry(bpy.types.VIEW3D_MT_editor_menus, False, menu_drawer_view3d), | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | def register() -> None: | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  |     # register all classes | 
					
						
							|  |  |  |     for cls in g_Classes: | 
					
						
							|  |  |  |         bpy.utils.register_class(cls) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-11 22:24:22 +08:00
										 |  |  |     # register properties | 
					
						
							|  |  |  |     PROP_virtools_material.register_prop() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  |     # add menu drawer | 
					
						
							|  |  |  |     for entry in g_Menus: | 
					
						
							|  |  |  |         if entry.mIsAppend: | 
					
						
							|  |  |  |             entry.mContainerMenu.append(entry.mMenuDrawer) | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             entry.mContainerMenu.prepend(entry.mMenuDrawer) | 
					
						
							| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def unregister() -> None: | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  |     # remove menu drawer | 
					
						
							|  |  |  |     for entry in g_Menus: | 
					
						
							|  |  |  |         entry.mContainerMenu.remove(entry.mMenuDrawer) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-11 22:24:22 +08:00
										 |  |  |     # unregister properties | 
					
						
							|  |  |  |     PROP_virtools_material.unregister_prop() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-10 16:01:52 +08:00
										 |  |  |     # unregister classes | 
					
						
							|  |  |  |     for cls in g_Classes: | 
					
						
							|  |  |  |         bpy.utils.unregister_class(cls) | 
					
						
							| 
									
										
										
										
											2023-10-09 22:20:21 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     register() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endregion |