#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Blender SUWood 简单测试脚本 在Blender Text Editor中运行此脚本 """ # 首先导入Blender模块 import bpy import sys from pathlib import Path print("🚀 Blender SUWood 简单测试") print("=" * 40) # 清除场景中的默认对象 bpy.ops.object.select_all(action='SELECT') bpy.ops.object.delete(use_global=False) # 添加SUWood模块路径 project_path = r"D:\XL\code\blender\blenderpython" if project_path not in sys.path: sys.path.insert(0, project_path) print(f"✅ 添加模块路径: {project_path}") try: # 导入SUWood模块 from suw_impl import SUWImpl, Point3d, Vector3d print("✅ SUWood模块导入成功") # 初始化SUWImpl suw = SUWImpl.get_instance() suw.startup() print("✅ SUWImpl 初始化完成") # 创建测试集合 if "SUWood_Simple_Test" not in bpy.data.collections: test_collection = bpy.data.collections.new("SUWood_Simple_Test") bpy.context.scene.collection.children.link(test_collection) else: test_collection = bpy.data.collections["SUWood_Simple_Test"] print(f"✅ 测试集合准备: {test_collection.name}") # 测试1: 创建简单矩形面 print("\n🧪 测试创建面...") surface_data = { "segs": [ ["(0,0,0)", "(500,0,0)"], # 500mm × 300mm ["(500,0,0)", "(500,300,0)"], ["(500,300,0)", "(0,300,0)"], ["(0,300,0)", "(0,0,0)"] ] } face_obj = suw.create_face( container=test_collection, surface=surface_data, color="wood_color" ) if face_obj: print(f"✅ 面创建成功: {face_obj.name}") face_obj.location = (0, 0, 0) else: print("❌ 面创建失败") # 测试2: 创建边线 print("\n🧪 测试创建边线...") edges_data = [ ["(0,0,100)", "(500,0,100)"], # 水平线 ["(250,0,0)", "(250,300,0)"] # 垂直线 ] edges = suw.create_edges(test_collection, edges_data) if edges and len(edges) > 0: print(f"✅ 边线创建成功: {len(edges)} 条") else: print("❌ 边线创建失败") # 测试3: 创建材质 print("\n🧪 测试材质创建...") if "TestWood" not in bpy.data.materials: wood_material = bpy.data.materials.new(name="TestWood") wood_material.use_nodes = True # 设置木材颜色 bsdf = wood_material.node_tree.nodes.get("Principled BSDF") if bsdf: bsdf.inputs[0].default_value = (0.8, 0.6, 0.4, 1.0) # 木材色 bsdf.inputs[7].default_value = 0.3 # 粗糙度 print("✅ 木材材质创建成功") else: wood_material = bpy.data.materials["TestWood"] print("✅ 使用现有木材材质") # 应用材质到面 if face_obj and wood_material: suw.textured_surf( face=face_obj, material=wood_material, current="wood_finish", color="wood_color" ) print("✅ 材质应用成功") # 测试4: 几何类测试 print("\n🧪 测试几何类...") # Point3d 测试 point = Point3d.parse("(100,200,50)") if point: print(f"✅ Point3d: ({point.x:.3f}, {point.y:.3f}, {point.z:.3f})") # Vector3d 测试 vector = Vector3d.parse("(1,0,0)") if vector: print(f"✅ Vector3d: ({vector.x:.3f}, {vector.y:.3f}, {vector.z:.3f})") # 设置视图 print("\n🎯 设置视图...") # 切换到材质着色模式 for area in bpy.context.screen.areas: if area.type == 'VIEW_3D': for space in area.spaces: if space.type == 'VIEW_3D': space.shading.type = 'MATERIAL' break # 调整视图 bpy.ops.object.select_all(action='SELECT') bpy.ops.view3d.view_selected() print("✅ 视图设置完成") print("\n🎉 测试完成!") print("=" * 40) print("检查结果:") print("1. 场景中应该有SUWood_Simple_Test集合") print("2. 包含一个矩形面和两条边线") print("3. 面应该有木材纹理") print("4. 视图应该居中显示对象") # 统计创建的对象 objects_count = len(test_collection.objects) print(f"\n📊 创建了 {objects_count} 个对象") if objects_count > 0: print("🏆 SUWood工具在Blender中工作正常!") else: print("⚠️ 可能存在问题,请检查Console输出") except Exception as e: print(f"❌ 测试失败: {e}") import traceback traceback.print_exc() print("\n" + "=" * 40)