﻿ C++: CRotation Class Reference

CRotation Class Reference

CRotation Class Reference

`#include <xsi_rotation.h>`

## Class Description

Provides conversion facilities for various rotation representations including Euler angles, Quaternion, Axis angle and rotation matrix.

Note:
All angle values are expressed in radians.
CTransformation, CQuaternion
Example:
```                using namespace XSI;
using namespace MATH;

Application app;
Model root = app.GetActiveSceneRoot();

// Create a cube
X3DObject myCube;

// Rotate it 60 degrees
KinematicState  cubeKine = myCube.GetKinematics().GetGlobal();
cubeKine.PutParameterValue( L"rotx", 60.0 );

// Get the current rotation for the cube
CRotation cubeRotation = cubeKine.GetTransform().GetRotation();

// Halve the current rotation angle values
CVector3 eulerAngles = cubeRotation.GetXYZAngles();
eulerAngles.ScaleInPlace( 0.5 );

// Put the halved value back into x
cubeKine.PutParameterValue( L"rotx", RadiansToDegrees( eulerAngles.GetX() ) );
```

List of all members.

## Public Types

enum   RotationOrder {
siXYZ = 0, siXZY = 1, siYXZ = 2, siYZX = 3,
siZXY = 4, siZYX = 5
}

## Public Member Functions

CRotation ()
CRotation (const CRotation &in_rotation)
CRotation (const CVector3 &in_EulerAngles, RotationOrder in_RotOrder=siXYZ)
CRotation (double in_dX, double in_dY, double in_dZ, RotationOrder in_RotOrder=siXYZ)
CRotation (const CQuaternion &in_Quat)
CRotation (const CVector3 &in_Axis, double in_dAngle)
CRotation (const CMatrix3 &in_Matrix)
~CRotation ()
CRotation operator= (const CRotation &in_rotation)
CRotation Copy (const CRotation &in_SrcRot)
CVector3  GetXYZAngles () const
void  GetXYZAngles (double &io_dX, double &io_dY, double &io_dZ) const
RotationOrder  GetRotationOrder () const
void  PutRotationOrder (RotationOrder in_RotationOrder)
CRotation SetFromXYZAngles (const CVector3 &in_EulerAngles, RotationOrder in_Order=siXYZ)
CRotation SetFromXYZAngles (double in_dX, double in_dY, double in_dZ, RotationOrder in_Order=siXYZ)
CRotation SetFromXYZAxes (const CVector3 &in_XAxis, const CVector3 &in_YAxis, const CVector3 &in_ZAxis)
CRotation operator*= (const CRotation &in_Rotation)
CRotation MulInPlace (const CRotation &in_Rotation)
CRotation Mul (const CRotation &in_Rotation1, const CRotation &in_Rotation2)
CRotation InvertInPlace ()
CRotation Invert (const CRotation &in_Rot)
CQuaternion  GetQuaternion () const
CRotation SetFromQuaternion (const CQuaternion &in_Quat)
CRotation operator= (const CQuaternion &in_Quat)
CVector3  GetAxisAngle (double &io_dAngle) const
CRotation SetFromAxisAngle (const CVector3 &in_Axis, double in_dAngle)
CMatrix3  GetMatrix () const
CRotation SetFromMatrix (const CMatrix3 &in_Matrix)
CRotation operator= (const CMatrix3 &in_Matrix)
void  SetIdentity ()
bool  EpsilonEquals (const CRotation &in_Rot, double in_dEpsilon) const
bool  Equals (const CRotation &in_Rot) const
bool  operator== (const CRotation &in_Rot) const
bool  operator!= (const CRotation &in_Rot) const

## Member Enumeration Documentation

 enum RotationOrder

Defines the rotation order of a rotation for the Euler angles representation.

Enumerator:
 siXYZ X, Y, Z order Search for all occurrences siXZY X, Z, Y order Search for all occurrences siYXZ Y, X, Z order Search for all occurrences siYZX Y, Z, X order Search for all occurrences siZXY Z, X, Y order Search for all occurrences siZYX Z, Y, X order Search for all occurrences

