#include #include #include #include static bool checkDomains( const osgParticle::DomainOperator& dp ) { return dp.getNumDomains()>0; } static bool readDomains( osgDB::InputStream& is, osgParticle::DomainOperator& dp ) { osgParticle::DomainOperator::Domain::Type type = osgParticle::DomainOperator::Domain::UNDEFINED_DOMAIN; unsigned int size = 0; is >> size >> osgDB::BEGIN_BRACKET; for ( unsigned int i=0; i> osgDB::PROPERTY("Domain") >> typeName >> osgDB::BEGIN_BRACKET; if (typeName=="POINT") type = osgParticle::DomainOperator::Domain::POINT_DOMAIN; else if (typeName=="LINE") type = osgParticle::DomainOperator::Domain::LINE_DOMAIN; else if (typeName=="TRIANGLE") type = osgParticle::DomainOperator::Domain::TRI_DOMAIN; else if (typeName=="RECTANGLE") type = osgParticle::DomainOperator::Domain::RECT_DOMAIN; else if (typeName=="PLANE") type = osgParticle::DomainOperator::Domain::PLANE_DOMAIN; else if (typeName=="SPHERE") type = osgParticle::DomainOperator::Domain::SPHERE_DOMAIN; else if (typeName=="BOX") type = osgParticle::DomainOperator::Domain::BOX_DOMAIN; else if (typeName=="DISK") type = osgParticle::DomainOperator::Domain::DISK_DOMAIN; osgParticle::DomainOperator::Domain domain(type); is >> osgDB::PROPERTY("Plane") >> domain.plane; is >> osgDB::PROPERTY("Vertices1") >> domain.v1; is >> osgDB::PROPERTY("Vertices2") >> domain.v2; is >> osgDB::PROPERTY("Vertices3") >> domain.v3; is >> osgDB::PROPERTY("Basis1") >> domain.s1; is >> osgDB::PROPERTY("Basis2") >> domain.s2; is >> osgDB::PROPERTY("Factors") >> domain.r1 >> domain.r2; dp.addDomain(domain); is >> osgDB::END_BRACKET; } is >> osgDB::END_BRACKET; return true; } static bool writeDomains( osgDB::OutputStream& os, const osgParticle::DomainOperator& dp ) { unsigned int size = dp.getNumDomains(); os << size << osgDB::BEGIN_BRACKET << std::endl; for ( unsigned int i=0; i