AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
agx::VirtualConstraintInertia Class Reference

This class will add a virtual inertia along or around the constraint axis (N-axis), which will affect the resulting rotational or translational acceleration on the affected rigid bodies. More...

#include <VirtualConstraintInertia.h>

+ Inheritance diagram for agx::VirtualConstraintInertia:

Classes

struct  Transformed
 

Public Member Functions

 VirtualConstraintInertia (agx::Constraint *constraint, agx::Real rigidBody1TranslationInertia, agx::Real rigidBody1RotationalInertia, agx::Real rigidBody2TranslationInertia, agx::Real rigidBody2RotationalInertia)
 Basic constructor that takes a constraint and the virtual inertias that should be applied in the central axis of the constraint.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agx::VirtualConstraintInertia)
 
virtual agx::RigidBody * getRigidBody1 () const override
 
agx::Real getRigidBody1RotationalInertia () const
 Gets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.
 
agx::Real getRigidBody1TranslationalInertia () const
 Gets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 1.
 
virtual agx::RigidBody * getRigidBody2 () const override
 
agx::Real getRigidBody2RotationalInertia () const
 Gets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.
 
agx::Real getRigidBody2TranslationalInertia () const
 Gets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 2.
 
void setRigidBody1RotationalInertia (agx::Real rotationalInertia)
 Sets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.
 
void setRigidBody1TranslationalInertia (agx::Real translationalInertia)
 Sets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 1.
 
void setRigidBody2RotationalInertia (agx::Real rotationalInertia)
 Sets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 2 in the constraint.
 
void setRigidBody2TranslationalInertia (agx::Real translationalInertia)
 Sets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 2.
 
- Public Member Functions inherited from agx::StrongInteraction
virtual void addNlCallbacks (agx::SparseRangeReal &sparseRangeReal) const
 Interface for non-linear callback from solver.
 
virtual void addNotification () override
 Called when added to a simulation.
 
 AGXSTREAM_DECLARE_ABSTRACT_SERIALIZABLE (agx::StrongInteraction)
 
agx::Bool getEnable () const
 
virtual agx::RigidBody * getRigidBody1 () const =0
 
virtual agx::RigidBody * getRigidBody2 () const =0
 
agx::Bool getValid () const
 
virtual void postSystemCallback (agx::DynamicsSystem *dynamicsSystem) override
 Called after the solver is done.
 
virtual void prepare ()
 Prepares for solve.
 
virtual void preSystemCallback (agx::DynamicsSystem *dynamicsSystem) override
 Called before solver executes.
 
virtual void removeNotification () override
 Called when removed from a simulation.
 
virtual void render (agxRender::RenderManager *mgr, float scale)
 Render the interaction.
 
void setEnable (agx::Bool enable)
 Enable or disable this interaction.
 
virtual void writeMatrixData (agx::StrongInteraction::MatrixData rb1DiagonalBlock, agx::StrongInteraction::MatrixData rb2DiagonalBlock, agx::StrongInteraction::MatrixData offDiagonalBlock)=0
 Write data for dynamic bodies.
 
virtual void writeRhs (agx::Physics::RigidBodyPtr rb1, agx::Real *rb1Rhs, agx::Physics::RigidBodyPtr rb2, agx::Real *rb2Rhs, agx::Bool isRestingSolve)=0
 Write data to the right hand side, for dynamic bodies.
 
- Public Member Functions inherited from agx::Interaction
 Interaction ()
 Default constructor.
 
 AGXSTREAM_DECLARE_SERIALIZABLE_BASE (agx::Interaction)
 
const agx::Name & getName () const
 
agx::PropertyContainer * getPropertyContainer ()
 
const agx::PropertyContainer * getPropertyContainer () const
 
agxSDK::SimulationProxy * getSimulationProxy () const
 
agx::Bool hasPropertyContainer () const
 
virtual void postSystemCallback (agx::DynamicsSystem *)
 Called after all post step events, after solve.
 
virtual void preSystemCallback (agx::DynamicsSystem *)
 Called after all pre step events, before solve.
 
void setName (const agx::Name &name)
 Name this interaction.
 
void setPropertyContainer (agx::PropertyContainer *propertyContainer)
 Assign a new property container.
 
