21#ifndef GENERATED_AGX_PHYSICS_GRANULARBODY_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_GRANULARBODY_H_PLUGIN
24#define AGX_ENTITY_WRAPPER 1
30# pragma warning( disable : 4505 )
32# pragma warning( disable : 4251 )
34# pragma warning( disable : 4355 )
36# pragma warning( disable: 4714 )
58 class GranularBodyModel;
59 class GranularBodyData;
60 class GranularBodyPtr;
61 class GranularBodyInstance;
62 class GranularBodySemantics;
102 virtual void configure(agx::TiXmlElement* eEntity)
override;
110 #ifndef AGX_PHYSICS_GRANULARBODY_DATA_SET_OVERRIDE
111 #define AGX_PHYSICS_GRANULARBODY_DATA_SET
115 GranularBodyInstance operator[] (
size_t index);
128 typedef agx::Vec3 oldAngularVelocityType;
139 virtual ~GranularBodyData() {}
140 virtual void setNumElements(
agx::Index numElements)
override;
143 GranularBodyData& operator= (
const GranularBodyData&) {
return *
this; }
156 agx::Vec3 const& getAngularVelocity()
const;
157 agx::Vec3 const& getOldAngularVelocity()
const;
164 void integratePosition(
const agx::Real& clock_timeStep);
165 void integrateVelocity(
const agx::Real& clock_timeStep);
166 void setAngularVelocity(
const agx::Vec3& angularVelocity);
172 void setOldAngularVelocity(
agx::Vec3 const& value);
173 void setRotation(
agx::Quat const& value);
176 void setInvInertia(
agx::Real const& value);
180 friend class GranularBodyPtr;
181 friend class GranularBodyInstance;
182 GranularBodySemantics();
251 GranularBodyInstance();
252 GranularBodyInstance(GranularBodyData* data,
agx::Index index);
257 GranularBodyData* getData();
258 const GranularBodyData* getData()
const;
264 agx::Vec3 const& angularVelocity()
const;
269 agx::Vec3 const& oldAngularVelocity()
const;
305 inline GranularBodyInstance
agx::Physics::GranularBodyData::operator[] (
size_t index) {
return GranularBodyInstance(
this, (
agx::Index)index); }
312 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
319 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
327 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
328 EntityPtr::getModel()->fullPath().c_str(), GranularBodyModel::instance()->fullPath().c_str());
336 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
337 EntityPtr::getModel()->fullPath().c_str(), GranularBodyModel::instance()->fullPath().c_str());
343 AGX_FORCE_INLINE GranularBodySemantics* GranularBodyPtr::operator->() {
return (GranularBodySemantics* )
this; }
344 AGX_FORCE_INLINE const GranularBodySemantics* GranularBodyPtr::operator->()
const {
return (
const GranularBodySemantics* )
this; }
348 AGX_FORCE_INLINE agx::Vec3& GranularBodyPtr::angularVelocity() { verifyIndex();
return getData()->angularVelocity[calculateIndex()]; }
349 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyPtr::angularVelocity()
const { verifyIndex();
return getData()->angularVelocity[calculateIndex()]; }
351 AGX_FORCE_INLINE agx::Vec3& GranularBodyPtr::oldAngularVelocity() { verifyIndex();
return getData()->oldAngularVelocity[calculateIndex()]; }
352 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyPtr::oldAngularVelocity()
const { verifyIndex();
return getData()->oldAngularVelocity[calculateIndex()]; }
355 AGX_FORCE_INLINE agx::Quat const& GranularBodyPtr::rotation()
const { verifyIndex();
return getData()->rotation[calculateIndex()]; }
358 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyPtr::torque()
const { verifyIndex();
return getData()->torque[calculateIndex()]; }
361 AGX_FORCE_INLINE agx::Real const& GranularBodyPtr::inertia()
const { verifyIndex();
return getData()->inertia[calculateIndex()]; }
363 AGX_FORCE_INLINE agx::Real& GranularBodyPtr::invInertia() { verifyIndex();
return getData()->invInertia[calculateIndex()]; }
364 AGX_FORCE_INLINE agx::Real const& GranularBodyPtr::invInertia()
const { verifyIndex();
return getData()->invInertia[calculateIndex()]; }
368 AGX_FORCE_INLINE GranularBodyInstance::GranularBodyInstance(GranularBodyData* data,
agx::Index index) :
agx::Physics::ParticleInstance(data, index) {}
373 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
380 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
388 AGX_FORCE_INLINE agx::Vec3& GranularBodyInstance::angularVelocity() { verifyIndex();
return getData()->angularVelocity[getIndex()]; }
389 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyInstance::angularVelocity()
const { verifyIndex();
return getData()->angularVelocity[getIndex()]; }
391 AGX_FORCE_INLINE agx::Vec3& GranularBodyInstance::oldAngularVelocity() { verifyIndex();
return getData()->oldAngularVelocity[getIndex()]; }
392 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyInstance::oldAngularVelocity()
const { verifyIndex();
return getData()->oldAngularVelocity[getIndex()]; }
395 AGX_FORCE_INLINE agx::Quat const& GranularBodyInstance::rotation()
const { verifyIndex();
return getData()->rotation[getIndex()]; }
398 AGX_FORCE_INLINE agx::Vec3 const& GranularBodyInstance::torque()
const { verifyIndex();
return getData()->torque[getIndex()]; }
401 AGX_FORCE_INLINE agx::Real const& GranularBodyInstance::inertia()
const { verifyIndex();
return getData()->inertia[getIndex()]; }
403 AGX_FORCE_INLINE agx::Real& GranularBodyInstance::invInertia() { verifyIndex();
return getData()->invInertia[getIndex()]; }
404 AGX_FORCE_INLINE agx::Real const& GranularBodyInstance::invInertia()
const { verifyIndex();
return getData()->invInertia[getIndex()]; }
420#undef AGX_ENTITY_WRAPPER
421#undef AGX_ENTITY_NAMESPACE
#define AGX_DECLARE_POINTER_TYPES(type)
#define AGX_TYPE_BINDING(_Type, _Name)
#define AGXPHYSICS_EXPORT
Type-specific Array used for fast access into the data held by a Buffer.
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...
EntityPtr & operator=(const EntityPtr &other)=default
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
agxData::EntityInstance instance()
Data storage for a collection of entity instances of a specified EntityModel.
agx::String fullPath() const
Abstract description of the data attributes for the Physics.GranularBody entity.
static GranularBodyPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
void construct(agx::Physics::GranularBodyPtr granularBody)
virtual ~GranularBodyModel()
static agxData::ScalarAttributeT< agx::Real > * inertiaAttribute
static agxData::ScalarAttributeT< agx::Real > * invInertiaAttribute
static GranularBodyModel * instance()
virtual void initAttributeAccessors() override
virtual void construct(agxData::EntityPtr instance) override
static agxData::ScalarAttributeT< agx::Quat > * rotationAttribute
GranularBodyModel(const agx::String &name="GranularBody")
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::EntityStorage * defaultStorage()
static agxData::ScalarAttributeT< agx::Vec3 > * oldAngularVelocityAttribute
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static agxData::ScalarAttributeT< agx::Vec3 > * torqueAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * angularVelocityAttribute
virtual void configure(agx::TiXmlElement *eEntity) override
Pointer to a entity instance of type Physics.GranularBody.
AGXPHYSICS_EXPORT agx::Real & invInertia()
AGXPHYSICS_EXPORT GranularBodyPtr()
AGXPHYSICS_EXPORT agx::Real & inertia()
AGXPHYSICS_EXPORT agx::Vec3 const & angularVelocity() const
GranularBodyModel ModelType
GranularBodyInstance InstanceType
AGXPHYSICS_EXPORT GranularBodyPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Vec3 & oldAngularVelocity()
AGXPHYSICS_EXPORT agx::Vec3 const & oldAngularVelocity() const
AGXPHYSICS_EXPORT const GranularBodyInstance instance() const
AGXPHYSICS_EXPORT GranularBodyPtr(const agxData::EntityInstance &instance)
const GranularBodyData * getData() const
AGXPHYSICS_EXPORT agx::Vec3 & angularVelocity()
AGXPHYSICS_EXPORT agx::Real const & inertia() const
AGXPHYSICS_EXPORT GranularBodySemantics * operator->()
GranularBodyData * getData()
AGXPHYSICS_EXPORT agx::Quat & rotation()
AGXPHYSICS_EXPORT agx::Vec3 & torque()
AGXPHYSICS_EXPORT agx::Quat const & rotation() const
AGXPHYSICS_EXPORT GranularBodyInstance instance()
GranularBodyData DataType
AGXPHYSICS_EXPORT agx::Real const & invInertia() const
AGXPHYSICS_EXPORT const GranularBodySemantics * operator->() const
AGXPHYSICS_EXPORT GranularBodyPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT agx::Vec3 const & torque() const
Pointer to a entity instance of type Physics.Material.
Abstract description of the data attributes for the Physics.Particle entity.
Pointer to a entity instance of type Physics.Particle.
Vector containing 'raw' data.
#define agxAssertN(expr, format,...)
#define DOXYGEN_END_INTERNAL_BLOCK()
#define DOXYGEN_START_INTERNAL_BLOCK()
Contains classes for low level data storage for AGX.
The agx namespace contains the dynamics/math part of the AGX Dynamics API.