ManipulatedCameraFrame Class Reference

The ManipulatedCameraFrame class represents a ManipulatedFrame with Camera specific mouse bindings. More...

Inheritance diagram for ManipulatedCameraFrame:

Public Member Functions

 ManipulatedCameraFrame ()
 Default constructor.
 
 ManipulatedCameraFrame (const ManipulatedCameraFrame &mcf)
 Copy constructor.
 
virtual ~ManipulatedCameraFrame ()
 Virtual destructor.
 
ManipulatedCameraFrameoperator= (const ManipulatedCameraFrame &mcf)
 Equal operator.
 
- Public Member Functions inherited from ManipulatedFrame
 ManipulatedFrame ()
 Default constructor.
 
 ManipulatedFrame (const ManipulatedFrame &mf)
 Copy constructor.
 
virtual ~ManipulatedFrame ()
 Virtual destructor.
 
ManipulatedFrameoperator= (const ManipulatedFrame &mf)
 Equal operator.
 
float rotationSensitivity () const
 Returns the influence of a mouse displacement on the ManipulatedFrame rotation.
 
float translationSensitivity () const
 Returns the influence of a mouse displacement on the ManipulatedFrame translation.
 
float spinningSensitivity () const
 Returns the minimum mouse speed required (at button release) to make the ManipulatedFrame spin().
 
float wheelSensitivity () const
 Returns the mouse wheel sensitivity.
 
bool isSpinning () const
 Returns true when the ManipulatedFrame is spinning.
 
Quaternion spinningQuaternion () const
 Returns the incremental rotation that is applied by spin() to the ManipulatedFrame orientation when it isSpinning().
 
bool isManipulated () const
 Returns true when the ManipulatedFrame is being manipulated with the mouse.
 
virtual void checkIfGrabsMouse (int x, int y, const Camera *const camera)
 Implementation of the MouseGrabber main method.
 
- Public Member Functions inherited from Frame
 Frame ()
 Creates a default Frame.
 
 Frame (const Frame &frame)
 Copy constructor.
 
virtual ~Frame ()
 Virtual destructor.
 
Frameoperator= (const Frame &frame)
 Equal operator.
 
 Frame (const Vec &position, const Quaternion &orientation)
 Creates a Frame with a position() and an orientation().
 
void setPosition (const Vec &position)
 Sets the position() of the Frame, defined in the world coordinate system.
 
void setPosition (float x, float y, float z)
 Same as setPosition(), but with float parameters.
 
void setPositionWithConstraint (Vec &position)
 Same as setPosition(), but position is modified so that the potential constraint() of the Frame is satisfied.
 
void setOrientation (const Quaternion &orientation)
 Sets the orientation() of the Frame, defined in the world coordinate system.
 
void setOrientation (double q0, double q1, double q2, double q3)
 Same as setOrientation(), but with float parameters.
 
void setOrientationWithConstraint (Quaternion &orientation)
 Same as setOrientation(), but orientation is modified so that the potential constraint() of the Frame is satisfied.
 
void setPositionAndOrientation (const Vec &position, const Quaternion &orientation)
 Same as successive calls to setPosition() and then setOrientation().
 
void setPositionAndOrientationWithConstraint (Vec &position, Quaternion &orientation)
 Same as setPositionAndOrientation() but position and orientation are modified to satisfy the constraint.
 
Vec position () const
 Returns the position of the Frame, defined in the world coordinate system.
 
Quaternion orientation () const
 Returns the orientation of the Frame, defined in the world coordinate system.
 
void getPosition (float &x, float &y, float &z) const
 x, y and z are set to the position() of the Frame.
 
void getOrientation (double &q0, double &q1, double &q2, double &q3) const
 Get the current orientation of the frame (same as orientation()).
 
void setTranslation (const Vec &translation)
 Sets the translation() of the frame, locally defined with respect to the referenceFrame().
 
void setTranslation (float x, float y, float z)
 Same as setTranslation(), but with float parameters.
 
void setTranslationWithConstraint (Vec &translation)
 Same as setTranslation(), but translation is modified so that the potential constraint() of the Frame is satisfied.
 
void setRotation (const Quaternion &rotation)
 Set the current rotation Quaternion.
 
