blenderpython/suw_core/__init__.py

372 lines
11 KiB
Python
Raw Normal View History

2025-08-01 17:13:30 +08:00
#!/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'
]