Class Constraint

All Implemented Interfaces:
Comparable<NativePhysicsObject>
Direct Known Subclasses:
ConeJoint, GearJoint, HingeJoint, New6Dof, Point2PointJoint, SixDofJoint, SliderJoint

public abstract class Constraint extends PhysicsJoint
The abstract base class for rigid-body physics joints based on Bullet's btTypedConstraint. A Constraint can be single-ended or double-ended:
  • A single-ended Constraint constrains the motion of a dynamic rigid body.
  • A double-ended Constraint connects 2 rigid bodies together in the same PhysicsSpace. One or both of the bodies must be dynamic.
Subclasses include: ConeJoint, GearJoint, HingeJoint, New6Dof, Point2PointJoint, SixDofJoint, SixDofSpringJoint, and SliderJoint.
  • Field Details

    • logger15

      public static final Logger logger15
      message logger for this class
    • pivotA

      protected Vector3f pivotA
      copy of the pivot location: in physics-space coordinates if bodyA is null, or else in A's scaled local coordinates
    • pivotB

      protected Vector3f pivotB
      copy of the pivot location: in physics-space coordinates if bodyB is null, or else in B's scaled local coordinates
  • Constructor Details

    • Constraint

      protected Constraint(PhysicsRigidBody body, JointEnd bodyEnd, Vector3f pivotInBody)
      Instantiate an enabled, single-ended Constraint using the specified body at the specified end.

      To be effective, the Constraint must be added to the body's PhysicsSpace and the body must be dynamic.

      Parameters:
      body - the body to constrain (not null, alias created)
      bodyEnd - at which end to attach the body (not null)
      pivotInBody - the pivot location in the body's scaled local coordinates (not null, unaffected)
    • Constraint

      protected Constraint(PhysicsRigidBody body, JointEnd bodyEnd, Vector3f pivotInBody, Vector3f pivotInWorld)
      Instantiate an enabled, single-ended Constraint using the specified body at the specified end.

      To be effective, the Constraint must be added to the body's PhysicsSpace and the body must be dynamic.

      Parameters:
      body - the body to constrain (not null, alias created)
      bodyEnd - at which end to attach the body (not null)
      pivotInBody - the pivot location in the body's scaled local coordinates (not null, unaffected)
      pivotInWorld - the pivot location in physics-space coordinates (not null, unaffected)
    • Constraint

      protected Constraint(PhysicsBody bodyA, PhysicsBody bodyB, Vector3f pivotInA, Vector3f pivotInB)
      Instantiate an enabled, double-ended Constraint.

      To be effective, the Constraint must be added to the PhysicsSpace of both bodies. Also, the bodies must be distinct and at least one of them must be dynamic.

      Parameters:
      bodyA - the body for the A end (not null, alias created)
      bodyB - the body for the B end (not null, alias created)
      pivotInA - the pivot location in A's scaled local coordinates (not null, unaffected)
      pivotInB - the pivot location in B's scaled local coordinates (not null, unaffected)
  • Method Details

    • getAppliedImpulse

      public float getAppliedImpulse()
      Determine the magnitude of the applied impulse. Requires feedback.
      Returns:
      impulse magnitude (≥0)
      Throws:
      IllegalStateException - if feedback is not enabled
    • getBreakingImpulseThreshold

      public float getBreakingImpulseThreshold()
      Determine the breaking impulse threshold.
      Returns:
      the threshold value
    • getOverrideIterations

      public int getOverrideIterations()
      Determine the number of iterations used to solve this Constraint.
      Returns:
      the number of iterations (≥0) or -1 if using the solver's default
    • getPivot

      public Vector3f getPivot(JointEnd end, Vector3f storeResult)
      Copy the location of the specified connection point in the specified body.
      Parameters:
      end - which end of the Constraint to access (not null)
      storeResult - storage for the result (modified if not null)
      Returns:
      a location vector (in scaled local coordinates, either storeResult or a new instance)
    • getPivotA

      public Vector3f getPivotA(Vector3f storeResult)
      Copy the location of the connection point in the body at the A end.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      a location vector (in A's scaled local coordinates, either storeResult or a new instance)
    • getPivotB

      public Vector3f getPivotB(Vector3f storeResult)
      Copy the location of the connection point in the body at the B end.
      Parameters:
      storeResult - storage for the result (modified if not null)
      Returns:
      a location vector (in B's scaled local coordinates, either storeResult or a new instance)
    • isCollisionBetweenLinkedBodies

      public boolean isCollisionBetweenLinkedBodies()
      Test whether collisions are handled between the ends.
      Returns:
      true if collisions are handled, otherwise false
    • isFeedback

      public boolean isFeedback()
      Test whether this Constraint has feedback enabled.
      Returns:
      true if enabled, otherwise false
    • overrideIterations

      public void overrideIterations(int numIterations)
      Override the number of iterations used to solve this Constraint.
      Parameters:
      numIterations - the desired number of iterations (≥0) or -1 to use the solver's default (default=-1)
    • setBreakingImpulseThreshold

      public void setBreakingImpulseThreshold(float desiredThreshold)
      Alter the breaking impulse threshold.
      Parameters:
      desiredThreshold - the desired value (default=MAX_VALUE with SP library or +Infinity with DP library)
    • setCollisionBetweenLinkedBodies

      public void setCollisionBetweenLinkedBodies(boolean allow)
      Handle/ignore collisions between the ends of a double-ended joint.
      Parameters:
      allow - true to handle collisions, false to ignore them (default=true)
    • setEnabled

      public void setEnabled(boolean enable)
      Enable or disable this Constraint.
      Parameters:
      enable - true to enable, false to disable (default=true)
    • setFeedback

      public void setFeedback(boolean enable)
      Enable or disable feedback for this Constraint.
      Parameters:
      enable - true to enable, false to disable (default=false)
    • getConstraintType

      protected static final int getConstraintType(long constraintId)
      Read the constraint type.
      Parameters:
      constraintId - identifier of the btTypedConstraint (not zero)
      Returns:
      a btTypedConstraintType ordinal value (≥3)
    • setPivotInA

      protected void setPivotInA(Vector3f location)
      Alter the pivot location in A's scaled local coordinates. The subclass is responsible for updating the native object.
      Parameters:
      location - the desired location (not null, unaffected)
    • setPivotInB

      protected void setPivotInB(Vector3f location)
      Alter the pivot location in B's scaled local coordinates. The subclass is responsible for updating the native object.
      Parameters:
      location - the desired location (not null, unaffected)
    • getBodyA

      public PhysicsRigidBody getBodyA()
      Access the rigid body at the A end.
      Overrides:
      getBodyA in class PhysicsJoint
      Returns:
      the pre-existing rigid body, or null if none
    • getBodyB

      public PhysicsRigidBody getBodyB()
      Access the rigid body at the B end.
      Overrides:
      getBodyB in class PhysicsJoint
      Returns:
      the pre-existing body, or null if none
    • isEnabled

      public boolean isEnabled()
      Test whether this Constraint is enabled.
      Specified by:
      isEnabled in class PhysicsJoint
      Returns:
      true if enabled, otherwise false