void setRotation (double q0, double q1, double q2, double q3)
 Same as setRotation() but with float Quaternion parameters.
 
void setRotationWithConstraint (Quaternion &rotation)
 Same as setRotation(), but rotation is modified so that the potential constraint() of the Frame is satisfied.
 
void setTranslationAndRotation (const Vec &translation, const Quaternion &rotation)
 Same as successive calls to setTranslation() and then setRotation().
 
void setTranslationAndRotationWithConstraint (Vec &translation, Quaternion &rotation)
 Same as setTranslationAndRotation(), but translation and orientation are modified to satisfy the constraint().
 
Vec translation () const
 Returns the Frame translation, defined with respect to the referenceFrame().
 
Quaternion rotation () const
 Returns the Frame rotation, defined with respect to the referenceFrame().
 
void getTranslation (float &x, float &y, float &z) const
 Fill x, y and z with the translation() of the Frame.
 
void getRotation (double &q0, double &q1, double &q2, double &q3) const
 The q are set to the rotation() of the Frame.
 
const FramereferenceFrame () const
 Returns the reference Frame, in which coordinates system the Frame is defined.
 
void setReferenceFrame (const Frame *const refFrame)
 Sets the referenceFrame() of the Frame.
 
bool settingAsReferenceFrameWillCreateALoop (const Frame *const frame)
 Returns true if setting frame as the Frame's referenceFrame() would create a loop in the Frame hierarchy.
 
void translate (Vec &t)
 Same as translate(const Vec&) but t may be modified to satisfy the translation constraint().
 
void translate (const Vec &t)
 Translates the Frame of t (defined in the Frame coordinate system).
 
void translate (float x, float y, float z)
 Same as translate(const Vec&) but with float parameters.
 
void translate (float &x, float &y, float &z)
 Same as translate(Vec&) but with float parameters.
 
void rotate (Quaternion &q)
 Same as rotate(const Quaternion&) but q may be modified to satisfy the rotation constraint().
 
void rotate (const Quaternion &q)
 Rotates the Frame by q (defined in the Frame coordinate system): R = R*q.
 
void rotate (double q0, double q1, double q2, double q3)
 Same as rotate(const Quaternion&) but with float Quaternion parameters.
 
void rotate (double &q0, double &q1, double &q2, double &q3)
 Same as rotate(Quaternion&) but with float Quaternion parameters.
 
void rotateAroundPoint (Quaternion &rotation, const Vec &point)
 Makes the Frame rotate() by rotation around point.
 
void rotateAroundPoint (const Quaternion &rotation, const Vec &point)
 Same as rotateAroundPoint(), but with a const rotation Quaternion.
 
void alignWithFrame (const Frame *const frame, bool move=false, float threshold=0.85f)
 Aligns the Frame with frame, so that two of their axis are parallel.
 
void projectOnLine (const Vec &origin, const Vec &direction)
 Translates the Frame so that its position() lies on the line defined by origin and direction (defined in the world coordinate system).
 
Vec coordinatesOf (const Vec &src) const
 Returns the Frame coordinates of a point src defined in the world coordinate system (converts from world to Frame).
 
Vec inverseCoordinatesOf (const Vec &src) const
 Returns the world coordinates of the point whose position in the Frame coordinate system is src (converts from Frame to world).
 
Vec localCoordinatesOf (const Vec &src) const
 Returns the Frame coordinates of a point src defined in the referenceFrame() coordinate system (converts from referenceFrame() to Frame).
 
Vec localInverseCoordinatesOf (const Vec &src) const
 Returns the referenceFrame() coordinates of a point src defined in the Frame coordinate system (converts from Frame to referenceFrame()).
 
Vec coordinatesOfIn (const Vec &src, const Frame *const in) const
 Returns the in coordinates of the point whose position in the Frame coordinate system is src (converts from Frame to in).
 
Vec coordinatesOfFrom (const Vec &src, const Frame *const from) const
 Returns the Frame coordinates of the point whose position in the from coordinate system is src (converts from from to Frame).
 
void getCoordinatesOf (const float src[3], float res[3]) const
 Same as coordinatesOf(), but with float parameters.
 
void getInverseCoordinatesOf (const float src[3], float res[3]) const
 Same as inverseCoordinatesOf(), but with float parameters.
 
