#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ SUW Core Module - 核心模块集合 拆分自: suw_impl.py 用途: 将大文件拆分为可维护的模块 版本: 1.0.0 (阶段6完成 - 最终版本) 作者: SUWood Team """ import logging logger = logging.getLogger(__name__) # 尝试导入所有子模块 try: # 阶段1: 导入内存管理模块 from . import command_dispatcher as cd_module from . import dimension_manager as dim_module from . import door_drawer_manager as ddm_module from . import hardware_manager as hw_module from . import machining_manager as mach_module from . import selection_manager as sm_module from . import deletion_manager as dm_module from . import part_creator as pc_module from . import material_manager as mm_module from . import data_manager as data_module from .memory_manager import ( BlenderMemoryManager, DependencyGraphManager, memory_manager, dependency_manager, init_main_thread, execute_in_main_thread_async, execute_in_main_thread, process_main_thread_tasks, safe_blender_operation ) # 阶段1: 导入几何工具模块 from .geometry_utils import ( Point3d, Vector3d, Transformation, MAT_TYPE_NORMAL, MAT_TYPE_OBVERSE, MAT_TYPE_REVERSE, MAT_TYPE_THIN, MAT_TYPE_NATURE ) # 阶段0: 导入数据管理模块 (基础数据层) from .data_manager import ( DataManager, data_manager, init_data_manager, get_data_manager, get_zones, get_parts, get_hardwares, get_texture, sel_clear ) # 阶段2: 导入材质管理模块 from .material_manager import ( MaterialManager, material_manager, init_material_manager ) # 阶段2: 导入部件创建模块 from .part_creator import ( PartCreator, part_creator, init_part_creator ) # 阶段3: 导入加工管理模块 from .machining_manager import ( MachiningManager, machining_manager, init_machining_manager, get_machining_manager ) # 阶段3: 导入选择管理模块 from .selection_manager import ( SelectionManager, selection_manager, init_selection_manager, get_selection_manager ) # 阶段4: 导入删除管理模块 from .deletion_manager import ( DeletionManager, deletion_manager, init_deletion_manager, get_deletion_manager ) # 阶段4: 导入五金管理模块 from .hardware_manager import ( HardwareManager, hardware_manager, init_hardware_manager, get_hardware_manager ) # 阶段5: 导出门抽屉管理模块 from .door_drawer_manager import ( DoorDrawerManager, door_drawer_manager, init_door_drawer_manager, get_door_drawer_manager ) # 阶段5: 导入尺寸管理模块 from .dimension_manager import ( DimensionManager, dimension_manager, init_dimension_manager, get_dimension_manager ) # 阶段6: 导入爆炸管理模块 from .explosion_manager import ( ExplosionManager, explosion_manager, init_explosion_manager, get_explosion_manager ) # 阶段6: 导入命令分发模块 from .command_dispatcher import ( CommandDispatcher, command_dispatcher, init_command_dispatcher, get_command_dispatcher ) logger.info("✅ SUW Core 模块导入成功") except ImportError as e: logger.error(f"❌ SUW Core 模块导入失败: {e}") # 创建存根类和函数以避免错误 class StubManager: def __init__(self, name): self.name = name def __getattr__(self, name): return lambda *args, **kwargs: None # 存根管理器实例 memory_manager = StubManager("memory_manager") dependency_manager = StubManager("dependency_manager") data_manager = StubManager("data_manager") material_manager = StubManager("material_manager") part_creator = StubManager("part_creator") machining_manager = StubManager("machining_manager") selection_manager = StubManager("selection_manager") deletion_manager = StubManager("deletion_manager") hardware_manager = StubManager("hardware_manager") door_drawer_manager = StubManager("door_drawer_manager") dimension_manager = StubManager("dimension_manager") explosion_manager = StubManager("explosion_manager") command_dispatcher = StubManager("command_dispatcher") # 存根函数 def init_main_thread(): pass def execute_in_main_thread_async(func): return func def execute_in_main_thread(func): return func def process_main_thread_tasks(): pass def safe_blender_operation(func): return func def init_data_manager(): pass def get_data_manager(): return data_manager def get_zones(): return [] def get_parts(): return [] def get_hardwares(): return [] def get_texture(): return None def sel_clear(): pass def init_material_manager(): pass def init_part_creator(): pass def init_machining_manager(): pass def get_machining_manager(): return machining_manager def init_selection_manager(): pass def get_selection_manager(): return selection_manager def init_deletion_manager(): pass def get_deletion_manager(): return deletion_manager def init_hardware_manager(): pass def get_hardware_manager(): return hardware_manager def init_door_drawer_manager(): pass def get_door_drawer_manager(): return door_drawer_manager def init_dimension_manager(): pass def get_dimension_manager(): return dimension_manager def init_explosion_manager(): pass def get_explosion_manager(): return explosion_manager def init_command_dispatcher(): pass def get_command_dispatcher(): return command_dispatcher # 初始化所有管理器的函数 def init_all_managers(): """初始化所有管理器""" try: logger.info("🔧 初始化所有SUW管理器...") # 按依赖顺序初始化 init_data_manager() init_material_manager() init_part_creator() init_machining_manager() init_selection_manager() init_deletion_manager() init_hardware_manager() init_door_drawer_manager() init_dimension_manager() init_explosion_manager() init_command_dispatcher() logger.info("✅ 所有SUW管理器初始化完成") return True except Exception as e: logger.error(f"❌ 管理器初始化失败: {e}") return False # 获取所有统计信息的函数 def get_all_stats(): """获取所有管理器的统计信息""" try: stats = { "data_manager": get_data_manager().get_stats() if hasattr(get_data_manager(), 'get_stats') else {}, "material_manager": get_material_manager().get_stats() if hasattr(get_material_manager(), 'get_stats') else {}, "part_creator": get_part_creator().get_stats() if hasattr(get_part_creator(), 'get_stats') else {}, "machining_manager": get_machining_manager().get_stats() if hasattr(get_machining_manager(), 'get_stats') else {}, "selection_manager": get_selection_manager().get_stats() if hasattr(get_selection_manager(), 'get_stats') else {}, "deletion_manager": get_deletion_manager().get_stats() if hasattr(get_deletion_manager(), 'get_stats') else {}, "hardware_manager": get_hardware_manager().get_stats() if hasattr(get_hardware_manager(), 'get_stats') else {}, "door_drawer_manager": get_door_drawer_manager().get_stats() if hasattr(get_door_drawer_manager(), 'get_stats') else {}, "dimension_manager": get_dimension_manager().get_stats() if hasattr(get_dimension_manager(), 'get_stats') else {}, "explosion_manager": get_explosion_manager().get_stats() if hasattr(get_explosion_manager(), 'get_stats') else {}, "command_dispatcher": get_command_dispatcher().get_stats() if hasattr(get_command_dispatcher(), 'get_stats') else {} } return stats except Exception as e: logger.error(f"❌ 获取统计信息失败: {e}") return {} # 非阻塞启动SUWood系统 def start_suwood_non_blocking(): """非阻塞启动SUWood系统""" try: logger.info("🚀 启动SUWood系统...") # 初始化所有管理器 if not init_all_managers(): logger.error("❌ 管理器初始化失败") return False # 启动命令分发器 command_dispatcher = get_command_dispatcher() if hasattr(command_dispatcher, 'start'): command_dispatcher.start() logger.info("✅ SUWood系统启动成功") return True except Exception as e: logger.error(f"❌ SUWood系统启动失败: {e}") return False # 导出主要函数和类 __all__ = [ # 管理器实例 'memory_manager', 'dependency_manager', 'data_manager', 'material_manager', 'part_creator', 'machining_manager', 'selection_manager', 'deletion_manager', 'hardware_manager', 'door_drawer_manager', 'dimension_manager', 'explosion_manager', 'command_dispatcher', # 初始化函数 'init_all_managers', 'init_data_manager', 'init_material_manager', 'init_part_creator', 'init_machining_manager', 'init_selection_manager', 'init_deletion_manager', 'init_hardware_manager', 'init_door_drawer_manager', 'init_dimension_manager', 'init_explosion_manager', 'init_command_dispatcher', # 获取函数 'get_data_manager', 'get_material_manager', 'get_part_creator', 'get_machining_manager', 'get_selection_manager', 'get_deletion_manager', 'get_hardware_manager', 'get_door_drawer_manager', 'get_dimension_manager', 'get_explosion_manager', 'get_command_dispatcher', # 工具函数 'get_zones', 'get_parts', 'get_hardwares', 'get_texture', 'sel_clear', 'get_all_stats', 'start_suwood_non_blocking', # 内存管理函数 'init_main_thread', 'execute_in_main_thread_async', 'execute_in_main_thread', 'process_main_thread_tasks', 'safe_blender_operation', # 几何类 'Point3d', 'Vector3d', 'Transformation', 'MAT_TYPE_NORMAL', 'MAT_TYPE_OBVERSE', 'MAT_TYPE_REVERSE', 'MAT_TYPE_THIN', 'MAT_TYPE_NATURE' ]