Package com.jme3.bullet.joints
Class Constraint
java.lang.Object
com.jme3.bullet.NativePhysicsObject
com.jme3.bullet.joints.PhysicsJoint
com.jme3.bullet.joints.Constraint
- All Implemented Interfaces:
Comparable<NativePhysicsObject>
- Direct Known Subclasses:
ConeJoint
,GearJoint
,HingeJoint
,New6Dof
,Point2PointJoint
,SixDofJoint
,SliderJoint
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.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final Logger
message logger for this classprotected Vector3f
copy of the pivot location: in physics-space coordinates if bodyA is null, or else in A's scaled local coordinatesprotected Vector3f
copy of the pivot location: in physics-space coordinates if bodyB is null, or else in B's scaled local coordinatesFields inherited from class com.jme3.bullet.joints.PhysicsJoint
logger
Fields inherited from class com.jme3.bullet.NativePhysicsObject
loggerN
-
Constructor Summary
ModifierConstructorDescriptionprotected
Constraint
(PhysicsBody bodyA, PhysicsBody bodyB, Vector3f pivotInA, Vector3f pivotInB) Instantiate an enabled, double-ended Constraint.protected
Constraint
(PhysicsRigidBody body, JointEnd bodyEnd, Vector3f pivotInBody) Instantiate an enabled, single-ended Constraint using the specified body at the specified end.protected
Constraint
(PhysicsRigidBody body, JointEnd bodyEnd, Vector3f pivotInBody, Vector3f pivotInWorld) Instantiate an enabled, single-ended Constraint using the specified body at the specified end. -
Method Summary
Modifier and TypeMethodDescriptionfloat
Determine the magnitude of the applied impulse.getBodyA()
Access the rigid body at the A end.getBodyB()
Access the rigid body at the B end.float
Determine the breaking impulse threshold.protected static final int
getConstraintType
(long constraintId) Read the constraint type.int
Determine the number of iterations used to solve this Constraint.Copy the location of the specified connection point in the specified body.Copy the location of the connection point in the body at the A end.Copy the location of the connection point in the body at the B end.boolean
Test whether collisions are handled between the ends.boolean
Test whether this Constraint is enabled.boolean
Test whether this Constraint has feedback enabled.void
overrideIterations
(int numIterations) Override the number of iterations used to solve this Constraint.void
setBreakingImpulseThreshold
(float desiredThreshold) Alter the breaking impulse threshold.void
setCollisionBetweenLinkedBodies
(boolean allow) Handle/ignore collisions between the ends of a double-ended joint.void
setEnabled
(boolean enable) Enable or disable this Constraint.void
setFeedback
(boolean enable) Enable or disable feedback for this Constraint.protected void
setPivotInA
(Vector3f location) Alter the pivot location in A's scaled local coordinates.protected void
setPivotInB
(Vector3f location) Alter the pivot location in B's scaled local coordinates.Methods inherited from class com.jme3.bullet.joints.PhysicsJoint
countEnds, destroy, findEnd, findOtherBody, getBody, getPhysicsSpace, setBodyA, setBodyB, setNativeId, setPhysicsSpace, toString
Methods inherited from class com.jme3.bullet.NativePhysicsObject
compareTo, countTrackers, dumpTrackers, equals, freeUnusedObjects, hasAssignedNativeObject, hashCode, nativeId, reassignNativeId, setNativeIdNotTracked, unassignNativeObject
-
Field Details
-
logger15
message logger for this class -
pivotA
copy of the pivot location: in physics-space coordinates if bodyA is null, or else in A's scaled local coordinates -
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
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
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
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
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
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 thebtTypedConstraint
(not zero)- Returns:
- a btTypedConstraintType ordinal value (≥3)
-
setPivotInA
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
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
Access the rigid body at the A end.- Overrides:
getBodyA
in classPhysicsJoint
- Returns:
- the pre-existing rigid body, or null if none
-
getBodyB
Access the rigid body at the B end.- Overrides:
getBodyB
in classPhysicsJoint
- Returns:
- the pre-existing body, or null if none
-
isEnabled
public boolean isEnabled()Test whether this Constraint is enabled.- Specified by:
isEnabled
in classPhysicsJoint
- Returns:
- true if enabled, otherwise false
-