void getLocalCoordinatesOf (const float src[3], float res[3]) const
 Same as localCoordinatesOf(), but with float parameters.
 
void getLocalInverseCoordinatesOf (const float src[3], float res[3]) const
 Same as localInverseCoordinatesOf(), but with float parameters.
 
void getCoordinatesOfIn (const float src[3], float res[3], const Frame *const in) const
 Same as coordinatesOfIn(), but with float parameters.
 
void getCoordinatesOfFrom (const float src[3], float res[3], const Frame *const from) const
 Same as coordinatesOfFrom(), but with float parameters.
 
Vec transformOf (const Vec &src) const
 Returns the Frame transform of a vector src defined in the world coordinate system (converts vectors from world to Frame).
 
Vec inverseTransformOf (const Vec &src) const
 Returns the world transform of the vector whose coordinates in the Frame coordinate system is src (converts vectors from Frame to world).
 
Vec localTransformOf (const Vec &src) const
 Returns the Frame transform of a vector src defined in the referenceFrame() coordinate system (converts vectors from referenceFrame() to Frame).
 
Vec localInverseTransformOf (const Vec &src) const
 Returns the referenceFrame() transform of a vector src defined in the Frame coordinate system (converts vectors from Frame to referenceFrame()).
 
Vec transformOfIn (const Vec &src, const Frame *const in) const
 Returns the in transform of the vector whose coordinates in the Frame coordinate system is src (converts vectors from Frame to in).
 
Vec transformOfFrom (const Vec &src, const Frame *const from) const
 Returns the Frame transform of the vector whose coordinates in the from coordinate system is src (converts vectors from from to Frame).
 
void getTransformOf (const float src[3], float res[3]) const
 Same as transformOf(), but with float parameters.
 
void getInverseTransformOf (const float src[3], float res[3]) const
 Same as inverseTransformOf(), but with float parameters.
 
void getLocalTransformOf (const float src[3], float res[3]) const
 Same as localTransformOf(), but with float parameters.
 
void getLocalInverseTransformOf (const float src[3], float res[3]) const
 Same as localInverseTransformOf(), but with float parameters.
 
void getTransformOfIn (const float src[3], float res[3], const Frame *const in) const
 Same as transformOfIn(), but with float parameters.
 
void getTransformOfFrom (const float src[3], float res[3], const Frame *const from) const
 Same as transformOfFrom(), but with float parameters.
 
Constraintconstraint () const
 Returns the current constraint applied to the Frame.
 
void setConstraint (Constraint *const constraint)
 Sets the constraint() attached to the Frame.
 
const GLdouble * matrix () const
 Returns the 4x4 OpenGL transformation matrix represented by the Frame.
 
void getMatrix (GLdouble m[4][4]) const
 GLdouble[4][4] version of matrix().
 
void getMatrix (GLdouble m[16]) const
 GLdouble[16] version of matrix().
 
const GLdouble * worldMatrix () const
 Returns the 4x4 OpenGL transformation matrix represented by the Frame.
 
void getWorldMatrix (GLdouble m[4][4]) const
 float[4][4] parameter version of worldMatrix().
 
void getWorldMatrix (GLdouble m[16]) const
 float[16] parameter version of worldMatrix().
 
void setFromMatrix (const GLdouble m[4][4])
 This is an overloaded method provided for convenience.
 
void setFromMatrix (const GLdouble m[16])
 Sets the Frame from an OpenGL matrix representation (rotation in the upper left 3x3 matrix and translation on the last line).
 
Frame inverse () const
 Returns a Frame representing the inverse of the Frame space transformation.
 
Frame worldInverse () const
 Returns the inverse() of the Frame world transformation.
 
- Public Member Functions inherited from MouseGrabber
 MouseGrabber ()
 Default constructor.
 
virtual ~MouseGrabber ()
 Virtual destructor.
 
bool grabsMouse () const
 Returns true when the MouseGrabber grabs the QGLViewer's mouse events.
 
bool isInMouseGrabberPool () const
 Returns true if the MouseGrabber is currently in the MouseGrabberPool() list.
 
void addInMouseGrabberPool ()
 Adds the MouseGrabber in the MouseGrabberPool().
 
void removeFromMouseGrabberPool ()
 Removes the MouseGrabber from the MouseGrabberPool().
 
void clearMouseGrabberPool (bool autoDelete=false)
 Clears the MouseGrabberPool().
 

Protected Member Functions

virtual void startAction (int ma, bool withConstraint=true)
 Protected internal method used to handle mouse events.
 
- Protected Member Functions inherited from ManipulatedFrame
void computeMouseSpeed (const QMouseEvent *const e)
 Updates mouse speed, measured in pixels/milliseconds.
 
Quaternion deformedBallQuaternion (int x, int y, float cx, float cy, const Camera *const camera)
 Returns a quaternion computed according to the mouse motion.
 
int mouseOriginalDirection (const QMouseEvent *const e)
 Return 1 if mouse motion was started horizontally and -1 if it was more vertical.
 
virtual void mousePressEvent (QMouseEvent *const event, Camera *const camera)
 Initiates the ManipulatedFrame mouse manipulation.
 
virtual void mouseDoubleClickEvent (QMouseEvent *const event, Camera *const camera)
 Overloading of MouseGrabber::mouseDoubleClickEvent().
 
- Protected Member Functions inherited from MouseGrabber
void setGrabsMouse (bool grabs)
 Sets the grabsMouse() flag.
 

Friends

class ::QGLViewer
 
class Camera
 

Revolve around point

Vec revolveAroundPoint () const
 Returns the point the ManipulatedCameraFrame revolves around when rotated.
 
void setRevolveAroundPoint (const Vec &revolveAroundPoint)
 Sets the revolveAroundPoint(), defined in the world coordinate system.
 

Fly parameters

float flySpeed () const
 Returns the fly speed, expressed in OpenGL units.
 
Vec flyUpVector () const
 Returns the up vector used in fly mode, expressed in the world coordinate system.
 
void setFlySpeed (float speed)
 Sets the flySpeed(), defined in OpenGL units.
 
void setFlyUpVector (const Vec &up)
 Sets the flyUpVector(), defined in the world coordinate system.
 

Mouse event handlers

virtual void mouseReleaseEvent (QMouseEvent *const event, Camera *const camera)
 This is an overload of ManipulatedFrame::mouseReleaseEvent().
 
virtual void mouseMoveEvent (QMouseEvent *const event, Camera *const camera)
 Overloading of ManipulatedFrame::mouseMoveEvent().
 
virtual void wheelEvent (QWheelEvent *const event, Camera *const camera)
 This is an overload of ManipulatedFrame::wheelEvent().
 

Spinning

virtual void spin ()
 Overloading of ManipulatedFrame::spin().
 

XML representation

virtual QDomElement domElement (const QString &name, QDomDocument &document) const
 Returns an XML QDomElement that represents the ManipulatedCameraFrame.
 
virtual void initFromDOMElement (const QDomElement &element)
 Restores the ManipulatedCameraFrame state from a QDomElement created by domElement().
 

Additional Inherited Members

- Public Slots inherited from ManipulatedFrame
void setRotationSensitivity (float sensitivity)
 Defines the rotationSensitivity().
 
void setTranslationSensitivity (float sensitivity)
 Defines the translationSensitivity().
 
void setSpinningSensitivity (float sensitivity)
 Defines the spinningSensitivity(), in pixels per milliseconds.
 
void setWheelSensitivity (float sensitivity)
 Defines the wheelSensitivity().
 
void setSpinningQuaternion (const Quaternion &spinningQuaternion)
 Defines the spinningQuaternion().
 
virtual void startSpinning (int updateInterval)
 Starts the spinning of the ManipulatedFrame.
 
virtual void stopSpinning ()
 Stops the spinning motion started using startSpinning().
 
virtual void initFromDOMElement (const QDomElement &element)
 Restores the ManipulatedFrame state from a QDomElement created by domElement().
 
- Public Slots inherited from Frame
virtual void initFromDOMElement (const QDomElement &element)
 Restores the Frame state from a QDomElement created by domElement().
 
