Programming
Fundamentials
Setting Up Development Environment
UnigineScript
High-Level Systems
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
API
Core Library
Containers
Engine Classes
Node-Related Classes
Rendering-Related Classes
Bounds-Related Classes
GUI-Related Classes
Controls-Related Classes
Pathfinding-Related Classes
Utility Classes

Joint Class

This class is used to create joints.

Joint Class

Members


void setLinearSoftness (float softness)

Sets the linear softness (elasticity) of the joint. When the joint is stretched, linear softness defines whether linear velocities of the bodies are averaged out. For example:
  • 0 means that the joint is rigid. Linear velocities of the first and the second body are independent.
  • 1 means that the joint is elastic (jelly-like). If the first body changes its velocity, velocity of the second body is equalized with it.

Arguments

  • float softness - Linear softness. The provided value will be clamped in the range [0;1].

void setBody1 (const Ptr<Body> & body)

Sets the second body connected using the joint.

Arguments

  • const Ptr<Body> & body - The second body connected with the joint.

void setNumIterations (int num_iterations)

Sets the number of iterations used to solve joints. Note that if this value is too low, the precision of calculations will suffer.

Arguments

  • int num_iterations - Number of iterations. If a non-positive value is provided, 1 will be used instead.

Math::Vec3 getAnchor0 ()

Returns the coordinates of the anchor point in a system of coordinates of the first connected body.

Return value

Coordinates of the anchor point in the body coordinate space.

void setName (const char * name)

Sets the name of the joint.

Arguments

  • const char * name - Name of the joint.

float getAngularRestitution ()

Returns the current angular restitution (stiffness) of the joint. Angular restitution defines how fast the joint compensates for change of the angle between two bodies. When bodies are turned relative each other, restitution controls the magnitude of force which is applied to both bodies so that their anchor points to become aligned again. For example:
  • 1 means that the joint is to return bodies in place throughout 1 physics tick.
  • 0.2 means that the joint is to return bodies in place throughout 5 physics ticks.
The maximum value of 1 can lead to destabilization of physics (as too great forces are applied).

Return value

Angular restitution in the range [0;1].

float getLinearRestitution ()

Returns the current linear restitution (stiffness) of the joint. Linear restitution defines how fast the joint compensates for linear coordinate change between two bodies. When bodies are dragged apart, restitution controls the magnitude of force which is applied to both bodies so that their anchor points to become aligned again. For example:
  • 1 means that the joint is to return bodies in place throughout 1 physics tick.
  • 0.2 means that the joint is to return bodies in place throughout 5 physics ticks.
The maximum value of 1 can lead to destabilization of physics (as too great forces are applied).

Return value

Linear restitution in the range [0;1].

int getType ()

Returns the type of the joint.

Return value

One of the JOINT_* pre-defined variables.

int isFrozen ()

Returns a value indicating if the joint is frozen or not.

Return value

Positive number if the joint is frozen; otherwise, 0.

int isEnabledSelf ()

Returns a value indicating is the joint is enabled.

Return value

1 if the joint is enabled; otherwise, 0.

void setAnchor0 (const Math::Vec3 & anchor)

Sets coordinates of the anchor point in a system of coordinates of the first connected body.

Arguments

  • const Math::Vec3 & anchor - Coordinates of the anchor point in the body coordinate space.

int saveState (const Ptr<Stream> & stream)

Saves the state of a given node into a binary stream.
  • If a node is a parent for other nodes, states of these child nodes need to be saved manually.
  • To save the state from a buffer, file or a message from a socket, make sure the stream is opened. For buffers and files, you also need to set the proper position for reading.

Arguments

  • const Ptr<Stream> & stream - Stream to save node state data.

Return value

1 if node state is successfully saved; otherwise, 0.

Ptr<BodyRigid> getBodyRigid0 ()

Returns the first connected body as a rigid body.

Return value

The first rigid body connected using the joint or NULL (0), if the body is not rigid.

void renderVisualizer (const Math::vec4 & color)

Renders the joint.
Notice
You should enable the engine visualizer by the show_visualizer 1 console command.

