suwoodblender/blenderpython/quick_start.py

180 lines
5.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SUWImpl 快速开始脚本 - 在Blender中使用
简化版本,仅测试核心功能
"""
print("🚀 SUWImpl 快速开始测试")
print("=" * 40)
# 1. 基本导入测试
print("\n📝 步骤1: 导入模块")
try:
from suw_impl import SUWImpl, Point3d, Vector3d, Transformation
print("✅ 模块导入成功")
except Exception as e:
print(f"❌ 模块导入失败: {e}")
print("💡 请确认文件路径正确并添加到sys.path")
exit(1)
# 2. 创建实例
print("\n📝 步骤2: 创建SUWImpl实例")
try:
impl = SUWImpl.get_instance()
print(f"✅ 实例创建成功: {type(impl).__name__}")
except Exception as e:
print(f"❌ 实例创建失败: {e}")
exit(1)
# 3. 初始化系统
print("\n📝 步骤3: 初始化系统")
try:
impl.startup()
print("✅ 系统初始化成功")
except Exception as e:
print(f"❌ 系统初始化失败: {e}")
exit(1)
# 4. 测试几何类
print("\n📝 步骤4: 测试几何类")
try:
# Point3d测试
p1 = Point3d(0, 0, 0)
p2 = Point3d.parse("10,20,30")
print(f"✅ Point3d: {p1}{p2}")
# Vector3d测试
v1 = Vector3d(1, 0, 0)
v2 = v1.normalize()
print(f"✅ Vector3d: {v1} → normalized: {v2}")
# Transformation测试
t1 = Transformation(p1, v1, Vector3d(0, 1, 0), Vector3d(0, 0, 1))
print(f"✅ Transformation: origin={t1.origin}")
except Exception as e:
print(f"❌ 几何类测试失败: {e}")
# 5. 测试基本命令
print("\n📝 步骤5: 测试基本命令")
try:
# c00 - 清空选择
impl.c00({"uid": "quick_test_001"})
print("✅ c00命令执行成功")
# c01 - 单位设置
impl.c01({
"uid": "quick_test_001",
"unit_drawing": "quick_test.dwg",
"drawing_name": "快速测试"
})
print("✅ c01命令执行成功")
except Exception as e:
print(f"❌ 基本命令测试失败: {e}")
# 6. 测试材质系统
print("\n📝 步骤6: 测试材质系统")
try:
# 添加测试材质
impl.add_mat_rgb("quick_test_red", 1.0, 255, 0, 0)
impl.add_mat_rgb("quick_test_blue", 0.8, 0, 0, 255)
print("✅ 材质添加成功")
# 获取默认材质
texture = impl.get_texture("mat_normal")
print(f"✅ 默认材质获取: {texture is not None}")
except Exception as e:
print(f"❌ 材质系统测试失败: {e}")
# 7. 检查Blender环境
print("\n📝 步骤7: 检查Blender环境")
try:
import bpy
print(f"✅ Blender API可用: {bpy.app.version_string}")
# 获取当前场景信息
scene = bpy.context.scene
print(f"✅ 当前场景: {scene.name}")
print(f"✅ 对象数量: {len(scene.objects)}")
except ImportError:
print("⚠️ Blender API不可用 (存根模式)")
except Exception as e:
print(f"❌ Blender环境检查失败: {e}")
# 8. 创建简单测试对象 (仅在Blender中)
print("\n📝 步骤8: 创建测试对象")
try:
import bpy
# 删除默认立方体
if "Cube" in bpy.data.objects:
bpy.data.objects.remove(bpy.data.objects["Cube"], do_unlink=True)
# 创建测试立方体
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 0), size=2)
cube = bpy.context.active_object
cube.name = "SUW_QuickTest_Cube"
# 添加材质
mat = bpy.data.materials.new(name="SUW_QuickTest_Material")
mat.use_nodes = True
# 安全设置材质颜色兼容不同Blender版本
try:
# 尝试找到Principled BSDF节点
bsdf = None
for node in mat.node_tree.nodes:
if "BSDF" in node.type:
bsdf = node
break
if bsdf and hasattr(bsdf, 'inputs'):
# 尝试设置基础颜色
if "Base Color" in bsdf.inputs:
bsdf.inputs["Base Color"].default_value = (
0.8, 0.2, 0.8, 1.0) # 紫色
elif len(bsdf.inputs) > 0:
bsdf.inputs[0].default_value = (0.8, 0.2, 0.8, 1.0) # 紫色
except Exception as e:
print(f"⚠️ 设置材质颜色失败: {e}")
cube.data.materials.append(mat)
print("✅ 测试对象创建成功")
except ImportError:
print("⚠️ 跳过对象创建 (非Blender环境)")
except Exception as e:
print(f"❌ 测试对象创建失败: {e}")
# 9. 总结
print("\n" + "=" * 40)
print("📊 快速测试完成!")
print("🎯 如果所有步骤都显示 ✅说明SUWImpl在Blender中运行正常")
print("💡 接下来可以:")
print(" - 运行完整测试: exec(open('blender_test.py').read())")
print(" - 查看使用指南: BLENDER_TEST_GUIDE.md")
print(" - 测试具体功能: 使用c03、c04等命令")
# 10. 基本使用示例
print("\n🎯 基本使用示例:")
print("```python")
print("# 创建木工零件")
print("part_data = {")
print(' "uid": "example_001",')
print(' "parts": {')
print(' "p001": {')
print(' "name": "测试板材",')
print(' "finals": {"f001": {"typ": 1, "obv": {...}}}')
print(' }')
print(' }')
print("}")
print("impl.c03(part_data)")
print("```")
print("\n🎉 快速开始测试结束!")