virtual void updateForce (agx::DynamicsSystem *dynamicsSystem)
 This virtual method is implemented so that it computes the interaction forces on all the physical bodies implicated.
 
- Public Member Functions inherited from agx::Referenced
 Referenced ()
 Default constructor.
 
 Referenced (const Referenced &)
 
template<typename T >
T * as ()
 Subclass casting.
 
template<typename T >
const T * as () const
 
template<typename T >
T * asSafe ()
 Safe subclass casting, return nullptr if template type does not match.
 
template<typename T >
const T * asSafe () const
 
int getReferenceCount () const
 
template<typename T >
bool is () const
 Subclass test.
 
Referenced & operator= (const Referenced &)
 Assignment operator. Will increment the number of references to the referenced object.
 
void reference (void *ptr=nullptr) const
 Explicitly increment the reference count by one, indicating that this object has another pointer which is referencing it.
 
void unreference (void *ptr=nullptr) const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 
void unreference_nodelete () const
 Decrement the reference count by one, indicating that a pointer to this object is referencing it.
 
- Public Member Functions inherited from agxStream::Serializable
virtual ~Serializable ()
 Destructor for normal C++ use but hidden from SWIG bindings.
 
virtual const char * getClassName () const
 
bool getEnableSerialization () const
 
bool getEnableUuidGeneration ()
 
agx::UInt32 getIndex () const
 This index is given at creation of this object.
 
virtual StorageAgent * getStorageAgent () const =0
 
agx::Uuid getUuid () const
 
bool isFinished () const
 
void setEnableSerialization (bool flag)
 Set to false to disable serialization of this object.
 
void setFinished ()
 Tells this class that it is restored correctly and should not be deleted during destruction of an Archive.
 
void setUuid (const agx::Uuid &uuid)
 Explicitly set a Uuid on a serializable object.
 

Static Public Member Functions

