Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 350eb50c9ea7f887b47954b9fc238f01 > files > 27

libQGLViewer-doc-2.3.6-1.fc14.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>libQGLViewer manipulatedFrame example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="../qglviewer.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" />
</head>
<body>

<div class="banner">
 <a class="qindex" href="../index.html">Home</a>
 <a class="qindex" href="../refManual/hierarchy.html">Documentation</a>
 <a class="qindex" href="../download.html">Download</a>
 <a class="qindex highlight" href="index.html">Examples</a>
 <a class="qindex" href="../developer.html">Developer</a>
</div>

<h1>The manipulatedFrame example</h1>

<center>
  <img src="../images/manipulatedFrame.jpg" width="330" height="228" alt="manipulatedFrame"/>
</center>

<p>
 A <code>ManipulatedFrame</code> can be moved with the mouse in the scene.
</p>
<p>
 A ManipulatedFrame converts mouse gestures into Frame displacements. Adding two lines of code will
 allow you to move any object of your scene using the mouse. The button bindings of the
 ManipulatedFrame are the same as for the camera. Spinning is possible.
</p>
<p>
 The frame is drawn at its position using a <code>glMultMatrix</code> of the frame associated
 matrix(). This matrix is changed when the mouse moves, thus changing the position of the frame.
</p>
<h2>manipulatedFrame.h</h2>
<!-- Generator: GNU source-highlight 3.0.1
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;QGLViewer/qglviewer.h&gt;</font>

