SOFA API  1a4bb3e7
Open source framework for multi-physics simuation
qglviewer::AxisPlaneConstraint Class Reference

#include <QGLViewer/constraint.h>

An abstract class for Frame Constraints defined by an axis or a plane. More...

Inheritance diagram for qglviewer::AxisPlaneConstraint:

Detailed Description

An abstract class for Frame Constraints defined by an axis or a plane.

AxisPlaneConstraint is an interface for (translation and/or rotation) Constraint that are defined by a direction. translationConstraintType() and rotationConstraintType() define how this direction should be interpreted: as an axis (AxisPlaneConstraint::AXIS) or as a plane normal (AxisPlaneConstraint::PLANE). See the Type() documentation for details.

The three implementations of this class: LocalConstraint, WorldConstraint and CameraConstraint differ by the coordinate system in which this direction is expressed.

Different implementations of this class are illustrated in the contrainedCamera and constrainedFrame examples.

Attention
When applied, the rotational Constraint may not intuitively follow the mouse displacement. A solution would be to directly measure the rotation angle in screen coordinates, but that would imply to know the QGLViewer::camera(), so that we can compute the projected coordinates of the rotation center (as is done with the QGLViewer::SCREEN_ROTATE binding). However, adding an extra pointer to the QGLViewer::camera() in all the AxisPlaneConstraint derived classes (which the user would have to update in a multi-viewer application) was judged as an overkill.

Public Member Functions

 AxisPlaneConstraint ()
 Default constructor. More...
 
virtual ~AxisPlaneConstraint ()
 Virtual destructor. More...
 
Translation constraint
virtual void constrainTranslation (Vec &translation, Frame *const frame)
 Overloading of Constraint::constrainTranslation(). More...
 
void setTranslationConstraint (Type type, const Vec &direction)
 Simply calls setTranslationConstraintType() and setTranslationConstraintDirection(). More...
 
void setTranslationConstraintType (Type type)
 Sets the Type() of the translationConstraintType(). More...
 
void setTranslationConstraintDirection (const Vec &direction)
 Defines the translationConstraintDirection(). More...
 
Type translationConstraintType () const
 Returns the translation constraint Type(). More...
 
Vec translationConstraintDirection () const
 Returns the direction used by the translation constraint. More...
 
- Public Member Functions inherited from qglviewer::Constraint
virtual ~Constraint ()
 Virtual destructor. More...
 

Rotation constraint

virtual void constrainRotation (Quaternion &rotation, Frame *const frame)
 Overloading of Constraint::constrainRotation(). More...
 
void setRotationConstraint (Type type, const Vec &direction)
 Simply calls setRotationConstraintType() and setRotationConstraintDirection(). More...
 
void setRotationConstraintType (Type type)
 Set the Type() of the rotationConstraintType(). More...
 
void setRotationConstraintDirection (const Vec &direction)
 Defines the rotationConstraintDirection(). More...
 
Type rotationConstraintType () const
 Returns the rotation constraint Type(). More...
 
Vec rotationConstraintDirection () const
 Returns the axis direction used by the rotation constraint. More...
 

Constructor details

◆ AxisPlaneConstraint()

AxisPlaneConstraint::AxisPlaneConstraint ( )

◆ ~AxisPlaneConstraint()

virtual qglviewer::AxisPlaneConstraint::~AxisPlaneConstraint ( )
inlinevirtual

Virtual destructor.

Empty.

Function details

◆ constrainRotation()

virtual void qglviewer::AxisPlaneConstraint::constrainRotation ( Quaternion rotation,
Frame *const  frame 
)
inlinevirtual

◆ constrainTranslation()

virtual void qglviewer::AxisPlaneConstraint::constrainTranslation ( Vec translation,
Frame *const  frame 
)
inlinevirtual

◆ rotationConstraintDirection()

Vec qglviewer::AxisPlaneConstraint::rotationConstraintDirection ( ) const
inline

Returns the axis direction used by the rotation constraint.

This direction is defined only when rotationConstraintType() is AxisPlaneConstraint::AXIS.

The AxisPlaneConstraint derived classes express this direction in different coordinate system (camera for CameraConstraint, local for LocalConstraint, and world for WorldConstraint). This value can be modified with setRotationConstraintDirection().

◆ rotationConstraintType()

Type qglviewer::AxisPlaneConstraint::rotationConstraintType ( ) const
inline

Returns the rotation constraint Type().

◆ setRotationConstraint()

void AxisPlaneConstraint::setRotationConstraint ( Type  type,
const Vec direction 
)

◆ setRotationConstraintDirection()

