00001 /* ======================================================================== 00002 * Copyright (c) 2006, 00003 * Institute for Computer Graphics and Vision 00004 * Graz University of Technology 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * 00011 * Redistributions of source code must retain the above copyright notice, 00012 * this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the distribution. 00017 * 00018 * Neither the name of the Graz University of Technology nor the names of 00019 * its contributors may be used to endorse or promote products derived from 00020 * this software without specific prior written permission. 00021 * 00022 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00023 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00024 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00025 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00026 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00027 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00028 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00029 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00030 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00031 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 * ======================================================================== 00034 * PROJECT: OpenTracker 00035 * ======================================================================== */ 00042 /* ======================================================================= */ 00043 00086 #ifndef _SPACEMOUSESOURCE_H 00087 #define _SPACEMOUSESOURCE_H 00088 00089 #include "../OpenTracker.h" 00090 #include "../common/ConsoleSource.h" 00091 00092 #ifdef USE_SPACEMOUSE 00093 00094 #define OTCOM_NONE 0 00095 #define OTCOM_RESETPOSITION 1 00096 #define OTCOM_RESETROTATION 2 00097 #define OTCOM_TOGGLE_ROTATECAMERAAXIS 3 00098 00099 00100 00101 00102 namespace ot { 00103 00110 class OPENTRACKER_API SpaceMouseSource : public Node 00111 { 00112 // Members 00113 public: 00115 Event event; 00116 00117 // Methods 00118 public: 00120 SpaceMouseSource() : Node() 00121 { 00122 // default values 00123 tWeightDefault = 0.5f; 00124 rWeightDefault = 0.1f; 00125 00126 tWeight = tWeightDefault; 00127 rWeight = rWeightDefault; 00128 00129 nlDistance = 10; 00130 gogok = 1.0f; //1.0f/6.0f; 00131 //scale = 1.0f; 00132 00133 useAbsRotation = true; 00134 }; 00135 00139 virtual int isEventGenerator() 00140 { 00141 return 1; 00142 } 00143 00145 void push() 00146 { 00147 event.timeStamp(); 00148 updateObservers( event ); 00149 } 00150 00151 virtual void onEventGenerated( Event& event, Node& generator); 00152 00153 protected: 00154 // SpaceMouse Cursor-specific variables 00155 bool useAbsRotation; 00156 00157 // User Position 00158 Event usrpos; 00159 // This Event holds the current cursor position and is sent to the observers 00160 Event tmpEvent; 00161 00162 // Weights 00163 float tWeight; 00164 float rWeight; // weights for translation and rotation 00165 float tWeightDefault; 00166 float rWeightDefault; 00167 00168 bool extNode; 00169 00170 // scaling factor (extNode) 00171 //float scale; 00172 //float cursorDistance; 00173 00174 // parameters for GoGo Interaction 00175 float nlDistance; // distance where non-linear movement starts 00176 float gogok; // scaling factor for nonlinear movement acceleration 00177 00178 // A flag to indicate whether tmpState was changed during processing 00179 int changed; 00180 00181 friend class SpaceMouseModule; 00182 }; 00183 00184 } // namespace ot 00185 00186 #endif //USE_SPACEMOUSE 00187 00188 #endif //_SPACEMOUSESOURCE_H
1.4.6