static agxStream::Serializable * create (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agx::Interaction
static agxStream::Serializable * create (agxStream::InputArchive &)
 
- Static Public Member Functions inherited from agx::Referenced
template<typename T >
static bool ValidateCast (const Referenced *object)
 
- Static Public Member Functions inherited from agxStream::Serializable
static void setEnableUuidGeneration (bool flag)
 Specify if there should be UUID:s generated for each new Serializable object. By default it is enabled.
 

Protected Member Functions

 VirtualConstraintInertia ()
 Default constructor used by serialization.
 
virtual ~VirtualConstraintInertia ()
 Reference counted object, protected destructor.
 
virtual void prepare () override
 Prepares for solve.
 
virtual void writeMatrixData (agx::StrongInteraction::MatrixData rb1DiagonalBlock, agx::StrongInteraction::MatrixData rb2DiagonalBlock, agx::StrongInteraction::MatrixData offDiagonalBlock) override
 Write data for dynamic bodies.
 
virtual void writeRhs (agx::Physics::RigidBodyPtr rb1, agx::Real *rb1Rhs, agx::Physics::RigidBodyPtr rb2, agx::Real *rb2Rhs, agx::Bool isRestingSolve) override
 Write data to the right hand side, for dynamic bodies.
 
- Protected Member Functions inherited from agx::StrongInteraction
 StrongInteraction ()
 Construct given one or two rigid bodies.
 
virtual ~StrongInteraction ()
 Reference counted object, protected destructor.
 
virtual void restore (agxStream::InputArchive &in) override
 Restore local content.
 
void setValid (agx::Bool valid)
 Valid if enable and configuration is ok for solver.
 
virtual void store (agxStream::OutputArchive &out) const override
 Store local content.
 
- Protected Member Functions inherited from agx::Interaction
virtual ~Interaction ()
 Reference counted object, protected destructor.
 
virtual void addNotification ()
 Called when added to a simulation.
 
virtual void removeNotification ()
 Called when removed from a simulation.
 
virtual void setSimulation (agxSDK::Simulation *simulation)
 Assign simulation.
 
- Protected Member Functions inherited from agx::Referenced
virtual ~Referenced ()
 Destructor.
 
void allocateObserverVector () const
 
void deleteUsingDeleteHandler () const
 
- Protected Member Functions inherited from agxStream::Serializable
 Serializable ()
 Default constructor.
 
 Serializable (const Serializable &other)
 Copy constructor.
 
void generateUuid ()
 

Protected Attributes

agx::ConstraintRef m_constraint
 
agx::Real m_rigidBody1RotationalInertia
 
agx::Real m_rigidBody1TranslationalInertia
 
agx::Real m_rigidBody2RotationalInertia
 
agx::Real m_rigidBody2TranslationalInertia
 
Transformed m_transformed
 
- Protected Attributes inherited from agx::Referenced
Mutex m_mutex
 
ObserverContainer m_observers
 
AtomicValue m_refCount
 

Additional Inherited Members

- Static Protected Member Functions inherited from agx::Referenced
static DeleteHandler * getDeleteHandler ()
 
static void setDeleteHandler (DeleteHandler *handler)
 Internal: Set a DeleteHandler to which deletion of all referenced counted objects will be delegated to.
 

Detailed Description

This class will add a virtual inertia along or around the constraint axis (N-axis), which will affect the resulting rotational or translational acceleration on the affected rigid bodies.

This virtual inertia is added as a strong interaction that modifies the mass and inertia matrix of the coupled bodies right before the solver to achieve this effect. Virtual inertias are applied on the rigid bodies in the constraint separately which will affect their movement around and/or along the constraint axis.

This class can be used to add virtual inertia to a rotational constraint, such as a hinge or add a translational inertia along the central axis of a prismatic constraint.

Definition at line 35 of file VirtualConstraintInertia.h.

Constructor & Destructor Documentation

◆ VirtualConstraintInertia() [1/2]

agx::VirtualConstraintInertia::VirtualConstraintInertia ( agx::Constraint *  constraint,
agx::Real  rigidBody1TranslationInertia,
agx::Real  rigidBody1RotationalInertia,
agx::Real  rigidBody2TranslationInertia,
agx::Real  rigidBody2RotationalInertia 
)

Basic constructor that takes a constraint and the virtual inertias that should be applied in the central axis of the constraint.

Parameters
constraintThe constraint that the virtual inertia will be added to.
rigidBody1TranslationInertiaThe translational inertia/mass that will be for movements along the the constraint axis on on Rigid Body 1.
rigidBody1RotationalInertiaThe virtual inertia that will be added to movements around the constraint axis on Rigid Body 1.
rigidBody2TranslationInertiaThe translational inertia/mass that will be for movements along the the constraint axis on Rigid Body 2.
rigidBody2RotationalInertiaThe virtual inertia that will be added to movements around the constraint axis on Rigid Body 2.

◆ VirtualConstraintInertia() [2/2]

agx::VirtualConstraintInertia::VirtualConstraintInertia ( )
protected

Default constructor used by serialization.

◆ ~VirtualConstraintInertia()

virtual agx::VirtualConstraintInertia::~VirtualConstraintInertia ( )
protectedvirtual

Reference counted object, protected destructor.

Member Function Documentation

◆ AGXSTREAM_DECLARE_SERIALIZABLE_BASE()

agx::VirtualConstraintInertia::AGXSTREAM_DECLARE_SERIALIZABLE_BASE ( agx::VirtualConstraintInertia  )

◆ create()

static agxStream::Serializable * agx::VirtualConstraintInertia::create ( agxStream::InputArchive &  )
inlinestatic

Definition at line 116 of file VirtualConstraintInertia.h.

◆ getRigidBody1()

virtual agx::RigidBody * agx::VirtualConstraintInertia::getRigidBody1 ( ) const
overridevirtual
Returns
first rigid body

Implements agx::StrongInteraction.

◆ getRigidBody1RotationalInertia()

agx::Real agx::VirtualConstraintInertia::getRigidBody1RotationalInertia ( ) const

Gets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.

Returns
The virtual rotational inertia to set in the constraint applied on rigid body 1.

◆ getRigidBody1TranslationalInertia()

agx::Real agx::VirtualConstraintInertia::getRigidBody1TranslationalInertia ( ) const

Gets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 1.

Returns
The virtual translational inertia to set in the constraint.

◆ getRigidBody2()

virtual agx::RigidBody * agx::VirtualConstraintInertia::getRigidBody2 ( ) const
overridevirtual
Returns
second rigid body

Implements agx::StrongInteraction.

◆ getRigidBody2RotationalInertia()

agx::Real agx::VirtualConstraintInertia::getRigidBody2RotationalInertia ( ) const

Gets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.

Returns
The virtual rotational inertia to set in the constraint applied on rigid body 2.

◆ getRigidBody2TranslationalInertia()

agx::Real agx::VirtualConstraintInertia::getRigidBody2TranslationalInertia ( ) const

Gets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 2.

Returns
The virtual translational inertia to set in the constraint applied on rigid body 2.

◆ prepare()

virtual void agx::VirtualConstraintInertia::prepare ( )
overrideprotectedvirtual

Prepares for solve.

Reimplemented from agx::StrongInteraction.

◆ setRigidBody1RotationalInertia()

void agx::VirtualConstraintInertia::setRigidBody1RotationalInertia ( agx::Real  rotationalInertia)

Sets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 1 in the constraint.

Parameters
rotationalInertia- The virtual rotational inertia to set in the constraint applied on rigid body 1.

◆ setRigidBody1TranslationalInertia()

void agx::VirtualConstraintInertia::setRigidBody1TranslationalInertia ( agx::Real  translationalInertia)

Sets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 1.

Parameters
translationalInertia- The virtual translational inertia to set in the constraint.

◆ setRigidBody2RotationalInertia()

void agx::VirtualConstraintInertia::setRigidBody2RotationalInertia ( agx::Real  rotationalInertia)

Sets the virtual rotational inertia that will be applied in the constraint interaction upon rigid body 2 in the constraint.

Parameters
rotationalInertia- The virtual rotational inertia to set in the constraint applied on rigid body 2.

◆ setRigidBody2TranslationalInertia()

void agx::VirtualConstraintInertia::setRigidBody2TranslationalInertia ( agx::Real  translationalInertia)

Sets the virtual translational inertia that will be applied in the constraint interaction applied on rigid body 2.

Parameters
translationalInertia- The virtual translational inertia to set in the constraint.

◆ writeMatrixData()

virtual void agx::VirtualConstraintInertia::writeMatrixData ( agx::StrongInteraction::MatrixData  rb1DiagonalBlock,
agx::StrongInteraction::MatrixData  rb2DiagonalBlock,
agx::StrongInteraction::MatrixData  offDiagonalBlock 
)
overrideprotectedvirtual

Write data for dynamic bodies.

Implements agx::StrongInteraction.

◆ writeRhs()

virtual void agx::VirtualConstraintInertia::writeRhs ( agx::Physics::RigidBodyPtr  rb1,
agx::Real *  rb1Rhs,
agx::Physics::RigidBodyPtr  rb2,
agx::Real *  rb2Rhs,
agx::Bool  isRestingSolve 
)
overrideprotectedvirtual

Write data to the right hand side, for dynamic bodies.

Implements agx::StrongInteraction.

Member Data Documentation

◆ m_constraint

agx::ConstraintRef agx::VirtualConstraintInertia::m_constraint
protected

Definition at line 168 of file VirtualConstraintInertia.h.

◆ m_rigidBody1RotationalInertia

agx::Real agx::VirtualConstraintInertia::m_rigidBody1RotationalInertia
protected

Definition at line 170 of file VirtualConstraintInertia.h.

◆ m_rigidBody1TranslationalInertia

agx::Real agx::VirtualConstraintInertia::m_rigidBody1TranslationalInertia
protected

Definition at line 169 of file VirtualConstraintInertia.h.

◆ m_rigidBody2RotationalInertia

agx::Real agx::VirtualConstraintInertia::m_rigidBody2RotationalInertia
protected

Definition at line 172 of file VirtualConstraintInertia.h.

◆ m_rigidBody2TranslationalInertia

agx::Real agx::VirtualConstraintInertia::m_rigidBody2TranslationalInertia
protected

Definition at line 171 of file VirtualConstraintInertia.h.

◆ m_transformed

Transformed agx::VirtualConstraintInertia::m_transformed
protected

Definition at line 173 of file VirtualConstraintInertia.h.


The documentation for this class was generated from the following file: