| 
|   | Custom (Implementation *implementation) | 
|   | Create a Custom Constraint.  More...
  | 
|   | 
|   | Custom () | 
|   | Default constructor creates an empty handle.  More...
  | 
|   | 
|   | SimTK_INSERT_DERIVED_HANDLE_DECLARATIONS (Custom, CustomImpl, Constraint) | 
|   | 
|   | Constraint () | 
|   | Default constructor creates an empty Constraint handle that can be used to reference any Constraint.  More...
  | 
|   | 
|   | Constraint (ConstraintImpl *r) | 
|   | For internal use: construct a new Constraint handle referencing a particular implementation object.  More...
  | 
|   | 
| void  | disable (State &) const | 
|   | Disable this Constraint, effectively removing it from the system.  More...
  | 
|   | 
| void  | enable (State &) const | 
|   | Enable this Constraint, without necessarily satisfying it.  More...
  | 
|   | 
| bool  | isDisabled (const State &) const | 
|   | Test whether this constraint is currently disabled in the supplied State.  More...
  | 
|   | 
| bool  | isDisabledByDefault () const | 
|   | Test whether this Constraint is disabled by default in which case it must be explicitly enabled before it will take effect.  More...
  | 
|   | 
| void  | setDisabledByDefault (bool shouldBeDisabled) | 
|   | Normally Constraints are enabled when defined and can be disabled later.  More...
  | 
|   | 
|   | operator ConstraintIndex () const | 
|   | This is an implicit conversion from Constraint to ConstraintIndex when needed.  More...
  | 
|   | 
| const SimbodyMatterSubsystem &  | getMatterSubsystem () const | 
|   | Get a const reference to the matter subsystem that contains this Constraint.  More...
  | 
|   | 
| SimbodyMatterSubsystem &  | updMatterSubsystem () | 
|   | Assuming you have writable access to this Constraint, get a writable reference to the containing matter subsystem.  More...
  | 
|   | 
| ConstraintIndex  | getConstraintIndex () const | 
|   | Get the ConstraintIndex that was assigned to this Constraint when it was added to the matter subsystem.  More...
  | 
|   | 
| bool  | isInSubsystem () const | 
|   | Test whether this Constraint is contained within a matter subsystem.  More...
  | 
|   | 
| bool  | isInSameSubsystem (const MobilizedBody &mobod) const | 
|   | Test whether the supplied MobilizedBody is in the same matter subsystem as this Constraint.  More...
  | 
|   | 
| int  | getNumConstrainedBodies () const | 
|   | Return the number of unique bodies directly restricted by this constraint.  More...
  | 
|   | 
| const MobilizedBody &  | getMobilizedBodyFromConstrainedBody (ConstrainedBodyIndex consBodyIx) const | 
|   | Return a const reference to the actual MobilizedBody corresponding to one of the Constrained Bodies included in the count returned by getNumConstrainedBodies().  More...
  | 
|   | 
| const MobilizedBody &  | getAncestorMobilizedBody () const | 
|   | Return a const reference to the actual MobilizedBody which is serving as the Ancestor body for the constrained bodies in this Constraint.  More...
  | 
|   | 
| int  | getNumConstrainedMobilizers () const | 
|   | Return the number of unique mobilizers directly restricted by this Constraint.  More...
  | 
|   | 
| const MobilizedBody &  | getMobilizedBodyFromConstrainedMobilizer (ConstrainedMobilizerIndex consMobilizerIx) const | 
|   | Return a const reference to the actual MobilizedBody corresponding to one of the Constrained Mobilizers included in the count returned by getNumConstrainedMobilizers().  More...
  | 
|   | 
| const SimbodyMatterSubtree &  | getSubtree () const | 
|   | Return a subtree object indicating which parts of the multibody tree are potentially affected by this Constraint.  More...
  | 
|   | 
| int  | getNumConstrainedQ (const State &, ConstrainedMobilizerIndex) const | 
|   | Return the number of constrainable generalized coordinates q associated with a particular constrained mobilizer.  More...
  | 