Arguments

  • const Math::vec4 & color - Color, in which the joint will be rendered.

void setAnchor1 (const Math::Vec3 & anchor)

Sets coordinates of the anchor point in a system of coordinates of the second connected body.

Arguments

  • const Math::Vec3 & anchor - Coordinates of the anchor point in the body coordinate space.

float getLinearSoftness ()

Returns the current linear softness (elasticity) of the joint. When the joint is stretched, linear softness defines whether linear velocities of the bodies are averaged out. For example:
  • 0 means that the joint is rigid. Velocities of the first and the second body are independent.
  • 1 means that the joint is elastic (jelly-like). If the first body changes its velocity, velocity of the second body is equalized with it.

Return value

Linear softness value in the range [0;1].

Ptr<Body> getBody0 ()

Returns the first body connected using the joint.

Return value

The first body connected with the joint.

void setBroken (int broken)

Sets a value indicating if the joint is broken or not.

Arguments

  • int broken - Positive number to break the joint, 0 to make it intact.

int getID ()

Returns the unique ID of the joint.

Return value

Unique ID.

int setID (int id)

Sets the unique ID for the joint.

Arguments

  • int id - Unique ID.

Return value

1 if the ID is set successfully; otherwise, 0.

void setBrokenCallback (CallbackBase * func)

Adds a callback function that will be run when a given joint breaks.
Notice
Physics-based callbacks are executed not immediately, but before the next flush() or next update() of the world script.

Arguments

  • CallbackBase * func - Joint that will break.

void setBody0 (const Ptr<Body> & body)

Sets the first body connected using the joint.

Arguments

  • const Ptr<Body> & body - The first body connected with the joint.

void swap (const Ptr<Joint> & joint)

Swaps the joints saving the pointers.

Arguments

  • const Ptr<Joint> & joint - A joint to swap.

void setMaxTorque (float torque)

Sets the maximum amount of torque that can be exerted on the joint. If this limit is exceeded, the joint breaks.

Arguments

  • float torque - Maximum amount of torque.

Math::Vec3 getAnchor1 ()

Returns the coordinates of the anchor point in a system of coordinates of the second connected body.

Return value

Coordinates of the anchor point in the body coordinate space.

const char * getTypeName ()

Returns the name of the joint type.

Return value

Type name.

Ptr<Joint> clone ()

Clones the joint.

Return value

Copy of the joint.

void setWorldAnchor (const Math::Vec3 & anchor)

Sets the anchor point in the world coordinates.

Arguments

  • const Math::Vec3 & anchor - Coordinates of the anchor point in the world space.

void setAngularSoftness (float softness)

Sets the angular softness (elasticity) of the joint. When the joint is twisted, angular softness defines whether angular velocities of the bodies are averaged out. For example:
  • 0 means that the joint is rigid. Angular velocities of the first and the second body are independent.
  • 1 means that the joint is elastic (jelly-like). If the first body changes its velocity, velocity of the second body is equalized with it.

Arguments

  • float softness - Angular softness. The provided value will be clamped in the range [0;1].

int isBroken ()

Returns a value indicating if the joint is broken or not.

Return value

Positive number if the joint is broken; otherwise, 0.

const char * getName ()

Returns the name of the joint.

Return value

Name of the joint.

void setLinearRestitution (float restitution)

Sets the linear restitution (stiffness) of the joint. Linear restitution defines how fast the joint compensates for linear coordinate change between two bodies. When bodies are dragged apart, restitution controls the magnitude of force which is applied to both bodies so that their anchor points to become aligned again. For example:
  • 1 means that the joint is to return bodies in place throughout 1 physics tick.
  • 0.2 means that the joint is to return bodies in place throughout 5 physics ticks.
The maximum value of 1 can lead to destabilization of physics (as too great forces are applied).

Arguments

  • float restitution - Linear restitution. The provided value will be clamped in the range [0;1].

void setFrozen (int f)

Freezes or unfreezes the joint.

