<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>libQGLViewer: ManipulatedFrame Class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link rel="shortcut icon" href="../images/qglviewer.ico" type="image/x-icon" /><link rel="icon" href="../images/qglviewer.icon.png" type="image/png" /> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.5 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="../index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> <li> <form action="search.php" method="get"> <table cellspacing="0" cellpadding="0" border="0"> <tr> <td><label> <u>S</u>earch for </label></td> <td><input type="text" name="query" value="" size="20" accesskey="s"/></td> </tr> </table> </form> </li> </ul> </div> </div> </div> <div class="contents"> <h1>ManipulatedFrame Class Reference</h1><!-- doxytag: class="qglviewer::ManipulatedFrame" --><!-- doxytag: inherits="qglviewer::Frame,qglviewer::MouseGrabber" -->A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation...">Frame</a> that can be rotated and translated using the mouse. <a href="#_details">More...</a> <p> Inherits <a class="el" href="classqglviewer_1_1Frame.html">Frame</a>, and <a class="el" href="classqglviewer_1_1MouseGrabber.html">MouseGrabber</a>. <p> Inherited by <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html">ManipulatedCameraFrame</a>. <p> <p> <a href="classqglviewer_1_1ManipulatedFrame-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Manipulation sensitivity</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#239ba71eaf212e169fe31918ed2d9c11">setRotationSensitivity</a> (float sensitivity)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#c0cdf6be7c1443e2e984012490569871">setTranslationSensitivity</a> (float sensitivity)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#a319d217b34f0a861e30d90b78a5c39b">setSpinningSensitivity</a> (float sensitivity)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#fd6cb097279239492a3401893d317499">setWheelSensitivity</a> (float sensitivity)</td></tr> <tr><td colspan="2"><br><h2>Spinning</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classqglviewer_1_1Quaternion.html">Quaternion</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion</a> () const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#aa23ed0375ee472156f439eaee070ec9">setSpinningQuaternion</a> (const <a class="el" href="classqglviewer_1_1Quaternion.html">Quaternion</a> &spinningQuaternion)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning</a> (int updateInterval)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9dc6e4b2c4c4a3ae195dfc39bb2ce8ac">stopSpinning</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin</a> ()</td></tr> <tr><td colspan="2"><br><h2>Current state</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#032c48e2e7cdced01dea0cb7eca14022">isManipulated</a> () const </td></tr> <tr><td colspan="2"><br><h2>MouseGrabber implementation</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#be537c0091ddf3c907ca0e32861d701d">checkIfGrabsMouse</a> (int x, int y, const <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td colspan="2"><br><h2>XML representation</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual QDomElement </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#48e0e2dd26cd96418c8b889ceabe80f6">domElement</a> (const QString &name, QDomDocument &document) const </td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#cd13d2ddeca530cb9f26ead47f7d25d3">initFromDOMElement</a> (const QDomElement &element)</td></tr> <tr><td colspan="2"><br><h2>Mouse event handlers</h2></td></tr> <tr><td colspan="2"><br><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9b4cce9d77e0495202100a8f1055f1f3">mousePressEvent</a> (QMouseEvent *const event, <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#609d287c3721aff697068efa3dfc4b4c">mouseMoveEvent</a> (QMouseEvent *const event, <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#ec95b0f05a05c1cdfc940ef4621d5db3">mouseReleaseEvent</a> (QMouseEvent *const event, <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#866619719201540ace1f05a1f8b1f156">mouseDoubleClickEvent</a> (QMouseEvent *const event, <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#e5e5914dbdcba274fc9f58c558ba6a36">wheelEvent</a> (QWheelEvent *const event, <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const camera)</td></tr> <tr><td colspan="2"><br><h2>Signals</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#841d6d550acbe6e9103c32ac3b75c0c2">manipulated</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#8e3a52ff9f948f42269cab711bb92b5c">spun</a> ()</td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1e9e849ecaeee6226bfb615d7a74a091">ManipulatedFrame</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#e2ffc5f93122c6628e80dc254977c4cf">~ManipulatedFrame</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9b1534a226c056993bc9ed594de9cc7e">ManipulatedFrame</a> (const ManipulatedFrame &mf)</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">ManipulatedFrame & </td><td class="memItemRight" valign="bottom"><a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d6d13eba8611869fe824da2dab500f50">operator=</a> (const ManipulatedFrame &mf)</td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation...">Frame</a> that can be rotated and translated using the mouse. <p> It converts the mouse motion into a translation and an orientation updates. A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is used to move an object in the scene. Combined with object selection, its <a class="el" href="classqglviewer_1_1MouseGrabber.html" title="Abstract class for objects that grab mouse focus in a QGLViewer.">MouseGrabber</a> properties and a dynamic update of the scene, the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> introduces a great reactivity in your applications.<p> A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is attached to a <a class="el" href="classQGLViewer.html" title="A versatile 3D OpenGL viewer based on QGLWidget.">QGLViewer</a> using <a class="el" href="classQGLViewer.html#c6964ec1ebb2f42464313e0c43e767a3">QGLViewer::setManipulatedFrame()</a>: <div class="fragment"><pre class="fragment"> init() { setManipulatedFrame( <span class="keyword">new</span> <a class="code" href="classqglviewer_1_1ManipulatedFrame.html#1e9e849ecaeee6226bfb615d7a74a091">ManipulatedFrame</a>() ); } draw() { glPushMatrix(); glMultMatrixd(manipulatedFrame()-><a class="code" href="classqglviewer_1_1Frame.html#a12123cf45f68b9f7fe0526b70ab0047">matrix</a>()); <span class="comment">// draw the manipulated object here</span> glPopMatrix(); } </pre></div> See the <a href="../examples/manipulatedFrame.html">manipulatedFrame example</a> for a complete application.<p> Mouse events are normally sent to the <a class="el" href="classQGLViewer.html#27a9e97573822d296b48e1c408b74042">QGLViewer::camera()</a>. You have to press the <a class="el" href="classQGLViewer.html#5b90ab220b7700ca28db5ecf3217325d200c1bcf1eaa8635daa3cbb5fdd2ebb6">FRAME</a> state key (default is <code>Control</code>) to move the <a class="el" href="classQGLViewer.html#ba8c9c519574192fb7197bdbad8049db">QGLViewer::manipulatedFrame()</a> instead. See the <a href="../mouse.html">mouse page</a> for a description of mouse button bindings.<p> <h3>Inherited functionalities</h3> <p> A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is an overloaded instance of a <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation...">Frame</a>. The powerful coordinate system transformation functions (<a class="el" href="classqglviewer_1_1Frame.html#c706b338b08d9d7b511fd84d0b6ecf96">Frame::coordinatesOf()</a>, <a class="el" href="classqglviewer_1_1Frame.html#05a3e18419f02427366a95b1e299f12e">Frame::transformOf()</a>, ...) can hence be applied to a <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a>.<p> A <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is also a <a class="el" href="classqglviewer_1_1MouseGrabber.html" title="Abstract class for objects that grab mouse focus in a QGLViewer.">MouseGrabber</a>. If the mouse cursor gets within a distance of 10 pixels from the projected position of the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a>, the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> becomes the new <a class="el" href="classQGLViewer.html#6c834adafd727025b63741dd27cb6925">QGLViewer::mouseGrabber()</a>. 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 <a href="../examples/mouseGrabber.html">mouseGrabber example</a> as an illustration. Note that QWidget::setMouseTracking() needs to be enabled in order to use this feature (see the <a class="el" href="classqglviewer_1_1MouseGrabber.html" title="Abstract class for objects that grab mouse focus in a QGLViewer.">MouseGrabber</a> documentation).<p> <h3>Advanced functionalities</h3> <p> A <a class="el" href="classQGLViewer.html" title="A versatile 3D OpenGL viewer based on QGLWidget.">QGLViewer</a> can handle at most one <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> 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 <a class="el" href="classQGLViewer.html#c6964ec1ebb2f42464313e0c43e767a3">QGLViewer::setManipulatedFrame()</a>) when needed. This can for instance be done according to an object selection: see the <a href="../examples/luxo.html">luxo example</a> for an illustration.<p> When the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is being manipulated using the mouse (mouse pressed and not yet released), <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#032c48e2e7cdced01dea0cb7eca14022">isManipulated()</a> returns <code>true</code>. This might be used to trigger a specific action or display (as is done with <a class="el" href="classQGLViewer.html#8b6601997fe7a83e7cd041104d4b21d2">QGLViewer::fastDraw()</a>).<p> The <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> also emits a <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#841d6d550acbe6e9103c32ac3b75c0c2">manipulated()</a> signal each time its state is modified by the mouse. This signal is automatically connected to the <a class="el" href="classQGLViewer.html#e12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is attached to a viewer using <a class="el" href="classQGLViewer.html#c6964ec1ebb2f42464313e0c43e767a3">QGLViewer::setManipulatedFrame()</a>.<p> You can make the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a> if you release the rotation mouse button while moving the mouse fast enough (see <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a>). See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a> for sensitivity tuning. <hr><h2>Constructor & Destructor Documentation</h2> <a class="anchor" name="1e9e849ecaeee6226bfb615d7a74a091"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::ManipulatedFrame" ref="1e9e849ecaeee6226bfb615d7a74a091" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">ManipulatedFrame </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Default constructor.<p> The translation is set to (0,0,0), with an identity rotation (0,0,0,1) (see <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation...">Frame</a> constructor for details).<p> The different sensitivities are set to their default values (see <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity()</a>). </div> </div><p> <a class="anchor" name="e2ffc5f93122c6628e80dc254977c4cf"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::~ManipulatedFrame" ref="e2ffc5f93122c6628e80dc254977c4cf" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual ~ManipulatedFrame </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Virtual destructor. Empty. </div> </div><p> <a class="anchor" name="9b1534a226c056993bc9ed594de9cc7e"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::ManipulatedFrame" ref="9b1534a226c056993bc9ed594de9cc7e" args="(const ManipulatedFrame &mf)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">ManipulatedFrame </td> <td>(</td> <td class="paramtype">const ManipulatedFrame & </td> <td class="paramname"> <em>mf</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Copy constructor. Performs a deep copy of all attributes using <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d6d13eba8611869fe824da2dab500f50">operator=()</a>. </div> </div><p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="d6d13eba8611869fe824da2dab500f50"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::operator=" ref="d6d13eba8611869fe824da2dab500f50" args="(const ManipulatedFrame &mf)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">ManipulatedFrame & operator= </td> <td>(</td> <td class="paramtype">const ManipulatedFrame & </td> <td class="paramname"> <em>mf</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table> </div> <div class="memdoc"> <p> Equal operator. Calls <a class="el" href="classqglviewer_1_1Frame.html#eb0f5ceffbb62f990b89b200d6ce728c">Frame::operator=()</a> and then copy attributes. </div> </div><p> <a class="anchor" name="841d6d550acbe6e9103c32ac3b75c0c2"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::manipulated" ref="841d6d550acbe6e9103c32ac3b75c0c2" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void manipulated </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [signal]</code></td> </tr> </table> </div> <div class="memdoc"> <p> This signal is emitted when ever the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is manipulated (i.e. rotated or translated) using the mouse. Connect this signal to any object that should be notified.<p> Note that this signal is automatically connected to the <a class="el" href="classQGLViewer.html#e12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot, when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is attached to a viewer using <a class="el" href="classQGLViewer.html#c6964ec1ebb2f42464313e0c43e767a3">QGLViewer::setManipulatedFrame()</a>, which is probably all you need.<p> Use the <a class="el" href="classQGLViewer.html#32d7a506084c50fd97a24f94d9ca4864">QGLViewer::QGLViewerPool()</a> if you need to connect this signal to all the viewers.<p> See also the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#8e3a52ff9f948f42269cab711bb92b5c">spun()</a>, <a class="el" href="classqglviewer_1_1Frame.html#b6722375e68e03d151762ebfc83c5459">modified()</a>, <a class="el" href="classqglviewer_1_1Frame.html#b55c2a4f1732b90057fae4b6037399de">interpolated()</a> and <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#b55c2a4f1732b90057fae4b6037399de">KeyFrameInterpolator::interpolated()</a> signals' documentations. </div> </div><p> <a class="anchor" name="8e3a52ff9f948f42269cab711bb92b5c"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::spun" ref="8e3a52ff9f948f42269cab711bb92b5c" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void spun </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [signal]</code></td> </tr> </table> </div> <div class="memdoc"> <p> This signal is emitted when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a>.<p> Note that for the <a class="el" href="classQGLViewer.html#ba8c9c519574192fb7197bdbad8049db">QGLViewer::manipulatedFrame()</a>, this signal is automatically connected to the <a class="el" href="classQGLViewer.html#e12b7378efbffabc24a133ca1deb19ae">QGLViewer::updateGL()</a> slot.<p> Connect this signal to any object that should be notified. Use the <a class="el" href="classQGLViewer.html#32d7a506084c50fd97a24f94d9ca4864">QGLViewer::QGLViewerPool()</a> if you need to connect this signal to all the viewers.<p> See also the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#841d6d550acbe6e9103c32ac3b75c0c2">manipulated()</a>, <a class="el" href="classqglviewer_1_1Frame.html#b6722375e68e03d151762ebfc83c5459">modified()</a>, <a class="el" href="classqglviewer_1_1Frame.html#b55c2a4f1732b90057fae4b6037399de">interpolated()</a> and <a class="el" href="classqglviewer_1_1KeyFrameInterpolator.html#b55c2a4f1732b90057fae4b6037399de">KeyFrameInterpolator::interpolated()</a> signals' documentations. </div> </div><p> <a class="anchor" name="239ba71eaf212e169fe31918ed2d9c11"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::setRotationSensitivity" ref="239ba71eaf212e169fe31918ed2d9c11" args="(float sensitivity)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setRotationSensitivity </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"> <em>sensitivity</em> </td> <td> ) </td> <td width="100%"><code> [slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Defines the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a>. </div> </div><p> <a class="anchor" name="c0cdf6be7c1443e2e984012490569871"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::setTranslationSensitivity" ref="c0cdf6be7c1443e2e984012490569871" args="(float sensitivity)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setTranslationSensitivity </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"> <em>sensitivity</em> </td> <td> ) </td> <td width="100%"><code> [slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Defines the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>. </div> </div><p> <a class="anchor" name="a319d217b34f0a861e30d90b78a5c39b"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::setSpinningSensitivity" ref="a319d217b34f0a861e30d90b78a5c39b" args="(float sensitivity)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setSpinningSensitivity </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"> <em>sensitivity</em> </td> <td> ) </td> <td width="100%"><code> [slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Defines the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a>, in pixels per milliseconds. </div> </div><p> <a class="anchor" name="fd6cb097279239492a3401893d317499"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::setWheelSensitivity" ref="fd6cb097279239492a3401893d317499" args="(float sensitivity)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setWheelSensitivity </td> <td>(</td> <td class="paramtype">float </td> <td class="paramname"> <em>sensitivity</em> </td> <td> ) </td> <td width="100%"><code> [slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Defines the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity()</a>. </div> </div><p> <a class="anchor" name="4573c3414e63c10dec06a3064d37532f"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::rotationSensitivity" ref="4573c3414e63c10dec06a3064d37532f" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float rotationSensitivity </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns the influence of a mouse displacement on the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> rotation.<p> 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 <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> mouse rotation (see also <a class="el" href="classqglviewer_1_1Frame.html#0974dfe336ed84a20adb8c6cdf8dedd9">constraint()</a>).<p> See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#239ba71eaf212e169fe31918ed2d9c11">setRotationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity()</a>. </div> </div><p> <a class="anchor" name="28fd6b0ca560be97bb899e1a7e3c821a"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::translationSensitivity" ref="28fd6b0ca560be97bb899e1a7e3c821a" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float translationSensitivity </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns the influence of a mouse displacement on the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> translation.<p> Default value is 1.0. You should not have to modify this value, since with 1.0 the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> precisely stays under the mouse cursor.<p> With an identical mouse displacement, a higher value will generate a larger translation (and inversely for lower values). A 0.0 value will forbid <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> mouse translation (see also <a class="el" href="classqglviewer_1_1Frame.html#0974dfe336ed84a20adb8c6cdf8dedd9">constraint()</a>).<p> <dl class="note" compact><dt><b>Note:</b></dt><dd>When the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is used to move a <em><a class="el" href="classqglviewer_1_1Camera.html" title="A perspective or orthographic camera.">Camera</a></em> (see the <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html" title="The ManipulatedCameraFrame class represents a ManipulatedFrame with Camera specific...">ManipulatedCameraFrame</a> class documentation), after zooming on a small region of your scene, the camera may translate too fast. For a camera, it is the <a class="el" href="classqglviewer_1_1Camera.html#fd168442e2a05bd41881936fb722b5fe">Camera::revolveAroundPoint()</a> that exactly matches the mouse displacement. Hence, instead of changing the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>, solve the problem by (temporarily) setting the <a class="el" href="classqglviewer_1_1Camera.html#fd168442e2a05bd41881936fb722b5fe">Camera::revolveAroundPoint()</a> to a point on the zoomed region (see the <a class="el" href="classQGLViewer.html#85fe75121d351785616b75b2c5661d8f6423101303db857a4217e8e66606128a">RAP_FROM_PIXEL</a> mouse binding in the <a href="../mouse.html">mouse page</a>).</dd></dl> See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#c0cdf6be7c1443e2e984012490569871">setTranslationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity()</a>. </div> </div><p> <a class="anchor" name="1025480797d5dd046d6d717de59ffbca"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::spinningSensitivity" ref="1025480797d5dd046d6d717de59ffbca" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float spinningSensitivity </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns the minimum mouse speed required (at button release) to make the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a>.<p> See <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning()</a> for details.<p> Mouse speed is expressed in pixels per milliseconds. Default value is 0.3 (300 pixels per second). Use <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#a319d217b34f0a861e30d90b78a5c39b">setSpinningSensitivity()</a> to tune this value. A higher value will make spinning more difficult (a value of 100.0 forbids spinning in practice).<p> See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#a319d217b34f0a861e30d90b78a5c39b">setSpinningSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#d9e7fc4134c9733e8cfecf8bf80dbd44">wheelSensitivity()</a>. </div> </div><p> <a class="anchor" name="d9e7fc4134c9733e8cfecf8bf80dbd44"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::wheelSensitivity" ref="d9e7fc4134c9733e8cfecf8bf80dbd44" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">float wheelSensitivity </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns the mouse wheel sensitivity.<p> 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.<p> See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#fd6cb097279239492a3401893d317499">setWheelSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#28fd6b0ca560be97bb899e1a7e3c821a">translationSensitivity()</a>, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#4573c3414e63c10dec06a3064d37532f">rotationSensitivity()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a>. </div> </div><p> <a class="anchor" name="975dfbf6b972b7128520b30a4ffe11dd"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::isSpinning" ref="975dfbf6b972b7128520b30a4ffe11dd" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">bool isSpinning </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns <code>true</code> when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is spinning.<p> During spinning, <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a> rotates the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> by its <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion()</a> at a frequency defined when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning()</a>.<p> Use <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9dc6e4b2c4c4a3ae195dfc39bb2ce8ac">stopSpinning()</a> to change this state. Default value is <code>false</code>. </div> </div><p> <a class="anchor" name="7b8b14da64c84fed1cbdb8d98191d276"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::spinningQuaternion" ref="7b8b14da64c84fed1cbdb8d98191d276" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classqglviewer_1_1Quaternion.html">Quaternion</a> spinningQuaternion </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns the incremental rotation that is applied by <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a> to the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> orientation when it <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a>.<p> Default value is a null rotation (identity <a class="el" href="classqglviewer_1_1Quaternion.html" title="The Quaternion class represents 3D rotations and orientations.">Quaternion</a>). Use <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#aa23ed0375ee472156f439eaee070ec9">setSpinningQuaternion()</a> to change this value.<p> The <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion()</a> axis is defined in the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> coordinate system. You can use <a class="el" href="classqglviewer_1_1Frame.html#3416ca5a53c1f2d932fca1906ec1c6c7">Frame::transformOfFrom()</a> to convert this axis from an other <a class="el" href="classqglviewer_1_1Frame.html" title="The Frame class represents a coordinate system, defined by a position and an orientation...">Frame</a> coordinate system. </div> </div><p> <a class="anchor" name="aa23ed0375ee472156f439eaee070ec9"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::setSpinningQuaternion" ref="aa23ed0375ee472156f439eaee070ec9" args="(const Quaternion &spinningQuaternion)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setSpinningQuaternion </td> <td>(</td> <td class="paramtype">const <a class="el" href="classqglviewer_1_1Quaternion.html">Quaternion</a> & </td> <td class="paramname"> <em>spinningQuaternion</em> </td> <td> ) </td> <td width="100%"><code> [slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Defines the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion()</a>. Its axis is defined in the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> coordinate system. </div> </div><p> <a class="anchor" name="9942b6eab3fb197805f7af7e0edfdccf"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::startSpinning" ref="9942b6eab3fb197805f7af7e0edfdccf" args="(int updateInterval)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void startSpinning </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"> <em>updateInterval</em> </td> <td> ) </td> <td width="100%"><code> [virtual, slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Starts the spinning of the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a>.<p> This method starts a timer that will call <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#f87828117d0582d0031f563933f97bfd">spin()</a> every <code>updateInterval</code> milliseconds. The <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a> until you call <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9dc6e4b2c4c4a3ae195dfc39bb2ce8ac">stopSpinning()</a>. </div> </div><p> <a class="anchor" name="9dc6e4b2c4c4a3ae195dfc39bb2ce8ac"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::stopSpinning" ref="9dc6e4b2c4c4a3ae195dfc39bb2ce8ac" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">virtual void stopSpinning </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [virtual, slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Stops the spinning motion started using <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning()</a>. <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a> will return <code>false</code> after this call. </div> </div><p> <a class="anchor" name="f87828117d0582d0031f563933f97bfd"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::spin" ref="f87828117d0582d0031f563933f97bfd" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void spin </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"><code> [protected, virtual, slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Rotates the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> by its <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#7b8b14da64c84fed1cbdb8d98191d276">spinningQuaternion()</a>. Called by a timer when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a>. <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#f87828117d0582d0031f563933f97bfd">ManipulatedCameraFrame</a>.</p> </div> </div><p> <a class="anchor" name="9b4cce9d77e0495202100a8f1055f1f3"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::mousePressEvent" ref="9b4cce9d77e0495202100a8f1055f1f3" args="(QMouseEvent *const event, Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mousePressEvent </td> <td>(</td> <td class="paramtype">QMouseEvent *const </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [protected, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Initiates the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> mouse manipulation.<p> Overloading of <a class="el" href="classqglviewer_1_1MouseGrabber.html#56df172a6eff56ecc1a99d2e7d548d31">MouseGrabber::mousePressEvent()</a>. See also <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#609d287c3721aff697068efa3dfc4b4c">mouseMoveEvent()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#ec95b0f05a05c1cdfc940ef4621d5db3">mouseReleaseEvent()</a>.<p> The mouse behavior depends on which button is pressed. See the <a href="../mouse.html">QGLViewer mouse page</a> for details. <p>Reimplemented from <a class="el" href="classqglviewer_1_1MouseGrabber.html#56df172a6eff56ecc1a99d2e7d548d31">MouseGrabber</a>.</p> </div> </div><p> <a class="anchor" name="609d287c3721aff697068efa3dfc4b4c"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::mouseMoveEvent" ref="609d287c3721aff697068efa3dfc4b4c" args="(QMouseEvent *const event, Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mouseMoveEvent </td> <td>(</td> <td class="paramtype">QMouseEvent *const </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [protected, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Modifies the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> according to the mouse motion.<p> Actual behavior depends on mouse bindings. See the <a class="el" href="classQGLViewer.html#ded669cb17515ea2b5971496f9aef875">QGLViewer::MouseAction</a> enum and the <a href="../mouse.html">QGLViewer mouse page</a> for details.<p> The <code>camera</code> is used to fit the mouse motion with the display parameters (see <a class="el" href="classqglviewer_1_1Camera.html#80386c5943505b915246563262825d8e">Camera::screenWidth()</a>, <a class="el" href="classqglviewer_1_1Camera.html#9fb925ffbf82e93898ae6db366a8d794">Camera::screenHeight()</a>, <a class="el" href="classqglviewer_1_1Camera.html#89f1a2e62f7edf51de2d1c077ea5d330">Camera::fieldOfView()</a>).<p> Emits the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#841d6d550acbe6e9103c32ac3b75c0c2">manipulated()</a> signal. <p>Reimplemented from <a class="el" href="classqglviewer_1_1MouseGrabber.html#6e2baf9735a27e4c8a928518cc273d5c">MouseGrabber</a>.</p> <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#609d287c3721aff697068efa3dfc4b4c">ManipulatedCameraFrame</a>.</p> </div> </div><p> <a class="anchor" name="ec95b0f05a05c1cdfc940ef4621d5db3"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::mouseReleaseEvent" ref="ec95b0f05a05c1cdfc940ef4621d5db3" args="(QMouseEvent *const event, Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mouseReleaseEvent </td> <td>(</td> <td class="paramtype">QMouseEvent *const </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [protected, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Stops the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> mouse manipulation.<p> Overloading of <a class="el" href="classqglviewer_1_1MouseGrabber.html#2e07bf5f7c6c96f40e7f1d1fdb031b0c">MouseGrabber::mouseReleaseEvent()</a>.<p> If the action was a <a class="el" href="classQGLViewer.html#ded669cb17515ea2b5971496f9aef8753dcfe0046eb5876e287dbf0914819b16">ROTATE</a> <a class="el" href="classQGLViewer.html#ded669cb17515ea2b5971496f9aef875">QGLViewer::MouseAction</a>, a continuous spinning is possible if the speed of the mouse cursor is larger than <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1025480797d5dd046d6d717de59ffbca">spinningSensitivity()</a> when the button is released. Press the rotate button again to stop spinning. See <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#9942b6eab3fb197805f7af7e0edfdccf">startSpinning()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#975dfbf6b972b7128520b30a4ffe11dd">isSpinning()</a>. <p>Reimplemented from <a class="el" href="classqglviewer_1_1MouseGrabber.html#2e07bf5f7c6c96f40e7f1d1fdb031b0c">MouseGrabber</a>.</p> <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#ec95b0f05a05c1cdfc940ef4621d5db3">ManipulatedCameraFrame</a>.</p> </div> </div><p> <a class="anchor" name="866619719201540ace1f05a1f8b1f156"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::mouseDoubleClickEvent" ref="866619719201540ace1f05a1f8b1f156" args="(QMouseEvent *const event, Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void mouseDoubleClickEvent </td> <td>(</td> <td class="paramtype">QMouseEvent *const </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [protected, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Overloading of <a class="el" href="classqglviewer_1_1MouseGrabber.html#7c092390bad31d7f73ea474667159859">MouseGrabber::mouseDoubleClickEvent()</a>.<p> Left button double click aligns the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> with the <code>camera</code> axis (see <a class="el" href="classqglviewer_1_1Frame.html#352fc1d1f806653677eabcdb8a5eb898">alignWithFrame()</a> and <a class="el" href="classQGLViewer.html#85fe75121d351785616b75b2c5661d8f3d318f59bc81979e3922c7e716085304">ALIGN_FRAME</a>). Right button projects the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> on the <code>camera</code> view direction. <p>Reimplemented from <a class="el" href="classqglviewer_1_1MouseGrabber.html#7c092390bad31d7f73ea474667159859">MouseGrabber</a>.</p> </div> </div><p> <a class="anchor" name="e5e5914dbdcba274fc9f58c558ba6a36"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::wheelEvent" ref="e5e5914dbdcba274fc9f58c558ba6a36" args="(QWheelEvent *const event, Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void wheelEvent </td> <td>(</td> <td class="paramtype">QWheelEvent *const </td> <td class="paramname"> <em>event</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [protected, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Overloading of <a class="el" href="classqglviewer_1_1MouseGrabber.html#07a7d880d107f0b532ef779b29884e08">MouseGrabber::wheelEvent()</a>.<p> Using the wheel is equivalent to a <a class="el" href="classQGLViewer.html#ded669cb17515ea2b5971496f9aef875604adefe799fe794cab6b76ed1108201">ZOOM</a> <a class="el" href="classQGLViewer.html#ded669cb17515ea2b5971496f9aef875">QGLViewer::MouseAction</a>. See <a class="el" href="classQGLViewer.html#4198b3b668c342e39752bade04f78c64">QGLViewer::setWheelBinding()</a> and <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#fd6cb097279239492a3401893d317499">setWheelSensitivity()</a>. <p>Reimplemented from <a class="el" href="classqglviewer_1_1MouseGrabber.html#07a7d880d107f0b532ef779b29884e08">MouseGrabber</a>.</p> <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#e5e5914dbdcba274fc9f58c558ba6a36">ManipulatedCameraFrame</a>.</p> </div> </div><p> <a class="anchor" name="032c48e2e7cdced01dea0cb7eca14022"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::isManipulated" ref="032c48e2e7cdced01dea0cb7eca14022" args="() const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">bool isManipulated </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td width="100%"> const</td> </tr> </table> </div> <div class="memdoc"> <p> Returns <code>true</code> when the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> is being manipulated with the mouse.<p> Can be used to change the display of the manipulated object during manipulation.<p> When <a class="el" href="classqglviewer_1_1Camera.html#d367db656b03fe0bc87b021801d66b75">Camera::frame()</a> of the <a class="el" href="classQGLViewer.html#27a9e97573822d296b48e1c408b74042">QGLViewer::camera()</a> <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#032c48e2e7cdced01dea0cb7eca14022">isManipulated()</a>, <a class="el" href="classQGLViewer.html#8b6601997fe7a83e7cd041104d4b21d2">QGLViewer::fastDraw()</a> is used in place of <a class="el" href="classQGLViewer.html#bc45d04e5f5ce1fbd68f920fcdb2d0e0">QGLViewer::draw()</a> for scene rendering. A simplified drawing will then allow for interactive camera displacements. </div> </div><p> <a class="anchor" name="be537c0091ddf3c907ca0e32861d701d"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::checkIfGrabsMouse" ref="be537c0091ddf3c907ca0e32861d701d" args="(int x, int y, const Camera *const camera)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void checkIfGrabsMouse </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"> <em>x</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>y</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="classqglviewer_1_1Camera.html">Camera</a> *const </td> <td class="paramname"> <em>camera</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"><code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Implementation of the <a class="el" href="classqglviewer_1_1MouseGrabber.html" title="Abstract class for objects that grab mouse focus in a QGLViewer.">MouseGrabber</a> main method.<p> The <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> <a class="el" href="classqglviewer_1_1MouseGrabber.html#4eb7e14d035ae255b77ac1711aef039e">grabsMouse()</a> when the mouse is within a 10 pixels region around its <a class="el" href="classqglviewer_1_1Camera.html#c4dc649d17bd2ae8664a7f4fdd50360f">Camera::projectedCoordinatesOf()</a> <a class="el" href="classqglviewer_1_1Frame.html#bc38a05a597e07c9ff525122682adc50">position()</a>.<p> See the <a href="../examples/mouseGrabber.html">mouseGrabber example</a> for an illustration. <p>Implements <a class="el" href="classqglviewer_1_1MouseGrabber.html#6110636d4e031373ecebd42c6ea838ea">MouseGrabber</a>.</p> </div> </div><p> <a class="anchor" name="48e0e2dd26cd96418c8b889ceabe80f6"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::domElement" ref="48e0e2dd26cd96418c8b889ceabe80f6" args="(const QString &name, QDomDocument &document) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">QDomElement domElement </td> <td>(</td> <td class="paramtype">const QString & </td> <td class="paramname"> <em>name</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">QDomDocument & </td> <td class="paramname"> <em>document</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"> const<code> [virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Returns an XML <code>QDomElement</code> that represents the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a>.<p> Adds to the <a class="el" href="classqglviewer_1_1Frame.html#48e0e2dd26cd96418c8b889ceabe80f6">Frame::domElement()</a> the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> specific informations in a <code>ManipulatedParameters</code> child QDomElement.<p> <code>name</code> is the name of the QDomElement tag. <code>doc</code> is the <code>QDomDocument</code> factory used to create QDomElement.<p> Use <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#cd13d2ddeca530cb9f26ead47f7d25d3">initFromDOMElement()</a> to restore the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> state from the resulting <code>QDomElement</code>.<p> See <a class="el" href="classqglviewer_1_1Vec.html#48e0e2dd26cd96418c8b889ceabe80f6">Vec::domElement()</a> for a complete example. See also <a class="el" href="classqglviewer_1_1Quaternion.html#48e0e2dd26cd96418c8b889ceabe80f6">Quaternion::domElement()</a>, <a class="el" href="classqglviewer_1_1Camera.html#48e0e2dd26cd96418c8b889ceabe80f6">Camera::domElement()</a>... <p>Reimplemented from <a class="el" href="classqglviewer_1_1Frame.html#48e0e2dd26cd96418c8b889ceabe80f6">Frame</a>.</p> <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#48e0e2dd26cd96418c8b889ceabe80f6">ManipulatedCameraFrame</a>.</p> </div> </div><p> <a class="anchor" name="cd13d2ddeca530cb9f26ead47f7d25d3"></a><!-- doxytag: member="qglviewer::ManipulatedFrame::initFromDOMElement" ref="cd13d2ddeca530cb9f26ead47f7d25d3" args="(const QDomElement &element)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void initFromDOMElement </td> <td>(</td> <td class="paramtype">const QDomElement & </td> <td class="paramname"> <em>element</em> </td> <td> ) </td> <td width="100%"><code> [virtual, slot]</code></td> </tr> </table> </div> <div class="memdoc"> <p> Restores the <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> state from a <code>QDomElement</code> created by <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#48e0e2dd26cd96418c8b889ceabe80f6">domElement()</a>.<p> Fields that are not described in <code>element</code> are set to their default values (see <a class="el" href="classqglviewer_1_1ManipulatedFrame.html#1e9e849ecaeee6226bfb615d7a74a091">ManipulatedFrame()</a>).<p> First calls <a class="el" href="classqglviewer_1_1Frame.html#cd13d2ddeca530cb9f26ead47f7d25d3">Frame::initFromDOMElement()</a> and then initializes <a class="el" href="classqglviewer_1_1ManipulatedFrame.html" title="A ManipulatedFrame is a Frame that can be rotated and translated using the mouse...">ManipulatedFrame</a> specific parameters. Note that <a class="el" href="classqglviewer_1_1Frame.html#0974dfe336ed84a20adb8c6cdf8dedd9">constraint()</a> and <a class="el" href="classqglviewer_1_1Frame.html#9794b079db5f492e8804631d3d23baec">referenceFrame()</a> are not restored and are left unchanged.<p> See <a class="el" href="classqglviewer_1_1Vec.html#cd13d2ddeca530cb9f26ead47f7d25d3">Vec::initFromDOMElement()</a> for a complete code example. <p>Reimplemented from <a class="el" href="classqglviewer_1_1Frame.html#cd13d2ddeca530cb9f26ead47f7d25d3">Frame</a>.</p> <p>Reimplemented in <a class="el" href="classqglviewer_1_1ManipulatedCameraFrame.html#cd13d2ddeca530cb9f26ead47f7d25d3">ManipulatedCameraFrame</a>.</p> </div> </div><p> </div> <hr size="1"><address style="text-align: right;"><small>libQGLViewer 2.3.1 documentation generated by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.5 </small></address> </body> </html>