Sophie

Sophie

distrib > Fedora > 13 > i386 > by-pkgid > cd34bbe24503efb80ebebb7e33511ba0 > files > 23

libQGLViewer-doc-2.3.1-10.fc12.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 keyFrames 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 keyFrames example</h1>

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

<p>
 The <code>KeyFrameInterpolator</code> test example.
</p>
<p>
 KeyFrameInterpolator smoothly interpolate their attached Frame over time on a path defined by
 Frames. The interpolation can be started/stopped/reset, played in loop, played at a different
 speed, etc...
</p>
<p>
 In this examples, the path is defined by four ManipulatedFrame which all can be moved with the
 mouse. The interpolating path is updated accordingly.
</p>
<p>
 The path and the interpolating axis are drawn using KeyFrameInterpolator::drawPath().
</p>
<p>
 By default, the Camera holds 12 KeyFrameInterpolator, binded to the F1-12 keys. Use Alt-Fx to
 define a new keyFrame for path x, and simply press Fx to play/pause the path x. See the <a
 href="../keyboard.html">keyboard</a> page for details.
</p>
<h2>keyFrames.h</h2>
<!-- Generator: GNU source-highlight 2.4
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> Viewer <font color="#990000">:</font> <b><font color="#0000FF">public</font></b> QGLViewer
<font color="#FF0000">{</font>
<b><font color="#0000FF">public</font></b> <font color="#990000">:</font>
  <b><font color="#000000">Viewer</font></b><font color="#990000">();</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">draw</font></b><font color="#990000">();</font>
  <b><font color="#0000FF">virtual</font></b> <font color="#009900">void</font> <b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>QKeyEvent <font color="#990000">*</font>e<font color="#990000">);</font>
  <b><font color="#0000FF">virtual</font></b> QString <b><font color="#000000">helpString</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b><font color="#990000">;</font>

<b><font color="#0000FF">private</font></b> <font color="#990000">:</font>
  qglviewer<font color="#990000">::</font>ManipulatedFrame<font color="#990000">**</font> keyFrame_<font color="#990000">;</font>
  qglviewer<font color="#990000">::</font>KeyFrameInterpolator kfi_<font color="#990000">;</font>
  <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> nbKeyFrames<font color="#990000">;</font>
  <font color="#009900">int</font> currentKF_<font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>
</tt></pre>


<h2>keyFrames.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
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">"keyFrames.h"</font>

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&gt;=</font> <font color="#993399">0x040000</font>
<b><font color="#000080"># include</font></b> <font color="#FF0000">&lt;QKeyEvent&gt;</font>
<b><font color="#000080">#endif</font></b>

<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>

Viewer<font color="#990000">::</font><b><font color="#000000">Viewer</font></b><font color="#990000">()</font>
  <font color="#990000">:</font> <b><font color="#000000">nbKeyFrames</font></b><font color="#990000">(</font><font color="#993399">4</font><font color="#990000">)</font>
<font color="#FF0000">{</font>
  <b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// myFrame is the Frame that will be interpolated.</font></i>
  Frame<font color="#990000">*</font> myFrame <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">Frame</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Set myFrame as the KeyFrameInterpolator interpolated Frame.</font></i>
  kfi_<font color="#990000">.</font><b><font color="#000000">setFrame</font></b><font color="#990000">(</font>myFrame<font color="#990000">);</font>
  kfi_<font color="#990000">.</font><b><font color="#000000">setLoopInterpolation</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// An array of manipulated (key) frames.</font></i>
  keyFrame_ <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> ManipulatedFrame<font color="#990000">*[</font>nbKeyFrames<font color="#990000">];</font>

  <i><font color="#9A1900">// Create an initial path</font></i>
  <b><font color="#0000FF">for</font></b> <font color="#990000">(</font><font color="#009900">int</font> i<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> i<font color="#990000">&lt;</font>nbKeyFrames<font color="#990000">;</font> i<font color="#990000">++)</font>
    <font color="#FF0000">{</font>
      keyFrame_<font color="#990000">[</font>i<font color="#990000">]</font> <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">ManipulatedFrame</font></b><font color="#990000">();</font>
      keyFrame_<font color="#990000">[</font>i<font color="#990000">]-&gt;</font><b><font color="#000000">setPosition</font></b><font color="#990000">(-</font><font color="#993399">1.0</font> <font color="#990000">+</font> <font color="#993399">2.0</font><font color="#990000">*</font>i<font color="#990000">/(</font>nbKeyFrames<font color="#990000">-</font><font color="#993399">1</font><font color="#990000">),</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#993399">0.0</font><font color="#990000">);</font>
      kfi_<font color="#990000">.</font><b><font color="#000000">addKeyFrame</font></b><font color="#990000">(</font>keyFrame_<font color="#990000">[</font>i<font color="#990000">]);</font>
    <font color="#FF0000">}</font>

  currentKF_ <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font>
  <b><font color="#000000">setManipulatedFrame</font></b><font color="#990000">(</font>keyFrame_<font color="#990000">[</font>currentKF_<font color="#990000">]);</font>

  <i><font color="#9A1900">// Enable direct frame manipulation when the mouse hovers.</font></i>
  <b><font color="#000000">setMouseTracking</font></b><font color="#990000">(</font><b><font color="#0000FF">true</font></b><font color="#990000">);</font>

  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Plus<font color="#990000">,</font> <font color="#FF0000">"Increases interpolation speed"</font><font color="#990000">);</font>
  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Minus<font color="#990000">,</font> <font color="#FF0000">"Decreases interpolation speed"</font><font color="#990000">);</font>
  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Left<font color="#990000">,</font> <font color="#FF0000">"Selects previous key frame"</font><font color="#990000">);</font>
  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Right<font color="#990000">,</font> <font color="#FF0000">"Selects next key frame"</font><font color="#990000">);</font>
  <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Return<font color="#990000">,</font> <font color="#FF0000">"Starts/stops interpolation"</font><font color="#990000">);</font>

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

  <b><font color="#000000">connect</font></b><font color="#990000">(&amp;</font>kfi_<font color="#990000">,</font> <b><font color="#000000">SIGNAL</font></b><font color="#990000">(</font><b><font color="#000000">interpolated</font></b><font color="#990000">()),</font> <b><font color="#000000">SLOT</font></b><font color="#990000">(</font><b><font color="#000000">updateGL</font></b><font color="#990000">()));</font>
  kfi_<font color="#990000">.</font><b><font color="#000000">startInterpolation</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

