372 lines
11 KiB
Python
372 lines
11 KiB
Python
|
#!/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'
|
||
|
]
|