|
AGX Dynamics 2.41.3.0
|
Elementary constraint base class with interface and global constraint functionality. More...
#include <ElementaryConstraint.h>
Inheritance diagram for agx::ElementaryConstraint:Public Types | |
| typedef agx::Name | NameType |
| typedef agx::VectorPOD< agx::ElementaryConstraint * > | PtrContainer |
| typedef agx::Vector< agx::ref_ptr< agx::ElementaryConstraint > > | RefContainer |
Public Member Functions | |
| AGXSTREAM_DECLARE_ABSTRACT_SERIALIZABLE (agx::ElementaryConstraint) | |
| void | copyRowFrom (const ElementaryConstraint *source, agx::UInt sourceRow, agx::UInt destRow) |
Copy configuration row from the given ElementaryConstraint into this. | |
| virtual agx::UInt | getBounds (agx::RangeReal *bounds, agx::UInt row, agx::Real h) const |
| Returns the bounds of the Lagrange Multipliers (default (-inf, +inf)). | |
| agx::Real | getCompliance (agx::UInt row=0) const |
| virtual agx::Real | getCurrentForce (const agx::UInt row=0) const |
| Returns the force applied last time step by this elementary constraint. | |
| const agx::Real * | getCurrentForces () const |
| agx::Real | getDamping (agx::UInt row=0) const |
| agx::Real | getElasticity (agx::UInt row=0) const |
| virtual agx::Bool | getEnable () const |
| agx::RangeReal & | getForceRange (const agx::UInt row=0) |
| const agx::RangeReal & | getForceRange (const agx::UInt row=0) const |
| virtual agx::UInt | getJacobian (agx::Jacobian6DOFElement *G, agx::UInt numBlocks, agx::UInt row, agx::GWriteState::Enum writeState) |
| Returns the Jacobian of this elementary constraint. | |
| const agx::ElementaryConstraint::NameType & | getName () const |
| virtual agx::ConstraintNlmcpCallback * | getNlCallback () const |
| agx::UInt | getNumRows () const |
| agx::RegularizationParameters * | getRegularizationParameters (const agx::UInt row=0) |
| const agx::RegularizationParameters * | getRegularizationParameters (const agx::UInt row=0) const |
| virtual agx::UInt | getVelocity (agx::Real *v, agx::UInt row) const |
| Returns the velocity of this elementary constraint (extra, driving term on the right hand side). | |
| virtual agx::UInt | getViolation (agx::Real *g, agx::UInt row) |
| Returns the violation of this elementary constraint. | |
| virtual agx::Bool | isActive () const |
An elementary constraint is defined to be active if enabled. | |
| virtual agx::Bool | isImpacting () const |
| virtual void | linearizeCompliance (const agx::Real *violations, agx::Real *epsilons, agx::Real minPerturbation) const |
| Modify epsilon so that this ElementaryConstraint appear to be linear in the "normal" deformantion space instead any other space that the ElementaryConstraint may be using. | |
| virtual agx::UInt | postSolveCallback (const agx::Real *solution, agx::UInt row, agx::Real h) |
| Callback after solve, with the solution. | |
| virtual void | prepare () |
| Prepare call. | |
| void | reset () |
| Reset call. | |
| virtual void | restore (agxStream::InputArchive &in) override |
| Restore this object from stream. | |
| virtual void | restoreLightData (agxStream::StorageStream &str) override |
| Restore structural independent data from stream. | |
| virtual void | setAttachmentPair (const agx::AttachmentPair *ap) |
| Call for elementary constraints dependent on attachment pairs. | |
| void | setCompliance (agx::Real compliance) |
| void | setCompliance (agx::Real compliance, int row) |
Assign compliance for a given row, or all rows if row = -1 (default). | |
| void | setDamping (agx::Real damping) |
| void | setDamping (agx::Real damping, int row) |
Assign damping for a given row, or all rows if row = -1 (default). | |
| void | setElasticity (agx::Real elasticity) |
| void | setElasticity (agx::Real elasticity, int row) |
Assign elasticity for a given row, or all rows if row = -1 (default). | |
| virtual void | setEnable (agx::Bool enable) |
| Enable/disable this elementary constraint. | |
| void | setForceRange (agx::RangeReal forceRange, const agx::UInt row=0) |
| Assign force range to a given row. | |
| void | setForceRange (agx::Real lower, agx::Real upper, const agx::UInt row=0) |
| Assign force range to a given row. | |
| void | setName (const agx::ElementaryConstraint::NameType &name) |
| Name this elementary constraint. | |
| virtual void | store (agxStream::OutputArchive &out) const override |
| Store this object to stream. | |
| virtual void | storeLightData (agxStream::StorageStream &str) const override |
| Store structural independent data to stream. | |
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 | |
| ElementaryConstraint (agx::Bool enable, agx::UInt numRows, agx::RegularizationParameters *regParamsBuffer, agx::Real *lastForcesBuffer, agx::RangeReal *userBoundsBuffer) | |
| Construct given data. | |
| virtual | ~ElementaryConstraint () |
| Reference counted object, protected destructor. | |
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::Bool | m_enable |
| enabled | |
| agx::ref_ptr< agx::Referenced > | m_internalData |
| custom, internal data | |
| agx::Real * | m_lfs |
| last forces | |
| agx::ElementaryConstraint::NameType | m_name |
| name | |
| agx::UInt | m_numRows |
| number of rows | |
| agx::RegularizationParameters * | m_rps |
| regularization parameters | |
| agx::RangeReal * | m_ubs |
| user bounds | |
Protected Attributes inherited from agx::Referenced | |
| Mutex | m_mutex |
| ObserverContainer | m_observers |
| AtomicValue | m_refCount |
Additional Inherited Members | |
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. | |
Elementary constraint base class with interface and global constraint functionality.
Definition at line 53 of file ElementaryConstraint.h.
Definition at line 58 of file ElementaryConstraint.h.
Definition at line 57 of file ElementaryConstraint.h.
| typedef agx::Vector< agx::ref_ptr< agx::ElementaryConstraint > > agx::ElementaryConstraint::RefContainer |
Definition at line 56 of file ElementaryConstraint.h.
|
protected |
Construct given data.
Sub-classes are responsible of providing regularization parameters-, force- and bounds data of size numRows.
| enable | - default enabled or disabled |
| numRows | - number of equations of this elementary constraint |
| regParamsBuffer | - buffer (of size numRows) with regularization parameters |
| lastForcesBuffer | - buffer (of size numRows) to store last/current forces |
| userBoundsBuffer | - buffer (of size numRows) with bounds (read/written through set/getForceRange) |
|
protectedvirtual |
Reference counted object, protected destructor.
| agx::ElementaryConstraint::AGXSTREAM_DECLARE_ABSTRACT_SERIALIZABLE | ( | agx::ElementaryConstraint | ) |
| void agx::ElementaryConstraint::copyRowFrom | ( | const ElementaryConstraint * | source, |
| agx::UInt | sourceRow, | ||
| agx::UInt | destRow | ||
| ) |
Copy configuration row from the given ElementaryConstraint into this.
| source | - The ElementaryConstraint to copy from. |
| sourceRow | - The index of the row in the given ElementaryConstraint to copy from. |
| destRow | - The index to the row in this to which the configuration should be copied. |
|
virtual |
Returns the bounds of the Lagrange Multipliers (default (-inf, +inf)).
Note that the bounds buffer has to be provided by the caller.
h = time step length). | bounds | - bounds buffer |
| row | - start row in bounds buffer bounds |
| h | - current time step length |
Reimplemented in agx::FrictionController, agx::RangeController, agx::TwistRangeController, agx::ConeLimit, and agx::ElementaryContactPoint.
| row | - row < getNumRows() |
row (row < getNumRows())
|
virtual |
Returns the force applied last time step by this elementary constraint.
| row | - row < getNumRows() |
| const agx::Real * agx::ElementaryConstraint::getCurrentForces | ( | ) | const |
| row | - row < getNumRows() |
row (row < getNumRows()) | row | - row < getNumRows() |
row (row < getNumRows())
|
virtual |
| agx::RangeReal & agx::ElementaryConstraint::getForceRange | ( | const agx::UInt | row = 0 | ) |
| row | - row < getNumRows() |
row | const agx::RangeReal & agx::ElementaryConstraint::getForceRange | ( | const agx::UInt | row = 0 | ) | const |
| row | - row < getNumRows() |
row
|
virtual |
Returns the Jacobian of this elementary constraint.
Note that the Jacobian buffer has to be provided by the caller.
| G | - Jacobian buffer |
| numBlocks | - number of blocks in the global Jacobian (e.g., number of bodies in the main constraint) |
| row | - start row in Jacobian buffer |
| writeState | - state of the main constraint (the order in which the Jacobian is written defines this state) |
G Reimplemented in agxPowerLine::ElementaryPhysicalDimensionConstraint, agx::ContactNormal, agx::ContactTangent, agx::Dot1, agx::Swing, agx::Dot2, agx::Spherical, agx::SphericalRel, agx::QuatLock, agx::BasicControllerConstraint, agx::ScrewController, agx::Twist, agx::Dot1Slack, agx::Dot2Slack, and agx::SphericalRelSlack.
| const ElementaryConstraint::NameType & agx::ElementaryConstraint::getName | ( | ) | const |
Definition at line 1444 of file ElementaryConstraint.h.
References m_name.
|
virtual |
Reimplemented in agx::FrictionController, and agx::GenericElementaryConstraint.
| UInt agx::ElementaryConstraint::getNumRows | ( | ) | const |
Definition at line 1439 of file ElementaryConstraint.h.
References m_numRows.
| RegularizationParameters * agx::ElementaryConstraint::getRegularizationParameters | ( | const agx::UInt | row = 0 | ) |
| row | - row < getNumRows() |
row (default: 0) Definition at line 1427 of file ElementaryConstraint.h.
| const RegularizationParameters * agx::ElementaryConstraint::getRegularizationParameters | ( | const agx::UInt | row = 0 | ) | const |
| row | - row < getNumRows() |
row (default: 0) Definition at line 1433 of file ElementaryConstraint.h.
|
virtual |
Returns the velocity of this elementary constraint (extra, driving term on the right hand side).
Note that the velocity buffer has to be provided by the caller.
| v | - velocity buffer |
| row | - start row in velocity buffer v |
Reimplemented in agx::ContactTangent, agx::TargetSpeedController, agx::ElectricMotorController, and agx::ElementaryContactPoint.
Returns the violation of this elementary constraint.
Note that the violation buffer has to be provided by the caller.
| g | - violation buffer |
| row | - start row in violation buffer g |
Reimplemented in agxPowerLine::ElementaryPhysicalDimensionConstraint, agx::ContactNormal, agx::ContactTangent, agx::Dot1, agx::Swing, agx::Dot2, agx::Spherical, agx::SphericalRel, agx::QuatLock, agx::TargetSpeedController, agx::FrictionController, agx::RangeController, agx::LockController, agx::ScrewController, agx::Twist, agx::TwistRangeController, agx::ConeLimit, agx::Dot1Slack, agx::Dot2Slack, agx::SphericalRelSlack, agx::ElectricMotorController, and agx::ElementaryContactPoint.
|
virtual |
An elementary constraint is defined to be active if enabled.
Yet constraints can be enabled but not active (e.g., RangeController when the range isn't exceeded).
Reimplemented in agx::FrictionController, agx::RangeController, agx::TwistRangeController, agx::ConeLimit, and agx::GenericElementaryConstraint.
|
virtual |
Reimplemented in agx::ElementaryContactPoint.
|
inlinevirtual |
Modify epsilon so that this ElementaryConstraint appear to be linear in the "normal" deformantion space instead any other space that the ElementaryConstraint may be using.
For most ElementaryConstraints this does nothing. For QuatLock the epsilon is modified to account for the nonlinear nature of quaternion's relation to the angle of rotation they represent.
This function is called by the engine during constraint preparation for solve.
Reimplemented in agx::QuatLock.
Definition at line 1449 of file ElementaryConstraint.h.
|
virtual |
Callback after solve, with the solution.
| solution | - solution of the last solve |
| row | - start row in solution for this elementary constraint |
| h | - current time step length |
Reimplemented in agx::FrictionController.
|
virtual |
Prepare call.
After this call the elementary constraint may be activated.
Reimplemented in agx::ElectricMotorController, agx::RangeController, agx::TwistRangeController, and agx::ConeLimit.
| void agx::ElementaryConstraint::reset | ( | ) |
Reset call.
Call this to zero the solution vector for the ElementaryConstraint.
|
overridevirtual |
Restore this object from stream.
Reimplemented in agx::BasicControllerConstraint, and agxPowerLine::ElementaryPhysicalDimensionConstraint.
|
overridevirtual |
Restore structural independent data from stream.
Reimplemented in agx::TargetSpeedController, agx::FrictionController, agx::ElectricMotorController, agx::RangeController, agx::LockController, and agx::ScrewController.
|
virtual |
Call for elementary constraints dependent on attachment pairs.
Ignored by this base class.
Reimplemented in agx::ElementaryConstraintNData< N, DataT >, agx::ElementaryConstraintNData< 1, ConstraintAngleBasedData >, agx::ElementaryConstraintNData< 1, ConeLimitData >, agx::ElementaryConstraintNData< 1, Dot1Data >, agx::ElementaryConstraintNData< 2, Dot1SlackData >, agx::ElementaryConstraintNData< 1, Dot2Data >, agx::ElementaryConstraintNData< 2, Dot2SlackData >, agx::ElementaryConstraintNData< 3, QuatLockData >, agx::ElementaryConstraintNData< 3, ElementaryConstraintData >, agx::ElementaryConstraintNData< 6, Slack3ConstraintData >, agx::ElementaryConstraintNData< 2, SwingData >, agx::ElementaryConstraintNData< 1, TwistData >, agx::QuatLock, agx::Twist, agx::TwistRangeController, and agx::GenericElementaryConstraint.
| void agx::ElementaryConstraint::setCompliance | ( | agx::Real | compliance | ) |
| void agx::ElementaryConstraint::setCompliance | ( | agx::Real | compliance, |
| int | row | ||
| ) |
Assign compliance for a given row, or all rows if row = -1 (default).
| compliance | - new compliance |
| row | - row to assign compliance. If i < 0 to assign all rows. |
| void agx::ElementaryConstraint::setDamping | ( | agx::Real | damping | ) |
| void agx::ElementaryConstraint::setDamping | ( | agx::Real | damping, |
| int | row | ||
| ) |
Assign damping for a given row, or all rows if row = -1 (default).
| damping | - new damping |
| row | - row to assign damping. If i < 0 to assign all rows. |
| void agx::ElementaryConstraint::setElasticity | ( | agx::Real | elasticity | ) |
| void agx::ElementaryConstraint::setElasticity | ( | agx::Real | elasticity, |
| int | row | ||
| ) |
Assign elasticity for a given row, or all rows if row = -1 (default).
| elasticity | - new elasticity |
| row | - row to assign elasticity. If i < 0 to assign all rows. |
|
virtual |
Enable/disable this elementary constraint.
| enable | - true to enable, false to disable |
| void agx::ElementaryConstraint::setForceRange | ( | agx::RangeReal | forceRange, |
| const agx::UInt | row = 0 |
||
| ) |
Assign force range to a given row.
row is default 0. I.e., it is not defined to assign forceRange to all rows in one call. | forceRange | - new force range |
| row | - row < getNumRows() |
| void agx::ElementaryConstraint::setForceRange | ( | agx::Real | lower, |
| agx::Real | upper, | ||
| const agx::UInt | row = 0 |
||
| ) |
Assign force range to a given row.
row is default 0. I.e., it is not defined to assign lower and upper to all rows in one call. | lower | - lower force range (typically <= 0) |
| upper | - upper force range (typically >= 0) |
| row | - row < getNumRows() |
| void agx::ElementaryConstraint::setName | ( | const agx::ElementaryConstraint::NameType & | name | ) |
Name this elementary constraint.
| name | - new name of this elementary constraint |
|
overridevirtual |
Store this object to stream.
Reimplemented in agx::BasicControllerConstraint, and agxPowerLine::ElementaryPhysicalDimensionConstraint.
|
overridevirtual |
Store structural independent data to stream.
Reimplemented in agx::TargetSpeedController, agx::FrictionController, agx::ElectricMotorController, agx::RangeController, agx::LockController, and agx::ScrewController.
|
protected |
enabled
Definition at line 334 of file ElementaryConstraint.h.
|
protected |
custom, internal data
Definition at line 340 of file ElementaryConstraint.h.
|
protected |
last forces
Definition at line 338 of file ElementaryConstraint.h.
|
protected |
|
protected |
number of rows
Definition at line 335 of file ElementaryConstraint.h.
Referenced by getNumRows(), and getRegularizationParameters().
|
protected |
regularization parameters
Definition at line 337 of file ElementaryConstraint.h.
Referenced by getRegularizationParameters().
|
protected |
user bounds
Definition at line 339 of file ElementaryConstraint.h.