QString 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>
  QString <b><font color="#000000">text</font></b><font color="#990000">(</font><font color="#FF0000">"&lt;h2&gt;K e y F r a m e s&lt;/h2&gt;"</font><font color="#990000">);</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"A &lt;i&gt;KeyFrameInterpolator&lt;/i&gt; holds an interpolated path defined by key frames. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"It can then smoothly make its associed frame follow that path. Key frames can interactively be manipulated, even "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"during interpolation.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Note that the camera holds 12 such keyFrameInterpolators, binded to F1-F12. Press &lt;b&gt;Alt+Fx&lt;/b&gt; to define new key "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"frames, and then press &lt;b&gt;Fx&lt;/b&gt; to make the camera follow the path. Press &lt;b&gt;C&lt;/b&gt; to visualize these paths.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"&lt;b&gt;+/-&lt;/b&gt; changes the interpolation speed. Negative values are allowed.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"&lt;b&gt;Return&lt;/b&gt; starts-stops the interpolation.&lt;br&gt;&lt;br&gt;"</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Use the left and right arrows to change the manipulated KeyFrame. "</font><font color="#990000">;</font>
  text <font color="#990000">+=</font> <font color="#FF0000">"Press &lt;b&gt;Control&lt;/b&gt; to move it or simply hover over it."</font><font color="#990000">;</font>
  <b><font color="#0000FF">return</font></b> text<font color="#990000">;</font>
<font color="#FF0000">}</font>