<b><font color="#0000FF">class</font></b> <font color="#008080">Viewer</font> <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> QGLViewer
<font color="#FF0000">{</font>
<b><font color="#0000FF">protected</font></b> <font color="#990000">:</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">init</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">draw</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#008080">QString</font> <b><font color="#000000">helpString</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>manipulatedFrame.cpp</h2>
<!-- Generator: GNU source-highlight 3.0.1
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"manipulatedFrame.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;math.h&gt;</font>

<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> qglviewer<font color="#990000">;</font>
<b><font color="#0000FF">using</font></b> <b><font color="#0000FF">namespace</font></b> std<font color="#990000">;</font>

<b><font color="#0000FF">static</font></b> <font color="#009900">void</font> <b><font color="#000000">drawSpiral</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nbSteps <font color="#990000">=</font> <font color="#993399">200.0</font><font color="#990000">;</font>
  <b><font color="#000000">glBegin</font></b><font color="#990000">(</font>GL_QUAD_STRIP<font color="#990000">);</font>
  <b><font color="#0000FF">for</font></b> <font color="#990000">(</font><font color="#009900">float</font> i<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> i<font color="#990000">&lt;</font>nbSteps<font color="#990000">;</font> <font color="#990000">++</font>i<font color="#990000">)</font>
    <font color="#FF0000">{</font>
      <font color="#009900">float</font> ratio <font color="#990000">=</font> i<font color="#990000">/</font>nbSteps<font color="#990000">;</font>
      <font color="#009900">float</font> angle <font color="#990000">=</font> <font color="#993399">21.0</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> c <font color="#990000">=</font> <b><font color="#000000">cos</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <font color="#009900">float</font> s <font color="#990000">=</font> <b><font color="#000000">sin</font></b><font color="#990000">(</font>angle<font color="#990000">);</font>
      <font color="#009900">float</font> r1 <font color="#990000">=</font> <font color="#993399">1.0</font> <font color="#990000">-</font> <font color="#993399">0.8</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> r2 <font color="#990000">=</font> <font color="#993399">0.8</font> <font color="#990000">-</font> <font color="#993399">0.8</font><font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> alt <font color="#990000">=</font> ratio <font color="#990000">-</font> <font color="#993399">0.5</font><font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nor <font color="#990000">=</font> <font color="#990000">.</font><font color="#993399">5</font><font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> up <font color="#990000">=</font> <b><font color="#000000">sqrt</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>nor<font color="#990000">*</font>nor<font color="#990000">);</font>
      <b><font color="#000000">glColor3f</font></b><font color="#990000">(</font><font color="#993399">1.0</font><font color="#990000">-</font>ratio<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>2f <font color="#990000">,</font> ratio<font color="#990000">);</font>
      <b><font color="#000000">glNormal3f</font></b><font color="#990000">(</font>nor<font color="#990000">*</font>c<font color="#990000">,</font> up<font color="#990000">,</font> nor<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r1<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">,</font> r1<font color="#990000">*</font>s<font color="#990000">);</font>
      <b><font color="#000000">glVertex3f</font></b><font color="#990000">(</font>r2<font color="#990000">*</font>c<font color="#990000">,</font> alt<font color="#990000">+</font><font color="#993399">0.05</font><font color="#990000">,</font> r2<font color="#990000">*</font>s<font color="#990000">);</font>
    <font color="#FF0000">}</font>
  <b><font color="#000000">glEnd</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">init</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Swap the CAMERA and FRAME state keys (NoButton and Control)</font></i>
  <i><font color="#9A1900">// Save CAMERA binding first. See setHandlerKeyboardModifiers() documentation.</font></i>
<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&lt;</font> <font color="#993399">0x040000</font>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>CAMERA<font color="#990000">,</font> Qt<font color="#990000">::</font>AltButton<font color="#990000">);</font>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>FRAME<font color="#990000">,</font>  Qt<font color="#990000">::</font>NoButton<font color="#990000">);</font>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>CAMERA<font color="#990000">,</font> Qt<font color="#990000">::</font>ControlButton<font color="#990000">);</font>
<b><font color="#000080">#else</font></b>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>CAMERA<font color="#990000">,</font> Qt<font color="#990000">::</font>AltModifier<font color="#990000">);</font>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>FRAME<font color="#990000">,</font>  Qt<font color="#990000">::</font>NoModifier<font color="#990000">);</font>
  <b><font color="#000000">setHandlerKeyboardModifiers</font></b><font color="#990000">(</font>QGLViewer<font color="#990000">::</font>CAMERA<font color="#990000">,</font> Qt<font color="#990000">::</font>ControlModifier<font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

<b><font color="#000080">#ifdef</font></b> GL_RESCALE_NORMAL  <i><font color="#9A1900">// OpenGL 1.2 Only...</font></i>
  <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_RESCALE_NORMAL<font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

  <i><font color="#9A1900">// Add a manipulated frame to the viewer.</font></i>
  <i><font color="#9A1900">// If you are not "using namespace qglqglviewer", you need</font></i>
  <i><font color="#9A1900">// to specify: new qglviewer::ManipulatedFrame().</font></i>
  <b><font color="#000000">setManipulatedFrame</font></b><font color="#990000">(</font><b><font color="#0000FF">new</font></b> <b><font color="#000000">ManipulatedFrame</font></b><font color="#990000">());</font>

  <b><font color="#000000">help</font></b><font color="#990000">();</font>
  <b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Make world axis visible</font></i>
  <b><font color="#000000">setAxisIsDrawn</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">draw</font></b><font color="#990000">()</font>
<font color="#FF0000">{</font>
  <i><font color="#9A1900">// Here we are in the world coordinate system.</font></i>
  <i><font color="#9A1900">// Draw your scene here.</font></i>

  <i><font color="#9A1900">// Save the current model view matrix (not needed here in fact)</font></i>
  <b><font color="#000000">glPushMatrix</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Multiply matrix to get in the frame coordinate system.</font></i>
  <b><font color="#000000">glMultMatrixd</font></b><font color="#990000">(</font><b><font color="#000000">manipulatedFrame</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">matrix</font></b><font color="#990000">());</font>

  <i><font color="#9A1900">// Scale down the drawings</font></i>
  <b><font color="#000000">glScalef</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">.</font>3f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>3f<font color="#990000">,</font> <font color="#993399">0</font><font color="#990000">.</font>3f<font color="#990000">);</font>

  <i><font color="#9A1900">// Draw an axis using the QGLViewer static function</font></i>
  <b><font color="#000000">drawAxis</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Draws a frame-related spiral.</font></i>
  <b><font color="#000000">drawSpiral</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Restore the original (world) coordinate system</font></i>
  <b><font color="#000000">glPopMatrix</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<font color="#008080">QString</font> Viewer<font color="#990000">::</font><b><font color="#000000">helpString</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b>
<font color="#FF0000">{</font>
  <font color="#008080">QString</font> <b><font color="#000000">text</font></b><font color="#990000">(</font><font color="#FF0000">"&lt;h2&gt;M a n i p u l a t e d F r a m e&lt;/h2&gt;"</font><font color="#990000">);</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"A &lt;i&gt;ManipulatedFrame&lt;/i&gt; converts mouse gestures into &lt;i&gt;Frame&lt;/i&gt; displacements. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"In this example, such an object defines the position of the spiral that can hence be manipulated.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Adding two lines of code will then allow you to move the objects of "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"your scene using the mouse. The button bindings of the &lt;i&gt;ManipulatedFrame&lt;/i&gt; "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"are the same than for the camera. Spinning is possible.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Default key bindings have been changed in this example : press &lt;b&gt;Control&lt;/b&gt; "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"while moving the mouse to move the camera instead of the ManipulatedFrame."</font><font color="#990000">;</font>
  <b><font color="#0000FF">return</font></b> text<font color="#990000">;</font>
<font color="#FF0000">}</font>

</tt></pre>


<h2>main.cpp</h2>
<!-- Generator: GNU source-highlight 3.0.1
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><b><font color="#000080">#include</font></b> <font color="#FF0000">"manipulatedFrame.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;qapplication.h&gt;</font>

<font color="#009900">int</font> <b><font color="#000000">main</font></b><font color="#990000">(</font><font color="#009900">int</font> argc<font color="#990000">,</font> <font color="#009900">char</font><font color="#990000">**</font> argv<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <font color="#008080">QApplication</font> <b><font color="#000000">application</font></b><font color="#990000">(</font>argc<font color="#990000">,</font>argv<font color="#990000">);</font>

  <font color="#008080">Viewer</font> viewer<font color="#990000">;</font>

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&lt;</font> <font color="#993399">0x040000</font>
  application<font color="#990000">.</font><b><font color="#000000">setMainWidget</font></b><font color="#990000">(&amp;</font>viewer<font color="#990000">);</font>
<b><font color="#000080">#else</font></b>
  viewer<font color="#990000">.</font><b><font color="#000000">setWindowTitle</font></b><font color="#990000">(</font><font color="#FF0000">"manipulatedFrame"</font><font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

  viewer<font color="#990000">.</font><b><font color="#000000">show</font></b><font color="#990000">();</font>

  <b><font color="#0000FF">return</font></b> application<font color="#990000">.</font><b><font color="#000000">exec</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>
</tt></pre>



<p>
  Back to the <a href="index.html">examples main page</a>.
</p>

<p>
  <a href="http://validator.w3.org/check/referer"><img src="../images/xhtml.png" alt="Valid XHTML 1.0!" height="31" width="88"/></a>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="../images/css.gif" width="88" height="31" alt="Valid CSS!"/></a>
<i>Last modified on Saturday, May 22, 2010.</i>
</p>

</body>
</html>