|   | 
| int  | getNumConstrainedU (const State &, ConstrainedMobilizerIndex) const | 
|   | Return the number of constrainable mobilities u associated with a particular constrained mobilizer.  More...
  | 
|   | 
| ConstrainedUIndex  | getConstrainedUIndex (const State &, ConstrainedMobilizerIndex, MobilizerUIndex which) const | 
|   | Return the index into the constrained mobilities u array corresponding to a particular mobility of the indicated ConstrainedMobilizer.  More...
  | 
|   | 
| ConstrainedQIndex  | getConstrainedQIndex (const State &, ConstrainedMobilizerIndex, MobilizerQIndex which) const | 
|   | Return the index into the constrained coordinates q array corresponding to a particular coordinate of the indicated ConstrainedMobilizer.  More...
  | 
|   | 
| int  | getNumConstrainedQ (const State &) const | 
|   | Return the sum of the number of coordinates q associated with each of the constrained mobilizers.  More...
  | 
|   | 
| int  | getNumConstrainedU (const State &) const | 
|   | Return the sum of the number of mobilities u associated with each of the constrained mobilizers.  More...
  | 
|   | 
| QIndex  | getQIndexOfConstrainedQ (const State &state, ConstrainedQIndex consQIndex) const | 
|   | Map one of this Constraint's constrained q's to the corresponding index within the matter subsystem's whole q vector.  More...
  | 
|   | 
| UIndex  | getUIndexOfConstrainedU (const State &state, ConstrainedUIndex consUIndex) const | 
|   | Map one of this Constraint's constrained U's (or mobilities) to the corresponding index within the matter subsystem's whole u vector.  More...
  | 
|   | 
| void  | getNumConstraintEquationsInUse (const State &state, int &mp, int &mv, int &ma) const | 
|   | Find out how many holonomic (position), nonholonomic (velocity), and acceleration-only constraint equations are currently being generated by this Constraint.  More...
  | 
|   | 
| void  | getIndexOfMultipliersInUse (const State &state, MultiplierIndex &px0, MultiplierIndex &vx0, MultiplierIndex &ax0) const | 
|   | Return the start of the blocks of multipliers (or acceleration errors) assigned to this Constraint.  More...
  | 
|   | 
| void  | setMyPartInConstraintSpaceVector (const State &state, const Vector &myPart, Vector &constraintSpace) const | 
|   | Set the part of a complete constraint-space vector that belongs to this constraint.  More...
  | 
|   | 
| void  | getMyPartFromConstraintSpaceVector (const State &state, const Vector &constraintSpace, Vector &myPart) const | 
|   | Get the part of a complete constraint-space vector that belongs to this constraint.  More...
  | 
|   | 
| Vector  | getPositionErrorsAsVector (const State &) const | 
|   | Get a Vector containing the position errors.  More...
  | 
|   | 
| Vector  | calcPositionErrorFromQ (const State &, const Vector &q) const | 
|   | 
| Matrix  | calcPositionConstraintMatrixP (const State &) const | 
|   | 
| Matrix  | calcPositionConstraintMatrixPt (const State &) const | 
|   | 
| Matrix  | calcPositionConstraintMatrixPNInv (const State &) const | 
|   | 
| void  | calcConstraintForcesFromMultipliers (const State &, const Vector &lambda, Vector_< SpatialVec > &bodyForcesInA, Vector &mobilityForces) const | 
|   | This operator calculates this constraint's body and mobility forces given the complete set of multipliers lambda for this Constraint.  More...
  | 
|   | 
| Vector  | getVelocityErrorsAsVector (const State &) const | 
|   | Get a Vector containing the velocity errors.  More...
  | 
|   | 
| Vector  | calcVelocityErrorFromU (const State &, const Vector &u) const | 
|   | 
| Matrix  | calcVelocityConstraintMatrixV (const State &) const | 
|   | 
| Matrix  | calcVelocityConstraintMatrixVt (const State &) const | 
|   | 
| Vector  | getAccelerationErrorsAsVector (const State &) const | 
|   | Get a Vector containing the acceleration errors.  More...
  | 
