VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtFxForce.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <libvecmat_float.h>
13 #include <bdiFarPosition.h>
14 
15 #include <bdi_simple_templates.h>
16 
17 #include <vrvFx/vrvFx.h>
18 
19 #include <vrvFx/DtFxScriptData.h>
20 
22 #include <osgEarth/SimplexNoise>
23 
24 class bdiVec3fArray;
25 class bdiVec4fArray;
26 class bdiCfgEntry;
27 
28 namespace makVrv
29 {
30  struct DtFxParticle;
31  class DtFxParticleSystem;
32 
36  {
37  public:
39  DtFxForce();
41  DtFxForce(const DtFxForce& rhs);
43  virtual ~DtFxForce() { ; }
44 
46  virtual bdiCfgEntry* create_cfg_entry() const;
48  virtual int read_cfg_entries(bdiCfgEntry* cfg_entry);
49 
51  virtual void setParticleManager(DtFxParticleSystemManager* manager) { m_particle_manager = manager; }
52 
54  virtual void setPosition(double x, double y, double z);
55  virtual void setPosition(const bdiFarPosition& pos) { m_position = pos; }
56 
58  const bdiFarPosition& position() const { return m_position; }
60  virtual void setSourceSystem(DtFxParticleSystem* system) { m_source_system = system; }
61 
63  virtual void setSourceForce(DtFxForce* force) { m_source_force = force; }
64  virtual DtFxForce* sourceForce() const { return m_source_force; }
65 
67  virtual void setRadius(float radius) { m_radius = radius; }
68  virtual float radius() const { return m_radius; };
69 
71  virtual void setForceType(ForceType forceType) { m_force_type = forceType; }
72  virtual ForceType forceType() const { return m_force_type; }
73 
75  virtual void setFalloffType(FalloffType falloffType) { m_falloff_type = falloffType; }
76  virtual FalloffType falloffType() const { return m_falloff_type; }
77 
79  virtual void setForceStrength(float str) { m_force = str; }
80  virtual float forceStrength() const { return m_force; }
81 
83  virtual void setForceDirection(float x, float y, float z) { m_direction = bdiVec3f(x, y, z); }
84  virtual const bdiVec3f& forceDirection() const { return m_direction; }
85 
87  virtual void setGlobalForce(bool global) { m_global_force = global; }
88  virtual bool globalForce() const { return m_global_force; }
89 
91  virtual void render_into_vbo(const bdiFarPosition& eyePoint, const bdiFarPosition& globalPos,
92  const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv,
93  bdiVec3fArray& verts, bdiVec4fArray& colors) const;
94 
96  virtual void render_into_vbo(const bdiFarPosition& eyePoint, bdiVec3fArray& verts, bdiVec4fArray& colors) const;
97 
99  virtual float calcBoundingRadius() const;
100 
102  virtual void updateGlobalPosition(const bdiFarPosition& position,
103  const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv);
104 
106  const bdiString& forceScript() const { return myForceScript; }
107 
109  virtual void updateForceStrength();
110 
111  void applyForceGeocentric(const DtFxParticleSystem* system, float quantum,
112  const bdiFarPosition& currentForcePosition, const bdiMat4f& geocentricMat, const bdiMat4f& geocentricMatInv,
113  const bdiVec3f& upVec, DtFxParticle* pParticle, float particle_mass) const;
114 
115  void applyForceFlatEarth(const DtFxParticleSystem* system, float quantum,
116  const bdiFarPosition& currentForcePosition,
117  const bdiVec3f& upVec, DtFxParticle* pParticle, float particle_mass) const;
118 
119  inline const bdiMat4f& geocentricMat() const { return myGeocentricMat; }
120  inline const bdiMat4f& geocentricMatInv() const { return myGeocentricMatInv; }
121 
124 
125  protected:
127  bdiFarPosition m_position;
128  bdiFarPosition m_last_geoc_position;
129  float m_force;
130  float m_radius;
131  bdiVec3f m_direction;
137  // global
138  bdiMat4f myGeocentricMat;
140 
141  bdiString myForceScript;
143 
144  static osgEarth::Util::SimplexNoise theNoise;
145 
146  };
147 }
148 
149 #ifdef LIBBDIOBJECT_ARRAY_TYPE
150 #undef LIBBDIOBJECT_ARRAY_TYPE
151 #endif
152 #ifdef LIBBDIOBJECT_ARRAY_CLASS_NAME
153 #undef LIBBDIOBJECT_ARRAY_CLASS_NAME
154 #endif
155 #ifdef LIBBDIOBJECT_ARRAY_DECLSPEC_bdiutil
156 #undef LIBBDIOBJECT_ARRAY_DECLSPEC_bdiutil
157 #endif
158 
159 #define LIBBDIOBJECT_ARRAY_TYPE makVrv::DtFxForce
160 #define LIBBDIOBJECT_ARRAY_CLASS_NAME DtFxForceArray
161 #define LIBBDIOBJECT_ARRAY_INLINE
162 #define LIBBDIOBJECT_ARRAY_DISABLE_BOUNDS_CHECKING
163 
166 
167 #undef LIBBDIOBJECT_ARRAY_DISABLE_BOUNDS_CHECKING
168 #undef LIBBDIOBJECT_ARRAY_INLINE
169 #undef LIBBDIOBJECT_ARRAY_TYPE
170 #undef LIBBDIOBJECT_ARRAY_CLASS_NAME
171 
float m_force
Definition: DtFxForce.h:129
class that allows clients to add global forces (no export of virtual base class)
Definition: DtFxForceInterface.h:19
DtFxForce * m_source_force
Definition: DtFxForce.h:135
Definition: bdiQPropTree_subclasses.h:288
virtual const bdiVec3f & forceDirection() const
Definition: DtFxForce.h:84
virtual float forceStrength() const
Definition: DtFxForce.h:80
DtFxParticleSystemManager is the manager for all the particle systems and descriptions diguy sdk comm...
Definition: DtFxParticleSystemManager.h:74
virtual bool globalForce() const
Definition: DtFxForce.h:88
a cpu side particle representation
Definition: DtFxParticleSystem.h:319
virtual ForceType forceType() const
Definition: DtFxForce.h:72
virtual FalloffType falloffType() const
Definition: DtFxForce.h:76
virtual void setFalloffType(FalloffType falloffType)
sets the falloff type
Definition: DtFxForce.h:75
#define DT_DLL_VRVFX
Definition: vrvFx.h:20
virtual void setParticleManager(DtFxParticleSystemManager *manager)
sets the manager
Definition: DtFxForce.h:51
DtFxScriptData myForceScriptData
Definition: DtFxForce.h:142
Contains script class.
DtFxParticleSystemManager * m_particle_manager
Definition: DtFxForce.h:136
Contains DLL export macros.
virtual DtFxForce * sourceForce() const
Definition: DtFxForce.h:64
virtual ~DtFxForce()
DTOR.
Definition: DtFxForce.h:43
ForceType m_force_type
Definition: DtFxForce.h:132
const bdiString & forceScript() const
gets the force script
Definition: DtFxForce.h:106
wrapper around a parsed expression.
Definition: DtFxScriptData.h:17
bdiMat4f myGeocentricMat
Definition: DtFxForce.h:138
virtual void setSourceForce(DtFxForce *force)
sets the desc force that this cloned from
Definition: DtFxForce.h:63
FalloffType m_falloff_type
Definition: DtFxForce.h:133
bdiVec3f m_direction
Definition: DtFxForce.h:131
const bdiFarPosition & position() const
gets the position
Definition: DtFxForce.h:58
virtual void setForceStrength(float str)
sets the force strength
Definition: DtFxForce.h:79
bdiFarPosition m_position
Definition: DtFxForce.h:127
const bdiMat4f & geocentricMat() const
Definition: DtFxForce.h:119
DtParticleSystem is implementation of the particle system, vrvOsg communicates with it via DtParticle...
Definition: DtFxParticleSystem.h:387
ForceType
Definition: DtFxForceInterface.h:22
virtual void setSourceSystem(DtFxParticleSystem *system)
sets the system that created this force
Definition: DtFxForce.h:60
bdiMat4f myGeocentricMatInv
Definition: DtFxForce.h:139
virtual void setRadius(float radius)
sets the volume of the force, only used for None falloff type, other ones will be derived base on fal...
Definition: DtFxForce.h:67
virtual void setPosition(const bdiFarPosition &pos)
Definition: DtFxForce.h:55
forces to include that influence the particles movement /ingroup vrvFx
Definition: DtFxForce.h:35
bdiFarPosition m_last_geoc_position
Definition: DtFxForce.h:128
virtual void setForceDirection(float x, float y, float z)
currently only used for wind
Definition: DtFxForce.h:83
bdiString myForceScript
Definition: DtFxForce.h:141
const bdiMat4f & geocentricMatInv() const
Definition: DtFxForce.h:120
virtual void setForceType(ForceType forceType)
sets the type of force
Definition: DtFxForce.h:71
virtual void setGlobalForce(bool global)
is this a global force
Definition: DtFxForce.h:87
FalloffType
Definition: DtFxForceInterface.h:34
bool m_global_force
Definition: DtFxForce.h:126
float m_radius
Definition: DtFxForce.h:130
DtFxParticleSystem * m_source_system
Definition: DtFxForce.h:134
static osgEarth::Util::SimplexNoise theNoise
Definition: DtFxForce.h:144
virtual float radius() const
Definition: DtFxForce.h:68

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)