diff options
author | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
---|---|---|
committer | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
commit | 0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch) | |
tree | 2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/event__mouse__listener_8cpp-source.html | |
download | nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip |
Initial commit
Diffstat (limited to 'docs/doxygen/nel/event__mouse__listener_8cpp-source.html')
-rw-r--r-- | docs/doxygen/nel/event__mouse__listener_8cpp-source.html | 497 |
1 files changed, 497 insertions, 0 deletions
diff --git a/docs/doxygen/nel/event__mouse__listener_8cpp-source.html b/docs/doxygen/nel/event__mouse__listener_8cpp-source.html new file mode 100644 index 00000000..9e1e1429 --- /dev/null +++ b/docs/doxygen/nel/event__mouse__listener_8cpp-source.html @@ -0,0 +1,497 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <TITLE>nevrax.org : docs</TITLE> + <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css"> + <link href="doxygen.css" rel="stylesheet" type="text/css"> +</HEAD> +<BODY MARGINHEIGHT="0" MARGINWIDTH="0"> + +<!-- uplinks --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </TD> + </TR> +</TABLE> + +<!-- banner Nevrax --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%> + <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR> +</TABLE> + +<!-- main table --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + + <!------ Begin Box ------> + <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black> + <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF> + <TABLE cellspacing=0 cellpadding=1 border=0> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr> + </TABLE> + </TD></TR></TABLE></TD></TR></TABLE> + <!------ End Box ------> + + </TD> + <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + +<!-- title --> +<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td> +<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A> +</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT=""> +</td></tr></table> + + +<!-- block --> +<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD> + <TD><B>Documentation</B></TD> + <TD ALIGN=RIGHT> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> </center> +<hr><h1>event_mouse_listener.cpp</h1><a href="event__mouse__listener_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 +00007 <font class="comment">/* Copyright, 2000 Nevrax Ltd.</font> +00008 <font class="comment"> *</font> +00009 <font class="comment"> * This file is part of NEVRAX NEL.</font> +00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font> +00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font> +00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font> +00013 <font class="comment"> * any later version.</font> +00014 <font class="comment"></font> +00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font> +00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> +00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> +00018 <font class="comment"> * General Public License for more details.</font> +00019 <font class="comment"></font> +00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font> +00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font> +00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font> +00023 <font class="comment"> * MA 02111-1307, USA.</font> +00024 <font class="comment"> */</font> +00025 +00026 <font class="preprocessor">#include "<a class="code" href="std3d_8h.html">std3d.h</a>"</font> +00027 +00028 <font class="preprocessor">#include "<a class="code" href="event__mouse__listener_8h.html">3d/event_mouse_listener.h</a>"</font> +00029 <font class="preprocessor">#include "<a class="code" href="event__server_8h.html">nel/misc/event_server.h</a>"</font> +00030 <font class="preprocessor">#include "<a class="code" href="camera_8h.html">3d/camera.h</a>"</font> +00031 <font class="preprocessor">#include "<a class="code" href="time__nl_8h.html">nel/misc/time_nl.h</a>"</font> +00032 <font class="preprocessor">#include "<a class="code" href="quat_8h.html">nel/misc/quat.h</a>"</font> +00033 +00034 <font class="keyword">using</font> <font class="keyword">namespace </font>NLMISC; +00035 +00036 <font class="keyword">namespace </font>NL3D +00037 { +00038 +00039 +<a name="l00040"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a0">00040</a> CEvent3dMouseListener::CEvent3dMouseListener() : _CurrentModelRotationAxis(zAxis) +00041 ,_XModelTranslateEnabled(true) +00042 ,_YModelTranslateEnabled(true) +00043 ,_ZModelTranslateEnabled(true) +00044 { +00045 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.identity(); +00046 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.identity() ; +00047 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a> = <font class="keyword">false</font> ; +00048 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o8">_HotSpot</a>.set (0,0,0); +00049 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o9">_Viewport</a>.<a class="code" href="classNL3D_1_1CViewport.html#a2">initFullScreen</a>(); +00050 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o7">_Frustrum</a>.init (2.f, 2.f, -1.f, 1.f); +00051 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o17">_MouseMode</a>=<a class="code" href="classNL3D_1_1U3dMouseListener.html#s3s0">nelStyle</a>; +00052 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a17">setSpeed</a> (10.f); +00053 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o16">_LastTime</a>=CTime::getLocalTime (); +00054 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o18">_TranslateXYInWorld</a>= <font class="keyword">false</font>; +00055 } +00056 +00057 +00058 +<a name="l00059"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a11">00059</a> <font class="keywordtype">void</font> CEvent3dMouseListener::enableModelTranslationAxis(TAxis axis, <font class="keywordtype">bool</font> enabled) +00060 { +00061 <font class="keywordflow">switch</font> (axis) +00062 { +00063 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s0">xAxis</a>: <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o1">_XModelTranslateEnabled</a> = enabled ; <font class="keywordflow">break</font> ; +00064 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s1">yAxis</a>: <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o2">_YModelTranslateEnabled</a> = enabled ; <font class="keywordflow">break</font> ; +00065 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s2">zAxis</a>: <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o3">_ZModelTranslateEnabled</a> = enabled ; <font class="keywordflow">break</font> ; +00066 } +00067 } +00068 +<a name="l00069"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a12">00069</a> <font class="keywordtype">bool</font> CEvent3dMouseListener::isModelTranslationEnabled(TAxis axis) +00070 { +00071 <font class="keywordflow">switch</font> (axis) +00072 { +00073 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s0">xAxis</a>: <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o1">_XModelTranslateEnabled</a> ; <font class="keywordflow">break</font> ; +00074 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s1">yAxis</a>: <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o2">_YModelTranslateEnabled</a> ; <font class="keywordflow">break</font> ; +00075 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s2">zAxis</a>: <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o3">_ZModelTranslateEnabled</a> ; <font class="keywordflow">break</font> ; +00076 <font class="keywordflow">default</font>: <font class="keywordflow">return</font> <font class="keyword">false</font> ; <font class="keywordflow">break</font> ; +00077 } +00078 } +00079 +00080 +<a name="l00081"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#c1">00081</a> <font class="keywordtype">void</font> CEvent3dMouseListener::truncateVect(CVector &<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>) +00082 { +00083 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o1">_XModelTranslateEnabled</a>) <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>.x = 0.f ; +00084 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o2">_YModelTranslateEnabled</a>) <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>.y = 0.f ; +00085 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o3">_ZModelTranslateEnabled</a>) <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>.z = 0.f ; +00086 } +00087 +00088 +<a name="l00089"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#c0">00089</a> <font class="keywordtype">void</font> CEvent3dMouseListener::operator ()(<font class="keyword">const</font> CEvent& event) +00090 { +00091 CEventMouse* mouseEvent=(CEventMouse*)&event; +00092 <font class="keywordflow">if</font> (event==<a class="code" href="namespaceNLMISC.html#a258">EventMouseMoveId</a>) +00093 { +00094 <font class="keywordtype">bool</font> bRotate=<font class="keyword">false</font>; +00095 <font class="keywordtype">bool</font> bTranslateXY=<font class="keyword">false</font>; +00096 <font class="keywordtype">bool</font> bTranslateZ=<font class="keyword">false</font>; +00097 <font class="keywordtype">bool</font> bZoom=<font class="keyword">false</font>; +00098 +00099 +00100 <font class="comment">// Rotate Axis</font> +00101 CVector axis; +00102 +00103 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o17">_MouseMode</a>==<a class="code" href="classNL3D_1_1U3dMouseListener.html#s3s0">nelStyle</a>) +00104 { +00105 bRotate=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a159">rightButton</a>)); +00106 bTranslateXY=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)); +00107 bTranslateZ=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a161">shiftButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)); +00108 bZoom=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a162">altButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)); +00109 axis=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o8">_HotSpot</a>; +00110 } +00111 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o17">_MouseMode</a>==<a class="code" href="classNL3D_1_1U3dMouseListener.html#s3s1">edit3d</a>) +00112 { +00113 bRotate=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a162">altButton</a>|<a class="code" href="namespaceNLMISC.html#a318a158">middleButton</a>)) || (mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a162">altButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)); +00114 bTranslateXY=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)) || (mouseEvent->Button==<a class="code" href="namespaceNLMISC.html#a318a158">middleButton</a>); +00115 bTranslateZ=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a161">shiftButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)) || (mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a158">middleButton</a>)); +00116 bZoom=(mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a161">shiftButton</a>|<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)) || (mouseEvent->Button==(<a class="code" href="namespaceNLMISC.html#a318a160">ctrlButton</a>|<a class="code" href="namespaceNLMISC.html#a318a162">altButton</a>|<a class="code" href="namespaceNLMISC.html#a318a158">middleButton</a>)); +00117 axis=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o8">_HotSpot</a>; +00118 } +00119 <font class="keywordflow">else</font> <font class="comment">// if (_MouseMode==firstPerson)</font> +00120 { +00121 bRotate=(mouseEvent->Button&<a class="code" href="namespaceNLMISC.html#a318a157">leftButton</a>)!=0; +00122 bTranslateXY=<font class="keyword">false</font>; +00123 bTranslateZ=<font class="keyword">false</font>; +00124 bZoom=<font class="keyword">false</font>; +00125 axis=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos(); +00126 } +00127 +00128 <font class="keywordflow">if</font> (bRotate) +00129 { +00130 <font class="keywordflow">if</font> (!<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00131 { +00132 <font class="comment">// First in the hotSpot</font> +00133 CMatrix comeFromHotSpot=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>; +00134 comeFromHotSpot.setPos (axis); +00135 +00136 <font class="comment">// Then turn along the Z axis with X mouse</font> +00137 CMatrix turnZ; +00138 turnZ.identity(); +00139 turnZ.rotateZ ((<font class="keywordtype">float</font>) <a class="code" href="namespaceNLMISC.html#a7">Pi</a>*2.f*(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>-mouseEvent->X)); +00140 +00141 <font class="comment">// Then turn along the X axis with Y mouse</font> +00142 CMatrix turnX; +00143 turnX.identity(); +00144 turnX.rotateX ((<font class="keywordtype">float</font>) <a class="code" href="namespaceNLMISC.html#a7">Pi</a>*2.f*(mouseEvent->Y-<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o14">_Y</a>)); +00145 +00146 <font class="comment">// Then come back from hotspot</font> +00147 CMatrix goToHotSpot=comeFromHotSpot; +00148 goToHotSpot.invert(); +00149 +00150 <font class="comment">// Make the matrix</font> +00151 CMatrix negPivot, Pivot; +00152 negPivot.identity(); +00153 negPivot.setPos (-axis); +00154 Pivot.identity(); +00155 Pivot.setPos (axis); +00156 +00157 <font class="comment">// Make this transformation \\//</font> +00158 <font class="comment">//_Matrix=Pivot*turnZ*negPivot*comeFromHotSpot*turnX*goToHotSpot*_Matrix;</font> +00159 Pivot*=turnZ; +00160 Pivot*=negPivot; +00161 Pivot*=comeFromHotSpot; +00162 Pivot*=turnX; +00163 Pivot*=goToHotSpot; +00164 +00165 +00166 Pivot*=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>; +00167 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>=Pivot; +00168 <font class="comment">// Normalize, too much transformation could give an ugly matrix..</font> +00169 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.normalize (CMatrix::XYZ); +00170 +00171 } +00172 <font class="keywordflow">else</font> +00173 { +00174 CVector pos = <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos() ; +00175 <a class="code" href="classNLMISC_1_1CQuat.html">NLMISC::CQuat</a> <a class="code" href="driver__opengl__extension__def_8h.html#a385">r</a> ; +00176 <font class="keywordflow">switch</font> (_CurrentModelRotationAxis) +00177 { +00178 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s0">xAxis</a> : r = CQuat(CAngleAxis(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getI(), (float) <a class="code" href="namespaceNLMISC.html#a7">Pi</a>*2.f*(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>-mouseEvent->X))) ; <font class="keywordflow">break</font> ; +00179 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s1">yAxis</a> : r = CQuat(CAngleAxis(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getJ(), (float) <a class="code" href="namespaceNLMISC.html#a7">Pi</a>*2.f*(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>-mouseEvent->X))) ; <font class="keywordflow">break</font> ; +00180 <font class="keywordflow">case</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#s3s2">zAxis</a> : r = CQuat(CAngleAxis(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getK(), (float) <a class="code" href="namespaceNLMISC.html#a7">Pi</a>*2.f*(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>-mouseEvent->X))) ; <font class="keywordflow">break</font> ; +00181 } ; +00182 +00183 +00184 CMatrix rm ; +00185 rm.rotate(r) ; +00186 +00187 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a> = rm * <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a> ; +00188 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.setPos(pos) ; +00189 +00190 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.normalize (CMatrix::XYZ); +00191 } +00192 } +00193 +00194 +00195 <font class="keywordflow">if</font> (bTranslateXY||bTranslateZ||bZoom) +00196 { +00197 <font class="comment">// Move in plane</font> +00198 +00199 CPlane plane; +00200 +00201 <font class="comment">// For precision problem, do all the compute local to the hotspot/model.</font> +00202 CVector decal; +00203 +00204 <font class="comment">// Plane of the hotspot</font> +00205 <font class="keywordflow">if</font> (! <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00206 { +00207 decal= axis; +00208 } +00209 <font class="keywordflow">else</font> +00210 { +00211 decal= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos(); +00212 } +00213 <font class="comment">// Choose plane to move on</font> +00214 <font class="keywordflow">if</font> (bTranslateXY && <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o18">_TranslateXYInWorld</a>) +00215 { +00216 plane.make (CVector::K, CVector::Null); +00217 } +00218 <font class="keywordflow">else</font> +00219 { +00220 plane.make (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getJ(), CVector::Null); +00221 } +00222 +00223 +00224 <font class="comment">// Get ray from mouse point</font> +00225 CMatrix localViewMatrix= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>; +00226 localViewMatrix.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos() - decal); +00227 CVector localPoint1, localPoint2; +00228 CVector pos, dir; +00229 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o9">_Viewport</a>.<a class="code" href="classNL3D_1_1CViewport.html#a4">getRayWithPoint</a> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>, <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o14">_Y</a>, pos, dir, localViewMatrix, <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o7">_Frustrum</a>); +00230 localPoint1=plane.intersect (pos, pos+dir); +00231 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o9">_Viewport</a>.<a class="code" href="classNL3D_1_1CViewport.html#a4">getRayWithPoint</a> (mouseEvent->X, mouseEvent->Y, pos, dir, localViewMatrix, <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o7">_Frustrum</a>); +00232 localPoint2=plane.intersect (pos, pos+dir); +00233 +00234 <font class="comment">// Move the camera</font> +00235 <font class="keywordflow">if</font> (bTranslateXY) +00236 { +00237 <font class="keywordflow">if</font> (! <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00238 { +00239 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos()+localPoint1-localPoint2); +00240 } +00241 <font class="keywordflow">else</font> +00242 { +00243 CVector dir = - localPoint1 + localPoint2 ; +00244 <font class="comment">// transform the translation as needed.</font> +00245 dir= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a> * dir; +00246 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#c1">truncateVect</a>(dir) ; +00247 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos()+dir); +00248 } +00249 } +00250 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (bTranslateZ) +00251 { +00252 CVector vect=localPoint1-localPoint2; +00253 <font class="keywordflow">if</font> (! <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00254 { +00255 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos()+<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getK()*(vect.x+vect.y+vect.z)); +00256 } +00257 <font class="keywordflow">else</font> +00258 { +00259 CVector dir = <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getK()*(vect.x+vect.y+vect.z) ; +00260 <font class="comment">// transform the translation as needed.</font> +00261 dir= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a> * dir; +00262 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#c1">truncateVect</a>(dir) ; +00263 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos()+dir); +00264 } +00265 } +00266 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (bZoom) +00267 { +00268 CVector vect=localPoint1-localPoint2; +00269 CVector direc=axis-<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos(); +00270 direc.normalize(); +00271 <font class="keywordflow">if</font> (! <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00272 { +00273 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos()+direc*(vect.x+vect.y+vect.z)); +00274 } +00275 <font class="keywordflow">else</font> +00276 { +00277 <font class="comment">// transform the translation as needed.</font> +00278 direc= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a> * direc; +00279 direc.normalize(); +00280 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos()+direc*(vect.x+vect.y+vect.z)); +00281 } +00282 } +00283 } +00284 +00285 +00286 <font class="comment">// Update mouse position</font> +00287 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>=mouseEvent->X; +00288 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o14">_Y</a>=mouseEvent->Y; +00289 } +00290 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (event==<a class="code" href="namespaceNLMISC.html#a259">EventMouseDownId</a>) +00291 { +00292 <font class="comment">// Update mouse position</font> +00293 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>=mouseEvent->X; +00294 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o14">_Y</a>=mouseEvent->Y; +00295 } +00296 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (event==<a class="code" href="namespaceNLMISC.html#a260">EventMouseUpId</a>) +00297 { +00298 <font class="comment">// Update mouse position</font> +00299 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o13">_X</a>=mouseEvent->X; +00300 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o14">_Y</a>=mouseEvent->Y; +00301 } +00302 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (event==<a class="code" href="namespaceNLMISC.html#a262">EventMouseWheelId</a>) +00303 { +00304 <font class="comment">// Zoom..</font> +00305 CEventMouseWheel* mouseEvent=(CEventMouseWheel*)&event; +00306 +00307 CVector direc=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o8">_HotSpot</a>-<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos(); +00308 <font class="keywordflow">if</font> (! <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o6">_EnableModelMatrixEdition</a>) +00309 { +00310 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos()+direc*(mouseEvent->Direction?0.1f:-0.1f)); +00311 } +00312 <font class="keywordflow">else</font> +00313 { +00314 CVector dir = direc*(mouseEvent->Direction?0.1f:-0.1f) ; +00315 <font class="comment">// transform the translation as needed.</font> +00316 dir= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a> * dir; +00317 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#c1">truncateVect</a>(dir) ; +00318 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.setPos(<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o5">_ModelMatrix</a>.getPos() + dir); +00319 } +00320 } +00321 } +00322 +<a name="l00323"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a21">00323</a> <font class="keywordtype">void</font> CEvent3dMouseListener::addToServer (CEventServer& server) +00324 { +00325 server.addListener (<a class="code" href="namespaceNLMISC.html#a258">EventMouseMoveId</a>, <font class="keyword">this</font>); +00326 server.addListener (<a class="code" href="namespaceNLMISC.html#a259">EventMouseDownId</a>, <font class="keyword">this</font>); +00327 server.addListener (<a class="code" href="namespaceNLMISC.html#a260">EventMouseUpId</a>, <font class="keyword">this</font>); +00328 server.addListener (<a class="code" href="namespaceNLMISC.html#a262">EventMouseWheelId</a>, <font class="keyword">this</font>); +00329 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a2">addToServer</a> (server); +00330 } +00331 +<a name="l00332"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a22">00332</a> <font class="keywordtype">void</font> CEvent3dMouseListener::removeFromServer (CEventServer& server) +00333 { +00334 server.removeListener (<a class="code" href="namespaceNLMISC.html#a258">EventMouseMoveId</a>, <font class="keyword">this</font>); +00335 server.removeListener (<a class="code" href="namespaceNLMISC.html#a259">EventMouseDownId</a>, <font class="keyword">this</font>); +00336 server.removeListener (<a class="code" href="namespaceNLMISC.html#a260">EventMouseUpId</a>, <font class="keyword">this</font>); +00337 server.removeListener (<a class="code" href="namespaceNLMISC.html#a262">EventMouseWheelId</a>, <font class="keyword">this</font>); +00338 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a3">removeFromServer</a> (server); +00339 } +00340 +<a name="l00341"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a18">00341</a> <font class="keyword">const</font> <a class="code" href="classNLMISC_1_1CMatrix.html">NLMISC::CMatrix</a>& CEvent3dMouseListener::getViewMatrix () +00342 { +00343 <font class="comment">// Mode first person ?</font> +00344 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o17">_MouseMode</a>==<a class="code" href="classNL3D_1_1U3dMouseListener.html#s3s2">firstPerson</a>) +00345 { +00346 <font class="comment">// CVector</font> +00347 CVector dir (0,0,0); +00348 <font class="keywordtype">bool</font> find=<font class="keyword">false</font>; +00349 +00350 <font class="comment">// Key pushed ?</font> +00351 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a84">KeyUP</a>)) +00352 { +00353 dir+=CVector (0, 1, 0); +00354 find=<font class="keyword">true</font>; +00355 } +00356 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a86">KeyDOWN</a>)) +00357 { +00358 dir+=CVector (0, -1, 0); +00359 find=<font class="keyword">true</font>; +00360 } +00361 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a85">KeyRIGHT</a>)) +00362 { +00363 dir+=CVector (1, 0, 0); +00364 find=<font class="keyword">true</font>; +00365 } +00366 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a83">KeyLEFT</a>)) +00367 { +00368 dir+=CVector (-1, 0, 0); +00369 find=<font class="keyword">true</font>; +00370 } +00371 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a80">KeyNEXT</a>)) +00372 { +00373 dir+=CVector (0, 0, -1); +00374 find=<font class="keyword">true</font>; +00375 } +00376 <font class="keywordflow">if</font> (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o19">_AsyncListener</a>.<a class="code" href="classNLMISC_1_1CEventListenerAsync.html#a4">isKeyDown</a> (<a class="code" href="namespaceNLMISC.html#a317a79">KeyPRIOR</a>)) +00377 { +00378 dir+=CVector (0, 0, 1); +00379 find=<font class="keyword">true</font>; +00380 } +00381 +00382 <font class="comment">// key found ?</font> +00383 <font class="keywordflow">if</font> (find) +00384 { +00385 <font class="comment">// Time elapsed</font> +00386 uint32 milli=(uint32)(CTime::getLocalTime ()-<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o16">_LastTime</a>); +00387 +00388 <font class="comment">// Speed</font> +00389 <font class="keywordtype">float</font> dPos=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o15">_Speed</a>*(float)milli/1000.f; +00390 +00391 <font class="comment">// Good direction</font> +00392 dir.normalize (); +00393 dir*=dPos; +00394 +00395 <font class="comment">// Orientation</font> +00396 dir=<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.mulVector (dir); +00397 +00398 <font class="comment">// New position</font> +00399 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.setPos (<a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>.getPos ()+dir); +00400 } +00401 } +00402 +00403 <font class="comment">// Last time</font> +00404 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o16">_LastTime</a>=CTime::getLocalTime (); +00405 +00406 +00407 <font class="comment">// Return the matrix</font> +00408 <font class="keywordflow">return</font> <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o4">_Matrix</a>; +00409 } +00410 +00411 +<a name="l00412"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a15">00412</a> <font class="keywordtype">void</font> CEvent3dMouseListener::enableTranslateXYInWorld(<font class="keywordtype">bool</font> enabled) +00413 { +00414 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o18">_TranslateXYInWorld</a>= enabled; +00415 } +00416 +<a name="l00417"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a13">00417</a> <font class="keywordtype">void</font> CEvent3dMouseListener::setModelMatrixTransformMove(<font class="keyword">const</font> <a class="code" href="classNLMISC_1_1CMatrix.html">NLMISC::CMatrix</a>& transModelMove) +00418 { +00419 <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a>= transModelMove; +00420 } +00421 +<a name="l00422"></a><a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#a14">00422</a> <font class="keywordtype">void</font> CEvent3dMouseListener::getModelMatrixTransformMove(<a class="code" href="classNLMISC_1_1CMatrix.html">NLMISC::CMatrix</a>& transModelMove)<font class="keyword"> const</font> +00423 <font class="keyword"></font>{ +00424 transModelMove= <a class="code" href="classNL3D_1_1CEvent3dMouseListener.html#o20">_ModelMatrixTransformMove</a>; +00425 } +00426 +00427 +00428 }; <font class="comment">// NL3D</font> +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </FONT> +</TD> +<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD> +</TR> +</TABLE> +</BODY> +</HTML> |