118 lines
3.3 KiB
Python
118 lines
3.3 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
"""
|
|||
|
修复缺失的初始化函数
|
|||
|
位置: blenderpython/suw_core/test/fix_missing_inits.py
|
|||
|
作者: SUWood Team
|
|||
|
版本: 1.0.0
|
|||
|
"""
|
|||
|
|
|||
|
import os
|
|||
|
|
|||
|
|
|||
|
def fix_part_creator():
|
|||
|
"""修复 part_creator.py 中缺失的初始化函数"""
|
|||
|
|
|||
|
# 要添加的代码
|
|||
|
additional_code = '''
|
|||
|
def get_part_creator_stats(self) -> Dict[str, Any]:
|
|||
|
"""获取部件创建器统计信息"""
|
|||
|
try:
|
|||
|
stats = {
|
|||
|
"manager_type": "PartCreator",
|
|||
|
"parts_by_uid": {uid: len(parts) for uid, parts in self.parts.items()},
|
|||
|
"total_parts": sum(len(parts) for parts in self.parts.values()),
|
|||
|
"creation_stats": self.creation_stats.copy(),
|
|||
|
"blender_available": BLENDER_AVAILABLE
|
|||
|
}
|
|||
|
return stats
|
|||
|
except Exception as e:
|
|||
|
logger.error(f"获取部件创建器统计失败: {e}")
|
|||
|
return {"error": str(e)}
|
|||
|
|
|||
|
|
|||
|
# ==================== 模块实例 ====================
|
|||
|
|
|||
|
# 全局实例,将由SUWImpl初始化时设置
|
|||
|
part_creator = None
|
|||
|
|
|||
|
def init_part_creator(suw_impl):
|
|||
|
"""初始化部件创建器"""
|
|||
|
global part_creator
|
|||
|
part_creator = PartCreator(suw_impl)
|
|||
|
return part_creator
|
|||
|
'''
|
|||
|
|
|||
|
file_path = "../part_creator.py"
|
|||
|
|
|||
|
try:
|
|||
|
# 读取现有文件
|
|||
|
with open(file_path, 'r', encoding='utf-8') as f:
|
|||
|
content = f.read()
|
|||
|
|
|||
|
# 检查是否已经有 init_part_creator 函数
|
|||
|
if "def init_part_creator" in content:
|
|||
|
print("✅ part_creator.py 已经有初始化函数")
|
|||
|
return True
|
|||
|
|
|||
|
# 查找替换点
|
|||
|
old_pattern = '''# ==================== 全局实例 ====================
|
|||
|
|
|||
|
|
|||
|
# 创建全局部件创建器实例
|
|||
|
part_creator = PartCreator()'''
|
|||
|
|
|||
|
if old_pattern in content:
|
|||
|
# 替换旧代码
|
|||
|
new_content = content.replace(old_pattern, additional_code.strip())
|
|||
|
|
|||
|
# 写回文件
|
|||
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|||
|
f.write(new_content)
|
|||
|
|
|||
|
print("✅ part_creator.py 初始化函数已添加")
|
|||
|
return True
|
|||
|
else:
|
|||
|
# 如果找不到替换点,直接追加
|
|||
|
with open(file_path, 'a', encoding='utf-8') as f:
|
|||
|
f.write(additional_code)
|
|||
|
|
|||
|
print("✅ part_creator.py 初始化函数已追加")
|
|||
|
return True
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
print(f"❌ 修复 part_creator.py 失败: {e}")
|
|||
|
return False
|
|||
|
|
|||
|
|
|||
|
def test_imports():
|
|||
|
"""测试导入"""
|
|||
|
try:
|
|||
|
import sys
|
|||
|
sys.path.insert(0, "../..")
|
|||
|
|
|||
|
from suw_core.part_creator import init_part_creator
|
|||
|
print("✅ init_part_creator 导入成功")
|
|||
|
|
|||
|
from suw_core.material_manager import init_material_manager
|
|||
|
print("✅ init_material_manager 导入成功")
|
|||
|
|
|||
|
return True
|
|||
|
|
|||
|
except Exception as e:
|
|||
|
print(f"❌ 导入测试失败: {e}")
|
|||
|
return False
|
|||
|
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
print("🔧 修复缺失的初始化函数")
|
|||
|
print("=" * 40)
|
|||
|
|
|||
|
success1 = fix_part_creator()
|
|||
|
success2 = test_imports()
|
|||
|
|
|||
|
if success1 and success2:
|
|||
|
print("\n🎉 所有修复完成!")
|
|||
|
else:
|
|||
|
print("\n❌ 修复失败")
|