void AxisPlaneConstraint::setRotationConstraintDirection ( const Vec direction)

Defines the rotationConstraintDirection().

The coordinate system where direction is expressed depends on your class implementation.

◆ setRotationConstraintType()

void AxisPlaneConstraint::setRotationConstraintType ( Type  type)

Set the Type() of the rotationConstraintType().

Default is AxisPlaneConstraint::FREE.

Depending on this value, the Frame will freely rotate (AxisPlaneConstraint::FREE), will only be able to rotate around an axis (AxisPlaneConstraint::AXIS), or will not able to rotate at all (AxisPlaneConstraint::FORBIDDEN).

Use Frame::setOrientation() to define the orientation of the constrained Frame before it gets constrained.

Attention
An AxisPlaneConstraint::PLANE Type() is not meaningful for rotational constraints and will be ignored.

◆ setTranslationConstraint()

void AxisPlaneConstraint::setTranslationConstraint ( Type  type,
const Vec direction 
)

◆ setTranslationConstraintDirection()

void AxisPlaneConstraint::setTranslationConstraintDirection ( const Vec direction)

Defines the translationConstraintDirection().

The coordinate system where direction is expressed depends on your class implementation.

◆ setTranslationConstraintType()

void qglviewer::AxisPlaneConstraint::setTranslationConstraintType ( Type  type)
inline

◆ translationConstraintDirection()

Vec qglviewer::AxisPlaneConstraint::translationConstraintDirection ( ) const
inline

Returns the direction used by the translation constraint.

It represents the axis direction (AxisPlaneConstraint::AXIS) or the plane normal (AxisPlaneConstraint::PLANE) depending on the translationConstraintType(). It is undefined for AxisPlaneConstraint::FREE or AxisPlaneConstraint::FORBIDDEN.

The AxisPlaneConstraint derived classes express this direction in different coordinate system (camera for CameraConstraint, local for LocalConstraint, and world for WorldConstraint). This value can be modified with setTranslationConstraintDirection().

◆ translationConstraintType()

Type qglviewer::AxisPlaneConstraint::translationConstraintType ( ) const
inline

Returns the translation constraint Type().

Depending on this value, the Frame will freely translate (AxisPlaneConstraint::FREE), will only be able to translate along an axis direction (AxisPlaneConstraint::AXIS), will be forced to stay into a plane (AxisPlaneConstraint::PLANE) or will not able to translate at all (AxisPlaneConstraint::FORBIDDEN).

Use Frame::setPosition() to define the position of the constrained Frame before it gets constrained.

Enum details

◆ Type

Type lists the different types of translation and rotation constraints that are available.

It specifies the meaning of the constraint direction (see translationConstraintDirection() and rotationConstraintDirection()): as an axis direction (AxisPlaneConstraint::AXIS) or a plane normal (AxisPlaneConstraint::PLANE). AxisPlaneConstraint::FREE means no constraint while AxisPlaneConstraint::FORBIDDEN completely forbids the translation and/or the rotation.

See translationConstraintType() and rotationConstraintType().

Attention
The AxisPlaneConstraint::PLANE Type is not valid for rotational constraint.

New derived classes can use their own extended enum for specific constraints:

class MyAxisPlaneConstraint : public AxisPlaneConstraint
{
public:
enum MyType { FREE, AXIS, PLANE, FORBIDDEN, CUSTOM };
virtual void constrainTranslation(Vec &translation, Frame *const frame)
{
// translationConstraintType() is simply an int. CUSTOM Type is
handled seamlessly. switch (translationConstraintType())
{
case MyAxisPlaneConstraint::FREE: ... break;
case MyAxisPlaneConstraint::CUSTOM: ... break;
}
};
MyAxisPlaneConstraint* c = new MyAxisPlaneConstraint();
// Note the Type conversion
c->setTranslationConstraintType(AxisPlaneConstraint::Type(MyAxisPlaneConstraint::CUSTOM));
};
Type
Type lists the different types of translation and rotation constraints that are available.
Definition: constraint.h:224
@ AXIS
Definition: constraint.h:224
@ FREE
Definition: constraint.h:224
@ FORBIDDEN
Definition: constraint.h:224
@ PLANE
Definition: constraint.h:224
Type translationConstraintType() const
Returns the translation constraint Type().
Definition: constraint.h:252
AxisPlaneConstraint()
Default constructor.
Definition: constraint.cpp:40
virtual void constrainTranslation(Vec &translation, Frame *const frame)
Overloading of Constraint::constrainTranslation().
Definition: constraint.h:229
Enumerator
FREE 
AXIS 
PLANE 
FORBIDDEN