Sophie

Sophie

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

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 multiView 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 multiView example</h1>

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

<p>
 A multi-view application, with constrained camera displacements.
</p>
<p>
 Four viewers are created, each displaying the same scene. The camera displacements are constrained
 for three of the viewers to create the classical top, front, side views. The last viewer is a
 classical 3D viewer.
</p>
<p>
 Note that the four viewers share the same OpenGL context.
</p>
<h2>multiView.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> Scene
<font color="#FF0000">{</font>
<b><font color="#0000FF">public</font></b><font color="#990000">:</font>
  <font color="#009900">void</font> <b><font color="#000000">draw</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>


<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">const</font></b> Scene<font color="#990000">*</font> <b><font color="#0000FF">const</font></b> s<font color="#990000">,</font> <font color="#009900">int</font> type<font color="#990000">,</font> QWidget<font color="#990000">*</font> parent<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> QGLWidget<font color="#990000">*</font> shareWidget<font color="#990000">=</font>NULL<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">private</font></b><font color="#990000">:</font>
  <b><font color="#0000FF">const</font></b> Scene<font color="#990000">*</font> <b><font color="#0000FF">const</font></b> scene_<font color="#990000">;</font>
<font color="#FF0000">}</font><font color="#990000">;</font>

</tt></pre>


<h2>multiView.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">"multiView.h"</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>

Viewer<font color="#990000">::</font><b><font color="#000000">Viewer</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> Scene<font color="#990000">*</font> <b><font color="#0000FF">const</font></b> s<font color="#990000">,</font> <font color="#009900">int</font> type<font color="#990000">,</font> QWidget<font color="#990000">*</font> parent<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> QGLWidget<font color="#990000">*</font> shareWidget<font color="#990000">)</font>
<b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">&lt;</font> <font color="#993399">0x040000</font>
  <font color="#990000">:</font> <b><font color="#000000">QGLViewer</font></b><font color="#990000">(</font>parent<font color="#990000">,</font> <font color="#FF0000">"viewer"</font><font color="#990000">,</font> shareWidget<font color="#990000">),</font> <b><font color="#000000">scene_</font></b><font color="#990000">(</font>s<font color="#990000">)</font>
<b><font color="#000080">#else</font></b>
  <font color="#990000">:</font> <b><font color="#000000">QGLViewer</font></b><font color="#990000">(</font>parent<font color="#990000">,</font> shareWidget<font color="#990000">),</font> <b><font color="#000000">scene_</font></b><font color="#990000">(</font>s<font color="#990000">)</font>