Arguments

  • int f - Positive number to freeze the joint, 0 to unfreeze it.

Ptr<Joint> getJoint ()

Return value

Ptr<Body> getBody1 ()

Returns the second body connected using the joint.

Return value

The second body connected with the joint.

int getCollision ()

Returns a value indicating if collisions between the connected bodies are enabled.

Return value

Positive number if collisions between the bodies are enabled; otherwise, 0.

void setMaxForce (float force)

Sets the maximum amount of force that can be exerted on the joint. If this limit is exceeded, the joint breaks.

Arguments

  • float force - Maximum amount of force.

int restoreState (const Ptr<Stream> & stream)

Restores the state of a given node from a binary stream.
  • If a node is a parent for other nodes, states of these child nodes need to be restored manually.
  • To save the state into a buffer, file or a message from a socket, make sure the stream is opened. If necessary, you can set a position for writing for buffers and files.

Arguments

  • const Ptr<Stream> & stream - Stream with saved node state data.

Return value

1 if node state is successfully restored; otherwise, 0.

float getMaxForce ()

Returns the maximum amount of force that can be exerted on the joint. If this limit is exceeded, the joint breaks.

Return value

Maximum amount of force.

int isEnabled ()

Returns a value indicating if the joint calculations are enabled.

Return value

1 if the joint is enabled; otherwise, 0.

float getAngularSoftness ()

Returns the current angular softness (elasticity) of the joint. When the joint is twisted, angular softness defines whether angular velocities of the bodies are averaged out. For example:
  • 0 means that the joint is rigid. Angular velocities of the first and the second body are independent.
  • 1 means that the joint is elastic (jelly-like). If the first body changes its velocity, velocity of the second body is equalized with it.

Return value

Angular softness in the range [0;1].

float getMaxTorque ()

Returns the maximum amount of torque that can be exerted on the joint. If this limit is exceeded, the joint breaks.

Return value

Maximum amount of torque.

void setAngularRestitution (float restitution)

Sets the current angular restitution (stiffness) of the joint. Angular restitution defines how fast the joint compensates for change of the angle between two bodies. When bodies are turned relative each other, restitution controls the magnitude of force which is applied to both bodies so that their anchor points to become aligned again. For example:
  • 1 means that the joint is to return bodies in place throughout 1 physics tick.
  • 0.2 means that the joint is to return bodies in place throughout 5 physics ticks.
The maximum value of 1 can lead to destabilization of physics (as too great forces are applied).

Arguments

  • float restitution - Angular restitution. The provided value will be clamped in the range [0;1].

Math::Vec3 getWorldAnchor ()

Returns the anchor point in the world coordinates.

Return value

Coordinates of the anchor point in the world space.

void setCollision (int c)

Sets a value indicating if collisions between the connected bodies are enabled.

Arguments

  • int c - Positive number to enable collisions between the bodies, 0 to disable them.

Ptr<BodyRigid> getBodyRigid1 ()

Returns the second connected body as a rigid body.

Return value

The second rigid body connected using the joint or NULL (0), if the body is not rigid.

int getNumIterations ()

Returns the current number of iterations used to solve joints.

Return value

Number of iterations.

void setEnabled (int enable)

Enables or disables joint calculations.

Arguments

  • int enable - Positive number to enable the joint, 0 to disable it.

int JOINT_FIXED

Description

Fixed joint.

int JOINT_BALL

Description

Ball joint.

int JOINT_HINGE

Description

Hinge joint.

int JOINT_PRISMATIC

Description

Prismatic joint.

int JOINT_CYLINDRICAL

Description

Cylindrical joint.

int JOINT_SUSPENSION

Description

Suspension joint.

int JOINT_WHEEL

Description

Wheel joint (ray car wheels).

int JOINT_PARTICLES

Description

Particles joint pins BodyCloth or BodyRope (both children of BodyParticles) to BodyRigid or BodyRagdoll.

int JOINT_PATH

Description

Path joint that connects BodyRigid to BodyPath. It allows a rigid body to move along the path.

int NUM_JOINTS

Last update: 2017-07-03