## Constructor & Destructor Documentation

 CRotation ( )

Default constructor.

 CRotation ( const CRotation & in_rotation )

Copy constructor.

Parameters:
 in_rotation Rotation to copy
 CRotation ( const CVector3 & in_EulerAngles, RotationOrder in_RotOrder = `siXYZ` )

Constructor (from CVector3 of Euler angles).

Parameters:
 in_EulerAngles Euler angles to construct from in_RotOrder Rotation order to use
CRotation::SetFromXYZAngles, CRotation::PutRotationOrder
 CRotation ( double in_dX, double in_dY, double in_dZ, RotationOrder in_RotOrder = `siXYZ` )

Constructor (from XYZ Euler angles).

Parameters:
 in_dX X angle in_dY Y angle in_dZ Z angle in_RotOrder Rotation order to use
CRotation::SetFromXYZAngles, CRotation::PutRotationOrder
 CRotation ( const CQuaternion & in_Quat )

Constructor (from a quaternion).

Parameters:
 in_Quat Quaternion to construct from
CRotation::GetQuaternion, CRotation::SetFromQuaternion
 CRotation ( const CVector3 & in_Axis, double in_dAngle )

Constructor (using axis angle representation).

Parameters:
 in_Axis Axis of rotation in_dAngle Rotation angle around the axis
CRotation::GetAxisAngle, CRotation::SetFromAxisAngle
 CRotation ( const CMatrix3 & in_Matrix )

Constructor (from a rotation matrix).

Parameters:
 in_Matrix Rotation matrix
CRotation::GetMatrix, CRotation::SetFromMatrix
 ~CRotation ( )

Default destructor.

## Member Function Documentation

 CRotation& operator= ( const CRotation & in_rotation )

Assignment operator.

Parameters:
 in_rotation Rotation to copy
Returns:
A reference to this rotation.
 CRotation& Copy ( const CRotation & in_SrcRot )

Copies the content of another rotation.

Parameters:
 in_SrcRot Rotation to copy
Returns:
This rotation
 CVector3 GetXYZAngles ( ) const

Returns the Euler angles representation of the rotation as a CVector3.

Returns:
CVector3 Vector containing the X, Y and Z Euler angles
CRotation::SetFromXYZAngles, CRotation::GetRotationOrder
 void GetXYZAngles ( double & io_dX, double & io_dY, double & io_dZ ) const

Returns the Euler angles's representation of the rotation.

Parameters:
 io_dX X angle io_dY Y angle io_dZ Z angle
CRotation::SetFromXYZAngles, CRotation::GetRotationOrder
 RotationOrder GetRotationOrder ( ) const

Returns the rotation order of this rotation for the Euler angles representation.

Returns:
CRotation::RotationOrder
 void PutRotationOrder ( RotationOrder in_RotationOrder )

Sets the rotation order for the Euler angles representation.

Parameters:
 in_RotationOrder New rotation order to use
CRotation::GetRotationOrder
 CRotation& SetFromXYZAngles ( const CVector3 & in_EulerAngles, RotationOrder in_Order = `siXYZ` )

Sets the current rotation from Euler angles.

Parameters:
 in_EulerAngles Vector containing the rotation angles in_Order Rotation order
Returns:
This rotation
CRotation::GetXYZAngles, CRotation::PutRotationOrder
 CRotation& SetFromXYZAngles ( double in_dX, double in_dY, double in_dZ, RotationOrder in_Order = `siXYZ` )

Sets the rotation from Euler angles.

Parameters:
 in_dX X angle in_dY Y angle in_dZ Z angle in_Order Requested rotation order
Returns:
This rotation
CRotation::GetXYZAngles, CRotation::PutRotationOrder
 CRotation& SetFromXYZAxes ( const CVector3 & in_XAxis, const CVector3 & in_YAxis, const CVector3 & in_ZAxis )

