EG/plugins/user/soft_body_cloth_physics/test_plugin.py
2025-12-12 16:16:15 +08:00

218 lines
6.5 KiB
Python

"""
软体物理和布料模拟插件测试脚本
用于测试插件的基本功能
"""
import sys
import os
# 添加项目根目录到Python路径
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
sys.path.insert(0, project_root)
def test_plugin_structure():
"""
测试插件结构是否正确
"""
print("开始测试软体物理和布料模拟插件结构...")
# 测试导入插件模块
try:
from plugins.user.soft_body_cloth_physics.plugin import Plugin
print("✓ 插件主类导入成功")
except ImportError as e:
print(f"✗ 插件主类导入失败: {e}")
return False
# 测试导入核心模块
try:
from plugins.user.soft_body_cloth_physics.core.cloth_manager import ClothManager
from plugins.user.soft_body_cloth_physics.core.soft_body_manager import SoftBodyManager
print("✓ 核心管理器导入成功")
except ImportError as e:
print(f"✗ 核心管理器导入失败: {e}")
return False
# 测试导入物理模块
try:
from plugins.user.soft_body_cloth_physics.core.cloth_physics import ClothPhysics
from plugins.user.soft_body_cloth_physics.core.soft_body_physics import SoftBodyPhysics
print("✓ 物理核心类导入成功")
except ImportError as e:
print(f"✗ 物理核心类导入失败: {e}")
return False
# 测试导入材质系统
try:
from plugins.user.soft_body_cloth_physics.materials.cloth_materials import ClothMaterialManager
print("✓ 材质系统导入成功")
except ImportError as e:
print(f"✗ 材质系统导入失败: {e}")
return False
# 测试导入工具模块
try:
from plugins.user.soft_body_cloth_physics.utils.mesh_generator import MeshGenerator
print("✓ 网格生成工具导入成功")
except ImportError as e:
print(f"✗ 网格生成工具导入失败: {e}")
return False
# 测试导入调试模块
try:
from plugins.user.soft_body_cloth_physics.debug.cloth_debug import PhysicsDebugManager
print("✓ 调试工具导入成功")
except ImportError as e:
print(f"✗ 调试工具导入失败: {e}")
return False
# 测试配置文件是否存在
config_path = os.path.join(
project_root,
"plugins",
"user",
"soft_body_cloth_physics",
"config",
"cloth_settings.json"
)
if os.path.exists(config_path):
print("✓ 配置文件存在")
else:
print("✗ 配置文件不存在")
return False
print("插件结构测试通过!")
return True
def test_plugin_functionality():
"""
测试插件基本功能
"""
print("\n开始测试插件基本功能...")
# 创建一个模拟的世界对象
class MockWorld:
def __init__(self):
self.plugins = {}
self.world = self # 添加world属性以避免错误
try:
# 测试插件初始化
from plugins.user.soft_body_cloth_physics.plugin import Plugin
mock_world = MockWorld()
plugin = Plugin(mock_world, "soft_body_cloth_physics")
if plugin.initialize():
print("✓ 插件初始化成功")
else:
print("✗ 插件初始化失败")
return False
# 测试启用插件
if plugin.enable():
print("✓ 插件启用成功")
else:
print("✗ 插件启用失败")
return False
# 测试获取插件信息
info = plugin.get_info()
if info and "name" in info and info["name"] == "SoftBodyClothPhysics":
print("✓ 插件信息获取成功")
else:
print("✗ 插件信息获取失败")
return False
# 测试禁用插件
if plugin.disable():
print("✓ 插件禁用成功")
else:
print("✗ 插件禁用失败")
return False
# 测试清理插件
plugin.finalize()
print("✓ 插件清理成功")
print("插件功能测试通过!")
return True
except Exception as e:
print(f"✗ 插件功能测试失败: {e}")
import traceback
traceback.print_exc()
return False
def test_cloth_materials():
"""
测试布料材质系统
"""
print("\n开始测试布料材质系统...")
try:
from plugins.user.soft_body_cloth_physics.materials.cloth_materials import ClothMaterialManager
# 创建材质管理器
material_manager = ClothMaterialManager()
# 测试获取材质
cotton = material_manager.get_material("cotton")
if cotton:
print("✓ 棉布材质获取成功")
else:
print("✗ 棉布材质获取失败")
return False
# 测试获取所有材质类型
material_types = material_manager.get_all_material_types()
if material_types:
print(f"✓ 材质类型获取成功: {len(material_types)}")
else:
print("✗ 材质类型获取失败")
return False
print("布料材质系统测试通过!")
return True
except Exception as e:
print(f"✗ 布料材质系统测试失败: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""
主测试函数
"""
print("软体物理和布料模拟插件测试")
print("=" * 40)
# 运行所有测试
tests = [
test_plugin_structure,
test_plugin_functionality,
test_cloth_materials
]
passed = 0
total = len(tests)
for test in tests:
if test():
passed += 1
print()
print("=" * 40)
print(f"测试结果: {passed}/{total} 通过")
if passed == total:
print("所有测试通过! 插件已准备好使用。")
return True
else:
print("部分测试失败,请检查插件实现。")
return False
if __name__ == "__main__":
main()