205 lines
6.2 KiB
Python
205 lines
6.2 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
SUWImpl Blender 调试测试脚本
|
||
专门用于排查在Blender中运行无反应的问题
|
||
"""
|
||
|
||
print("🚀 开始调试测试...")
|
||
print("=" * 50)
|
||
|
||
# 步骤1: 基本环境检查
|
||
print("\n📝 步骤1: 基本环境检查")
|
||
try:
|
||
import sys
|
||
import os
|
||
print(f"✅ Python版本: {sys.version}")
|
||
print(f"✅ 当前工作目录: {os.getcwd()}")
|
||
print(f"✅ 脚本位置: {__file__}")
|
||
except Exception as e:
|
||
print(f"❌ 基本环境检查失败: {e}")
|
||
|
||
# 步骤2: Blender API检查
|
||
print("\n📝 步骤2: Blender API检查")
|
||
try:
|
||
import bpy
|
||
print(f"✅ Blender版本: {bpy.app.version_string}")
|
||
print(f"✅ 当前场景: {bpy.context.scene.name}")
|
||
print(f"✅ 对象数量: {len(bpy.context.scene.objects)}")
|
||
BLENDER_AVAILABLE = True
|
||
except ImportError as e:
|
||
print(f"❌ Blender API不可用: {e}")
|
||
BLENDER_AVAILABLE = False
|
||
except Exception as e:
|
||
print(f"❌ Blender API错误: {e}")
|
||
BLENDER_AVAILABLE = False
|
||
|
||
# 步骤3: 路径设置和检查
|
||
print("\n📝 步骤3: 路径设置和检查")
|
||
try:
|
||
current_dir = os.path.dirname(os.path.abspath(__file__))
|
||
print(f"📁 脚本目录: {current_dir}")
|
||
|
||
if current_dir not in sys.path:
|
||
sys.path.append(current_dir)
|
||
print(f"✅ 已添加路径到sys.path")
|
||
else:
|
||
print(f"ℹ️ 路径已在sys.path中")
|
||
|
||
# 检查suw_impl.py是否存在
|
||
suw_impl_path = os.path.join(current_dir, "suw_impl.py")
|
||
if os.path.exists(suw_impl_path):
|
||
print(f"✅ 找到suw_impl.py: {suw_impl_path}")
|
||
print(f"📊 文件大小: {os.path.getsize(suw_impl_path)} 字节")
|
||
else:
|
||
print(f"❌ 未找到suw_impl.py: {suw_impl_path}")
|
||
|
||
# 显示Python路径
|
||
print(f"🔍 Python路径:")
|
||
for i, path in enumerate(sys.path[:5]): # 只显示前5个
|
||
print(f" {i+1}. {path}")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 路径设置失败: {e}")
|
||
|
||
# 步骤4: 模块导入测试
|
||
print("\n📝 步骤4: 模块导入测试")
|
||
try:
|
||
print("🔄 尝试导入suw_impl...")
|
||
import suw_impl
|
||
print("✅ suw_impl模块导入成功")
|
||
|
||
print("🔄 尝试导入SUWImpl类...")
|
||
from suw_impl import SUWImpl
|
||
print("✅ SUWImpl类导入成功")
|
||
|
||
print("🔄 尝试导入几何类...")
|
||
from suw_impl import Point3d, Vector3d, Transformation
|
||
print("✅ 几何类导入成功")
|
||
|
||
except ImportError as e:
|
||
print(f"❌ 导入错误: {e}")
|
||
print("💡 建议检查:")
|
||
print(" 1. 文件路径是否正确")
|
||
print(" 2. suw_impl.py是否存在语法错误")
|
||
print(" 3. 是否有依赖模块缺失")
|
||
except Exception as e:
|
||
print(f"❌ 其他导入错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
# 步骤5: 实例创建测试
|
||
print("\n📝 步骤5: SUWImpl实例创建测试")
|
||
try:
|
||
if 'SUWImpl' in locals():
|
||
print("🔄 创建SUWImpl实例...")
|
||
impl = SUWImpl.get_instance()
|
||
print(f"✅ 实例创建成功: {type(impl)}")
|
||
|
||
print("🔄 初始化SUWImpl...")
|
||
impl.startup()
|
||
print("✅ SUWImpl初始化成功")
|
||
|
||
# 测试一个简单方法
|
||
print("🔄 测试c00命令...")
|
||
impl.c00({"uid": "debug_test_001"})
|
||
print("✅ c00命令执行成功")
|
||
|
||
else:
|
||
print("⚠️ SUWImpl类未导入,跳过实例测试")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 实例创建失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
# 步骤6: 几何类测试
|
||
print("\n📝 步骤6: 几何类测试")
|
||
try:
|
||
if 'Point3d' in locals():
|
||
print("🔄 测试Point3d...")
|
||
p1 = Point3d(1, 2, 3)
|
||
p2 = Point3d.parse("4,5,6")
|
||
print(f"✅ Point3d测试: {p1} → {p2}")
|
||
|
||
print("🔄 测试Vector3d...")
|
||
v1 = Vector3d(1, 0, 0)
|
||
v2 = v1.normalize()
|
||
print(f"✅ Vector3d测试: {v1} → {v2}")
|
||
|
||
else:
|
||
print("⚠️ 几何类未导入,跳过几何测试")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 几何类测试失败: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
# 步骤7: 控制台输出测试
|
||
print("\n📝 步骤7: 控制台输出测试")
|
||
try:
|
||
if BLENDER_AVAILABLE:
|
||
# 尝试在Blender中创建一个对象
|
||
print("🔄 创建测试立方体...")
|
||
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 0))
|
||
cube = bpy.context.active_object
|
||
cube.name = "DEBUG_TEST_CUBE"
|
||
print(f"✅ 测试立方体创建成功: {cube.name}")
|
||
|
||
# 尝试输出到不同位置
|
||
print("🔄 测试不同的输出方式...")
|
||
|
||
# 标准输出
|
||
sys.stdout.write("📤 这是sys.stdout输出\n")
|
||
sys.stdout.flush()
|
||
|
||
# 错误输出
|
||
sys.stderr.write("📤 这是sys.stderr输出\n")
|
||
sys.stderr.flush()
|
||
|
||
# Blender报告
|
||
try:
|
||
bpy.context.window_manager.popup_menu(
|
||
lambda self, context: self.layout.label(
|
||
text="SUWImpl调试测试运行中..."),
|
||
title="调试信息",
|
||
icon='INFO'
|
||
)
|
||
print("✅ Blender弹窗显示成功")
|
||
except Exception as popup_e:
|
||
print(f"⚠️ Blender弹窗失败: {popup_e}")
|
||
|
||
else:
|
||
print("⚠️ 非Blender环境,跳过Blender特定测试")
|
||
|
||
except Exception as e:
|
||
print(f"❌ 控制台输出测试失败: {e}")
|
||
|
||
# 步骤8: 总结和建议
|
||
print("\n" + "=" * 50)
|
||
print("📊 调试测试完成!")
|
||
print("\n💡 如果你能看到这些输出,说明脚本正在运行")
|
||
print("💡 如果看不到输出,可能的原因:")
|
||
print(" 1. 输出被重定向了")
|
||
print(" 2. Blender控制台没有显示")
|
||
print(" 3. 脚本执行方式不对")
|
||
print(" 4. 有异常但被静默处理了")
|
||
|
||
print("\n🔧 建议的调试步骤:")
|
||
print(" 1. 在Windows下打开Blender控制台: Window → Toggle System Console")
|
||
print(" 2. 检查Blender的Python控制台输出")
|
||
print(" 3. 尝试分步执行代码")
|
||
print(" 4. 检查Blender的信息面板")
|
||
|
||
print("\n🎯 下一步测试:")
|
||
print(" 如果这个调试脚本运行成功,可以尝试:")
|
||
print(" - 运行 quick_start.py")
|
||
print(" - 运行 blender_test.py")
|
||
print(" - 检查具体的功能实现")
|
||
|
||
print("\n🎉 调试测试结束!")
|
||
|
||
# 强制刷新输出缓冲区
|
||
sys.stdout.flush()
|
||
sys.stderr.flush()
|