A ManipulatedFrame is a Frame that can be rotated and translated using the mouse. More...
#include <QGLViewer/manipulatedFrame.h>
Signals | |
void | manipulated () |
void | spun () |
Signals inherited from qglviewer::Frame | |
void | interpolated () |
void | modified () |
Public Member Functions | |
ManipulatedFrame () | |
ManipulatedFrame (const ManipulatedFrame &mf) | |
ManipulatedFrame & | operator= (const ManipulatedFrame &mf) |
virtual | ~ManipulatedFrame () |
Public Member Functions inherited from qglviewer::Frame | |
Frame () | |
Frame (const Frame &frame) | |
Frame & | operator= (const Frame &frame) |
virtual | ~Frame () |
Frame (const Vec &position, const Quaternion &orientation) | |
void | setPosition (const Vec &position) |
void | setPosition (qreal x, qreal y, qreal z) |
void | setPositionWithConstraint (Vec &position) |
void | setOrientation (const Quaternion &orientation) |
void | setOrientation (qreal q0, qreal q1, qreal q2, qreal q3) |
void | setOrientationWithConstraint (Quaternion &orientation) |
void | setPositionAndOrientation (const Vec &position, const Quaternion &orientation) |
void | setPositionAndOrientationWithConstraint (Vec &position, Quaternion &orientation) |
Vec | position () const |
Quaternion | orientation () const |
void | getPosition (qreal &x, qreal &y, qreal &z) const |
void | getOrientation (qreal &q0, qreal &q1, qreal &q2, qreal &q3) const |
void | setTranslation (const Vec &translation) |
void | setTranslation (qreal x, qreal y, qreal z) |
void | setTranslationWithConstraint (Vec &translation) |
void | setRotation (const Quaternion &rotation) |
void | setRotation (qreal q0, qreal q1, qreal q2, qreal q3) |
void | setRotationWithConstraint (Quaternion &rotation) |
void | setTranslationAndRotation (const Vec &translation, const Quaternion &rotation) |
void | setTranslationAndRotationWithConstraint (Vec &translation, Quaternion &rotation) |
Vec | translation () const |
Quaternion | rotation () const |
void | getTranslation (qreal &x, qreal &y, qreal &z) const |
void | getRotation (qreal &q0, qreal &q1, qreal &q2, qreal &q3) const |
const Frame * | referenceFrame () const |
void | setReferenceFrame (const Frame *const refFrame) |
bool | settingAsReferenceFrameWillCreateALoop (const Frame *const frame) |
void | translate (Vec &t) |
void | translate (const Vec &t) |
void | translate (qreal x, qreal y, qreal z) |
void | translate (qreal &x, qreal &y, qreal &z) |
void | rotate (Quaternion &q) |
void | rotate (const Quaternion &q) |
void | rotate (qreal q0, qreal q1, qreal q2, qreal q3) |
void | rotate (qreal &q0, qreal &q1, qreal &q2, qreal &q3) |
void | rotateAroundPoint (Quaternion &rotation, const Vec &point) |
void | rotateAroundPoint (const Quaternion &rotation, const Vec &point) |
void | alignWithFrame (const Frame *const frame, bool move=false, qreal threshold=0.0) |
void | projectOnLine (const Vec &origin, const Vec &direction) |
Vec | coordinatesOf (const Vec &src) const |
Vec | inverseCoordinatesOf (const Vec &src) const |
Vec | localCoordinatesOf (const Vec &src) const |
Vec | localInverseCoordinatesOf (const Vec &src) const |
Vec | coordinatesOfIn (const Vec &src, const Frame *const in) const |
Vec | coordinatesOfFrom (const Vec &src, const Frame *const from) const |
void | getCoordinatesOf (const qreal src[3], qreal res[3]) const |
void | getInverseCoordinatesOf (const qreal src[3], qreal res[3]) const |
void | getLocalCoordinatesOf (const qreal src[3], qreal res[3]) const |
void | getLocalInverseCoordinatesOf (const qreal src[3], qreal res[3]) const |
void | getCoordinatesOfIn (const qreal src[3], qreal res[3], const Frame *const in) const |
void | getCoordinatesOfFrom (const qreal src[3], qreal res[3], const Frame *const from) const |
Vec | transformOf (const Vec &src) const |
Vec | inverseTransformOf (const Vec &src) const |
Vec | localTransformOf (const Vec &src) const |
Vec | localInverseTransformOf (const Vec &src) const |
Vec | transformOfIn (const Vec &src, const Frame *const in) const |
Vec | transformOfFrom (const Vec &src, const Frame *const from) const |
void | getTransformOf (const qreal src[3], qreal res[3]) const |
void | getInverseTransformOf (const qreal src[3], qreal res[3]) const |
void | getLocalTransformOf (const qreal src[3], qreal res[3]) const |
void | getLocalInverseTransformOf (const qreal src[3], qreal res[3]) const |
void | getTransformOfIn (const qreal src[3], qreal res[3], const Frame *const in) const |
void | getTransformOfFrom (const qreal src[3], qreal res[3], const Frame *const from) const |
Constraint * | constraint () const |
void | setConstraint (Constraint *const constraint) |
const GLdouble * | matrix () const |
void | getMatrix (GLdouble m[4][4]) const |
void | getMatrix (GLdouble m[16]) const |
const GLdouble * | worldMatrix () const |
void | getWorldMatrix (GLdouble m[4][4]) const |
void | getWorldMatrix (GLdouble m[16]) const |
void | setFromMatrix (const GLdouble m[4][4]) |
void | setFromMatrix (const GLdouble m[16]) |
Frame | inverse () const |
Frame | worldInverse () const |
Public Member Functions inherited from qglviewer::MouseGrabber | |
MouseGrabber () | |
virtual | ~MouseGrabber () |
bool | grabsMouse () const |
bool | isInMouseGrabberPool () const |
void | addInMouseGrabberPool () |
void | removeFromMouseGrabberPool () |
void | clearMouseGrabberPool (bool autoDelete=false) |
Protected Member Functions | |
void | computeMouseSpeed (const QMouseEvent *const e) |
Quaternion | deformedBallQuaternion (int x, int y, qreal cx, qreal cy, const Camera *const camera) |
qreal | deltaWithPrevPos (QMouseEvent *const event, Camera *const camera) const |
int | mouseOriginalDirection (const QMouseEvent *const e) |
virtual void | startAction (int ma, bool withConstraint=true) |
qreal | wheelDelta (const QWheelEvent *event) const |
Protected Member Functions inherited from qglviewer::MouseGrabber | |
void | setGrabsMouse (bool grabs) |
Protected Attributes | |
QGLViewer::MouseAction | action_ |
QPoint | pressPos_ |
Constraint * | previousConstraint_ |
QPoint | prevPos_ |
Private Member Functions | |
void | zoom (qreal delta, const Camera *const camera) |
Private Attributes | |
int | delay_ |
bool | dirIsFixed_ |
bool | isSpinning_ |
bool | keepsGrabbingMouse_ |
QTime | last_move_time |
qreal | mouseSpeed_ |
qreal | rotationSensitivity_ |
Quaternion | spinningQuaternion_ |
qreal | spinningSensitivity_ |
QTimer | spinningTimer_ |
qreal | translationSensitivity_ |
qreal | wheelSensitivity_ |
qreal | zoomSensitivity_ |
Friends | |
class | ::QGLViewer |
class | Camera |
Manipulation sensitivity | |
qreal | rotationSensitivity () const |
qreal | translationSensitivity () const |
qreal | spinningSensitivity () const |
qreal | zoomSensitivity () const |
qreal | wheelSensitivity () const |
void | setRotationSensitivity (qreal sensitivity) |
void | setTranslationSensitivity (qreal sensitivity) |
void | setSpinningSensitivity (qreal sensitivity) |
void | setWheelSensitivity (qreal sensitivity) |
void | setZoomSensitivity (qreal sensitivity) |
Spinning | |
bool | isSpinning () const |
Quaternion | spinningQuaternion () const |
void | setSpinningQuaternion (const Quaternion &spinningQuaternion) |
virtual void | startSpinning (int updateInterval) |
virtual void | stopSpinning () |
virtual void | spin () |
void | spinUpdate () |
Mouse event handlers | |
virtual void | mousePressEvent (QMouseEvent *const event, Camera *const camera) |
virtual void | mouseMoveEvent (QMouseEvent *const event, Camera *const camera) |
virtual void | mouseReleaseEvent (QMouseEvent *const event, Camera *const camera) |
virtual void | mouseDoubleClickEvent (QMouseEvent *const event, Camera *const camera) |
virtual void | wheelEvent (QWheelEvent *const event, Camera *const camera) |
Current state | |
bool | isManipulated () const |
QGLViewer::MouseAction | currentMouseAction () const |
MouseGrabber implementation | |
virtual void | checkIfGrabsMouse (int x, int y, const Camera *const camera) |
XML representation | |
virtual QDomElement | domElement (const QString &name, QDomDocument &document) const |
virtual void | initFromDOMElement (const QDomElement &element) |
Additional Inherited Members | |
Public Slots inherited from qglviewer::Frame | |
virtual void | initFromDOMElement (const QDomElement &element) |
Static Public Member Functions inherited from qglviewer::MouseGrabber | |
static const QList< MouseGrabber * > & | MouseGrabberPool () |
A ManipulatedFrame is a Frame that can be rotated and translated using the mouse.
It converts the mouse motion into a translation and an orientation updates. A ManipulatedFrame is used to move an object in the scene. Combined with object selection, its MouseGrabber properties and a dynamic update of the scene, the ManipulatedFrame introduces a great reactivity in your applications.
A ManipulatedFrame is attached to a QGLViewer using QGLViewer::setManipulatedFrame():
See the manipulatedFrame example for a complete application.
Mouse events are normally sent to the QGLViewer::camera(). You have to press the QGLViewer::FRAME state key (default is Control
) to move the QGLViewer::manipulatedFrame() instead. See the mouse page for a description of mouse button bindings.
A ManipulatedFrame is an overloaded instance of a Frame. The powerful coordinate system transformation functions (Frame::coordinatesOf(), Frame::transformOf(), ...) can hence be applied to a ManipulatedFrame.
A ManipulatedFrame is also a MouseGrabber. If the mouse cursor gets within a distance of 10 pixels from the projected position of the ManipulatedFrame, the ManipulatedFrame becomes the new QGLViewer::mouseGrabber(). It can then be manipulated directly, without any specific state key, object selection or GUI intervention. This is very convenient to directly move some objects in the scene (typically a light). See the mouseGrabber example as an illustration. Note that QWidget::setMouseTracking() needs to be enabled in order to use this feature (see the MouseGrabber documentation).
A QGLViewer can handle at most one ManipulatedFrame at a time. If you want to move several objects in the scene, you simply have to keep a list of the different ManipulatedFrames, and to activate the right one (using QGLViewer::setManipulatedFrame()) when needed. This can for instance be done according to an object selection: see the luxo example for an illustration.
When the ManipulatedFrame is being manipulated using the mouse (mouse pressed and not yet released), isManipulated() returns true
. This might be used to trigger a specific action or display (as is done with QGLViewer::fastDraw()).
The ManipulatedFrame also emits a manipulated() signal each time its state is modified by the mouse. This signal is automatically connected to the QGLViewer::update() slot when the ManipulatedFrame is attached to a viewer using QGLViewer::setManipulatedFrame().
You can make the ManipulatedFrame spin() if you release the rotation mouse button while moving the mouse fast enough (see spinningSensitivity()). See also translationSensitivity() and rotationSensitivity() for sensitivity tuning.
Definition at line 95 of file manipulatedFrame.h.
ManipulatedFrame::ManipulatedFrame | ( | ) |
Default constructor.
The translation is set to (0,0,0), with an identity rotation (0,0,0,1) (see Frame constructor for details).
The different sensitivities are set to their default values (see rotationSensitivity(), translationSensitivity(), spinningSensitivity() and wheelSensitivity()).
Definition at line 43 of file manipulatedFrame.cpp.
|
inlinevirtual |
Virtual destructor. Empty.
Definition at line 107 of file manipulatedFrame.h.
ManipulatedFrame::ManipulatedFrame | ( | const ManipulatedFrame & | mf | ) |
Copy constructor. Performs a deep copy of all attributes using operator=().
Definition at line 79 of file manipulatedFrame.cpp.
|
virtual |
Implementation of the MouseGrabber main method.
The ManipulatedFrame grabsMouse() when the mouse is within a 10 pixels region around its Camera::projectedCoordinatesOf() position().
See the mouseGrabber example for an illustration.
Implements qglviewer::MouseGrabber.
Definition at line 93 of file manipulatedFrame.cpp.
|
protected |
Updates mouse speed, measured in pixels/milliseconds. Should be called by any method which wants to use mouse speed. Currently used to trigger spinning in mouseReleaseEvent().
Definition at line 241 of file manipulatedFrame.cpp.
|
inline |
Returns the MouseAction
currently applied to this ManipulatedFrame.
Will return QGLViewer::NO_MOUSE_ACTION unless a mouse button is being pressed and has been bound to this QGLViewer::MouseHandler.
The binding between mouse buttons and key modifiers and MouseAction is set using QGLViewer::setMouseBinding(Qt::Key key, Qt::KeyboardModifiers modifiers, Qt::MouseButton buttons, MouseHandler handler, MouseAction action, bool withConstraint).
Definition at line 268 of file manipulatedFrame.h.
|
protected |
Returns a quaternion computed according to the mouse motion. Mouse positions are projected on a deformed ball, centered on (cx
,cy
).
Definition at line 534 of file manipulatedFrame.cpp.
|
protected |
Returns a screen scaled delta from event's position to prevPos_, along the X or Y direction, whichever has the largest magnitude.
Definition at line 275 of file manipulatedFrame.cpp.
|
virtual |
Returns an XML QDomElement
that represents the ManipulatedFrame.
Adds to the Frame::domElement() the ManipulatedFrame specific informations in a ManipulatedParameters
child QDomElement.
name
is the name of the QDomElement tag. doc
is the QDomDocument
factory used to create QDomElement.
Use initFromDOMElement() to restore the ManipulatedFrame state from the resulting QDomElement
.
See Vec::domElement() for a complete example. See also Quaternion::domElement(), Camera::domElement()...
Reimplemented from qglviewer::Frame.
Reimplemented in qglviewer::ManipulatedCameraFrame.
Definition at line 116 of file manipulatedFrame.cpp.
|
virtualslot |
Restores the ManipulatedFrame state from a QDomElement
created by domElement().
Fields that are not described in element
are set to their default values (see ManipulatedFrame()).
First calls Frame::initFromDOMElement() and then initializes ManipulatedFrame specific parameters. Note that constraint() and referenceFrame() are not restored and are left unchanged.
See Vec::initFromDOMElement() for a complete code example.
Definition at line 138 of file manipulatedFrame.cpp.
bool ManipulatedFrame::isManipulated | ( | ) | const |
Returns true
when the ManipulatedFrame is being manipulated with the mouse.
Can be used to change the display of the manipulated object during manipulation.
When Camera::frame() of the QGLViewer::camera() isManipulated(), QGLViewer::fastDraw() is used in place of QGLViewer::draw() for scene rendering. A simplified drawing will then allow for interactive camera displacements.
Definition at line 174 of file manipulatedFrame.cpp.
|
inline |
Returns true
when the ManipulatedFrame is spinning.
During spinning, spin() rotates the ManipulatedFrame by its spinningQuaternion() at a frequency defined when the ManipulatedFrame startSpinning().
Use startSpinning() and stopSpinning() to change this state. Default value is false
.
Definition at line 222 of file manipulatedFrame.h.
|
signal |
This signal is emitted when ever the ManipulatedFrame is manipulated (i.e. rotated or translated) using the mouse. Connect this signal to any object that should be notified.
Note that this signal is automatically connected to the QGLViewer::update() slot, when the ManipulatedFrame is attached to a viewer using QGLViewer::setManipulatedFrame(), which is probably all you need.
Use the QGLViewer::QGLViewerPool() if you need to connect this signal to all the viewers.
See also the spun(), modified(), interpolated() and KeyFrameInterpolator::interpolated() signals' documentations.
|
protectedvirtual |
Overloading of MouseGrabber::mouseDoubleClickEvent().
Left button double click aligns the ManipulatedFrame with the camera
axis (see alignWithFrame() and QGLViewer::ALIGN_FRAME). Right button projects the ManipulatedFrame on the camera
view direction.
Reimplemented from qglviewer::MouseGrabber.
Definition at line 482 of file manipulatedFrame.cpp.
|
protectedvirtual |
Modifies the ManipulatedFrame according to the mouse motion.
Actual behavior depends on mouse bindings. See the QGLViewer::MouseAction enum and the QGLViewer mouse page for details.
The camera
is used to fit the mouse motion with the display parameters (see Camera::screenWidth(), Camera::screenHeight(), Camera::fieldOfView()).
Emits the manipulated() signal.
Reimplemented from qglviewer::MouseGrabber.
Reimplemented in qglviewer::ManipulatedCameraFrame.
Definition at line 329 of file manipulatedFrame.cpp.
|
protected |
Return 1 if mouse motion was started horizontally and -1 if it was more vertical. Returns 0 if this could not be determined yet (perfect diagonal motion, rare).
Definition at line 255 of file manipulatedFrame.cpp.
|
protectedvirtual |
Initiates the ManipulatedFrame mouse manipulation.
Overloading of MouseGrabber::mousePressEvent(). See also mouseMoveEvent() and mouseReleaseEvent().
The mouse behavior depends on which button is pressed. See the QGLViewer mouse page for details.
Reimplemented from qglviewer::MouseGrabber.
Definition at line 305 of file manipulatedFrame.cpp.
|
protectedvirtual |
Stops the ManipulatedFrame mouse manipulation.
Overloading of MouseGrabber::mouseReleaseEvent().
If the action was a QGLViewer::ROTATE QGLViewer::MouseAction, a continuous spinning is possible if the speed of the mouse cursor is larger than spinningSensitivity() when the button is released. Press the rotate button again to stop spinning. See startSpinning() and isSpinning().
Reimplemented from qglviewer::MouseGrabber.
Reimplemented in qglviewer::ManipulatedCameraFrame.
Definition at line 461 of file manipulatedFrame.cpp.
ManipulatedFrame & ManipulatedFrame::operator= | ( | const ManipulatedFrame & | mf | ) |
Equal operator. Calls Frame::operator=() and then copy attributes.
Definition at line 60 of file manipulatedFrame.cpp.
|
inline |
Returns the influence of a mouse displacement on the ManipulatedFrame rotation.
Default value is 1.0. With an identical mouse displacement, a higher value will generate a larger rotation (and inversely for lower values). A 0.0 value will forbid ManipulatedFrame mouse rotation (see also constraint()).
See also setRotationSensitivity(), translationSensitivity(), spinningSensitivity() and wheelSensitivity().
Definition at line 161 of file manipulatedFrame.h.
|
inlineslot |
Defines the rotationSensitivity().
Definition at line 142 of file manipulatedFrame.h.
|
inlineslot |
Defines the spinningQuaternion(). Its axis is defined in the ManipulatedFrame coordinate system.
Definition at line 235 of file manipulatedFrame.h.
|
inlineslot |
Defines the spinningSensitivity(), in pixels per milliseconds.
Definition at line 146 of file manipulatedFrame.h.
|
inlineslot |
Defines the translationSensitivity().
Definition at line 144 of file manipulatedFrame.h.
|
inlineslot |
Defines the wheelSensitivity().
Definition at line 148 of file manipulatedFrame.h.
|
inlineslot |
Defines the zoomSensitivity().
Definition at line 150 of file manipulatedFrame.h.
|
protectedvirtualslot |
Rotates the ManipulatedFrame by its spinningQuaternion(). Called by a timer when the ManipulatedFrame isSpinning().
Definition at line 191 of file manipulatedFrame.cpp.
|
inline |
Returns the incremental rotation that is applied by spin() to the ManipulatedFrame orientation when it isSpinning().
Default value is a null rotation (identity Quaternion). Use setSpinningQuaternion() to change this value.
The spinningQuaternion() axis is defined in the ManipulatedFrame coordinate system. You can use Frame::transformOfFrom() to convert this axis from an other Frame coordinate system.
Definition at line 231 of file manipulatedFrame.h.
|
inline |
Returns the minimum mouse speed required (at button release) to make the ManipulatedFrame spin().
See spin(), spinningQuaternion() and startSpinning() for details.
Mouse speed is expressed in pixels per milliseconds. Default value is 0.3 (300 pixels per second). Use setSpinningSensitivity() to tune this value. A higher value will make spinning more difficult (a value of 100.0 forbids spinning in practice).
See also setSpinningSensitivity(), translationSensitivity(), rotationSensitivity() and wheelSensitivity().
Definition at line 192 of file manipulatedFrame.h.
|
privateslot |
Definition at line 200 of file manipulatedFrame.cpp.
|
signal |
This signal is emitted when the ManipulatedFrame isSpinning().
Note that for the QGLViewer::manipulatedFrame(), this signal is automatically connected to the QGLViewer::update() slot.
Connect this signal to any object that should be notified. Use the QGLViewer::QGLViewerPool() if you need to connect this signal to all the viewers.
See also the manipulated(), modified(), interpolated() and KeyFrameInterpolator::interpolated() signals' documentations.
|
protectedvirtual |
Protected internal method used to handle mouse events.
Reimplemented in qglviewer::ManipulatedCameraFrame.
Definition at line 208 of file manipulatedFrame.cpp.
|
virtualslot |
Starts the spinning of the ManipulatedFrame.
This method starts a timer that will call spin() every updateInterval
milliseconds. The ManipulatedFrame isSpinning() until you call stopSpinning().
Definition at line 183 of file manipulatedFrame.cpp.
|
inlinevirtualslot |
Stops the spinning motion started using startSpinning(). isSpinning() will return false
after this call.
Definition at line 239 of file manipulatedFrame.h.
|
inline |
Returns the influence of a mouse displacement on the ManipulatedFrame translation.
Default value is 1.0. You should not have to modify this value, since with 1.0 the ManipulatedFrame precisely stays under the mouse cursor.
With an identical mouse displacement, a higher value will generate a larger translation (and inversely for lower values). A 0.0 value will forbid ManipulatedFrame mouse translation (see also constraint()).
See also setTranslationSensitivity(), rotationSensitivity(), spinningSensitivity() and wheelSensitivity().
Definition at line 180 of file manipulatedFrame.h.
|
protected |
Returns a normalized wheel delta, proportionnal to wheelSensitivity().
Definition at line 283 of file manipulatedFrame.cpp.
|
protectedvirtual |
Overloading of MouseGrabber::wheelEvent().
Using the wheel is equivalent to a QGLViewer::ZOOM QGLViewer::MouseAction. See QGLViewer::setWheelBinding(), setWheelSensitivity().
Reimplemented from qglviewer::MouseGrabber.
Reimplemented in qglviewer::ManipulatedCameraFrame.
Definition at line 497 of file manipulatedFrame.cpp.
|
inline |
Returns the mouse wheel sensitivity.
Default value is 1.0. A higher value will make the wheel action more efficient (usually meaning a faster zoom). Use a negative value to invert the zoom in and out directions.
See also setWheelSensitivity(), translationSensitivity(), rotationSensitivity() zoomSensitivity() and spinningSensitivity().
Definition at line 209 of file manipulatedFrame.h.
|
private |
Definition at line 288 of file manipulatedFrame.cpp.
|
inline |
Returns the zoom sensitivity.
Default value is 1.0. A higher value will make the zoom faster. Use a negative value to invert the zoom in and out directions.
See also setZoomSensitivity(), translationSensitivity(), rotationSensitivity() wheelSensitivity() and spinningSensitivity().
Definition at line 201 of file manipulatedFrame.h.
|
friend |
Definition at line 99 of file manipulatedFrame.h.
|
friend |
Definition at line 98 of file manipulatedFrame.h.
|
protected |
Definition at line 289 of file manipulatedFrame.h.
|
private |
Definition at line 321 of file manipulatedFrame.h.
|
private |
Definition at line 327 of file manipulatedFrame.h.
|
private |
Definition at line 322 of file manipulatedFrame.h.
|
private |
Definition at line 330 of file manipulatedFrame.h.
|
private |
Definition at line 319 of file manipulatedFrame.h.
|
private |
Definition at line 320 of file manipulatedFrame.h.
|
protected |
Definition at line 303 of file manipulatedFrame.h.
|
protected |
Definition at line 290 of file manipulatedFrame.h.
|
protected |
Definition at line 303 of file manipulatedFrame.h.
|
private |
Definition at line 312 of file manipulatedFrame.h.
|
private |
Definition at line 324 of file manipulatedFrame.h.
|
private |
Definition at line 314 of file manipulatedFrame.h.
|
private |
Definition at line 323 of file manipulatedFrame.h.
|
private |
Definition at line 313 of file manipulatedFrame.h.
|
private |
Definition at line 315 of file manipulatedFrame.h.
|
private |
Definition at line 316 of file manipulatedFrame.h.