AnimatLab  2
Test
RigidBody.h
Go to the documentation of this file.
1 
7 #pragma once
8 
9 namespace AnimatSim
10 {
11  namespace Environment
12  {
13  class Odor;
14 
66  class ANIMAT_PORT RigidBody : public BodyPart
67  {
68  protected:
71  CStdFPoint m_vCenterOfMass;
72 
76  bool m_bFreeze;
77 
79  float m_fltDensity;
80 
83 
85  float m_fltMass;
86 
89 
91  float m_fltVolume;
92 
95 
98  CStdPtrArray<RigidBody> m_aryChildParts;
99 
104 
108 
112 
115 
119 
124 
127 
130 
134 
137 
140 
142  CStdPtrMap<std::string, Odor> m_aryOdorSources;
143 
146 
149 
152 
155 
158 
161 
164 
167 
169  std::string m_strMaterialID;
170 
171  //Hyrdrodynamic properties
173  CStdFPoint m_vBuoyancyCenter;
174 
179 
181  CStdFPoint m_vLinearDrag;
182 
184  CStdFPoint m_vAngularDrag;
185 
188 
191 
193  float m_fltMagnus;
194 
197 
201 
203  std::unordered_set<RigidBody *> m_aryExcludeCollisionSet;
204 
205  virtual RigidBody *LoadRigidBody(CStdXml &oXml);
206  virtual Joint *LoadJoint(CStdXml &oXml);
207 
208  virtual void LoadPosition(CStdXml &oXml);
209 
210  virtual RigidBody *AddRigidBody(std::string strXml);
211  virtual void RemoveRigidBody(std::string strID, bool bThrowError = true);
212  virtual int FindChildListPos(std::string strID, bool bThrowError = true);
213 
214  virtual void AddContactSensor(std::string strXml);
215  virtual void RemoveContactSensor(std::string strID, bool bThrowError = true);
216  virtual void LoadContactSensor(CStdXml &oXml);
217 
218  virtual Odor *LoadOdor(CStdXml &oXml);
219  virtual void AddOdor(Odor *lpOdor);
220  virtual void AddOdor(std::string strXml, bool bDoNotInit);
221  virtual void RemoveOdor(std::string strID, bool bThrowError = true);
222 
223  virtual void Mass(float fltVal, bool bUseScaling, bool bPhysicsCallback);
224  virtual void CenterOfMass(CStdFPoint &vPoint, bool bUseScaling, bool bPhysicsCallback);
225  virtual void Freeze(bool bVal, bool bPhysicsCallback);
226 
227  virtual void RemoveCollisionExclusions();
228 
229  public:
230  RigidBody();
231  virtual ~RigidBody();
232 
233  static RigidBody *CastToDerived(AnimatBase *lpBase) {return static_cast<RigidBody*>(lpBase);}
234 
235 #pragma region AccessorMutators
236 
237  virtual CStdFPoint Position();
238  virtual void Position(CStdFPoint &oPoint, bool bUseScaling = true, bool bFireChangeEvent = false, bool bUpdateMatrix = true);
239 
240  virtual int VisualSelectionType();
241 
242  virtual CStdFPoint CenterOfMass();
243  virtual CStdFPoint CenterOfMassWithStaticChildren();
244  virtual void CenterOfMass(CStdFPoint &vPoint, bool bUseScaling = true);
245  virtual void CenterOfMass(float fltX, float fltY, float fltZ, bool bUseScaling = true);
246  virtual void CenterOfMass(std::string strXml, bool bUseScaling = true);
247 
248  virtual CStdPtrArray<RigidBody>* ChildParts();
249 
250  virtual Joint *JointToParent();
251  virtual void JointToParent(Joint *lpValue);
252 
253  virtual ContactSensor *GetContactSensor();
254 
255  virtual float Density();
256  virtual void Density(float fltVal, bool bUseScaling = true);
257 
258  virtual float Mass();
259  virtual void Mass(float fltVal, bool bUseScaling = true);
260  virtual float MassWithChildren();
261 
262  virtual float Volume();
263  virtual void Volume(float fltVal, bool bUseScaling = true);
264 
265  virtual bool Freeze();
266  virtual void Freeze(bool bVal);
267 
268  virtual bool IsContactSensor();
269  virtual void IsContactSensor(bool bVal);
270 
271  virtual bool IsCollisionObject();
272  virtual void IsCollisionObject(bool bVal);
273 
274  virtual bool IsStickyPart();
275  virtual void IsStickyPart(bool bVal);
276 
277  virtual float StickyOn();
278  virtual void StickyOn(float fltVal);
279 
280  virtual RigidBody *StickyChild();
281  virtual void StickyChild(RigidBody *lpChild);
282 
283  virtual bool IsRoot();
284  virtual bool HasStaticJoint();
285  virtual bool HasStaticChildren();
286  virtual float StaticChildrenMass();
287 
288  virtual bool IsFoodSource();
289  virtual void IsFoodSource(bool bVal);
290 
291  virtual float FoodQuantity();
292  virtual void FoodQuantity(float fltVal);
293 
294  virtual float FoodEaten();
295  virtual void FoodEaten(float fltVal);
296 
297  virtual float FoodReplenishRate();
298  virtual void FoodReplenishRate(float fltVal);
299 
300  virtual float FoodEnergyContent();
301  virtual void FoodEnergyContent(float fltVal);
302 
303  virtual float MaxFoodQuantity();
304  virtual void MaxFoodQuantity(float fltVal);
305 
306  virtual float LinearVelocityDamping();
307  virtual void LinearVelocityDamping(float fltVal, bool bUseScaling = true);
308 
309  virtual float AngularVelocityDamping();
310  virtual void AngularVelocityDamping(float fltVal, bool bUseScaling = true);
311 
312  virtual std::string MaterialID();
313  virtual void MaterialID(std::string strID);
314 
315  virtual CStdFPoint BuoyancyCenter();
316  virtual void BuoyancyCenter(CStdFPoint &oPoint, bool bUseScaling = true);
317  virtual void BuoyancyCenter(float fltX, float fltY, float fltZ, bool bUseScaling = true);
318  virtual void BuoyancyCenter(std::string strXml, bool bUseScaling = true);
319 
320  virtual float BuoyancyScale();
321  virtual void BuoyancyScale(float fltVal);
322 
323  virtual CStdFPoint LinearDrag();
324  virtual void LinearDrag(CStdFPoint &oPoint);
325  virtual void LinearDrag(float fltX, float fltY, float fltZ);
326  virtual void LinearDrag(std::string strXml);
327 
328  virtual CStdFPoint AngularDrag();
329  virtual void AngularDrag(CStdFPoint &oPoint);
330  virtual void AngularDrag(float fltX, float fltY, float fltZ);
331  virtual void AngularDrag(std::string strXml);
332 
333  virtual float MaxHydroForce();
334  virtual void MaxHydroForce(float fltVal, bool bUseScaling = true);
335 
336  virtual float MaxHydroTorque();
337  virtual void MaxHydroTorque(float fltVal, bool bUseScaling = true);
338 
339  virtual float Magnus();
340  virtual void Magnus(float fltVal);
341 
342  virtual bool EnableFluids();
343  virtual void EnableFluids(bool bVal);
344 
345  virtual bool HasCollisionGeometry();
346 
347  virtual bool DisplayDebugCollisionGraphic() {return m_bDisplayDebugCollisionGraphic;}
348  virtual void DisplayDebugCollisionGraphic(bool bVal) {m_bDisplayDebugCollisionGraphic = bVal;}
349 
350  virtual std::unordered_set<RigidBody *> *GetExclusionCollisionSet() {return &m_aryExcludeCollisionSet;};
351  virtual bool FindCollisionExclusionBody(RigidBody *lpBody, bool bThrowError = true);
352 
353 #pragma endregion
354 
355  virtual float SurfaceContactCount();
356 
357  virtual void Eat(float fltBiteSize, long lTimeSlice);
358  virtual void AddSurfaceContact(RigidBody *lpContactedSurface);
359  virtual void RemoveSurfaceContact(RigidBody *lpContactedSurface);
360  virtual void SetSurfaceContactCount(int iCount);
361  virtual void AddForceAtLocalPos(float fltPx, float fltPy, float fltPz, float fltFx, float fltFy, float fltFz, bool bScaleUnits);
362  virtual void AddForceAtWorldPos(float fltPx, float fltPy, float fltPz, float fltFx, float fltFy, float fltFz, bool bScaleUnits);
363  virtual void AddTorque(float fltTx, float fltTy, float fltTz, bool bScaleUnits);
364  virtual CStdFPoint GetVelocityAtPoint(float x, float y, float z);
365  virtual float GetMassValueWithStaticChildren();
366  virtual float GetDensity();
367  virtual float GetMass();
368  virtual float GetVolume();
369  virtual void UpdatePhysicsPosFromGraphics();
370  virtual void UpdateChildPhysicsPosFromGraphics();
371 
372  virtual RigidBody *ParentWithCollisionGeometry();
373 
374  virtual void EnableCollision(RigidBody *lpBody);
375  virtual void DisableCollision(RigidBody *lpBody);
376 
377  virtual void CreateParts();
378  virtual void CreateChildParts();
379  virtual void CreateJoints();
380  virtual void CreateChildJoints();
381 
382 #pragma region DataAccesMethods
383 
384  virtual float *GetDataPointer(const std::string &strDataType);
385  virtual bool SetData(const std::string &strDataType, const std::string &strValue, bool bThrowError = true);
386  virtual void QueryProperties(CStdPtrArray<TypeProperty> &aryProperties);
387  virtual bool AddItem(const std::string &strItemType, const std::string &strXml, bool bThrowError = true, bool bDoNotInit = false);
388  virtual bool RemoveItem(const std::string &strItemType, const std::string &strID, bool bThrowError = true);
389 
390 #pragma endregion
391 
392  virtual void SimPausing();
393  virtual int GetTargetDataTypeIndex(const std::string &strDataType);
394  virtual void AddExternalNodeInput(int iTargetDataType, float fltInput);
395  virtual void StepSimulation();
396  virtual void ResetSimulation();
397  virtual void AfterResetSimulation();
398  virtual void Kill(bool bState = true);
399  virtual void Load(CStdXml &oXml);
400  };
401 
402  } // Environment
403 } //AnimatSim
The base class for all of the joint type of objects.
Definition: Joint.h:40
ContactSensor * m_lpContactSensor
Definition: RigidBody.h:133
float m_fltAngularVelocityDamping
The angular velocity damping for this part.
Definition: RigidBody.h:139
std::string m_strMaterialID
Identifier for the material type this part will use.
Definition: RigidBody.h:169
Root namespace for the base simulation library for AnimatLab.
CStdFPoint m_vBuoyancyCenter
This is the relative position to the center of the buoyancy in the body.
Definition: RigidBody.h:173
float m_fltMass
The mass of the object.
Definition: RigidBody.h:85
float m_fltVolume
The volume for the rigid body.
Definition: RigidBody.h:91
float m_fltStickyOn
If this is a suction part then this controls when stickness is on.
Definition: RigidBody.h:126
bool m_bFoodSource
Tells if this body is considered a food source.
Definition: RigidBody.h:145
long m_lEatTime
Keeps track of how many time slices this part can eat.
Definition: RigidBody.h:166
float m_fltFoodEnergyContent
The energy content of the food in calories.
Definition: RigidBody.h:163
CStdFPoint m_vLinearDrag
This is the drag coefficients for the three axises for the body.
Definition: RigidBody.h:181
float m_fltMaxHydroForce
The maximum hyrdodynamic force that can be applied.
Definition: RigidBody.h:187
float m_fltReportVolume
The volume of the object to report to GUI.
Definition: RigidBody.h:94
bool m_bEnableFluids
true to enable fluid interactions.
Definition: RigidBody.h:196
float m_fltMaxHydroTorque
The maximum hyrdodynamic torque that can be applied.
Definition: RigidBody.h:190
float m_fltDensity
Uniform density for the rigid body.
Definition: RigidBody.h:79
float m_fltFoodReplenishRate
The rate at which food is replenished.
Definition: RigidBody.h:160
float m_fltReportDensity
The density value reported to the GUI.
Definition: RigidBody.h:82
float m_fltMagnus
The Magnus coefficient for the body. This is defaulted to zero because it almost always negligble for...
Definition: RigidBody.h:193
float m_fltReportMass
The mass of the object to report to GUI.
Definition: RigidBody.h:88
CStdPtrArray< RigidBody > m_aryChildParts
Definition: RigidBody.h:98
Base class for all body parts and joints.
Definition: BodyPart.h:25
RigidBody * m_lpStickyChild
If we are doing a sticky lock then this is the child part that was locked on.
Definition: RigidBody.h:129
Animat base class.
Definition: AnimatBase.h:36
float m_fltFoodQuantityInit
The initial food quantity to use when simulation is reset.
Definition: RigidBody.h:151
float m_fltLinearVelocityDamping
The linear velocity damping for this body part.
Definition: RigidBody.h:136
CStdFPoint m_vAngularDrag
This is the drag coefficients for the three axises for the body.
Definition: RigidBody.h:184
float m_fltFoodQuantity
The quantity of food that this part contains.
Definition: RigidBody.h:148
std::unordered_set< RigidBody * > m_aryExcludeCollisionSet
This is the list of other parts that this part is excluded from colliding with.
Definition: RigidBody.h:203
CStdPtrMap< std::string, Odor > m_aryOdorSources
The array odor sources attached to this part.
Definition: RigidBody.h:142
float m_fltMaxFoodQuantity
The maximum food quantity that this part can contain.
Definition: RigidBody.h:157
float m_fltFoodEaten
Tells how much food is being eaten.
Definition: RigidBody.h:154
Contact sensor for detecting receptive field contacts.
Definition: ContactSensor.h:25
bool m_bIsCollisionObject
This determines whether the object is a collision geometry object.
Definition: RigidBody.h:114
The base class for all of the basic rigid body type of objects.
Definition: RigidBody.h:66