|
AGX Dynamics 2.41.3.0
|
Generic constraint which by default is empty of elementary constraints. More...
#include <GenericConstraint.h>
Inheritance diagram for agx::GenericConstraint:Public Member Functions | |
| GenericConstraint (agx::RigidBody *rb1) | |
| Construct given one rigid body (second is null). | |
| GenericConstraint (agx::RigidBody *rb1, agx::Frame *f1, agx::RigidBody *rb2, agx::Frame *f2) | |
| Construct given two bodies and frames. | |
| GenericConstraint (agx::RigidBody *rb1, agx::RigidBody *rb2) | |
| Construct given two rigid bodies (first has to be != null). | |
| int | getNumDOF () const override |
| virtual void | onAddNotification () override |
| Callback when the constraint has been added to a simulation. | |
| virtual void | onPostSolve () override |
| Callback from after the solve and the solutions been pushed to the elementary constraints. | |
| virtual agx::Bool | onPreSolve () override |
| Callback before this constraint reaches the solver (actually preSystemCallback). | |
| virtual void | onRemoveNotification () override |
| Callback when the constraint has been removed from a simulation. | |
| void | render (class agxRender::RenderManager *manager, float scale) const override |
| Inherited method of how to render this constraint into DebugRenderer. | |
| virtual void | updateComplianceMatrix (GenericConstraintComplianceMatrix *matrix) override |
| Callback to write data. | |
Public Member Functions inherited from agx::IGenericConstraint | |
| virtual | ~IGenericConstraint () |
| Bool | add (RigidBody *rb) |
| Register rigid body part of this many-body constraint. | |
| Bool | addChild (Constraint *constraint) |
| Add child constraint (binary or many-body). | |
| virtual void | addNotification () final override |
| Called when added to a simulation. | |
| GenericConstraintComplianceMatrix * | getComplianceMatrix () const |
| If this constraint active rows doesn't vary and isStaticSize = true has been flagged when enabling support for compliance matrix, this method will return the matrix at any time. | |
| int | getNumDOF () const override |
| virtual void | onAddNotification ()=0 |
| virtual void | onPostSolve ()=0 |
| virtual bool | onPreSolve ()=0 |
| virtual void | onRemoveNotification ()=0 |
| Bool | remove (RigidBody *rb) |
| Remove rigid body from this many-body constraint. | |
| void | removeAllBodies () |
| Removes all bodies previously added. | |
| void | removeAllChildren () |
| Removes all child constraints previously added. | |
| Bool | removeChild (Constraint *constraint) |
| Remove child constraint. | |
| virtual void | removeNotification () final override |
| Called when removed from a simulation. | |
| void | render (class agxRender::RenderManager *manager, float scale) const override |
| Inherited method of how to render this constraint into DebugRenderer. | |
| Bool | setRigidBodies (RigidBody *rb1, RigidBody *rb2) |
| Assign/update rigid bodies of this constraint. | |
| void | setSupportComplianceMatrix (Bool enable, Bool isStaticSize=false) |
| Enable/disable updateComplianceMatrix callback with write access to the elements in the compliance matrix of this constraint. | |
| virtual void | updateComplianceMatrix (GenericConstraintComplianceMatrix *matrix)=0 |
Public Member Functions inherited from agx::Constraint | |
| agx::Bool | addElementaryConstraint (const agx::Name &name, agx::ElementaryConstraint *elementaryConstraint) |
| Add elementary constraint (like Spherical, Dot1, Dot2 etc) given name. | |
| agx::Bool | addSecondaryConstraint (const agx::Name &name, agx::ElementaryConstraint *secondaryConstraint) |
| Add secondary constraint (like motor, range and/or lock etc) given name. | |
| AGXSTREAM_DECLARE_ABSTRACT_SERIALIZABLE (agx::Constraint) | |
| template<typename T > | |
| T * | as () |
| Try to do dynamic_cast on the constraint and return a pointer to the casted constraint. | |
| template<typename T > | |
| const T * | as () const |
| Try to do dynamic_cast on the constraint and return a pointer to the casted constraint. | |
| RealVector | calculateCurrentViolation () const |
| Calculates the current violation of the ordinary degrees of freedom of this constraint, e.g., three translational and two rotational (total 5 elements) of a hinge, i.e., controllers DOF are not included. | |
| agx::UInt | calculateNumActiveRows () const |
| Calculates the current number of active rows, including both elementary and secondary constraints. | |
| template<typename T > | |
| ref_ptr< T > | createFromBody (Vec3 bodyPoint, Vec3 bodyAxis, RigidBody *rb1, RigidBody *rb2) |
| template<typename T > | |
| ref_ptr< T > | createFromWorld (Vec3 worldPoint, Vec3 worldAxis, RigidBody *rb1, RigidBody *rb2) |
| agx::Attachment * | getAttachment (agx::UInt i) const |
| agx::RigidBodyAttachment * | getAttachment (const agx::RigidBody *rb) const |
| agx::AttachmentPair * | getAttachmentPair () const |
| agx::RigidBody * | getBodyAt (agx::UInt i) |
| const agx::RigidBody * | getBodyAt (agx::UInt i) const |
| virtual agx::Real | getCompliance (agx::UInt dof) const |
| Get the compliance for DOF i. | |
| agx::Real | getCurrentForce (agx::UInt dof) const |
Consider using getLastForce instead. | |
| virtual Real | getDamping (agx::UInt dof) const |
Get the damping for DOF dof. | |
| virtual agx::Real | getElasticity (agx::UInt dof) const |
| Get the elasticity for DOF i. | |
| agx::ElementaryConstraint * | getElementaryConstraint (const agx::UInt index) const |
| agx::ElementaryConstraint * | getElementaryConstraintGivenName (const agx::Name &name) const |
| Find elementary constraint given name. | |
| agx::Bool | getEnable () const |
| agx::Bool | getEnableComputeForces () const |
| bool | getEnableDebugRendering () const |
| bool | getEnableLinearization () const |
| agx::UInt32 | getEntityId () const |
| agx::RangeReal | getForceRange (agx::UInt dof=0) const |
Get the force range for DOF dof. | |
| agx::Bool | getLastForce (agx::UInt bodyIndex, agx::Vec3 &retForce, agx::Vec3 &retTorque, agx::Bool giveForceAtCm=false) const |
If 'compute forces' is enabled, returns the last force and torque applied by this constraint on the body with bodyIndex. | |
| agx::Bool | getLastForce (const agx::RigidBody *rb, agx::Vec3 &retForce, agx::Vec3 &retTorque, agx::Bool giveForceAtCm=false) const |
If 'compute forces' is enabled, returns the last force and torque applied by this constraint on the body rb. | |
| agx::Bool | getLastLocalForce (agx::UInt bodyIndex, agx::Vec3 &retForce, agx::Vec3 &retTorque, agx::Bool giveForceAtCm=false) const |
If 'compute forces' is enabled, returns the last force and torque applied by this constraint on the body with bodyIndex. | |
| agx::Bool | getLastLocalForce (const agx::RigidBody *rb, agx::Vec3 &retForce, agx::Vec3 &retTorque, agx::Bool giveForceAtCm=false) const |
If 'compute forces' is enabled, returns the last force and torque applied by this constraint on the body rb. | |
| agx::UInt | getNumBodies () const |
| returns the number of bodies involved | |
| virtual int | getNumDOF () const =0 |
| agx::UInt | getNumElementaryConstraints () const |
| agx::UInt | getNumSecondaryConstraints () const |
| virtual agx::RegularizationParameters * | getRegularizationParameters (agx::UInt i) |
| virtual const agx::RegularizationParameters * | getRegularizationParameters (agx::UInt i) const |
| agx::ConstraintImplementation * | getRep () |
| const agx::ConstraintImplementation * | getRep () const |
| agx::ElementaryConstraint * | getSecondaryConstraint (const agx::UInt index) const |
| agx::ElementaryConstraint * | getSecondaryConstraintGivenName (const agx::Name &name) const |
| Find secondary constraint given name. | |
| agx::Constraint::SolveType | getSolveType () const |
| agx::Bool | getValid () const |
| agx::Bool | isEnabled () const |
| virtual agx::Bool | rebind () |
| Rebind this constraint, i.e., use current state as the initial configuration. | |
| agx::Bool | removeElementaryConstraint (agx::ElementaryConstraint *elementaryConstraint) |
| Remove elementary constraint. | |
| agx::Bool | removeElementaryConstraint (const agx::Name &name) |
| Remove elementary constraint. | |
| agx::Bool | removeSecondaryConstraint (agx::ElementaryConstraint *secondaryConstraint) |
| Remove secondary constraint. | |
| agx::Bool | removeSecondaryConstraint (const agx::Name &name) |
| Remove secondary constraint. | |
| virtual void | render (class agxRender::RenderManager *mgr, float scale) const =0 |
| Inherited method of how to render this constraint into DebugRenderer. | |
| void | restore (agxStream::InputArchive &in) override |
| virtual void | restoreLightData (agxStream::StorageStream &str) override |
| void | setCompliance (agx::Real compliance) |
| Set the compliance of this constraint for all DOFs. | |
| virtual void | setCompliance (agx::Real compliance, agx::Int dof) |
| Set the compliance of this constraint for the i:th DOF. | |
| void | setDamping (agx::Real damping) |
| Set the damping of this constraint for all DOFs. | |
| virtual void | setDamping (agx::Real damping, agx::Int dof) |
| Set the damping of this constraint for the i:th DOF. | |
| virtual void | setElasticity (agx::Real elasticity) |
| Set the elasticity of this constraint for all DOFs. | |
| virtual void | setElasticity (agx::Real elasticity, agx::Int dof) |
| Set the elasticity of this constraint for the i:th DOF. | |
| virtual void | setEnable (agx::Bool enable) |
| Enable/disable a constraint. | |
| void | setEnableComputeForces (agx::Bool enable) |
| Enable (or disable) computation of the forces applied to the dynamic bodies in this constraint. | |
| void | setEnableDebugRendering (agx::Bool enable) |
| Enable/disable debug rendering of this constraint. | |
| void | setEnableLinearization (bool enable) |
Pass true to enable linearization of constraint compliance. | |
| void | setForceRange (agx::RangeReal forceRange) |
| Assign force range for all DOF of the elementary constraints. | |
| void | setForceRange (agx::RangeReal forceRange, agx::Int dof) |
| Assign force range, of an elementary constraint, for a given DOF. | |
| void | setForceRange (agx::Real lower, agx::Real upper, agx::Int dof) |
| Assign force range, of an elementary constraint, for a given DOF. | |
| void | setSolveType (agx::Constraint::SolveType solveType) |
| Specify the solve type for this constraint. | |
| void | store (agxStream::OutputArchive &out) const override |
| virtual void | storeLightData (agxStream::StorageStream &str) const override |
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. | |
Protected Member Functions | |
| virtual | ~GenericConstraint ()=default |
Protected Member Functions inherited from agx::IGenericConstraint | |
| IGenericConstraint (GenericConstraintImplementation *implementation) | |
Protected Member Functions inherited from agx::Constraint | |
| Constraint () | |
| virtual | ~Constraint () |
| virtual void | addNotification () override |
| Called when added to a simulation. | |
| virtual void | postSystemCallback (agx::DynamicsSystem *dynamicsSystem) override |
| Called after all post step events, after solve. | |
| virtual void | preSystemCallback (agx::DynamicsSystem *dynamicsSystem) override |
| Called after all pre step events, before solve. | |
| virtual void | removeNotification () override |
| Called when removed from a simulation. | |
| void | setRep (agx::ConstraintImplementation *_rep) |
| virtual void | setSimulation (agxSDK::Simulation *simulation) override |
| Assign simulation. | |
| virtual void | setSystem (agx::DynamicsSystem *) |
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 () |
Additional Inherited Members | |
Public Types inherited from agx::Constraint | |
| enum | SolveType { DIRECT = 1 , ITERATIVE = (1<<2) , DIRECT_AND_ITERATIVE = (DIRECT | ITERATIVE) } |
| Specifies in what solvers the constraint will be solved. More... | |
Static Public Member Functions inherited from agx::IGenericConstraint | |
| static void | onCleanup (const agxSDK::Simulation *simulation) |
| static void | onPostSolveCallback (const agxSDK::Simulation *simulation) |
| static void | onPreSolveCallback (const agxSDK::Simulation *simulation) |
Static Public Member Functions inherited from agx::Constraint | |
| static agx::Bool | calculateFramesFromBody (agx::Vec3 bodyPoint, agx::Vec3 bodyAxis, agx::Vec3 secondBodyAxis, const agx::RigidBody *body, agx::Frame *bodyFrame, const agx::RigidBody *otherBody, agx::Frame *otherFrame) |
Calculates the constraint attachment frames given point and axes in body coordinates of body. | |
| static agx::Bool | calculateFramesFromBody (agx::Vec3 bodyPoint, agx::Vec3 bodyAxis, const agx::RigidBody *body, agx::Frame *bodyFrame, const agx::RigidBody *otherBody, agx::Frame *otherFrame) |
Calculates the constraint attachment frames given point and axis in body coordinates of body. | |
| static agx::Bool | calculateFramesFromWorld (agx::Vec3 worldPoint, agx::Vec3 worldAxis, agx::Vec3 secondWorldAxis, const agx::RigidBody *rb1, agx::Frame *rb1Frame, const agx::RigidBody *rb2, agx::Frame *rb2Frame) |
| Given a point and two axes in world, this function calculates each local attachment frame for one or two bodies. | |
| static agx::Bool | calculateFramesFromWorld (agx::Vec3 worldPoint, agx::Vec3 worldAxis, const agx::RigidBody *rb1, agx::Frame *rb1Frame, const agx::RigidBody *rb2, agx::Frame *rb2Frame) |
| Given a point and an axis in world, this function calculates each local attachment frame for one or two bodies. | |
| template<typename T > | |
| static agx::ref_ptr< T > | createFromBody (agx::Vec3 bodyPoint, agx::Vec3 bodyAxis, agx::RigidBody *rb1, agx::RigidBody *rb2=nullptr) |
Creates a constraint given a point and an axis in rb1 model frame. | |
| template<typename T > | |
| static agx::ref_ptr< T > | createFromWorld (agx::Vec3 worldPoint, agx::Vec3 worldAxis, agx::RigidBody *rb1, agx::RigidBody *rb2=nullptr) |
| Creates a constraint given a point and an axis in world frame. | |
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. | |
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. | |
Protected Attributes inherited from agx::Constraint | |
| agx::ConstraintImplementation * | m_implementation |
Protected Attributes inherited from agx::Referenced | |
| Mutex | m_mutex |
| ObserverContainer | m_observers |
| AtomicValue | m_refCount |
Generic constraint which by default is empty of elementary constraints.
This enables the possibility to build custom/generic constraints with additional GenericElementaryConstraint instances or to use the already implemented in the toolkit.
This constraint receives; onAddNotification, onRemoveNotification, onPreSolve and onPostSolve.
Python example: class MyHinge(agx.GenericConstraint): def init(self, rb1: agx.RigidBody, rb1Frame: agx.Frame, rb2: agx.RigidBody, rb2Frame: agx.Frame): super().__init__(rb1, rb1Frame, rb2, rb2Frame)
self.addElementaryConstraint("SP", agx.SphericalRel(agx.ElementaryConstraintData(self.getAttachmentPair())))
self.addElementaryConstraint("D1VN", MyDot1(agx.Attachment.V, agx.Attachment.N)) self.addElementaryConstraint("D1UN", MyDot1(agx.Attachment.U, agx.Attachment.N))
def onAddNotification(self): print('add notification!')
def onRemoveNotification(self): print('remove notification!')
def onPreSolve(self):
return True
def onPostSolve(self):
pass
Definition at line 57 of file GenericConstraint.h.
| agx::GenericConstraint::GenericConstraint | ( | agx::RigidBody * | rb1 | ) |
Construct given one rigid body (second is null).
| rb1 | - first rigid body |
| agx::GenericConstraint::GenericConstraint | ( | agx::RigidBody * | rb1, |
| agx::RigidBody * | rb2 | ||
| ) |
Construct given two rigid bodies (first has to be != null).
| rb1 | - first rigid body |
| rb2 | - second rigid body |
| agx::GenericConstraint::GenericConstraint | ( | agx::RigidBody * | rb1, |
| agx::Frame * | f1, | ||
| agx::RigidBody * | rb2, | ||
| agx::Frame * | f2 | ||
| ) |
Construct given two bodies and frames.
| rb1 | - first rigid body |
| f1 | - constraint frame relative to rb1 |
| rb2 | - second rigid body |
| f2 | - constraint frame relative to rb2 |
|
protectedvirtualdefault |
|
overridevirtual |
Implements agx::Constraint.
|
overridevirtual |
Callback when the constraint has been added to a simulation.
Implements agx::IGenericConstraint.
|
overridevirtual |
Callback from after the solve and the solutions been pushed to the elementary constraints.
Implements agx::IGenericConstraint.
|
overridevirtual |
Callback before this constraint reaches the solver (actually preSystemCallback).
If the return value is true and this constraint is valid, this constraint will continue into the solver.
Implements agx::IGenericConstraint.
|
overridevirtual |
Callback when the constraint has been removed from a simulation.
Implements agx::IGenericConstraint.
|
overridevirtual |
Inherited method of how to render this constraint into DebugRenderer.
Implements agx::Constraint.
|
overridevirtual |
Callback to write data.
All values must be greater than or equal to zero. Data is only stored for the lower triangle since the matrix must be symmetric and positive definite.
Implements agx::IGenericConstraint.