- Signals inherited from ManipulatedFrame
void manipulated ()
 This signal is emitted when ever the ManipulatedFrame is manipulated (i.e.
 
void spun ()
 This signal is emitted when the ManipulatedFrame isSpinning().
 
- Static Public Member Functions inherited from MouseGrabber
static const QList
< MouseGrabber > & 
MouseGrabberPool ()
 Returns a list containing pointers to all the active MouseGrabbers.
 
- Protected Slots inherited from ManipulatedFrame
virtual void spin ()
 Rotates the ManipulatedFrame by its spinningQuaternion().
 
- Protected Attributes inherited from ManipulatedFrame
int action_
 
QPoint pressPos_
 
ConstraintpreviousConstraint_
 
QPoint prevPos_
 

Detailed Description

The ManipulatedCameraFrame class represents a ManipulatedFrame with Camera specific mouse bindings.

A ManipulatedCameraFrame is a specialization of a ManipulatedFrame, designed to be set as the Camera::frame(). Mouse motions are basically interpreted in a negated way: when the mouse goes to the right, the ManipulatedFrame translation goes to the right, while the ManipulatedCameraFrame has to go to the left, so that the scene seems to move to the right.

A ManipulatedCameraFrame rotates around its revolveAroundPoint(), which corresponds to the associated Camera::revolveAroundPoint().

A ManipulatedCameraFrame can also "fly" in the scene. It basically moves forward, and turns according to the mouse motion. See flySpeed(), flyUpVector() and the QGLViewer::MOVE_FORWARD and QGLViewer::MOVE_BACKWARD QGLViewer::MouseAction.

See the mouse page for a description of the possible actions that can be performed using the mouse and their bindings.

Definition at line 47 of file manipulatedCameraFrame.h.

Constructor & Destructor Documentation

Default constructor.

flySpeed() is set to 0.0 and flyUpVector() is (0,1,0). The revolveAroundPoint() is set to (0,0,0).

Attention
Created object is removeFromMouseGrabberPool().

Definition at line 39 of file manipulatedCameraFrame.cpp.

References MouseGrabber::removeFromMouseGrabberPool(), and ManipulatedCameraFrame::setFlySpeed().

virtual ~ManipulatedCameraFrame ( )
inlinevirtual

Virtual destructor.

Empty.

Definition at line 59 of file manipulatedCameraFrame.h.

Copy constructor.

Performs a deep copy of all members using operator=().

Definition at line 60 of file manipulatedCameraFrame.cpp.

References MouseGrabber::removeFromMouseGrabberPool().

Member Function Documentation

QDomElement domElement ( const QString &  name,
QDomDocument &  document 
) const
virtual

Returns an XML QDomElement that represents the ManipulatedCameraFrame.

Adds to the ManipulatedFrame::domElement() the ManipulatedCameraFrame specific informations in a ManipulatedCameraParameters child QDomElement.

name is the name of the QDomElement tag. doc is the QDomDocument factory used to create QDomElement.

Use initFromDOMElement() to restore the ManipulatedCameraFrame state from the resulting QDomElement.

See Vec::domElement() for a complete example. See also Quaternion::domElement(), Frame::domElement(), Camera::domElement()...

Reimplemented from ManipulatedFrame.

Definition at line 132 of file manipulatedCameraFrame.cpp.

References ManipulatedFrame::domElement(), ManipulatedCameraFrame::flySpeed(), and ManipulatedCameraFrame::flyUpVector().

float flySpeed ( ) const
inline

Returns the fly speed, expressed in OpenGL units.

It corresponds to the incremental displacement that is periodically applied to the ManipulatedCameraFrame position when a QGLViewer::MOVE_FORWARD or QGLViewer::MOVE_BACKWARD QGLViewer::MouseAction is proceeded.

Attention
When the ManipulatedCameraFrame is set as the Camera::frame(), this value is set according to the QGLViewer::sceneRadius() by QGLViewer::setSceneRadius().

Definition at line 104 of file manipulatedCameraFrame.h.

Referenced by ManipulatedCameraFrame::domElement(), ManipulatedCameraFrame::initFromDOMElement(), ManipulatedCameraFrame::operator=(), and ManipulatedCameraFrame::wheelEvent().

Vec flyUpVector ( ) const
inline

Returns the up vector used in fly mode, expressed in the world coordinate system.

Fly mode corresponds to the QGLViewer::MOVE_FORWARD and QGLViewer::MOVE_BACKWARD QGLViewer::MouseAction bindings. In these modes, horizontal displacements of the mouse rotate the ManipulatedCameraFrame around this vector. Vertical displacements rotate always around the Camera X axis.

Default value is (0,1,0), but it is updated by the Camera when set as its Camera::frame(). Camera::setOrientation() and Camera::setUpVector()) modify this value and should be used instead.

