AGX Dynamics 2.42.2.1
Loading...
Searching...
No Matches
RigidBodyEntity.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or
9having been advised so by Algoryx Simulation AB for a time limited evaluation,
10or having purchased a valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
18// AUTOMATICALLY GENERATED ENTITY, DO NOT EDIT! //
20
21#ifndef GENERATED_AGX_PHYSICS_RIGIDBODY_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_RIGIDBODY_H_PLUGIN
23
24#define AGX_ENTITY_WRAPPER 1
25
26
27#ifdef _MSC_VER
28# pragma warning(push)
29// warning C4505: 'agxData::VectorAttributeT<T>::print' : unreferenced local function has been removed
30# pragma warning( disable : 4505 )
31// warning C4251: 'X' : class 'Y' needs to have dll-interface to be used by clients of class 'Z'
32# pragma warning( disable : 4251 )
33// warning C4355: 'this' : used in base member initializer list
34# pragma warning( disable : 4355 )
35// marked as __forceinline not inlined
36# pragma warning( disable: 4714 )
37#endif
38
39#include <agxData/EntityModel.h>
41#include <agxData/EntityRef.h>
42#include <agxData/EntityPtr.h>
44#include <agx/Integer.h>
45#include <agx/Real.h>
46#include <agx/macros.h>
48#include <agx/Integer.h>
49#include <agx/RigidBodyState.h>
50#include <agx/Name.h>
51#include <agx/Real.h>
52#include <agx/Vec3.h>
53#include <agx/SPDMatrix3x3.h>
54#include <agx/Matrix3x3.h>
55#include <agx/AffineMatrix4x4.h>
58#include <agx/Range6.h>
59namespace agx { class RigidBody; }
60
61namespace agx { namespace Physics { class GeometryPtr; }}
62namespace agx { namespace Physics { class GraphNodePtr; }}
63
64namespace agx
65{
66 namespace Physics
67 {
68
69 class RigidBodyModel;
70 class RigidBodyData;
71 class RigidBodyPtr;
72 class RigidBodyInstance;
73 class RigidBodySemantics;
74
75
77
82 {
83 public:
85
86 RigidBodyModel(const agx::String& name = "RigidBody");
87
90
93
96
98 virtual void shutdownCleanup() override;
99
100
101
102 /* Attributes */
144
145 protected:
147 virtual agxData::EntityData* createData(agxData::EntityStorage* storage) override;
148 virtual void configure(agx::TiXmlElement* eEntity) override;
149 virtual void initAttributeAccessors() override;
150 virtual void construct(agxData::EntityPtr instance) override;
152 };
153
154
156 #ifndef AGX_PHYSICS_RIGIDBODY_DATA_SET_OVERRIDE
157 #define AGX_PHYSICS_RIGIDBODY_DATA_SET
158 class AGXPHYSICS_EXPORT RigidBodyData : public agx::ReferencedData
159 {
160 public:
161 RigidBodyInstance operator[] (size_t index);
162
163 public:
170 agxData::Array< agx::Vec3 > effectiveMass;
171 agxData::Array< agx::Vec3 > effectiveMassCoefficients;
172 agxData::Array< agx::Vec3 > effectiveMassTransformDiagonal;
175 agxData::Array< agx::Vec3 > effectiveInertiaCoefficients;
176 agxData::Array< agx::Matrix3x3 > worldMassMatrix;
177 agxData::Array< agx::Matrix3x3 > invWorldMassMatrix;
178 agxData::Array< agx::Matrix3x3 > effectiveWorldMassMatrix;
179 agxData::Array< agx::Matrix3x3 > effectiveInvWorldMassMatrix;
181 agxData::Array< agx::Matrix3x3 > invWorldInertia;
182 agxData::Array< agx::Matrix3x3 > effectiveWorldInertia;
183 agxData::Array< agx::Matrix3x3 > effectiveInvWorldInertia;
189 agxData::Array< agx::AffineMatrix4x4 > localModelTransform;
193 agxData::Array< agx::Vec3 > angularVelocity;
194 agxData::Array< agx::Vec3 > linearAcceleration;
195 agxData::Array< agx::Vec3 > angularAcceleration;
196 agxData::Array< agx::Vec3f > linearVelocityDamping;
197 agxData::Array< agx::Vec3f > angularVelocityDamping;
198 agxData::Array< agx::Vec3f > linearVelocityZeroDamping;
199 agxData::Array< agx::Vec3f > angularVelocityZeroDamping;
202 agxData::Array< agx::Range6 > velocityRanges;
205 agxData::Array< agx::UInt16 > numConstraints;
206
207 public:
208 typedef agx::UInt32 idType;
209 typedef agx::RigidBodyState stateType;
210 typedef agx::Name nameType;
211 typedef agx::Real massType;
212 typedef agx::Real invMassType;
213 typedef agx::Vec3 effectiveMassType;
214 typedef agx::Vec3 effectiveMassCoefficientsType;
215 typedef agx::Vec3 effectiveMassTransformDiagonalType;
216 typedef agx::SPDMatrix3x3 inertiaType;
217 typedef agx::SPDMatrix3x3 effectiveInertiaType;
218 typedef agx::Vec3 effectiveInertiaCoefficientsType;
219 typedef agx::Matrix3x3 worldMassMatrixType;
220 typedef agx::Matrix3x3 invWorldMassMatrixType;
221 typedef agx::Matrix3x3 effectiveWorldMassMatrixType;
222 typedef agx::Matrix3x3 effectiveInvWorldMassMatrixType;
223 typedef agx::Matrix3x3 worldInertiaType;
224 typedef agx::Matrix3x3 invWorldInertiaType;
225 typedef agx::Matrix3x3 effectiveWorldInertiaType;
226 typedef agx::Matrix3x3 effectiveInvWorldInertiaType;
227 typedef agx::Vec3 forceType;
228 typedef agx::Vec3 torqueType;
229 typedef agx::Vec3 lastForceType;
230 typedef agx::Vec3 lastTorqueType;
231 typedef agx::AffineMatrix4x4 modelTransformType;
232 typedef agx::AffineMatrix4x4 localModelTransformType;
233 typedef agx::AffineMatrix4x4 cmTransformType;
234 typedef agx::AffineMatrix4x4 localCmTransformType;
235 typedef agx::Vec3 velocityType;
236 typedef agx::Vec3 angularVelocityType;
237 typedef agx::Vec3 linearAccelerationType;
238 typedef agx::Vec3 angularAccelerationType;
239 typedef agx::Vec3f linearVelocityDampingType;
240 typedef agx::Vec3f angularVelocityDampingType;
241 typedef agx::Vec3f linearVelocityZeroDampingType;
242 typedef agx::Vec3f angularVelocityZeroDampingType;
243 typedef agx::Physics::GeometryPtr geometryType;
244 typedef agx::Physics::GraphNodePtr graphNodeType;
245 typedef agx::Range6 velocityRangesType;
246 typedef agx::RigidBody* modelType;
247 typedef agx::UInt32 solveIndexType;
248 typedef agx::UInt16 numConstraintsType;
249
250 public:
251 RigidBodyData(agxData::EntityStorage* storage);
252 RigidBodyData();
253
254 protected:
255 virtual ~RigidBodyData() {}
256 virtual void setNumElements(agx::Index numElements) override;
257
258 private:
259 RigidBodyData& operator= (const RigidBodyData&) { return *this; }
260
261 };
262 #endif
264
265
267 class AGXPHYSICS_EXPORT RigidBodySemantics : public agx::ReferencedSemantics
268 {
269 public:
270
271 // Automatic getters
272 agx::UInt32 const& getId() const;
273 agx::RigidBodyState const& getState() const;
274 agx::Name const& getName() const;
275 agx::Real const& getMass() const;
276 agx::Real const& getInvMass() const;
277 agx::Vec3 const& getEffectiveMass() const;
278 agx::Vec3 const& getEffectiveMassCoefficients() const;
279 agx::Vec3 const& getEffectiveMassTransformDiagonal() const;
280 agx::SPDMatrix3x3 const& getInertia() const;
281 agx::SPDMatrix3x3 const& getEffectiveInertia() const;
282 agx::Vec3 const& getEffectiveInertiaCoefficients() const;
283 agx::Matrix3x3 const& getWorldMassMatrix() const;
284 agx::Matrix3x3 const& getInvWorldMassMatrix() const;
285 agx::Matrix3x3 const& getEffectiveWorldMassMatrix() const;
286 agx::Matrix3x3 const& getEffectiveInvWorldMassMatrix() const;
287 agx::Matrix3x3 const& getWorldInertia() const;
288 agx::Matrix3x3 const& getInvWorldInertia() const;
289 agx::Matrix3x3 const& getEffectiveWorldInertia() const;
290 agx::Matrix3x3 const& getEffectiveInvWorldInertia() const;
291 agx::Vec3 const& getForce() const;
292 agx::Vec3 const& getTorque() const;
293 agx::Vec3 const& getLastForce() const;
294 agx::Vec3 const& getLastTorque() const;
295 agx::AffineMatrix4x4 const& getModelTransform() const;
296 agx::AffineMatrix4x4 const& getLocalModelTransform() const;
297 agx::AffineMatrix4x4 const& getCmTransform() const;
298 agx::AffineMatrix4x4 const& getLocalCmTransform() const;
299 agx::Vec3 const& getVelocity() const;
300 agx::Vec3 const& getAngularVelocity() const;
301 agx::Vec3 const& getLinearAcceleration() const;
302 agx::Vec3 const& getAngularAcceleration() const;
303 agx::Vec3f const& getLinearVelocityDamping() const;
304 agx::Vec3f const& getAngularVelocityDamping() const;
305 agx::Vec3f const& getLinearVelocityZeroDamping() const;
306 agx::Vec3f const& getAngularVelocityZeroDamping() const;
307 agx::Physics::GeometryPtr const& getGeometry() const;
308 agx::Physics::GraphNodePtr const& getGraphNode() const;
309 agx::Range6 const& getVelocityRanges() const;
310 agx::RigidBody* const& getModel() const;
311 agx::UInt32 const& getSolveIndex() const;
312 agx::UInt16 const& getNumConstraints() const;
313
314 // Semantics defined by explicit kernels
315
316 // Automatic setters
317 void setId(agx::UInt32 const& value);
318 void setState(agx::RigidBodyState const& value);
319 void setName(agx::Name const& value);
320 void setMass(agx::Real const& value);
321 void setInvMass(agx::Real const& value);
322 void setEffectiveMass(agx::Vec3 const& value);
323 void setEffectiveMassCoefficients(agx::Vec3 const& value);
324 void setEffectiveMassTransformDiagonal(agx::Vec3 const& value);
325 void setInertia(agx::SPDMatrix3x3 const& value);
326 void setEffectiveInertia(agx::SPDMatrix3x3 const& value);
327 void setEffectiveInertiaCoefficients(agx::Vec3 const& value);
328 void setWorldMassMatrix(agx::Matrix3x3 const& value);
329 void setInvWorldMassMatrix(agx::Matrix3x3 const& value);
330 void setEffectiveWorldMassMatrix(agx::Matrix3x3 const& value);
331 void setEffectiveInvWorldMassMatrix(agx::Matrix3x3 const& value);
332 void setWorldInertia(agx::Matrix3x3 const& value);
333 void setInvWorldInertia(agx::Matrix3x3 const& value);
334 void setEffectiveWorldInertia(agx::Matrix3x3 const& value);
335 void setEffectiveInvWorldInertia(agx::Matrix3x3 const& value);
336 void setForce(agx::Vec3 const& value);
337 void setTorque(agx::Vec3 const& value);
338 void setLastForce(agx::Vec3 const& value);
339 void setLastTorque(agx::Vec3 const& value);
340 void setModelTransform(agx::AffineMatrix4x4 const& value);
341 void setLocalModelTransform(agx::AffineMatrix4x4 const& value);
342 void setCmTransform(agx::AffineMatrix4x4 const& value);
343 void setLocalCmTransform(agx::AffineMatrix4x4 const& value);
344 void setVelocity(agx::Vec3 const& value);
345 void setAngularVelocity(agx::Vec3 const& value);
346 void setLinearAcceleration(agx::Vec3 const& value);
347 void setAngularAcceleration(agx::Vec3 const& value);
348 void setLinearVelocityDamping(agx::Vec3f const& value);
349 void setAngularVelocityDamping(agx::Vec3f const& value);
350 void setLinearVelocityZeroDamping(agx::Vec3f const& value);
351 void setAngularVelocityZeroDamping(agx::Vec3f const& value);
352 void setGeometry(agx::Physics::GeometryPtr const& value);
353 void setGraphNode(agx::Physics::GraphNodePtr const& value);
354 void setVelocityRanges(agx::Range6 const& value);
355 void setModel(agx::RigidBody* const& value);
356 void setSolveIndex(agx::UInt32 const& value);
357 void setNumConstraints(agx::UInt16 const& value);
358
359
360 protected:
361 friend class RigidBodyPtr;
362 friend class RigidBodyInstance;
363 RigidBodySemantics();
364 };
366
367
368
372 {
373 public:
375 typedef RigidBodyData DataType;
376 typedef RigidBodyInstance InstanceType;
377
378 public:
385 AGXPHYSICS_EXPORT RigidBodyInstance instance();
386 AGXPHYSICS_EXPORT const RigidBodyInstance instance() const;
387
388 AGXPHYSICS_EXPORT RigidBodySemantics* operator->();
389 AGXPHYSICS_EXPORT const RigidBodySemantics* operator->() const;
390
391 RigidBodyData* getData();
392 const RigidBodyData* getData() const;
393
394
399
401 AGXPHYSICS_EXPORT agx::RigidBodyState& state();
403 AGXPHYSICS_EXPORT agx::RigidBodyState const& state() const;
404
409
414
419
424
429
434
439
444
449
454
459
464
469
474
479
484
489
494
499
504
509
514
519
524
529
534
539
544
549
554
559
564
569
574
579
584
589
594
599
600 };
601
602 // Entity is Referenced
604
605
607 class AGXPHYSICS_EXPORT RigidBodyInstance : public agx::ReferencedInstance
608 {
609 public:
610 RigidBodyInstance();
611 RigidBodyInstance(RigidBodyData* data, agx::Index index);
612 RigidBodyInstance(agxData::EntityStorage *storage, agx::Index index);
613 RigidBodyInstance(const agxData::EntityInstance& other);
614 RigidBodyInstance(const agxData::EntityPtr& ptr);
615
616 RigidBodyData* getData();
617 const RigidBodyData* getData() const;
618
619 public:
621 agx::UInt32& id();
623 agx::UInt32 const& id() const;
624
626 agx::RigidBodyState& state();
628 agx::RigidBodyState const& state() const;
629
631 agx::Name& name();
633 agx::Name const& name() const;
634
636 agx::Real& mass();
638 agx::Real const& mass() const;
639
641 agx::Real& invMass();
643 agx::Real const& invMass() const;
644
646 agx::Vec3& effectiveMass();
648 agx::Vec3 const& effectiveMass() const;
649
651 agx::Vec3& effectiveMassCoefficients();
653 agx::Vec3 const& effectiveMassCoefficients() const;
654
656 agx::Vec3& effectiveMassTransformDiagonal();
658 agx::Vec3 const& effectiveMassTransformDiagonal() const;
659
661 agx::SPDMatrix3x3& inertia();
663 agx::SPDMatrix3x3 const& inertia() const;
664
666 agx::SPDMatrix3x3& effectiveInertia();
668 agx::SPDMatrix3x3 const& effectiveInertia() const;
669
671 agx::Vec3& effectiveInertiaCoefficients();
673 agx::Vec3 const& effectiveInertiaCoefficients() const;
674
676 agx::Matrix3x3& worldMassMatrix();
678 agx::Matrix3x3 const& worldMassMatrix() const;
679
681 agx::Matrix3x3& invWorldMassMatrix();
683 agx::Matrix3x3 const& invWorldMassMatrix() const;
684
686 agx::Matrix3x3& effectiveWorldMassMatrix();
688 agx::Matrix3x3 const& effectiveWorldMassMatrix() const;
689
691 agx::Matrix3x3& effectiveInvWorldMassMatrix();
693 agx::Matrix3x3 const& effectiveInvWorldMassMatrix() const;
694
696 agx::Matrix3x3& worldInertia();
698 agx::Matrix3x3 const& worldInertia() const;
699
701 agx::Matrix3x3& invWorldInertia();
703 agx::Matrix3x3 const& invWorldInertia() const;
704
706 agx::Matrix3x3& effectiveWorldInertia();
708 agx::Matrix3x3 const& effectiveWorldInertia() const;
709
711 agx::Matrix3x3& effectiveInvWorldInertia();
713 agx::Matrix3x3 const& effectiveInvWorldInertia() const;
714
716 agx::Vec3& force();
718 agx::Vec3 const& force() const;
719
721 agx::Vec3& torque();
723 agx::Vec3 const& torque() const;
724
726 agx::Vec3& lastForce();
728 agx::Vec3 const& lastForce() const;
729
731 agx::Vec3& lastTorque();
733 agx::Vec3 const& lastTorque() const;
734
736 agx::AffineMatrix4x4& modelTransform();
738 agx::AffineMatrix4x4 const& modelTransform() const;
739
741 agx::AffineMatrix4x4& localModelTransform();
743 agx::AffineMatrix4x4 const& localModelTransform() const;
744
746 agx::AffineMatrix4x4& cmTransform();
748 agx::AffineMatrix4x4 const& cmTransform() const;
749
751 agx::AffineMatrix4x4& localCmTransform();
753 agx::AffineMatrix4x4 const& localCmTransform() const;
754
756 agx::Vec3& velocity();
758 agx::Vec3 const& velocity() const;
759
761 agx::Vec3& angularVelocity();
763 agx::Vec3 const& angularVelocity() const;
764
766 agx::Vec3& linearAcceleration();
768 agx::Vec3 const& linearAcceleration() const;
769
771 agx::Vec3& angularAcceleration();
773 agx::Vec3 const& angularAcceleration() const;
774
776 agx::Vec3f& linearVelocityDamping();
778 agx::Vec3f const& linearVelocityDamping() const;
779
781 agx::Vec3f& angularVelocityDamping();
783 agx::Vec3f const& angularVelocityDamping() const;
784
786 agx::Vec3f& linearVelocityZeroDamping();
788 agx::Vec3f const& linearVelocityZeroDamping() const;
789
791 agx::Vec3f& angularVelocityZeroDamping();
793 agx::Vec3f const& angularVelocityZeroDamping() const;
794
796 agx::Physics::GeometryPtr& geometry();
798 agx::Physics::GeometryPtr const& geometry() const;
799
801 agx::Physics::GraphNodePtr& graphNode();
803 agx::Physics::GraphNodePtr const& graphNode() const;
804
806 agx::Range6& velocityRanges();
808 agx::Range6 const& velocityRanges() const;
809
811 agx::RigidBody*& model();
813 agx::RigidBody* const& model() const;
814
816 agx::UInt32& solveIndex();
818 agx::UInt32 const& solveIndex() const;
819
821 agx::UInt16& numConstraints();
823 agx::UInt16 const& numConstraints() const;
824
825 };
827
828
829
832
833
834
836 /* Implementation */
837 //-----------------------------------------------------------------------------------------------------
838 //-----------------------------------------------------------------------------------------------------
839 inline RigidBodyInstance agx::Physics::RigidBodyData::operator[] (size_t index) { return RigidBodyInstance(this, (agx::Index)index); }
840 //-----------------------------------------------------------------------------------------------------
842 AGX_FORCE_INLINE RigidBodyPtr::RigidBodyPtr(agxData::EntityStorage* storage, agx::Index id) : agx::ReferencedPtr(storage, id) {}
843 AGX_FORCE_INLINE RigidBodyPtr::RigidBodyPtr(const agxData::EntityPtr& ptr) : agx::ReferencedPtr(ptr)
844 {
846 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
847 EntityPtr::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
848 }
849
850 AGX_FORCE_INLINE RigidBodyPtr::RigidBodyPtr(const agxData::EntityInstance& instance) : agx::ReferencedPtr(instance)
851 {
852 agxAssertN(!instance || instance.isInstanceOf(RigidBodyModel::instance()),
853 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
854 EntityPtr::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
855 }
856
857 AGX_FORCE_INLINE RigidBodyPtr& RigidBodyPtr::operator= (const agxData::EntityPtr& ptr)
858 {
860 agxAssertN(!ptr || ptr.isInstanceOf(RigidBodyModel::instance()),
861 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
862 EntityPtr::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
863 return *this;
864 }
865
866 AGX_FORCE_INLINE RigidBodyPtr& RigidBodyPtr::operator= (const agxData::EntityInstance& instance)
867 {
869 agxAssertN(!instance || instance.isInstanceOf(RigidBodyModel::instance()),
870 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
871 EntityPtr::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
872 return *this;
873 }
874
875 inline RigidBodyInstance RigidBodyPtr::instance() { return agxData::EntityPtr::instance(); }
876 inline const RigidBodyInstance RigidBodyPtr::instance() const { return agxData::EntityPtr::instance(); }
877 AGX_FORCE_INLINE RigidBodySemantics* RigidBodyPtr::operator->() { return (RigidBodySemantics* )this; }
878 AGX_FORCE_INLINE const RigidBodySemantics* RigidBodyPtr::operator->() const { return (const RigidBodySemantics* )this; }
879 AGX_FORCE_INLINE RigidBodyData* RigidBodyPtr::getData() { return static_cast<RigidBodyData* >(agxData::EntityPtr::getData()); }
880 AGX_FORCE_INLINE const RigidBodyData* RigidBodyPtr::getData() const { return static_cast<const RigidBodyData* >(agxData::EntityPtr::getData()); }
881
882 AGX_FORCE_INLINE agx::UInt32& RigidBodyPtr::id() { verifyIndex(); return getData()->id[calculateIndex()]; }
883 AGX_FORCE_INLINE agx::UInt32 const& RigidBodyPtr::id() const { verifyIndex(); return getData()->id[calculateIndex()]; }
884
885 AGX_FORCE_INLINE agx::RigidBodyState& RigidBodyPtr::state() { verifyIndex(); return getData()->state[calculateIndex()]; }
886 AGX_FORCE_INLINE agx::RigidBodyState const& RigidBodyPtr::state() const { verifyIndex(); return getData()->state[calculateIndex()]; }
887
888 AGX_FORCE_INLINE agx::Name& RigidBodyPtr::name() { verifyIndex(); return getData()->name[calculateIndex()]; }
889 AGX_FORCE_INLINE agx::Name const& RigidBodyPtr::name() const { verifyIndex(); return getData()->name[calculateIndex()]; }
890
891 AGX_FORCE_INLINE agx::Real& RigidBodyPtr::mass() { verifyIndex(); return getData()->mass[calculateIndex()]; }
892 AGX_FORCE_INLINE agx::Real const& RigidBodyPtr::mass() const { verifyIndex(); return getData()->mass[calculateIndex()]; }
893
894 AGX_FORCE_INLINE agx::Real& RigidBodyPtr::invMass() { verifyIndex(); return getData()->invMass[calculateIndex()]; }
895 AGX_FORCE_INLINE agx::Real const& RigidBodyPtr::invMass() const { verifyIndex(); return getData()->invMass[calculateIndex()]; }
896
897 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::effectiveMass() { verifyIndex(); return getData()->effectiveMass[calculateIndex()]; }
898 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::effectiveMass() const { verifyIndex(); return getData()->effectiveMass[calculateIndex()]; }
899
900 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::effectiveMassCoefficients() { verifyIndex(); return getData()->effectiveMassCoefficients[calculateIndex()]; }
901 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::effectiveMassCoefficients() const { verifyIndex(); return getData()->effectiveMassCoefficients[calculateIndex()]; }
902
903 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::effectiveMassTransformDiagonal() { verifyIndex(); return getData()->effectiveMassTransformDiagonal[calculateIndex()]; }
904 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::effectiveMassTransformDiagonal() const { verifyIndex(); return getData()->effectiveMassTransformDiagonal[calculateIndex()]; }
905
906 AGX_FORCE_INLINE agx::SPDMatrix3x3& RigidBodyPtr::inertia() { verifyIndex(); return getData()->inertia[calculateIndex()]; }
907 AGX_FORCE_INLINE agx::SPDMatrix3x3 const& RigidBodyPtr::inertia() const { verifyIndex(); return getData()->inertia[calculateIndex()]; }
908
909 AGX_FORCE_INLINE agx::SPDMatrix3x3& RigidBodyPtr::effectiveInertia() { verifyIndex(); return getData()->effectiveInertia[calculateIndex()]; }
910 AGX_FORCE_INLINE agx::SPDMatrix3x3 const& RigidBodyPtr::effectiveInertia() const { verifyIndex(); return getData()->effectiveInertia[calculateIndex()]; }
911
912 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::effectiveInertiaCoefficients() { verifyIndex(); return getData()->effectiveInertiaCoefficients[calculateIndex()]; }
913 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::effectiveInertiaCoefficients() const { verifyIndex(); return getData()->effectiveInertiaCoefficients[calculateIndex()]; }
914
915 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::worldMassMatrix() { verifyIndex(); return getData()->worldMassMatrix[calculateIndex()]; }
916 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::worldMassMatrix() const { verifyIndex(); return getData()->worldMassMatrix[calculateIndex()]; }
917
918 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::invWorldMassMatrix() { verifyIndex(); return getData()->invWorldMassMatrix[calculateIndex()]; }
919 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::invWorldMassMatrix() const { verifyIndex(); return getData()->invWorldMassMatrix[calculateIndex()]; }
920
921 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::effectiveWorldMassMatrix() { verifyIndex(); return getData()->effectiveWorldMassMatrix[calculateIndex()]; }
922 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::effectiveWorldMassMatrix() const { verifyIndex(); return getData()->effectiveWorldMassMatrix[calculateIndex()]; }
923
924 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::effectiveInvWorldMassMatrix() { verifyIndex(); return getData()->effectiveInvWorldMassMatrix[calculateIndex()]; }
925 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::effectiveInvWorldMassMatrix() const { verifyIndex(); return getData()->effectiveInvWorldMassMatrix[calculateIndex()]; }
926
927 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::worldInertia() { verifyIndex(); return getData()->worldInertia[calculateIndex()]; }
928 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::worldInertia() const { verifyIndex(); return getData()->worldInertia[calculateIndex()]; }
929
930 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::invWorldInertia() { verifyIndex(); return getData()->invWorldInertia[calculateIndex()]; }
931 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::invWorldInertia() const { verifyIndex(); return getData()->invWorldInertia[calculateIndex()]; }
932
933 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::effectiveWorldInertia() { verifyIndex(); return getData()->effectiveWorldInertia[calculateIndex()]; }
934 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::effectiveWorldInertia() const { verifyIndex(); return getData()->effectiveWorldInertia[calculateIndex()]; }
935
936 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyPtr::effectiveInvWorldInertia() { verifyIndex(); return getData()->effectiveInvWorldInertia[calculateIndex()]; }
937 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyPtr::effectiveInvWorldInertia() const { verifyIndex(); return getData()->effectiveInvWorldInertia[calculateIndex()]; }
938
939 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::force() { verifyIndex(); return getData()->force[calculateIndex()]; }
940 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::force() const { verifyIndex(); return getData()->force[calculateIndex()]; }
941
942 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::torque() { verifyIndex(); return getData()->torque[calculateIndex()]; }
943 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::torque() const { verifyIndex(); return getData()->torque[calculateIndex()]; }
944
945 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::lastForce() { verifyIndex(); return getData()->lastForce[calculateIndex()]; }
946 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::lastForce() const { verifyIndex(); return getData()->lastForce[calculateIndex()]; }
947
948 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::lastTorque() { verifyIndex(); return getData()->lastTorque[calculateIndex()]; }
949 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::lastTorque() const { verifyIndex(); return getData()->lastTorque[calculateIndex()]; }
950
951 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyPtr::modelTransform() { verifyIndex(); return getData()->modelTransform[calculateIndex()]; }
952 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyPtr::modelTransform() const { verifyIndex(); return getData()->modelTransform[calculateIndex()]; }
953
954 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyPtr::localModelTransform() { verifyIndex(); return getData()->localModelTransform[calculateIndex()]; }
955 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyPtr::localModelTransform() const { verifyIndex(); return getData()->localModelTransform[calculateIndex()]; }
956
957 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyPtr::cmTransform() { verifyIndex(); return getData()->cmTransform[calculateIndex()]; }
958 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyPtr::cmTransform() const { verifyIndex(); return getData()->cmTransform[calculateIndex()]; }
959
960 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyPtr::localCmTransform() { verifyIndex(); return getData()->localCmTransform[calculateIndex()]; }
961 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyPtr::localCmTransform() const { verifyIndex(); return getData()->localCmTransform[calculateIndex()]; }
962
963 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::velocity() { verifyIndex(); return getData()->velocity[calculateIndex()]; }
964 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::velocity() const { verifyIndex(); return getData()->velocity[calculateIndex()]; }
965
966 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::angularVelocity() { verifyIndex(); return getData()->angularVelocity[calculateIndex()]; }
967 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::angularVelocity() const { verifyIndex(); return getData()->angularVelocity[calculateIndex()]; }
968
969 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::linearAcceleration() { verifyIndex(); return getData()->linearAcceleration[calculateIndex()]; }
970 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::linearAcceleration() const { verifyIndex(); return getData()->linearAcceleration[calculateIndex()]; }
971
972 AGX_FORCE_INLINE agx::Vec3& RigidBodyPtr::angularAcceleration() { verifyIndex(); return getData()->angularAcceleration[calculateIndex()]; }
973 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyPtr::angularAcceleration() const { verifyIndex(); return getData()->angularAcceleration[calculateIndex()]; }
974
975 AGX_FORCE_INLINE agx::Vec3f& RigidBodyPtr::linearVelocityDamping() { verifyIndex(); return getData()->linearVelocityDamping[calculateIndex()]; }
976 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyPtr::linearVelocityDamping() const { verifyIndex(); return getData()->linearVelocityDamping[calculateIndex()]; }
977
978 AGX_FORCE_INLINE agx::Vec3f& RigidBodyPtr::angularVelocityDamping() { verifyIndex(); return getData()->angularVelocityDamping[calculateIndex()]; }
979 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyPtr::angularVelocityDamping() const { verifyIndex(); return getData()->angularVelocityDamping[calculateIndex()]; }
980
981 AGX_FORCE_INLINE agx::Vec3f& RigidBodyPtr::linearVelocityZeroDamping() { verifyIndex(); return getData()->linearVelocityZeroDamping[calculateIndex()]; }
982 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyPtr::linearVelocityZeroDamping() const { verifyIndex(); return getData()->linearVelocityZeroDamping[calculateIndex()]; }
983
984 AGX_FORCE_INLINE agx::Vec3f& RigidBodyPtr::angularVelocityZeroDamping() { verifyIndex(); return getData()->angularVelocityZeroDamping[calculateIndex()]; }
985 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyPtr::angularVelocityZeroDamping() const { verifyIndex(); return getData()->angularVelocityZeroDamping[calculateIndex()]; }
986
987 AGX_FORCE_INLINE agx::Physics::GeometryPtr& RigidBodyPtr::geometry() { verifyIndex(); return getData()->geometry[calculateIndex()]; }
988 AGX_FORCE_INLINE agx::Physics::GeometryPtr const& RigidBodyPtr::geometry() const { verifyIndex(); return getData()->geometry[calculateIndex()]; }
989
990 AGX_FORCE_INLINE agx::Physics::GraphNodePtr& RigidBodyPtr::graphNode() { verifyIndex(); return getData()->graphNode[calculateIndex()]; }
991 AGX_FORCE_INLINE agx::Physics::GraphNodePtr const& RigidBodyPtr::graphNode() const { verifyIndex(); return getData()->graphNode[calculateIndex()]; }
992
993 AGX_FORCE_INLINE agx::Range6& RigidBodyPtr::velocityRanges() { verifyIndex(); return getData()->velocityRanges[calculateIndex()]; }
994 AGX_FORCE_INLINE agx::Range6 const& RigidBodyPtr::velocityRanges() const { verifyIndex(); return getData()->velocityRanges[calculateIndex()]; }
995
996 AGX_FORCE_INLINE agx::RigidBody*& RigidBodyPtr::model() { verifyIndex(); return getData()->model[calculateIndex()]; }
997 AGX_FORCE_INLINE agx::RigidBody* const& RigidBodyPtr::model() const { verifyIndex(); return getData()->model[calculateIndex()]; }
998
999 AGX_FORCE_INLINE agx::UInt32& RigidBodyPtr::solveIndex() { verifyIndex(); return getData()->solveIndex[calculateIndex()]; }
1000 AGX_FORCE_INLINE agx::UInt32 const& RigidBodyPtr::solveIndex() const { verifyIndex(); return getData()->solveIndex[calculateIndex()]; }
1001
1002 AGX_FORCE_INLINE agx::UInt16& RigidBodyPtr::numConstraints() { verifyIndex(); return getData()->numConstraints[calculateIndex()]; }
1003 AGX_FORCE_INLINE agx::UInt16 const& RigidBodyPtr::numConstraints() const { verifyIndex(); return getData()->numConstraints[calculateIndex()]; }
1004
1005 //-----------------------------------------------------------------------------------------------------
1006 AGX_FORCE_INLINE RigidBodyInstance::RigidBodyInstance() {}
1007 AGX_FORCE_INLINE RigidBodyInstance::RigidBodyInstance(RigidBodyData* data, agx::Index index) : agx::ReferencedInstance(data, index) {}
1008 AGX_FORCE_INLINE RigidBodyInstance::RigidBodyInstance(agxData::EntityStorage* storage, agx::Index index) : agx::ReferencedInstance(storage, index) {}
1009 AGX_FORCE_INLINE RigidBodyInstance::RigidBodyInstance(const agxData::EntityInstance& other) : agx::ReferencedInstance(other)
1010 {
1012 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
1013 EntityInstance::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
1014 }
1015
1016 AGX_FORCE_INLINE RigidBodyInstance::RigidBodyInstance(const agxData::EntityPtr& ptr) : agx::ReferencedInstance(ptr)
1017 {
1019 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
1020 EntityInstance::getModel()->fullPath().c_str(), RigidBodyModel::instance()->fullPath().c_str());
1021 }
1022
1023
1024 AGX_FORCE_INLINE RigidBodyData* RigidBodyInstance::getData() { return static_cast<RigidBodyData* >(agxData::EntityInstance::getData()); }
1025 AGX_FORCE_INLINE const RigidBodyData* RigidBodyInstance::getData() const { return static_cast<const RigidBodyData* >(agxData::EntityInstance::getData()); }
1026
1027 AGX_FORCE_INLINE agx::UInt32& RigidBodyInstance::id() { verifyIndex(); return getData()->id[getIndex()]; }
1028 AGX_FORCE_INLINE agx::UInt32 const& RigidBodyInstance::id() const { verifyIndex(); return getData()->id[getIndex()]; }
1029
1030 AGX_FORCE_INLINE agx::RigidBodyState& RigidBodyInstance::state() { verifyIndex(); return getData()->state[getIndex()]; }
1031 AGX_FORCE_INLINE agx::RigidBodyState const& RigidBodyInstance::state() const { verifyIndex(); return getData()->state[getIndex()]; }
1032
1033 AGX_FORCE_INLINE agx::Name& RigidBodyInstance::name() { verifyIndex(); return getData()->name[getIndex()]; }
1034 AGX_FORCE_INLINE agx::Name const& RigidBodyInstance::name() const { verifyIndex(); return getData()->name[getIndex()]; }
1035
1036 AGX_FORCE_INLINE agx::Real& RigidBodyInstance::mass() { verifyIndex(); return getData()->mass[getIndex()]; }
1037 AGX_FORCE_INLINE agx::Real const& RigidBodyInstance::mass() const { verifyIndex(); return getData()->mass[getIndex()]; }
1038
1039 AGX_FORCE_INLINE agx::Real& RigidBodyInstance::invMass() { verifyIndex(); return getData()->invMass[getIndex()]; }
1040 AGX_FORCE_INLINE agx::Real const& RigidBodyInstance::invMass() const { verifyIndex(); return getData()->invMass[getIndex()]; }
1041
1042 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::effectiveMass() { verifyIndex(); return getData()->effectiveMass[getIndex()]; }
1043 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::effectiveMass() const { verifyIndex(); return getData()->effectiveMass[getIndex()]; }
1044
1045 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::effectiveMassCoefficients() { verifyIndex(); return getData()->effectiveMassCoefficients[getIndex()]; }
1046 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::effectiveMassCoefficients() const { verifyIndex(); return getData()->effectiveMassCoefficients[getIndex()]; }
1047
1048 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::effectiveMassTransformDiagonal() { verifyIndex(); return getData()->effectiveMassTransformDiagonal[getIndex()]; }
1049 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::effectiveMassTransformDiagonal() const { verifyIndex(); return getData()->effectiveMassTransformDiagonal[getIndex()]; }
1050
1051 AGX_FORCE_INLINE agx::SPDMatrix3x3& RigidBodyInstance::inertia() { verifyIndex(); return getData()->inertia[getIndex()]; }
1052 AGX_FORCE_INLINE agx::SPDMatrix3x3 const& RigidBodyInstance::inertia() const { verifyIndex(); return getData()->inertia[getIndex()]; }
1053
1054 AGX_FORCE_INLINE agx::SPDMatrix3x3& RigidBodyInstance::effectiveInertia() { verifyIndex(); return getData()->effectiveInertia[getIndex()]; }
1055 AGX_FORCE_INLINE agx::SPDMatrix3x3 const& RigidBodyInstance::effectiveInertia() const { verifyIndex(); return getData()->effectiveInertia[getIndex()]; }
1056
1057 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::effectiveInertiaCoefficients() { verifyIndex(); return getData()->effectiveInertiaCoefficients[getIndex()]; }
1058 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::effectiveInertiaCoefficients() const { verifyIndex(); return getData()->effectiveInertiaCoefficients[getIndex()]; }
1059
1060 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::worldMassMatrix() { verifyIndex(); return getData()->worldMassMatrix[getIndex()]; }
1061 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::worldMassMatrix() const { verifyIndex(); return getData()->worldMassMatrix[getIndex()]; }
1062
1063 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::invWorldMassMatrix() { verifyIndex(); return getData()->invWorldMassMatrix[getIndex()]; }
1064 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::invWorldMassMatrix() const { verifyIndex(); return getData()->invWorldMassMatrix[getIndex()]; }
1065
1066 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::effectiveWorldMassMatrix() { verifyIndex(); return getData()->effectiveWorldMassMatrix[getIndex()]; }
1067 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::effectiveWorldMassMatrix() const { verifyIndex(); return getData()->effectiveWorldMassMatrix[getIndex()]; }
1068
1069 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::effectiveInvWorldMassMatrix() { verifyIndex(); return getData()->effectiveInvWorldMassMatrix[getIndex()]; }
1070 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::effectiveInvWorldMassMatrix() const { verifyIndex(); return getData()->effectiveInvWorldMassMatrix[getIndex()]; }
1071
1072 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::worldInertia() { verifyIndex(); return getData()->worldInertia[getIndex()]; }
1073 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::worldInertia() const { verifyIndex(); return getData()->worldInertia[getIndex()]; }
1074
1075 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::invWorldInertia() { verifyIndex(); return getData()->invWorldInertia[getIndex()]; }
1076 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::invWorldInertia() const { verifyIndex(); return getData()->invWorldInertia[getIndex()]; }
1077
1078 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::effectiveWorldInertia() { verifyIndex(); return getData()->effectiveWorldInertia[getIndex()]; }
1079 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::effectiveWorldInertia() const { verifyIndex(); return getData()->effectiveWorldInertia[getIndex()]; }
1080
1081 AGX_FORCE_INLINE agx::Matrix3x3& RigidBodyInstance::effectiveInvWorldInertia() { verifyIndex(); return getData()->effectiveInvWorldInertia[getIndex()]; }
1082 AGX_FORCE_INLINE agx::Matrix3x3 const& RigidBodyInstance::effectiveInvWorldInertia() const { verifyIndex(); return getData()->effectiveInvWorldInertia[getIndex()]; }
1083
1084 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::force() { verifyIndex(); return getData()->force[getIndex()]; }
1085 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::force() const { verifyIndex(); return getData()->force[getIndex()]; }
1086
1087 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::torque() { verifyIndex(); return getData()->torque[getIndex()]; }
1088 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::torque() const { verifyIndex(); return getData()->torque[getIndex()]; }
1089
1090 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::lastForce() { verifyIndex(); return getData()->lastForce[getIndex()]; }
1091 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::lastForce() const { verifyIndex(); return getData()->lastForce[getIndex()]; }
1092
1093 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::lastTorque() { verifyIndex(); return getData()->lastTorque[getIndex()]; }
1094 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::lastTorque() const { verifyIndex(); return getData()->lastTorque[getIndex()]; }
1095
1096 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyInstance::modelTransform() { verifyIndex(); return getData()->modelTransform[getIndex()]; }
1097 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyInstance::modelTransform() const { verifyIndex(); return getData()->modelTransform[getIndex()]; }
1098
1099 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyInstance::localModelTransform() { verifyIndex(); return getData()->localModelTransform[getIndex()]; }
1100 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyInstance::localModelTransform() const { verifyIndex(); return getData()->localModelTransform[getIndex()]; }
1101
1102 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyInstance::cmTransform() { verifyIndex(); return getData()->cmTransform[getIndex()]; }
1103 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyInstance::cmTransform() const { verifyIndex(); return getData()->cmTransform[getIndex()]; }
1104
1105 AGX_FORCE_INLINE agx::AffineMatrix4x4& RigidBodyInstance::localCmTransform() { verifyIndex(); return getData()->localCmTransform[getIndex()]; }
1106 AGX_FORCE_INLINE agx::AffineMatrix4x4 const& RigidBodyInstance::localCmTransform() const { verifyIndex(); return getData()->localCmTransform[getIndex()]; }
1107
1108 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::velocity() { verifyIndex(); return getData()->velocity[getIndex()]; }
1109 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::velocity() const { verifyIndex(); return getData()->velocity[getIndex()]; }
1110
1111 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::angularVelocity() { verifyIndex(); return getData()->angularVelocity[getIndex()]; }
1112 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::angularVelocity() const { verifyIndex(); return getData()->angularVelocity[getIndex()]; }
1113
1114 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::linearAcceleration() { verifyIndex(); return getData()->linearAcceleration[getIndex()]; }
1115 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::linearAcceleration() const { verifyIndex(); return getData()->linearAcceleration[getIndex()]; }
1116
1117 AGX_FORCE_INLINE agx::Vec3& RigidBodyInstance::angularAcceleration() { verifyIndex(); return getData()->angularAcceleration[getIndex()]; }
1118 AGX_FORCE_INLINE agx::Vec3 const& RigidBodyInstance::angularAcceleration() const { verifyIndex(); return getData()->angularAcceleration[getIndex()]; }
1119
1120 AGX_FORCE_INLINE agx::Vec3f& RigidBodyInstance::linearVelocityDamping() { verifyIndex(); return getData()->linearVelocityDamping[getIndex()]; }
1121 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyInstance::linearVelocityDamping() const { verifyIndex(); return getData()->linearVelocityDamping[getIndex()]; }
1122
1123 AGX_FORCE_INLINE agx::Vec3f& RigidBodyInstance::angularVelocityDamping() { verifyIndex(); return getData()->angularVelocityDamping[getIndex()]; }
1124 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyInstance::angularVelocityDamping() const { verifyIndex(); return getData()->angularVelocityDamping[getIndex()]; }
1125
1126 AGX_FORCE_INLINE agx::Vec3f& RigidBodyInstance::linearVelocityZeroDamping() { verifyIndex(); return getData()->linearVelocityZeroDamping[getIndex()]; }
1127 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyInstance::linearVelocityZeroDamping() const { verifyIndex(); return getData()->linearVelocityZeroDamping[getIndex()]; }
1128
1129 AGX_FORCE_INLINE agx::Vec3f& RigidBodyInstance::angularVelocityZeroDamping() { verifyIndex(); return getData()->angularVelocityZeroDamping[getIndex()]; }
1130 AGX_FORCE_INLINE agx::Vec3f const& RigidBodyInstance::angularVelocityZeroDamping() const { verifyIndex(); return getData()->angularVelocityZeroDamping[getIndex()]; }
1131
1132 AGX_FORCE_INLINE agx::Physics::GeometryPtr& RigidBodyInstance::geometry() { verifyIndex(); return getData()->geometry[getIndex()]; }
1133 AGX_FORCE_INLINE agx::Physics::GeometryPtr const& RigidBodyInstance::geometry() const { verifyIndex(); return getData()->geometry[getIndex()]; }
1134
1135 AGX_FORCE_INLINE agx::Physics::GraphNodePtr& RigidBodyInstance::graphNode() { verifyIndex(); return getData()->graphNode[getIndex()]; }
1136 AGX_FORCE_INLINE agx::Physics::GraphNodePtr const& RigidBodyInstance::graphNode() const { verifyIndex(); return getData()->graphNode[getIndex()]; }
1137
1138 AGX_FORCE_INLINE agx::Range6& RigidBodyInstance::velocityRanges() { verifyIndex(); return getData()->velocityRanges[getIndex()]; }
1139 AGX_FORCE_INLINE agx::Range6 const& RigidBodyInstance::velocityRanges() const { verifyIndex(); return getData()->velocityRanges[getIndex()]; }
1140
1141 AGX_FORCE_INLINE agx::RigidBody*& RigidBodyInstance::model() { verifyIndex(); return getData()->model[getIndex()]; }
1142 AGX_FORCE_INLINE agx::RigidBody* const& RigidBodyInstance::model() const { verifyIndex(); return getData()->model[getIndex()]; }
1143
1144 AGX_FORCE_INLINE agx::UInt32& RigidBodyInstance::solveIndex() { verifyIndex(); return getData()->solveIndex[getIndex()]; }
1145 AGX_FORCE_INLINE agx::UInt32 const& RigidBodyInstance::solveIndex() const { verifyIndex(); return getData()->solveIndex[getIndex()]; }
1146
1147 AGX_FORCE_INLINE agx::UInt16& RigidBodyInstance::numConstraints() { verifyIndex(); return getData()->numConstraints[getIndex()]; }
1148 AGX_FORCE_INLINE agx::UInt16 const& RigidBodyInstance::numConstraints() const { verifyIndex(); return getData()->numConstraints[getIndex()]; }
1149
1150 //-----------------------------------------------------------------------------------------------------
1151 AGX_FORCE_INLINE RigidBodySemantics::RigidBodySemantics() {}
1152 //-----------------------------------------------------------------------------------------------------
1154 }
1155}
1156
1157AGX_TYPE_BINDING(agx::Physics::RigidBodyPtr, "Physics.RigidBodyPtr")
1158AGX_TYPE_BINDING(agx::Physics::RigidBodyInstance, "Physics.RigidBodyInstance")
1159
1160#ifdef _MSC_VER
1161# pragma warning(pop)
1162#endif
1163
1164#undef AGX_ENTITY_WRAPPER
1165#undef AGX_ENTITY_NAMESPACE
1166#endif
1167
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGX_TYPE_BINDING(_Type, _Name)
Definition: Type.h:179
#define AGXPHYSICS_EXPORT
Type-specific Array used for fast access into the data held by a Buffer.
Definition: Array.h:107
Entity instance provides access to a single instance in an EntityStorage.
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
Accessor to a entity instance stored in a EntityStorage, to allow SOA (structure of arrays) data to b...
Definition: EntityPtr.h:52
EntityPtr & operator=(const EntityPtr &other)=default
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
agxData::EntityInstance instance()
Definition: EntityPtr.h:269
Data storage for a collection of entity instances of a specified EntityModel.
Definition: EntityStorage.h:73
agx::String fullPath() const
Representation of a name string.
Definition: Name.h:33
Pointer to a entity instance of type Physics.Geometry.
Pointer to a entity instance of type Physics.GraphNode.
Abstract description of the data attributes for the Physics.RigidBody entity.
static agxData::ScalarAttributeT< agx::Vec3 > * velocityAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * linearVelocityZeroDampingAttribute
static agxData::ScalarAttributeT< agx::AffineMatrix4x4 > * cmTransformAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * angularVelocityAttribute
static RigidBodyModel * instance()
RigidBodyModel(const agx::String &name="RigidBody")
static agxData::ScalarAttributeT< agx::Matrix3x3 > * invWorldInertiaAttribute
static agxData::ScalarAttributeT< agx::Matrix3x3 > * invWorldMassMatrixAttribute
static agxData::ScalarAttributeT< agx::Matrix3x3 > * effectiveWorldInertiaAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * forceAttribute
static agxData::ScalarAttributeT< agx::Real > * invMassAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * torqueAttribute
static agxData::EntityStorage * defaultStorage()
virtual void initAttributeAccessors() override
static agxData::ScalarAttributeT< agx::Range6 > * velocityRangesAttribute
static agxData::ScalarAttributeT< agx::Matrix3x3 > * worldMassMatrixAttribute
static agxData::PointerAttributeT< agx::RigidBody * > * modelAttribute
static agxData::ScalarAttributeT< agx::UInt32 > * solveIndexAttribute
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::ScalarAttributeT< agx::Matrix3x3 > * effectiveWorldMassMatrixAttribute
static agxData::ScalarAttributeT< agx::Physics::GeometryPtr > * geometryAttribute
virtual void construct(agxData::EntityPtr instance) override
static agxData::ScalarAttributeT< agx::Matrix3x3 > * effectiveInvWorldInertiaAttribute
static agxData::ScalarAttributeT< agx::RigidBodyState > * stateAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * angularVelocityDampingAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * linearAccelerationAttribute
static agxData::ScalarAttributeT< agx::Matrix3x3 > * worldInertiaAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * effectiveMassTransformDiagonalAttribute
void construct(agx::Physics::RigidBodyPtr rigidBody)
static agxData::ScalarAttributeT< agx::Vec3 > * lastForceAttribute
static agxData::ScalarAttributeT< agx::Name > * nameAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * angularAccelerationAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * effectiveInertiaCoefficientsAttribute
virtual void configure(agx::TiXmlElement *eEntity) override
static agxData::ScalarAttributeT< agx::UInt32 > * idAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * angularVelocityZeroDampingAttribute
static RigidBodyPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
static agxData::ScalarAttributeT< agx::UInt16 > * numConstraintsAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * effectiveMassCoefficientsAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * effectiveMassAttribute
static agxData::ScalarAttributeT< agx::AffineMatrix4x4 > * localModelTransformAttribute
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static agxData::ScalarAttributeT< agx::SPDMatrix3x3 > * inertiaAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * lastTorqueAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * linearVelocityDampingAttribute
static agxData::ScalarAttributeT< agx::Real > * massAttribute
static agxData::ScalarAttributeT< agx::AffineMatrix4x4 > * localCmTransformAttribute
static agxData::ScalarAttributeT< agx::AffineMatrix4x4 > * modelTransformAttribute
static agxData::ScalarAttributeT< agx::Physics::GraphNodePtr > * graphNodeAttribute
static agxData::ScalarAttributeT< agx::Matrix3x3 > * effectiveInvWorldMassMatrixAttribute
static agxData::ScalarAttributeT< agx::SPDMatrix3x3 > * effectiveInertiaAttribute
Pointer to a entity instance of type Physics.RigidBody.
AGXPHYSICS_EXPORT agx::RigidBody *& model()
AGXPHYSICS_EXPORT agx::SPDMatrix3x3 const & effectiveInertia() const
AGXPHYSICS_EXPORT agx::Vec3 const & lastTorque() const
AGXPHYSICS_EXPORT agx::Matrix3x3 & effectiveWorldInertia()
AGXPHYSICS_EXPORT agx::Range6 & velocityRanges()
AGXPHYSICS_EXPORT agx::Vec3 const & linearAcceleration() const
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 & localModelTransform()
AGXPHYSICS_EXPORT const RigidBodyInstance instance() const
AGXPHYSICS_EXPORT agx::UInt32 & id()
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 const & localCmTransform() const
AGXPHYSICS_EXPORT agx::Matrix3x3 const & effectiveWorldMassMatrix() const
AGXPHYSICS_EXPORT agx::Vec3f const & angularVelocityDamping() const
AGXPHYSICS_EXPORT const RigidBodySemantics * operator->() const
AGXPHYSICS_EXPORT agx::Vec3 const & lastForce() const
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 const & localModelTransform() const
AGXPHYSICS_EXPORT agx::Matrix3x3 const & effectiveInvWorldInertia() const
AGXPHYSICS_EXPORT agx::Matrix3x3 & worldMassMatrix()
AGXPHYSICS_EXPORT RigidBodyPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Real & mass()
AGXPHYSICS_EXPORT agx::Vec3f & linearVelocityDamping()
AGXPHYSICS_EXPORT agx::Vec3f const & angularVelocityZeroDamping() const
AGXPHYSICS_EXPORT agx::UInt16 const & numConstraints() const
AGXPHYSICS_EXPORT agx::Vec3f & angularVelocityZeroDamping()
AGXPHYSICS_EXPORT agx::Vec3 & velocity()
AGXPHYSICS_EXPORT agx::Vec3f const & linearVelocityDamping() const
AGXPHYSICS_EXPORT agx::Physics::GeometryPtr const & geometry() const
AGXPHYSICS_EXPORT agx::RigidBody *const & model() const
AGXPHYSICS_EXPORT agx::RigidBodyState const & state() const
AGXPHYSICS_EXPORT RigidBodyPtr()
AGXPHYSICS_EXPORT agx::Real const & mass() const
const RigidBodyData * getData() const
AGXPHYSICS_EXPORT agx::Vec3 const & torque() const
AGXPHYSICS_EXPORT agx::Vec3f & angularVelocityDamping()
AGXPHYSICS_EXPORT agx::Matrix3x3 const & worldInertia() const
AGXPHYSICS_EXPORT agx::Vec3 const & effectiveInertiaCoefficients() const
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 const & modelTransform() const
AGXPHYSICS_EXPORT agx::Vec3 const & angularVelocity() const
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 & localCmTransform()
AGXPHYSICS_EXPORT agx::Matrix3x3 & invWorldInertia()
AGXPHYSICS_EXPORT agx::Vec3 & angularVelocity()
AGXPHYSICS_EXPORT agx::Vec3 & effectiveInertiaCoefficients()
AGXPHYSICS_EXPORT RigidBodyPtr(const agxData::EntityInstance &instance)
AGXPHYSICS_EXPORT agx::UInt32 const & id() const
AGXPHYSICS_EXPORT agx::Real & invMass()
AGXPHYSICS_EXPORT agx::Vec3 & effectiveMassTransformDiagonal()
AGXPHYSICS_EXPORT agx::Vec3 & lastTorque()
AGXPHYSICS_EXPORT agx::UInt32 const & solveIndex() const
AGXPHYSICS_EXPORT agx::Vec3 & effectiveMass()
AGXPHYSICS_EXPORT agx::Vec3f & linearVelocityZeroDamping()
RigidBodyData * getData()
AGXPHYSICS_EXPORT agx::Name & name()
AGXPHYSICS_EXPORT agx::Vec3 const & angularAcceleration() const
AGXPHYSICS_EXPORT agx::SPDMatrix3x3 & effectiveInertia()
AGXPHYSICS_EXPORT agx::Vec3 const & velocity() const
AGXPHYSICS_EXPORT agx::Matrix3x3 & worldInertia()
AGXPHYSICS_EXPORT agx::SPDMatrix3x3 const & inertia() const
AGXPHYSICS_EXPORT RigidBodyPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT agx::Vec3f const & linearVelocityZeroDamping() const
AGXPHYSICS_EXPORT agx::UInt16 & numConstraints()
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 const & cmTransform() const
AGXPHYSICS_EXPORT agx::Vec3 & effectiveMassCoefficients()
RigidBodyInstance InstanceType
AGXPHYSICS_EXPORT agx::Real const & invMass() const
AGXPHYSICS_EXPORT agx::Matrix3x3 const & effectiveWorldInertia() const
AGXPHYSICS_EXPORT agx::Matrix3x3 const & invWorldMassMatrix() const
AGXPHYSICS_EXPORT agx::Vec3 & torque()
AGXPHYSICS_EXPORT agx::Matrix3x3 const & worldMassMatrix() const
AGXPHYSICS_EXPORT agx::Vec3 const & effectiveMass() const
AGXPHYSICS_EXPORT agx::Vec3 const & effectiveMassTransformDiagonal() const
AGXPHYSICS_EXPORT agx::Matrix3x3 & effectiveInvWorldMassMatrix()
AGXPHYSICS_EXPORT agx::Matrix3x3 & invWorldMassMatrix()
AGXPHYSICS_EXPORT agx::Vec3 & lastForce()
AGXPHYSICS_EXPORT agx::RigidBodyState & state()
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 & modelTransform()
AGXPHYSICS_EXPORT RigidBodyInstance instance()
AGXPHYSICS_EXPORT agx::SPDMatrix3x3 & inertia()
AGXPHYSICS_EXPORT agx::Vec3 & linearAcceleration()
AGXPHYSICS_EXPORT agx::Matrix3x3 const & effectiveInvWorldMassMatrix() const
AGXPHYSICS_EXPORT agx::UInt32 & solveIndex()
AGXPHYSICS_EXPORT agx::Vec3 & force()
AGXPHYSICS_EXPORT agx::Physics::GraphNodePtr const & graphNode() const
AGXPHYSICS_EXPORT agx::Vec3 const & force() const
AGXPHYSICS_EXPORT agx::Name const & name() const
AGXPHYSICS_EXPORT agx::Matrix3x3 & effectiveWorldMassMatrix()
AGXPHYSICS_EXPORT agx::Range6 const & velocityRanges() const
AGXPHYSICS_EXPORT agx::Matrix3x3 const & invWorldInertia() const
AGXPHYSICS_EXPORT agx::Vec3 & angularAcceleration()
AGXPHYSICS_EXPORT agx::Matrix3x3 & effectiveInvWorldInertia()
AGXPHYSICS_EXPORT agx::AffineMatrix4x4 & cmTransform()
AGXPHYSICS_EXPORT RigidBodySemantics * operator->()
AGXPHYSICS_EXPORT agx::Physics::GeometryPtr & geometry()
AGXPHYSICS_EXPORT agx::Physics::GraphNodePtr & graphNode()
AGXPHYSICS_EXPORT agx::Vec3 const & effectiveMassCoefficients() const
Abstract description of the data attributes for the Referenced entity.
Pointer to a entity instance of type Referenced.
The rigid body class, combining a geometric model and a frame of reference.
Definition: RigidBody.h:49
Specialized type of matrices for holding symmetric positive definite matrices.
Definition: SPDMatrix3x3.h:48
Vector containing 'raw' data.
Definition: agx/Vector.h:246
#define agxAssertN(expr, format,...)
Definition: debug.h:145
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define CALLABLE
Definition: macros.h:72
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
#define AGX_FORCE_INLINE
Definition: macros.h:58
Contains classes for low level data storage for AGX.
Definition: Container.h:23
agxData::EntityRef< RigidBodyPtr > RigidBodyRef
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
uint16_t UInt16
Definition: Integer.h:31
uint32_t UInt32
Definition: Integer.h:32
double Real
Definition: Real.h:41
AGXCORE_EXPORT Model * getModel(const Path &path, const Path &_namespace=Path())
UInt32 Index
Definition: Integer.h:44