Sets this rotation from three orthonormal axes.

Warning:
No verification is performed about their orthonormality
Parameters:
 in_XAxis The X axis in_YAxis The Y axis in_ZAxis The Z axis
Returns:
This rotation
 CRotation& operator*= ( const CRotation & in_Rotation )

Multiplies this rotation with another one in place.

Parameters:
 in_Rotation Rotation to multiply
Returns:
This rotation
 CRotation& MulInPlace ( const CRotation & in_Rotation )

Multiplies this rotation with another one in place.

Parameters:
 in_Rotation Rotation to multiply
Returns:
This rotation
 CRotation& Mul ( const CRotation & in_Rotation1, const CRotation & in_Rotation2 )

Stores the result of the multiplication of two rotations.

Parameters:
 in_Rotation1 First rotation in_Rotation2 Second rotation
Returns:
This rotation
 CRotation& InvertInPlace ( )

Inverts the rotation in place.

Returns:
This rotation
 CRotation& Invert ( const CRotation & in_Rot )

Stores the invert of a rotation.

Parameters:
 in_Rot Rotation to invert
Returns:
This rotation
 CQuaternion GetQuaternion ( ) const

Returns the quaternion representation of the rotation.

Returns:
CQuaternion
CRotation::SetFromQuaternion
 CRotation& SetFromQuaternion ( const CQuaternion & in_Quat )

Sets the rotation from a quaternion.

Parameters:
 in_Quat Quaternion to set from
Returns:
This rotation
CRotation::GetQuaternion
 CRotation& operator= ( const CQuaternion & in_Quat )

Sets the rotation from a quaternion.

Parameters:
 in_Quat Quaternion to set from
Returns:
This rotation
CRotation::SetFromQuaternion
 CVector3 GetAxisAngle ( double & io_dAngle ) const

Returns the axis angle representation of the rotation.

Parameters:
 io_dAngle Rotation angle around the axis
Returns:
CVector3 Axis of rotation
CRotation::SetFromAxisAngle
 CRotation& SetFromAxisAngle ( const CVector3 & in_Axis, double in_dAngle )

Sets the rotation from an axis angle.

Parameters:
 in_Axis Axis of rotation in_dAngle Rotation angle around the axis
Returns:
This rotation
CRotation::GetAxisAngle
 CMatrix3 GetMatrix ( ) const

Returns the rotation matrix.

Returns:
CMatrix3
CRotation::SetFromMatrix
 CRotation& SetFromMatrix ( const CMatrix3 & in_Matrix )

Sets the rotation from a rotation matrix.

Parameters:
 in_Matrix Rotation matrix
Returns:
This rotation
CRotation::GetMatrix
 CRotation& operator= ( const CMatrix3 & in_Matrix )

Sets the rotation from a rotation matrix.

Parameters:
 in_Matrix Rotation matrix
Returns:
This rotation
CRotation::SetFromMatrix
 void SetIdentity ( )

Sets the rotation to identity rotation.

 bool EpsilonEquals ( const CRotation & in_Rot, double in_dEpsilon ) const

Tests the equality of this rotation against in_Rot, with a tolerance of in_dEpsilon.

Parameters:
 in_Rot Rotation to compare against in_dEpsilon Tolerance. Rotations are considered equal if each parameter pair has a difference lower than in_dEpsilon.
Returns:
true if rotations are approximately equal; false if not equal
CRotation::Equals
 bool Equals ( const CRotation & in_Rot ) const

Performs exact comparison of two quaternions.

Note:
Each parameter of both quaternions must be exactly the same for a match.
Parameters:
 in_Rot Rotation to compare against
CRotation::EpsilonEquals
 bool operator== ( const CRotation & in_Rot ) const

Performs exact comparison of two quaternions.

Note:
Each parameter of both quaternions must be exactly the same for a match.
Parameters:
 in_Rot Rotation to compare against