From ede9b4ff6be9748950f01923fe49948a175fdb0f Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Sat, 8 Dec 2007 12:12:05 +0000 Subject: [PATCH] From David Callu, added IO_FluidProgram implementation. --- src/osgPlugins/osgParticle/CMakeLists.txt | 1 + .../osgParticle/IO_FluidProgram.cpp | 89 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 src/osgPlugins/osgParticle/IO_FluidProgram.cpp diff --git a/src/osgPlugins/osgParticle/CMakeLists.txt b/src/osgPlugins/osgParticle/CMakeLists.txt index 1b64bb3fe..74f70f33b 100644 --- a/src/osgPlugins/osgParticle/CMakeLists.txt +++ b/src/osgPlugins/osgParticle/CMakeLists.txt @@ -13,6 +13,7 @@ IO_ExplosionDebrisEffect.cpp IO_ExplosionEffect.cpp IO_FireEffect.cpp IO_FluidFrictionOperator.cpp +IO_FluidProgram.cpp IO_ForceOperator.cpp IO_LinearInterpolator.cpp IO_ModularEmitter.cpp diff --git a/src/osgPlugins/osgParticle/IO_FluidProgram.cpp b/src/osgPlugins/osgParticle/IO_FluidProgram.cpp new file mode 100644 index 000000000..473156515 --- /dev/null +++ b/src/osgPlugins/osgParticle/IO_FluidProgram.cpp @@ -0,0 +1,89 @@ + +#include +#include + +#include + +#include +#include + +#include +#include +#include + +bool FluidProgram_readLocalData(osg::Object &obj, osgDB::Input &fr); +bool FluidProgram_writeLocalData(const osg::Object &obj, osgDB::Output &fw); + +osgDB::RegisterDotOsgWrapperProxy FluidProgram_Proxy +( + new osgParticle::FluidProgram, + "FluidProgram", + "Object Node ParticleProcessor Program FluidProgram", + FluidProgram_readLocalData, + FluidProgram_writeLocalData +); + +bool FluidProgram_readLocalData(osg::Object &obj, osgDB::Input &fr) +{ + osgParticle::FluidProgram &myobj = static_cast(obj); + bool itAdvanced = false; + + osg::Vec3 vec; + float f; + + if (fr[0].matchWord("acceleration")) { + if (fr[1].getFloat(vec.x()) && fr[2].getFloat(vec.y()) && fr[3].getFloat(vec.z())) { + myobj.setAcceleration(vec); + fr += 4; + itAdvanced = true; + } + } + + if (fr[0].matchWord("viscosity")) { + if (fr[1].getFloat(f)) { + myobj.setFluidViscosity(f); + fr += 2; + itAdvanced = true; + } + } + + if (fr[0].matchWord("density")) { + if (fr[1].getFloat(f)) { + myobj.setFluidViscosity(f); + fr += 2; + itAdvanced = true; + } + } + + if (fr[0].matchWord("wind")) { + if (fr[1].getFloat(vec.x()) && fr[2].getFloat(vec.y()) && fr[3].getFloat(vec.z())) { + myobj.setWind(vec); + fr += 4; + itAdvanced = true; + } + } + + return itAdvanced; +} + +bool FluidProgram_writeLocalData(const osg::Object &obj, osgDB::Output &fw) +{ + const osgParticle::FluidProgram &myobj = static_cast(obj); + + osg::Vec3 vec; + float f; + + vec = myobj.getAcceleration(); + fw.indent() << "acceleration " << vec << std::endl; + + f = myobj.getFluidViscosity(); + fw.indent() << "viscosity " << f << std::endl; + + f = myobj.getFluidDensity(); + fw.indent() << "density " << f << std::endl; + + vec = myobj.getWind(); + fw.indent() << "wind " << vec << std::endl; + + return true; +}