<!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 constrainedCamera 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="../download.html">Download</a> <a class="qindex highlight" href="index.html">Examples</a> <a class="qindex" href="../refManual/hierarchy.html">Documentation</a> <a class="qindex" href="../developer.html">Developer</a> </div> <h1>The constrainedCamera example</h1> <center> <img src="../images/constrainedCamera.jpg" width="330" height="228" alt="constrainedCamera"/> </center> <p> Constraints applied on the Camera Frame to limit its translation and/or rotation. </p> <p> Try the different possible constraints using the T (translate) and R (rotate) keys. G and D change the constraint directions. Press Space to change the coordinate system (World or Camera) which defines the constraint directions. </p> <p> Note that in order to apply a constraint to a camera, you need to apply it to the camera()->frame(). </p> <h2>constrainedCamera.h</h2> <!-- Generator: GNU source-highlight 3.1.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"><QGLViewer/qglviewer.h></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> <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> <font color="#009900">void</font> <b><font color="#000000">displayText</font></b><font color="#990000">();</font> <font color="#009900">void</font> <b><font color="#000000">displayType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> type<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> x<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> y<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">char</font> c<font color="#990000">);</font> <font color="#009900">void</font> <b><font color="#000000">displayDir</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> <font color="#009900">unsigned</font> <font color="#009900">short</font> dir<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> x<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> y<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">char</font> c<font color="#990000">);</font> <b><font color="#0000FF">private</font></b><font color="#990000">:</font> <font color="#009900">int</font> transDir<font color="#990000">;</font> <font color="#009900">int</font> rotDir<font color="#990000">;</font> <b><font color="#0000FF">static</font></b> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> <b><font color="#000000">nextTranslationConstraintType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">::</font>Type<font color="#990000">&</font> type<font color="#990000">);</font> <b><font color="#0000FF">static</font></b> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> <b><font color="#000000">nextRotationConstraintType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">::</font>Type<font color="#990000">&</font> type<font color="#990000">);</font> <font color="#009900">void</font> <b><font color="#000000">changeConstraint</font></b><font color="#990000">();</font> qglviewer<font color="#990000">::</font>AxisPlaneConstraint<font color="#990000">*</font> constraints<font color="#990000">[</font><font color="#993399">2</font><font color="#990000">];</font> <font color="#009900">unsigned</font> <font color="#009900">short</font> activeConstraint<font color="#990000">;</font> <font color="#FF0000">}</font><font color="#990000">;</font> </tt></pre> <h2>constrainedCamera.cpp</h2> <!-- Generator: GNU source-highlight 3.1.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">"constrainedCamera.h"</font> <b><font color="#000080">#if</font></b> QT_VERSION <font color="#990000">>=</font> <font color="#993399">0x040000</font> <b><font color="#000080"># include</font></b> <font color="#FF0000"><QKeyEvent></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> AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> Viewer<font color="#990000">::</font><b><font color="#000000">nextTranslationConstraintType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> AxisPlaneConstraint<font color="#990000">::</font>Type<font color="#990000">&</font> type<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>type<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>PLANE<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>PLANE <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>AXIS<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>AXIS <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">default</font></b> <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<font color="#990000">;</font> <font color="#FF0000">}</font> <font color="#FF0000">}</font> AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> Viewer<font color="#990000">::</font><b><font color="#000000">nextRotationConstraintType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> AxisPlaneConstraint<font color="#990000">::</font>Type<font color="#990000">&</font> type<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>type<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>AXIS<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>PLANE <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>AXIS <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<font color="#990000">;</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">default</font></b> <font color="#990000">:</font> <b><font color="#0000FF">return</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<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">changeConstraint</font></b><font color="#990000">()</font> <font color="#FF0000">{</font> <font color="#009900">unsigned</font> <font color="#009900">short</font> previous <font color="#990000">=</font> activeConstraint<font color="#990000">;</font> activeConstraint <font color="#990000">=</font> <font color="#990000">(</font>activeConstraint<font color="#990000">+</font><font color="#993399">1</font><font color="#990000">)%</font><font color="#993399">2</font><font color="#990000">;</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setTranslationConstraintType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>previous<font color="#990000">]-></font><b><font color="#000000">translationConstraintType</font></b><font color="#990000">());</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setTranslationConstraintDirection</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>previous<font color="#990000">]-></font><b><font color="#000000">translationConstraintDirection</font></b><font color="#990000">());</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setRotationConstraintType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>previous<font color="#990000">]-></font><b><font color="#000000">rotationConstraintType</font></b><font color="#990000">());</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setRotationConstraintDirection</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>previous<font color="#990000">]-></font><b><font color="#000000">rotationConstraintDirection</font></b><font color="#990000">());</font> <b><font color="#000000">camera</font></b><font color="#990000">()-></font><b><font color="#000000">frame</font></b><font color="#990000">()-></font><b><font color="#000000">setConstraint</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<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> <b><font color="#000000">restoreStateFromFile</font></b><font color="#990000">();</font> constraints<font color="#990000">[</font><font color="#993399">0</font><font color="#990000">]</font> <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">WorldConstraint</font></b><font color="#990000">();</font> <i><font color="#9A1900">// Note that a CameraConstraint(camera) would produce the same results:</font></i> <i><font color="#9A1900">// A CameraConstraint is a LocalConstraint when applied to the camera frame !</font></i> constraints<font color="#990000">[</font><font color="#993399">1</font><font color="#990000">]</font> <font color="#990000">=</font> <b><font color="#0000FF">new</font></b> <b><font color="#000000">LocalConstraint</font></b><font color="#990000">();</font> transDir <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font> rotDir <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font> activeConstraint <font color="#990000">=</font> <font color="#993399">0</font><font color="#990000">;</font> <b><font color="#000000">camera</font></b><font color="#990000">()-></font><b><font color="#000000">frame</font></b><font color="#990000">()-></font><b><font color="#000000">setConstraint</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]);</font> <b><font color="#000000">setAxisIsDrawn</font></b><font color="#990000">();</font> <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_G<font color="#990000">,</font> <font color="#FF0000">"Change translation constraint direction"</font><font color="#990000">);</font> <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_D<font color="#990000">,</font> <font color="#FF0000">"Change rotation constraint direction"</font><font color="#990000">);</font> <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_Space<font color="#990000">,</font> <font color="#FF0000">"Change constraint reference"</font><font color="#990000">);</font> <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_T<font color="#990000">,</font> <font color="#FF0000">"Change translation constraint type"</font><font color="#990000">);</font> <b><font color="#000000">setKeyDescription</font></b><font color="#990000">(</font>Qt<font color="#990000">::</font>Key_R<font color="#990000">,</font> <font color="#FF0000">"Change rotation constraint type"</font><font color="#990000">);</font> <b><font color="#000000">help</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> <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"><</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</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> <b><font color="#000000">displayText</font></b><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><font color="#008080">QKeyEvent</font> <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">-></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_G <font color="#990000">:</font> transDir <font color="#990000">=</font> <font color="#990000">(</font>transDir<font color="#990000">+</font><font color="#993399">1</font><font color="#990000">)%</font><font color="#993399">3</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_D <font color="#990000">:</font> rotDir <font color="#990000">=</font> <font color="#990000">(</font>rotDir<font color="#990000">+</font><font color="#993399">1</font><font color="#990000">)%</font><font color="#993399">3</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_Space<font color="#990000">:</font> <b><font color="#000000">changeConstraint</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_T <font color="#990000">:</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setTranslationConstraintType</font></b><font color="#990000">(</font><b><font color="#000000">nextTranslationConstraintType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">translationConstraintType</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_R <font color="#990000">:</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setRotationConstraintType</font></b><font color="#990000">(</font><b><font color="#000000">nextRotationConstraintType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">rotationConstraintType</font></b><font color="#990000">()));</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#008080"> default:</font></b> 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="#008080">Vec</font> <b><font color="#000000">dir</font></b><font color="#990000">(</font><font color="#993399">0.0</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> dir<font color="#990000">[</font>transDir<font color="#990000">]</font> <font color="#990000">=</font> <font color="#993399">1.0</font><font color="#990000">;</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setTranslationConstraintDirection</font></b><font color="#990000">(</font>dir<font color="#990000">);</font> dir <font color="#990000">=</font> <b><font color="#000000">Vec</font></b><font color="#990000">(</font><font color="#993399">0.0</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> dir<font color="#990000">[</font>rotDir<font color="#990000">]</font> <font color="#990000">=</font> <font color="#993399">1.0</font><font color="#990000">;</font> constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">setRotationConstraintDirection</font></b><font color="#990000">(</font>dir<font color="#990000">);</font> <b><font color="#000000">updateGL</font></b><font color="#990000">();</font> <font color="#FF0000">}</font> <font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">displayType</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> AxisPlaneConstraint<font color="#990000">::</font><font color="#008080">Type</font> type<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> x<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> y<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">char</font> c<font color="#990000">)</font> <font color="#FF0000">{</font> <font color="#008080">QString</font> text<font color="#990000">;</font> <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>type<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FREE<font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"FREE (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>PLANE<font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"PLANE (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>AXIS<font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"AXIS (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> AxisPlaneConstraint<font color="#990000">::</font>FORBIDDEN<font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"FORBIDDEN (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <font color="#FF0000">}</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font>x<font color="#990000">,</font> y<font color="#990000">,</font> text<font color="#990000">);</font> <font color="#FF0000">}</font> <font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">displayDir</font></b><font color="#990000">(</font><b><font color="#0000FF">const</font></b> <font color="#009900">unsigned</font> <font color="#009900">short</font> dir<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> x<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">int</font> y<font color="#990000">,</font> <b><font color="#0000FF">const</font></b> <font color="#009900">char</font> c<font color="#990000">)</font> <font color="#FF0000">{</font> <font color="#008080">QString</font> text<font color="#990000">;</font> <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>dir<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">case</font></b> <font color="#993399">0</font><font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"X (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> <font color="#993399">1</font><font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"Y (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> <font color="#993399">2</font><font color="#990000">:</font> text <font color="#990000">=</font> <b><font color="#000000">QString</font></b><font color="#990000">(</font><font color="#FF0000">"Z (%1)"</font><font color="#990000">).</font><b><font color="#000000">arg</font></b><font color="#990000">(</font>c<font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <font color="#FF0000">}</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font>x<font color="#990000">,</font> y<font color="#990000">,</font> text<font color="#990000">);</font> <font color="#FF0000">}</font> <font color="#009900">void</font> Viewer<font color="#990000">::</font><b><font color="#000000">displayText</font></b><font color="#990000">()</font> <font color="#FF0000">{</font> <b><font color="#000000">qglColor</font></b><font color="#990000">(</font><b><font color="#000000">foregroundColor</font></b><font color="#990000">());</font> <b><font color="#000000">glDisable</font></b><font color="#990000">(</font>GL_LIGHTING<font color="#990000">);</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font><font color="#993399">10</font><font color="#990000">,</font><b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">30</font><font color="#990000">,</font> <font color="#FF0000">"TRANSLATION :"</font><font color="#990000">);</font> <b><font color="#000000">displayDir</font></b><font color="#990000">(</font>transDir<font color="#990000">,</font> <font color="#993399">190</font><font color="#990000">,</font> <b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">30</font><font color="#990000">,</font> <font color="#FF0000">'G'</font><font color="#990000">);</font> <b><font color="#000000">displayType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">translationConstraintType</font></b><font color="#990000">(),</font> <font color="#993399">10</font><font color="#990000">,</font> <b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">60</font><font color="#990000">,</font> <font color="#FF0000">'T'</font><font color="#990000">);</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font><b><font color="#000000">width</font></b><font color="#990000">()-</font><font color="#993399">220</font><font color="#990000">,</font><b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">30</font><font color="#990000">,</font> <font color="#FF0000">"ROTATION :"</font><font color="#990000">);</font> <b><font color="#000000">displayDir</font></b><font color="#990000">(</font>rotDir<font color="#990000">,</font> <b><font color="#000000">width</font></b><font color="#990000">()-</font><font color="#993399">100</font><font color="#990000">,</font> <b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">30</font><font color="#990000">,</font> <font color="#FF0000">'D'</font><font color="#990000">);</font> <b><font color="#000000">displayType</font></b><font color="#990000">(</font>constraints<font color="#990000">[</font>activeConstraint<font color="#990000">]-></font><b><font color="#000000">rotationConstraintType</font></b><font color="#990000">(),</font> <b><font color="#000000">width</font></b><font color="#990000">()-</font><font color="#993399">220</font><font color="#990000">,</font> <b><font color="#000000">height</font></b><font color="#990000">()-</font><font color="#993399">60</font><font color="#990000">,</font> <font color="#FF0000">'R'</font><font color="#990000">);</font> <b><font color="#0000FF">switch</font></b> <font color="#990000">(</font>activeConstraint<font color="#990000">)</font> <font color="#FF0000">{</font> <b><font color="#0000FF">case</font></b> <font color="#993399">0</font> <font color="#990000">:</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font><font color="#993399">20</font><font color="#990000">,</font><font color="#993399">20</font><font color="#990000">,</font> <font color="#FF0000">"Constraint direction defined w/r to WORLD (SPACE)"</font><font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <b><font color="#0000FF">case</font></b> <font color="#993399">1</font> <font color="#990000">:</font> <b><font color="#000000">drawText</font></b><font color="#990000">(</font><font color="#993399">20</font><font color="#990000">,</font><font color="#993399">20</font><font color="#990000">,</font> <font color="#FF0000">"Constraint direction defined w/r to CAMERA (SPACE)"</font><font color="#990000">);</font> <b><font color="#0000FF">break</font></b><font color="#990000">;</font> <font color="#FF0000">}</font> <b><font color="#000000">glEnable</font></b><font color="#990000">(</font>GL_LIGHTING<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">"<h2>C o n s t r a i n e d C a m e r a</h2>"</font><font color="#990000">);</font> text <font color="#990000">+=</font> <font color="#FF0000">"The camera frame can be constrained to limit the camera displacements.<br><br>"</font><font color="#990000">;</font> text <font color="#990000">+=</font> <font color="#FF0000">"Try the different translation (press <b>G</b> and <b>T</b>) and rotation "</font><font color="#990000">;</font> text <font color="#990000">+=</font> <font color="#FF0000">"(<b>D</b> and <b>R</b>) constraints while moving the camera with the mouse. "</font><font color="#990000">;</font> text <font color="#990000">+=</font> <font color="#FF0000">"The constraints can be defined with respect to various coordinates "</font><font color="#990000">;</font> text <font color="#990000">+=</font> <font color="#FF0000">"systems : press <b>Space</b> to switch.<br><br>"</font><font color="#990000">;</font> text <font color="#990000">+=</font> <font color="#FF0000">"You can easily define your own constraints to create a specific camera constraint."</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.1.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">"constrainedCamera.h"</font> <b><font color="#000080">#include</font></b> <font color="#FF0000"><qapplication.h></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"><</font> <font color="#993399">0x040000</font> application<font color="#990000">.</font><b><font color="#000000">setMainWidget</font></b><font color="#990000">(&</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">"constrainedCamera"</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 Monday, December 06, 2010.</i> </p> </body> </html>