#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ SUWood 插件安装测试脚本 用于验证插件是否正确安装和加载 """ import sys import os def test_blender_environment(): """测试Blender环境""" print("🔍 测试Blender环境...") try: import bpy print("✅ Blender环境可用") print(f" Blender版本: {bpy.app.version_string}") print(f" Python版本: {sys.version}") return True except ImportError: print("❌ Blender环境不可用") return False def test_suwood_modules(): """测试SUWood模块导入""" print("\n🔍 测试SUWood模块...") modules_to_test = [ 'suw_core', 'suw_menu', 'suw_observer', 'suw_client', 'suw_constants', 'suw_load', 'suw_unit_point_tool', 'suw_unit_face_tool', 'suw_unit_cont_tool', 'suw_zone_div1_tool' ] success_count = 0 for module_name in modules_to_test: try: module = __import__(module_name) print(f"✅ {module_name} - 导入成功") success_count += 1 except ImportError as e: print(f"❌ {module_name} - 导入失败: {e}") print(f"\n📊 模块测试结果: {success_count}/{len(modules_to_test)} 成功") return success_count == len(modules_to_test) def test_addon_registration(): """测试插件注册""" print("\n🔍 测试插件注册...") try: import bpy # 检查插件信息 if hasattr(bpy.context, 'preferences'): addons = bpy.context.preferences.addons suwood_addon = None for addon in addons: if 'suwood' in addon.module.lower(): suwood_addon = addon break if suwood_addon: print("✅ SUWood插件已注册") print(f" 插件名称: {suwood_addon.module}") return True else: print("⚠️ SUWood插件未找到,可能需要手动注册") return False else: print("⚠️ 无法访问Blender偏好设置") return False except Exception as e: print(f"❌ 插件注册测试失败: {e}") return False def test_panel_creation(): """测试面板创建""" print("\n🔍 测试面板创建...") try: import bpy # 检查面板类是否存在 panel_classes = [ 'SUWOOD_PT_main_panel', 'SUWOOD_OT_unit_point_tool', 'SUWOOD_OT_unit_face_tool', 'SUWOOD_OT_delete_unit', 'SUWOOD_OT_zone_div1_tool' ] success_count = 0 for class_name in panel_classes: if hasattr(bpy.types, class_name): print(f"✅ {class_name} - 已注册") success_count += 1 else: print(f"❌ {class_name} - 未注册") print(f"\n📊 面板测试结果: {success_count}/{len(panel_classes)} 成功") return success_count == len(panel_classes) except Exception as e: print(f"❌ 面板测试失败: {e}") return False def test_tool_functions(): """测试工具功能""" print("\n🔍 测试工具功能...") try: # 测试工具函数 from suw_unit_point_tool import create_point_tool from suw_unit_face_tool import create_face_tool from suw_zone_div1_tool import create_zone_div1_tool # 创建工具实例 point_tool = create_point_tool() face_tool = create_face_tool(1) # 前视图 zone_tool = create_zone_div1_tool() print("✅ 工具创建成功") print(f" 点击创体工具: {type(point_tool).__name__}") print(f" 选面创体工具: {type(face_tool).__name__}") print(f" 六面切割工具: {type(zone_tool).__name__}") return True except Exception as e: print(f"❌ 工具功能测试失败: {e}") return False def test_core_system(): """测试核心系统""" print("\n🔍 测试核心系统...") try: from suw_core import init_all_managers, get_selection_manager # 初始化管理器 init_all_managers() print("✅ 管理器初始化成功") # 获取选择管理器 selection_manager = get_selection_manager() if selection_manager: print("✅ 选择管理器可用") return True else: print("❌ 选择管理器不可用") return False except Exception as e: print(f"❌ 核心系统测试失败: {e}") return False def main(): """主测试函数""" print("🚀 SUWood 插件安装测试") print("=" * 50) # 运行所有测试 tests = [ ("Blender环境", test_blender_environment), ("SUWood模块", test_suwood_modules), ("插件注册", test_addon_registration), ("面板创建", test_panel_creation), ("工具功能", test_tool_functions), ("核心系统", test_core_system) ] results = [] for test_name, test_func in tests: try: result = test_func() results.append((test_name, result)) except Exception as e: print(f"❌ {test_name}测试异常: {e}") results.append((test_name, False)) # 输出测试总结 print("\n" + "=" * 50) print("📋 测试总结") print("=" * 50) passed = sum(1 for _, result in results if result) total = len(results) for test_name, result in results: status = "✅ 通过" if result else "❌ 失败" print(f"{test_name:12} - {status}") print(f"\n📊 总体结果: {passed}/{total} 测试通过") if passed == total: print("\n🎉 恭喜!SUWood插件安装成功!") print("📝 使用说明:") print(" 1. 打开3D视图") print(" 2. 按N键打开侧边栏") print(" 3. 点击SUWood标签页") print(" 4. 开始使用工具") else: print("\n⚠️ 部分测试失败,请检查安装") print("📝 建议:") print(" 1. 确保Blender版本为3.0+") print(" 2. 检查插件是否正确安装") print(" 3. 重启Blender") print(" 4. 查看控制台错误信息") if __name__ == "__main__": main()