Definition at line 116 of file manipulatedCameraFrame.h.

Referenced by ManipulatedCameraFrame::domElement(), and ManipulatedCameraFrame::operator=().

void initFromDOMElement ( const QDomElement &  element)
virtualslot
void mouseReleaseEvent ( QMouseEvent *const  event,
Camera *const  camera 
)
protectedvirtual

This is an overload of ManipulatedFrame::mouseReleaseEvent().

The QGLViewer::MouseAction is terminated.

Reimplemented from ManipulatedFrame.

Definition at line 360 of file manipulatedCameraFrame.cpp.

References Camera::fitScreenRegion(), and ManipulatedFrame::mouseReleaseEvent().

Vec revolveAroundPoint ( ) const
inline

Returns the point the ManipulatedCameraFrame revolves around when rotated.

It is defined in the world coordinate system. Default value is (0,0,0).

When the ManipulatedCameraFrame is associated to a Camera, Camera::revolveAroundPoint() also returns this value. This point can interactively be changed using the mouse (see QGLViewer::RAP_FROM_PIXEL and QGLViewer::RAP_IS_CENTER in the mouse page).

Definition at line 75 of file manipulatedCameraFrame.h.

Referenced by ManipulatedCameraFrame::mouseMoveEvent(), and ManipulatedCameraFrame::spin().

void setFlySpeed ( float  speed)
inlineslot

Sets the flySpeed(), defined in OpenGL units.

Default value is 0.0, but it is modified according to the QGLViewer::sceneRadius() when the ManipulatedCameraFrame is set as the Camera::frame().

Definition at line 87 of file manipulatedCameraFrame.h.

Referenced by ManipulatedCameraFrame::initFromDOMElement(), ManipulatedCameraFrame::ManipulatedCameraFrame(), ManipulatedCameraFrame::operator=(), and Camera::setSceneRadius().

void setFlyUpVector ( const Vec up)
inlineslot

Sets the flyUpVector(), defined in the world coordinate system.

Default value is (0,1,0), but it is updated by the Camera when set as its Camera::frame(). Use Camera::setUpVector() instead in that case.

Definition at line 93 of file manipulatedCameraFrame.h.

Referenced by ManipulatedCameraFrame::initFromDOMElement(), and ManipulatedCameraFrame::operator=().

void setRevolveAroundPoint ( const Vec revolveAroundPoint)
inline

Sets the revolveAroundPoint(), defined in the world coordinate system.

Definition at line 77 of file manipulatedCameraFrame.h.

Referenced by Camera::setRevolveAroundPoint().

void spin ( )
protectedvirtualslot
void startAction ( int  ma,
bool  withConstraint = true 
)
protectedvirtual

Protected internal method used to handle mouse events.

Reimplemented from ManipulatedFrame.

Definition at line 180 of file manipulatedCameraFrame.cpp.

References ManipulatedFrame::startAction().

void wheelEvent ( QWheelEvent *const  event,
Camera *const  camera 
)
protectedvirtual

This is an overload of ManipulatedFrame::wheelEvent().

The wheel behavior depends on the wheel binded action. Current possible actions are QGLViewer::ZOOM, QGLViewer::MOVE_FORWARD, QGLViewer::MOVE_BACKWARD. QGLViewer::ZOOM speed depends on wheelSensitivity() while QGLViewer::MOVE_FORWARD and QGLViewer::MOVE_BACKWARD depend on flySpeed(). See QGLViewer::setWheelBinding() to customize the binding.

Reimplemented from ManipulatedFrame.

Definition at line 377 of file manipulatedCameraFrame.cpp.

References Frame::coordinatesOf(), ManipulatedCameraFrame::flySpeed(), Camera::frame(), Frame::inverseTransformOf(), ManipulatedFrame::manipulated(), Camera::revolveAroundPoint(), Camera::sceneRadius(), Frame::setConstraint(), Frame::translate(), and ManipulatedFrame::wheelSensitivity().


The documentation for this class was generated from the following files: