# Unigine::JointBall Class

This class is used to create ball joints.

### Example#

The following code illustrates connection of two bodies (b0 and b1) using a ball joint.

Source code (C++)
``````include <UniginePhysics.h>

/* .. */

JointBallPtr joint = JointBall::create(b0, b1);

// setting joint axis coordinates
joint->setWorldAxis(vec3(1.0f, 0.0f, 0.0f));

// setting common joint constraint parameters
joint->setLinearRestitution(0.8f);
joint->setAngularRestitution(0.8f);
joint->setLinearSoftness(0.0f);
joint->setAngularSoftness(0.0f);

// setting angular damping
joint->setAngularDamping(16.0f);

// setting swing angular limit, in degrees
joint->setAngularLimitAngle(30.0f);

// setting twist angular limits, in degrees [-20; 20]
joint->setAngularLimitFrom(-20.0f);
joint->setAngularLimitTo(20.0f);

// setting number of iterations
joint->setNumIterations(16);``````

• A set of UnigineScript API samples located in the <UnigineSDK>/data/samples/joints/ folder:
• ball_00
• ball_01
• ball_02
• ball_03
• ball_04
• ball_05
• ball_06

## static JointBallPtr create ( ) #

Constructor. Creates a ball joint with an anchor at the origin of the world coordinates.

## static JointBallPtr create ( const Ptr<Body> & body0, const Ptr<Body> & body1 ) #

Constructor. Creates a ball joint connecting two given bodies. An anchor is placed between centers of mass of the bodies.

### Arguments

• const Ptr<Body> & body0 - First body to be connected with the joint.
• const Ptr<Body> & body1 - Second body to be connected with the joint.

## static JointBallPtr create ( const Ptr<Body> & body0, const Ptr<Body> & body1, const Math::Vec3 & anchor ) #

Constructor. Creates a ball joint connecting two given bodies with an anchor placed at specified coordinates.

### Arguments

• const Ptr<Body> & body0 - First body to be connected with the joint.
• const Ptr<Body> & body1 - Second body to be connected with the joint.
• const Math::Vec3 & anchor - Anchor coordinates.

## static JointBallPtr create ( const Ptr<Body> & body0, const Ptr<Body> & body1, const Math::Vec3 & anchor, const Math::vec3 & axis ) #

Constructor. Creates a ball joint connecting two given bodies with specified axis coordinates and an anchor placed at specified coordinates.

### Arguments

• const Ptr<Body> & body0 - First body to be connected with the joint.
• const Ptr<Body> & body1 - Second body to be connected with the joint.
• const Math::Vec3 & anchor - Anchor coordinates.
• const Math::vec3 & axis - Axis coordinates.

## voidsetAngularDamping ( float damping ) #

Sets an angular damping of the joint.

### Arguments

• float damping - Angular damping. If a negative value is provided, 0 will be used instead.

## floatgetAngularDamping ( ) #

Returns the angular damping of the joint.

Angular damping.

## voidsetAngularLimitAngle ( float angle ) #

Sets a swing limit angle. Swing limit specifies how much connected bodies can bend from the joint axis.

### Arguments

• float angle - Angle in degrees. The provided value will be saturated in the range [0; 180]. 0 means no limit.

## floatgetAngularLimitAngle ( ) #

Returns the swing limit angle. Swing limit specifies how much connected bodies can bend from the joint axis. 0 means there is no limit.

### Return value

Swing limit angle in degrees.

## voidsetAngularLimitFrom ( float from ) #

Sets a low twist limit angle. Twist limit specifies how much a connected body can twist around the joint axis.

### Arguments

• float from - Angle in degrees. The provided value will be saturated in the range [-180; 180].

## floatgetAngularLimitFrom ( ) #

Returns the low twist limit angle. Twist limit specifies how much a connected body can twist around the joint axis.

### Return value

Low twist limit angle in degrees.

## voidsetAngularLimitTo ( float to ) #

Sets a high twist limit angle. Twist limit specifies how much a connected body can twist around the joint axis.

### Arguments

• float to - Angle in degrees. The provided value will be saturated in the range [-180; 180].

## floatgetAngularLimitTo ( ) #

Returns the high twist limit angle. Twist limit specifies how much a connected body can twist around the joint axis.

### Return value

High twist limit angle in degrees.

## voidsetAxis0 ( const Math::vec3 & axis0 ) #

Sets an axis of the first connected body.

### Arguments

• const Math::vec3 & axis0 - Axis of the first body. The provided vector will be normalized.

## Math::vec3getAxis0 ( ) #

Returns the axis of the first connected body.

### Return value

Axis of the first body.

## voidsetAxis1 ( const Math::vec3 & axis1 ) #

Sets an axis of the second connected body.

### Arguments

• const Math::vec3 & axis1 - Axis of the second body. The provided vector will be normalized.

## Math::vec3getAxis1 ( ) #

Returns the axis of the second connected body.

### Return value

Axis of the second body.

## voidsetWorldAxis ( const Math::vec3 & axis ) #

Sets a joint axis. This method updates axes of the connected bodies.

### Arguments

• const Math::vec3 & axis - Joint axis.

## Math::vec3getWorldAxis ( ) #

Returns the joint axis. The joint axis is calculated based on the axes of the connected bodies.

### Return value

Joint axis.
Last update: 2021-04-29