<b><font color="#000080">#endif</font></b>
<font color="#FF0000">{</font>
  <b><font color="#000000">setAxisIsDrawn</font></b><font color="#990000">();</font>
  <b><font color="#000000">setGridIsDrawn</font></b><font color="#990000">();</font>

  <b><font color="#0000FF">if</font></b> <font color="#990000">(</font>type <font color="#990000">&lt;</font> <font color="#993399">3</font><font color="#990000">)</font>
    <font color="#FF0000">{</font>
      <i><font color="#9A1900">// Move camera according to viewer type (on X, Y or Z axis)</font></i>
      <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setPosition</font></b><font color="#990000">(</font><b><font color="#000000">Vec</font></b><font color="#990000">((</font>type<font color="#990000">==</font><font color="#993399">0</font><font color="#990000">)?</font> <font color="#993399">1.0</font> <font color="#990000">:</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#990000">(</font>type<font color="#990000">==</font><font color="#993399">1</font><font color="#990000">)?</font> <font color="#993399">1.0</font> <font color="#990000">:</font> <font color="#993399">0.0</font><font color="#990000">,</font> <font color="#990000">(</font>type<font color="#990000">==</font><font color="#993399">2</font><font color="#990000">)?</font> <font color="#993399">1.0</font> <font color="#990000">:</font> <font color="#993399">0.0</font><font color="#990000">));</font>
      <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">lookAt</font></b><font color="#990000">(</font><b><font color="#000000">sceneCenter</font></b><font color="#990000">());</font>

      <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setType</font></b><font color="#990000">(</font>Camera<font color="#990000">::</font>ORTHOGRAPHIC<font color="#990000">);</font>
      <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">showEntireScene</font></b><font color="#990000">();</font>

      <i><font color="#9A1900">// Forbid rotation</font></i>
      WorldConstraint<font color="#990000">*</font> constraint <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">WorldConstraint</font></b><font color="#990000">();</font>
      constraint<font color="#990000">-&gt;</font><b><font color="#000000">setRotationConstraintType</font></b><font color="#990000">(</font>AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN<font color="#990000">);</font>
      <b><font color="#000000">camera</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">frame</font></b><font color="#990000">()-&gt;</font><b><font color="#000000">setConstraint</font></b><font color="#990000">(</font>constraint<font color="#990000">);</font>
    <font color="#FF0000">}</font>

  <b><font color="#000000">restoreStateFromFile</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>
  scene_<font color="#990000">-&gt;</font><b><font color="#000000">draw</font></b><font color="#990000">();</font>
<font color="#FF0000">}</font>

<i><font color="#9A1900">// Draws a spiral</font></i>
<font color="#009900">void</font> Scene<font color="#990000">::</font><b><font color="#000000">draw</font></b><font color="#990000">()</font> <b><font color="#0000FF">const</font></b>
<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</font><font color="#990000">.</font>8f<font color="#990000">*</font>ratio<font color="#990000">;</font>
      <font color="#009900">float</font> r2 <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>8f <font color="#990000">-</font> <font color="#993399">0</font><font color="#990000">.</font>8f<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</font><font color="#990000">.</font>5f<font color="#990000">;</font>
      <b><font color="#0000FF">const</font></b> <font color="#009900">float</font> nor <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">.</font>5f<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</font><font color="#990000">.</font>05f<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>
</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">"multiView.h"</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;qapplication.h&gt;</font>
<b><font color="#000080">#include</font></b> <font color="#FF0000">&lt;qsplitter.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>

  <i><font color="#9A1900">// Create Splitters</font></i>
  QSplitter <font color="#990000">*</font>hSplit  <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">QSplitter</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Vertical<font color="#990000">);</font>
  QSplitter <font color="#990000">*</font>vSplit1 <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">QSplitter</font></b><font color="#990000">(</font>hSplit<font color="#990000">);</font>
  QSplitter <font color="#990000">*</font>vSplit2 <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">QSplitter</font></b><font color="#990000">(</font>hSplit<font color="#990000">);</font>

  <i><font color="#9A1900">// Create the scene</font></i>
  Scene<font color="#990000">*</font> s <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">Scene</font></b><font color="#990000">();</font>

  <i><font color="#9A1900">// Instantiate the viewers.</font></i>
  Viewer <b><font color="#000000">side  </font></b><font color="#990000">(</font>s<font color="#990000">,</font><font color="#993399">0</font><font color="#990000">,</font>vSplit1<font color="#990000">);</font>
  Viewer <b><font color="#000000">top   </font></b><font color="#990000">(</font>s<font color="#990000">,</font><font color="#993399">1</font><font color="#990000">,</font>vSplit1<font color="#990000">,</font> <font color="#990000">&amp;</font>side<font color="#990000">);</font>
  Viewer <b><font color="#000000">front </font></b><font color="#990000">(</font>s<font color="#990000">,</font><font color="#993399">2</font><font color="#990000">,</font>vSplit2<font color="#990000">,</font> <font color="#990000">&amp;</font>side<font color="#990000">);</font>
  Viewer <b><font color="#000000">persp </font></b><font color="#990000">(</font>s<font color="#990000">,</font><font color="#993399">3</font><font color="#990000">,</font>vSplit2<font color="#990000">,</font> <font color="#990000">&amp;</font>side<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">(</font>hSplit<font color="#990000">);</font>
<b><font color="#000080">#else</font></b>
  hSplit<font color="#990000">-&gt;</font><b><font color="#000000">setWindowTitle</font></b><font color="#990000">(</font><font color="#FF0000">"multiView"</font><font color="#990000">);</font>
<b><font color="#000080">#endif</font></b>

  <i><font color="#9A1900">// Set main QSplitter as the main widget.</font></i>
  hSplit<font color="#990000">-&gt;</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>