<font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>QKeyEvent <font color="#990000">*</font>e<font color="#990000">)</font>
<font color="#FF0000">{</font>
  <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>e<font color="#990000">-&gt;</font><b><font color="#000000">key</font></b><font color="#990000">())</font>
    <font color="#FF0000">{</font>
    <b><font color="#0000FF">case</font></b> Qt<font color="#990000">::</font>Key_Left <font color="#990000">:</font>
      currentKF_ <font color="#990000">=</font> <font color="#990000">(</font>currentKF_<font color="#990000">+</font>nbKeyFrames<font color="#990000">-</font><font color="#993399">1</font><font color="#990000">)</font> <font color="#990000">%</font> nbKeyFrames<font color="#990000">;</font>
      <b><font color="#000000">setManipulatedFrame</font></b><font color="#990000">(</font>keyFrame_<font color="#990000">[</font>currentKF_<font color="#990000">]);</font>
      <b><font color="#000000">updateGL</font></b><font color="#990000">();</font>
      <b><font color="#0000FF">break</font></b><font color="#990000">;</font>
    <b><font color="#0000FF">case</font></b> Qt<font color="#990000">::</font>Key_Right <font color="#990000">:</font>
      currentKF_ <font color="#990000">=</font> <font color="#990000">(</font>currentKF_<font color="#990000">+</font><font color="#993399">1</font><font color="#990000">)</font> <font color="#990000">%</font> nbKeyFrames<font color="#990000">;</font>
      <b><font color="#000000">setManipulatedFrame</font></b><font color="#990000">(</font>keyFrame_<font color="#990000">[</font>currentKF_<font color="#990000">]);</font>
      <b><font color="#000000">updateGL</font></b><font color="#990000">();</font>
      <b><font color="#0000FF">break</font></b><font color="#990000">;</font>
    <b><font color="#0000FF">case</font></b> Qt<font color="#990000">::</font>Key_Return <font color="#990000">:</font>
      kfi_<font color="#990000">.</font><b><font color="#000000">toggleInterpolation</font></b><font color="#990000">();</font>
      <b><font color="#0000FF">break</font></b><font color="#990000">;</font>
    <b><font color="#0000FF">case</font></b> Qt<font color="#990000">::</font>Key_Plus <font color="#990000">:</font>
      kfi_<font color="#990000">.</font><b><font color="#000000">setInterpolationSpeed</font></b><font color="#990000">(</font>kfi_<font color="#990000">.</font><b><font color="#000000">interpolationSpeed</font></b><font color="#990000">()+</font><font color="#993399">0.25</font><font color="#990000">);</font>
      <b><font color="#0000FF">break</font></b><font color="#990000">;</font>
    <b><font color="#0000FF">case</font></b> Qt<font color="#990000">::</font>Key_Minus <font color="#990000">:</font>
      kfi_<font color="#990000">.</font><b><font color="#000000">setInterpolationSpeed</font></b><font color="#990000">(</font>kfi_<font color="#990000">.</font><b><font color="#000000">interpolationSpeed</font></b><font color="#990000">()-</font><font color="#993399">0.25</font><font color="#990000">);</font>
      <b><font color="#0000FF">break</font></b><font color="#990000">;</font>
    <i><font color="#9A1900">// case Qt::Key_C :</font></i>
      <i><font color="#9A1900">// kfi_.setClosedPath(!kfi_.closedPath());</font></i>
      <i><font color="#9A1900">// break;</font></i>
    <b><font color="#0000FF">default</font></b><font color="#990000">:</font>
      QGLViewer<font color="#990000">::</font><b><font color="#000000">keyPressEvent</font></b><font color="#990000">(</font>e<font color="#990000">);</font>
    <font color="#FF0000">}</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">// Draw interpolated frame</font></i>
  <b><font color="#000000">glPushMatrix</font></b><font color="#990000">();</font>
  <b><font color="#000000">glMultMatrixd</font></b><font color="#990000">(</font>kfi_<font color="#990000">.</font><b><font color="#000000">frame</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">matrix</font></b><font color="#990000">());</font>
  <b><font color="#000000">drawAxis</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">.</font>3f<font color="#990000">);</font>
  <b><font color="#000000">glPopMatrix</font></b><font color="#990000">();</font>

  kfi_<font color="#990000">.</font><b><font color="#000000">drawPath</font></b><font color="#990000">(</font><font color="#993399">5</font><font color="#990000">,</font> <font color="#993399">10</font><font color="#990000">);</font>

  <b><font color="#0000FF">for</font></b> <font color="#990000">(</font><font color="#009900">int</font> i<font color="#990000">=</font><font color="#993399">0</font><font color="#990000">;</font> i<font color="#990000">&lt;</font>nbKeyFrames<font color="#990000">;</font> <font color="#990000">++</font>i<font color="#990000">)</font>
    <font color="#FF0000">{</font>
      <b><font color="#000000">glPushMatrix</font></b><font color="#990000">();</font>
      <b><font color="#000000">glMultMatrixd</font></b><font color="#990000">(</font>kfi_<font color="#990000">.</font><b><font color="#000000">keyFrame</font></b><font color="#990000">(</font>i<font color="#990000">).</font><b><font color="#000000">matrix</font></b><font color="#990000">());</font>

      <b><font color="#0000FF">if</font></b> <font color="#990000">((</font>i <font color="#990000">==</font> currentKF_<font color="#990000">)</font> <font color="#990000">||</font> <font color="#990000">(</font>keyFrame_<font color="#990000">[</font>i<font color="#990000">]-&gt;</font><b><font color="#000000">grabsMouse</font></b><font color="#990000">()))</font>
	<b><font color="#000000">drawAxis</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">.</font>4f<font color="#990000">);</font>
      <b><font color="#0000FF">else</font></b>
	<b><font color="#000000">drawAxis</font></b><font color="#990000">(</font><font color="#993399">0</font><font color="#990000">.</font>2f<font color="#990000">);</font>

      <b><font color="#000000">glPopMatrix</font></b><font color="#990000">();</font>
    <font color="#FF0000">}</font>
<font color="#FF0000">}</font>
</tt></pre>


<h2>main.cpp</h2>
<!-- Generator: GNU source-highlight 2.4
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">"keyFrames.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>
  QApplication <b><font color="#000000">application</font></b><font color="#990000">(</font>argc<font color="#990000">,</font>argv<font color="#990000">);</font>

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

<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&lt;</font> <font color="#993399">0x040000</font>
  <i><font color="#9A1900">// Set the viewer as the application main widget.</font></i>
  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">"keyFrames"</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.png" width="88" height="31" alt="Valid CSS!"/></a>
<i>Last modified on Tuesday, September 30, 2008.</i>
</p>

</body>
</html>