15 #ifndef OSGPARTICLE_DOMAINOPERATOR
16 #define OSGPARTICLE_DOMAINOPERATOR
19 #include <osgParticle/Operator>
20 #include <osgParticle/Particle>
65 :
Operator(copy, copyop), _domains(copy._domains), _backupDomains(copy._backupDomains)
71 inline void addPointDomain(
const osg::Vec3& p );
83 inline void addPlaneDomain(
const osg::Plane& plane );
86 inline void addSphereDomain(
const osg::Vec3& c,
float r );
92 inline void addDiskDomain(
const osg::Vec3& c,
const osg::Vec3& n,
float r1,
float r2=0.0f );
102 {
if (i<_domains.size()) _domains.erase(_domains.begin() + i); }
111 void operate(
Particle* P,
double dt );
114 void beginOperate(
Program* prg );
133 inline void ignore(
const std::string& func );
153 domain.
r1 = (v2 - v1).length();
174 domain.
plane.
set(corner, corner+w, corner+h);
217 float det = w.
z()*u.
x()*v.y() - w.
z()*u.
y()*v.x() - u.
z()*w.
x()*v.y() -
218 u.
x()*v.z()*w.
y() + v.z()*w.
x()*u.
y() + u.
z()*v.x()*w.
y();
221 s1.
set( v.y()*w.
z() - v.z()*w.
y(), v.z()*w.
x() - v.x()*w.
z(), v.x()*w.
y() - v.y()*w.
x() );
223 s2.
set( u.
y()*w.
z() - u.
z()*w.
y(), u.
z()*w.
x() - u.
x()*w.
z(), u.
x()*w.
y() - u.
y()*w.
x() );
std::vector< Domain > _domains
void removeDomain(unsigned int i)
Remove a domain at specific index.
void addPointDomain(const osg::Vec3 &p)
Add a point domain.
const Domain & getDomain(unsigned int i) const
Get a domain object directly, used by the .osg wrappers and serializers.
virtual void handleSphere(const Domain &, Particle *, double)
void addPlaneDomain(const osg::Plane &plane)
Add a plane domain.
unsigned int getNumDomains() const
Get number of domains.
void ignore(const std::string &func)
virtual void handleBox(const Domain &, Particle *, double)
virtual ~DomainOperator()
void set(const Plane &pl)
void removeAllDomains()
Remove all existing domains.
void addRectangleDomain(const osg::Vec3 &corner, const osg::Vec3 &w, const osg::Vec3 &h)
Add a rectangle domain.
virtual void handlePlane(const Domain &, Particle *, double)
DomainOperator & operator=(const DomainOperator &)
virtual const char * className() const
virtual void handleRectangle(const Domain &, Particle *, double)
void addSphereDomain(const osg::Vec3 &c, float r)
Add a sphere domain.
#define OSGPARTICLE_EXPORT
void addDomain(const Domain &domain)
Add a domain object directly, used by the .osg wrappers and serializers.
void addBoxDomain(const osg::Vec3 &min, const osg::Vec3 &max)
Add a box domain.
#define META_Object(library, name)
void set(value_type x, value_type y, value_type z)
void addLineSegmentDomain(const osg::Vec3 &v1, const osg::Vec3 &v2)
Add a line segment domain.
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
virtual void handleTriangle(const Domain &, Particle *, double)
A plane class. It can be used to represent an infinite plane.
DomainOperator(const DomainOperator ©, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
void addDiskDomain(const osg::Vec3 &c, const osg::Vec3 &n, float r1, float r2=0.0f)
Add a disk domain.
virtual void handleLineSegment(const Domain &, Particle *, double)
void addTriangleDomain(const osg::Vec3 &v1, const osg::Vec3 &v2, const osg::Vec3 &v3)
Add a triangle domain.
void computeNewBasis(const osg::Vec3 &, const osg::Vec3 &, osg::Vec3 &, osg::Vec3 &)
virtual void handlePoint(const Domain &, Particle *, double)
std::vector< Domain > _backupDomains
virtual void handleDisk(const Domain &, Particle *, double)