#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ SUW Core Module - 核心模块集合 拆分自: suw_impl.py 用途: 将大文件拆分为可维护的模块 版本: 1.0.0 (阶段6完成 - 最终版本) 作者: SUWood Team """ # 阶段1: 导入内存管理模块 import suw_core.command_dispatcher as cd_module import suw_core.dimension_manager as dim_module import suw_core.door_drawer_manager as ddm_module import suw_core.hardware_manager as hw_module import suw_core.machining_manager as mach_module import suw_core.selection_manager as sm_module import suw_core.deletion_manager as dm_module import suw_core.part_creator as pc_module import suw_core.material_manager as mm_module import suw_core.data_manager as data_module import logging 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 ) # 阶段5: 导入尺寸标注管理模块 from .dimension_manager import ( DimensionManager, dimension_manager, init_dimension_manager ) # 阶段6: 导入命令分发器模块 from .command_dispatcher import ( CommandDispatcher, command_dispatcher, init_command_dispatcher, get_dispatcher_stats ) # ==================== 版本信息 ==================== __version__ = "1.0.0" __author__ = "SUWood Team" __description__ = "SUW Core - 模块化SUWImpl核心功能" # ==================== 拆分进度 ==================== REFACTOR_STATUS = { "阶段1": "✅ 完成 - 内存管理器 + 几何工具", "阶段2": "✅ 完成 - 材质管理器 + 部件创建器", "阶段3": "✅ 完成 - 加工管理器 + 选择管理器", "阶段4": "✅ 完成 - 删除管理器 + 五金管理器", "阶段5": "✅ 完成 - 门抽屉管理器 + 尺寸标注管理器", "阶段6": "✅ 完成 - 命令分发器 + 最终整合", } # ==================== 模块初始化函数 ==================== def init_all_managers(): """ 初始化所有管理器 - 完全独立,不再需要suw_impl Returns: dict: 包含所有管理器实例的字典 """ try: logger.info("🚀 开始初始化所有独立管理器...") managers = {} # 1. 先初始化数据管理器(最基础) from .data_manager import init_data_manager managers['data_manager'] = init_data_manager() logger.info("✅ DataManager 初始化完成") # 2. 初始化材质管理器 from .material_manager import init_material_manager managers['material_manager'] = init_material_manager() logger.info("✅ MaterialManager 初始化完成") # 3. 初始化部件创建器 from .part_creator import init_part_creator managers['part_creator'] = init_part_creator() logger.info("✅ PartCreator 初始化完成") # 4. 初始化加工管理器 from .machining_manager import init_machining_manager managers['machining_manager'] = init_machining_manager() logger.info("✅ MachiningManager 初始化完成") # 5. 初始化选择管理器 from .selection_manager import init_selection_manager managers['selection_manager'] = init_selection_manager() logger.info("✅ SelectionManager 初始化完成") # 6. 初始化删除管理器 from .deletion_manager import init_deletion_manager managers['deletion_manager'] = init_deletion_manager() logger.info("✅ DeletionManager 初始化完成") # 7. 初始化硬件管理器 from .hardware_manager import init_hardware_manager managers['hardware_manager'] = init_hardware_manager() logger.info("✅ HardwareManager 初始化完成") # 8. 初始化门抽屉管理器 from .door_drawer_manager import init_door_drawer_manager managers['door_drawer_manager'] = init_door_drawer_manager() logger.info("✅ DoorDrawerManager 初始化完成") # 9. 初始化尺寸管理器 from .dimension_manager import init_dimension_manager managers['dimension_manager'] = init_dimension_manager() logger.info("✅ DimensionManager 初始化完成") # 10. 最后初始化命令分发器(依赖其他所有管理器) from .command_dispatcher import init_command_dispatcher managers['command_dispatcher'] = init_command_dispatcher() logger.info("✅ CommandDispatcher 初始化完成") logger.info(f"🎉 所有管理器初始化完成!共 {len(managers)} 个管理器") return managers except Exception as e: logger.error(f"❌ 管理器初始化失败: {e}") import traceback logger.error(traceback.format_exc()) return {} def get_all_stats(): """获取所有管理器的统计信息""" try: all_stats = { "module_version": __version__, "memory_manager": memory_manager.get_memory_stats() if memory_manager else None, "material_manager": material_manager.get_material_stats() if material_manager else None, "part_creator": part_creator.get_part_creator_stats() if part_creator else None, "machining_manager": machining_manager.get_machining_stats() if machining_manager else None, "selection_manager": selection_manager.get_selection_stats() if selection_manager else None, "deletion_manager": deletion_manager.get_deletion_stats() if deletion_manager else None, "hardware_manager": hardware_manager.get_hardware_stats() if hardware_manager else None, "door_drawer_manager": door_drawer_manager.get_door_drawer_stats() if door_drawer_manager else None, "dimension_manager": dimension_manager.get_dimension_stats() if dimension_manager else None, "command_dispatcher": get_dispatcher_stats(), } return all_stats except Exception as e: print(f"获取统计信息失败: {e}") return {"error": str(e)} # 为向后兼容添加别名 get_all_manager_stats = get_all_stats # ==================== 模块导出 ==================== __all__ = [ # 阶段0: 数据管理层 (基础数据层) "DataManager", "data_manager", "init_data_manager", "get_data_manager", "get_zones", "get_parts", "get_hardwares", "get_texture", "sel_clear", # 阶段1: 内存管理和几何工具 "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", "Point3d", "Vector3d", "Transformation", "MAT_TYPE_NORMAL", "MAT_TYPE_OBVERSE", "MAT_TYPE_REVERSE", "MAT_TYPE_THIN", "MAT_TYPE_NATURE", # 阶段2: 材质管理和部件创建 "MaterialManager", "material_manager", "init_material_manager", "PartCreator", "part_creator", "init_part_creator", # 阶段3: 加工管理和选择管理 "MachiningManager", "machining_manager", "init_machining_manager", "get_machining_manager", "SelectionManager", "selection_manager", "init_selection_manager", "get_selection_manager", # 阶段4: 删除管理和五金管理 "DeletionManager", "deletion_manager", "init_deletion_manager", "get_deletion_manager", "HardwareManager", "hardware_manager", "init_hardware_manager", "get_hardware_manager", # 阶段5: 门抽屉管理和尺寸标注管理 "DoorDrawerManager", "door_drawer_manager", "init_door_drawer_manager", "DimensionManager", "dimension_manager", "init_dimension_manager", # 阶段6: 命令分发 "CommandDispatcher", "command_dispatcher", "init_command_dispatcher", "get_dispatcher_stats", # 工具函数 "init_all_managers", "get_all_stats", "get_all_manager_stats", # 元信息 "__version__", "__author__", "__description__", "REFACTOR_STATUS" ] # 初始化日志 logger = logging.getLogger(__name__) logger.info(f"SUW Core 模块加载完成 - {__version__} ({__author__})") # 导出版本和阶段信息 __phase__ = "Phase 2" # ==================== 【修复】强制初始化所有全局变量 ==================== # 确保所有管理器全局实例正确初始化 if mm_module.material_manager is None: print("🔧 强制初始化MaterialManager全局实例...") mm_module.material_manager = mm_module.MaterialManager() # 【修复】移除None参数 if pc_module.part_creator is None: print("🔧 强制初始化PartCreator全局实例...") pc_module.part_creator = pc_module.PartCreator() # 【修复】移除None参数 # 导入其他管理器模块 # 初始化其他管理器 if dm_module.deletion_manager is None: print("🔧 强制初始化DeletionManager全局实例...") dm_module.deletion_manager = dm_module.DeletionManager() if sm_module.selection_manager is None: print("🔧 强制初始化SelectionManager全局实例...") sm_module.selection_manager = sm_module.SelectionManager() if mach_module.machining_manager is None: print("🔧 强制初始化MachiningManager全局实例...") mach_module.machining_manager = mach_module.MachiningManager() if hw_module.hardware_manager is None: print("🔧 强制初始化HardwareManager全局实例...") hw_module.hardware_manager = hw_module.HardwareManager() if ddm_module.door_drawer_manager is None: print("🔧 强制初始化DoorDrawerManager全局实例...") ddm_module.door_drawer_manager = ddm_module.DoorDrawerManager() if dim_module.dimension_manager is None: print("🔧 强制初始化DimensionManager全局实例...") dim_module.dimension_manager = dim_module.DimensionManager() if cd_module.command_dispatcher is None: print("🔧 强制初始化CommandDispatcher全局实例...") cd_module.command_dispatcher = cd_module.CommandDispatcher() # 强制初始化全局实例,确保能够独立运行 if not globals().get('_managers_initialized', False): _managers = init_all_managers() globals()['_managers_initialized'] = True # 在文件末尾添加一个非阻塞的启动函数 def start_suwood_non_blocking(): """非阻塞启动SUWood客户端(适合在Blender中使用)""" print("🚀 非阻塞启动SUWood客户端...") client_manager = start_suwood_blender_client() if client_manager: print("✅ 客户端已在后台运行") print("📝 使用以下命令管理客户端:") print(" print_system_status(suwood_client)") print(" suwood_client.stop_client()") # 设为全局变量方便访问 globals()['suwood_client'] = client_manager return client_manager return None # 修改主执行逻辑 if __name__ == "__main__": show_usage_guide() print("\n🚀 自动启动客户端...") # 检查是否在Blender环境中 try: import bpy # 在Blender中,使用非阻塞启动 start_suwood_non_blocking() except ImportError: # 在命令行中,使用原来的阻塞启动 client_manager = start_suwood_blender_client() if client_manager: try: while True: time.sleep(30) print_system_status(client_manager) except KeyboardInterrupt: client_manager.stop_client()