# Unigine::JointHinge Class

This class is used to create hinge joints.

### Example#

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

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

/* .. */

JointHingePtr joint = JointHinge::create(b0, b1);

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

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

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

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

// setting spring rigidity coefficient
joint->setAngularSpring(8.0f);

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

Usage examples:

## floatgetCurrentAngularVelocity() const#

Returns the current velocity of the motor, i.e. the difference between angular velocities of two bodies connected with a hinge relative the hinge axis.
Notice
The valid velocity is returned only if both bodies are of BodyRigid type. Otherwise, 0 is returned.

### Return value

Current motor velocity, in radians per second.

## floatgetCurrentAngularAngle() const#

Returns the current angle between the bodies.

### Return value

Current current angle in degrees.

## void setAngularVelocity ( float velocity ) #

Sets a new target velocity of the attached angular motor.

### Arguments

• float velocity - The target velocity in radians per second.

## floatgetAngularVelocity() const#

Returns the current target velocity of the attached angular motor.

### Return value

Current target velocity in radians per second.

## void setAngularSpring ( float spring ) #

Sets a new rigidity coefficient of the angular spring. 0 means that the spring is not attached.

### Arguments

• float spring - The rigidity coefficient. If a negative value is provided, 0 will be used instead. 0 detaches the spring.

## floatgetAngularSpring() const#

Returns the current rigidity coefficient of the angular spring. 0 means that the spring is not attached.

### Return value

Current rigidity coefficient. If a negative value is provided, 0 will be used instead. 0 detaches the spring.

## void setAngularLimitTo ( float to ) #

Sets a new high rotation limit angle. Rotation limit specifies how much a connected body can rotate around the joint axis

### Arguments

• float to - The high rotation limit angle in degrees. The provided value will be saturated in the range [-180; 180].

## floatgetAngularLimitTo() const#

Returns the current high rotation limit angle. Rotation limit specifies how much a connected body can rotate around the joint axis

### Return value

Current high rotation limit angle in degrees. The provided value will be saturated in the range [-180; 180].

## void setAngularLimitFrom ( float from ) #

Sets a new low rotation limit angle. Rotation limit specifies how much a connected body can rotate around the joint axis.

### Arguments

• float from - The Low rotation limit angle in degrees. The provided value will be saturated in the range [-180; 180].

## floatgetAngularLimitFrom() const#

Returns the current low rotation limit angle. Rotation limit specifies how much a connected body can rotate around the joint axis.

### Return value

Current Low rotation limit angle in degrees. The provided value will be saturated in the range [-180; 180].

## void setAngularTorque ( float torque ) #

Sets a new maximum torque of the attached angular motor. 0 means that the motor is not attached.

### Arguments

• float torque - The Maximum torque. If a negative value is provided, 0 will be used instead. 0 detaches the motor.

## floatgetAngularTorque() const#

Returns the current maximum torque of the attached angular motor. 0 means that the motor is not attached.

### Return value

Current Maximum torque. If a negative value is provided, 0 will be used instead. 0 detaches the motor.

## void setAngularDamping ( float damping ) #

Sets a new angular damping of the joint.

### Arguments

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

## floatgetAngularDamping() const#

Returns the current angular damping of the joint.

### Return value

Current angular damping. If a negative value is provided, 0 will be used instead.

## void setAngularAngle ( float angle ) #

Sets a new target angle of the attached angular spring. the spring tries to rotate the connected bodies so that they make this angle.

### Arguments

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

## floatgetAngularAngle() const#

Returns the current target angle of the attached angular spring. the spring tries to rotate the connected bodies so that they make this angle.

### Return value

Current target angle in degrees. The provided value will be saturated in the range [-180; 180].

## void setWorldAxis ( const Math::vec3& axis ) #

Sets a new joint axis. The joint axis is calculated based on the axes of the connected bodies.

### Arguments

• const Math::vec3& axis - The joint axis.

## Math::vec3getWorldAxis() const#

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

### Return value

Current joint axis.

## void setAxis0 ( const Math::vec3& axis0 ) #

Sets a new axis of the first connected body.

### Arguments

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

## Math::vec3getAxis0() const#

Returns the current axis of the first connected body.

### Return value

Current axis of the first body. The provided vector will be normalized.

## void setAxis1 ( const Math::vec3& axis1 ) #

Sets a new axis of the second connected body.

### Arguments

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

## Math::vec3getAxis1() const#

Returns the current axis of the second connected body.

### Return value

Current axis of the second body. The provided vector will be normalized.

## static JointHingePtr create ( ) #

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

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

Constructor. Creates a hinge 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 JointHingePtr create ( const Ptr<Body> & body0, const Ptr<Body> & body1, const Math::Vec3 & anchor, const Math::vec3 & axis ) #

Constructor. Creates a hinge 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.
Last update: 2024-08-07