EG/plugins/user/fluid_dynamics/demo_fluid_scene.py
2025-10-30 11:46:41 +08:00

84 lines
2.8 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.

"""
流体动力学插件测试示例
此文件演示如何使用流体动力学插件
"""
def create_fluid_demo(world):
"""
创建流体动力学演示场景
Args:
world: 主世界对象
"""
try:
# 检查插件是否已加载
if not hasattr(world, 'plugin_manager') or not world.plugin_manager:
print("插件管理器未初始化")
return
# 加载流体动力学插件
fluid_plugin = world.plugin_manager.load_plugin("fluid_dynamics")
if not fluid_plugin:
print("流体动力学插件加载失败")
return
# 启用插件
if not world.plugin_manager.enable_plugin("fluid_dynamics"):
print("流体动力学插件启用失败")
return
# 获取流体世界实例
fluid_world = fluid_plugin.fluid_world
if not fluid_world:
print("流体世界实例获取失败")
return
# 创建流体域
from .components.fluid_domain import FluidDomain
domain = FluidDomain(
Point3(-10, -10, 0),
Point3(10, 10, 20)
)
fluid_world.add_fluid_domain(domain)
# 创建流体发射器
from .components.fluid_emitter import FluidEmitter
emitter = FluidEmitter(
Point3(0, 0, 10),
fluid_world
)
emitter.set_emit_rate(50) # 每秒发射50个粒子
emitter.set_emit_velocity(Vec3(0, 0, 2)) # 向上发射
fluid_world.add_fluid_emitter(emitter)
# 创建障碍物
from .components.fluid_obstacle import FluidObstacle
obstacle = FluidObstacle(
Point3(0, 0, 5),
Vec3(2, 2, 2),
"box"
)
fluid_world.add_fluid_obstacle(obstacle)
# 设置求解器
from .core.fluid_solver import FluidSolver
solver = FluidSolver(fluid_world)
fluid_world.solver = solver
# 设置可视化器
from .core.fluid_visualizer import FluidVisualizer
visualizer = FluidVisualizer(fluid_world, world)
# 创建粒子系统用于可视化
particle_system = visualizer.create_particle_system("fluid_particles", 2000)
print("流体动力学演示场景创建完成")
print("使用方法:")
print("1. 调整发射器参数emitter.set_emit_rate(粒子数)")
print("2. 暂停/恢复模拟fluid_world.pause(True/False)")
print("3. 调整时间缩放fluid_world.set_time_scale(缩放因子)")
except Exception as e:
print(f"创建流体动力学演示场景时出错: {e}")
import traceback
traceback.print_exc()