|   | 
| Vector  | calcAccelerationErrorFromUDot (const State &, const Vector &udot) const | 
|   | 
| Vector  | getMultipliersAsVector (const State &) const | 
|   | Get a Vector containing the Lagrange multipliers.  More...
  | 
|   | 
| void  | getConstraintForcesAsVectors (const State &state, Vector_< SpatialVec > &bodyForcesInG, Vector &mobilityForces) const | 
|   | Given a State realized through Acceleration stage, return the forces that were applied to the system by this Constraint, with body forces expressed in Ground.  More...
  | 
|   | 
| Vector_< SpatialVec >  | getConstrainedBodyForcesAsVector (const State &state) const | 
|   | For convenience, returns constrained body forces as the function return.  More...
  | 
|   | 
| Vector  | getConstrainedMobilityForcesAsVector (const State &state) const | 
|   | For convenience, returns constrained mobility forces as the function return.  More...
  | 
|   | 
| Real  | calcPower (const State &state) const | 
|   | Calculate the power being applied by this Constraint to the system.  More...
  | 
|   | 
| Matrix  | calcAccelerationConstraintMatrixA (const State &) const | 
|   | 
| Matrix  | calcAccelerationConstraintMatrixAt (const State &) const | 
|   | 
| void  | setIsConditional (bool isConditional) | 
|   | (Advanced) Mark this constraint as one that is only conditionally active.  More...
  | 
|   | 
| bool  | isConditional () const | 
|   | (Advanced) Get the value of the isConditional flag.  More...
  | 
|   | 
  Public Member Functions inherited from SimTK::PIMPLHandle< Constraint, ConstraintImpl, true > | 
| bool  | isEmptyHandle () const | 
|   | Returns true if this handle is empty, that is, does not refer to any implementation object.  More...
  | 
|   | 
| bool  | isOwnerHandle () const | 
|   | Returns true if this handle is the owner of the implementation object to which it refers.  More...
  | 
|   | 
| bool  | isSameHandle (const Constraint &other) const | 
|   | Determine whether the supplied handle is the same object as "this" PIMPLHandle.  More...
  | 
|   | 
| void  | disown (Constraint &newOwner) | 
|   | Give up ownership of the implementation to an empty handle.  More...
  | 
|   | 
| PIMPLHandle &  | referenceAssign (const Constraint &source) | 
|   | "Copy" assignment but with shallow (pointer) semantics.  More...
  | 
|   | 
| PIMPLHandle &  | copyAssign (const Constraint &source) | 
|   | This is real copy assignment, with ordinary C++ object ("value") semantics.  More...
  | 
|   | 
| void  | clearHandle () | 
|   | Make this an empty handle, deleting the implementation object if this handle is the owner of it.  More...
  | 
|   | 
| const ConstraintImpl &  | getImpl () const | 
|   | Get a const reference to the implementation associated with this Handle.  More...
  | 
|   | 
| ConstraintImpl &  | updImpl () | 
|   | Get a writable reference to the implementation associated with this Handle.  More...
  | 
|   | 
| int  | getImplHandleCount () const | 
|   | Return the number of handles the implementation believes are referencing it.  More...
  | 
|   | 
The handle class Constraint::Custom (dataless) and its companion class Constraint::Custom::Implementation can be used together to define new Constraint types with arbitrary properties. 
To use it, create a class that extends Constraint::Custom::Implementation. You can then create an instance of it and pass it to the Constraint::Custom constructor:
Constraint::Custom myConstraint(new MyConstraintImplementation( args ));
Alternatively, you can also create a new Handle class which is a subclass of Constraint::Custom and which creates the Implementation itself in its constructors.
class MyConstraint : public Constraint::Custom {
public:
  MyConstraint( args ) : Constraint::Custom(new MyForceImplementation( args )) {
  }
}
This allows an end user to simply write
MyConstraint( args );
and not worry about implementation classes or creating objects on the heap. If you do this, your Constraint::Custom subclass must not have any data members or virtual methods. If it does, it will not work correctly. Instead, store all data in the Implementation subclass.