29 #ifndef __H3DNAVIGATIONDEVICES_H__
30 #define __H3DNAVIGATIONDEVICES_H__
51 use_center_sum =
false;
53 Vec3f translation_sum;
55 Vec3f center_of_rot_sum;
65 for( DeviceMap::iterator i = all_devices.begin();
66 i != all_devices.end(); ++i ) {
67 (*i).second.remove(
this );
75 bool somethingmoved =
false;
76 int centerCounter = 0;
77 for( list< H3DNavigationDevices * >::iterator i =
78 all_devices[h3d_navigation].begin();
79 i != all_devices[h3d_navigation].end(); ++i ) {
80 if( (*i)->shouldGetInfo->getValue() ) {
81 move_info.translation_sum += (*i)->move_dir;
82 move_info.rotation_sum = move_info.rotation_sum * (*i)->rel_rot;
83 move_info.zoom = (*i)->zoom;
84 if( (*i)->use_center ) {
85 move_info.use_center_sum =
true;
87 move_info.center_of_rot_sum += (*i)->getCenterOfRot();
90 somethingmoved =
true;
93 if( move_info.use_center_sum )
94 move_info.center_of_rot_sum /= centerCounter;
95 return somethingmoved;
99 virtual void resetAll();
110 for( list< H3DNavigationDevices * >::iterator i =
111 all_devices[h3d_navigation].begin();
112 i != all_devices[h3d_navigation].end(); ++i ) {
113 (*i)->setNavType( _nav_type );
119 nav_type = _nav_type;
129 return center_of_rot;
135 H3DUniquePtr< SFBool > shouldGetInfo;
137 typedef map< H3DNavigation*, list< H3DNavigationDevices * > > DeviceMap;
138 static DeviceMap all_devices;
163 virtual void resetAll();
166 virtual void disableDevice();
169 virtual void enableDevice();
177 void leftButtonUpdate(
bool _left_button );
180 void motionUpdate(
int x,
int y );
183 void scrollWheelUpdate(
bool up );
201 virtual void resetAll();
204 void handleKeyAction(
int key,
bool pressed );
218 class CalculateHapticDeviceMoveInfo :
219 public TypedField< SFBool, Types< SFBool, SFVec3f > > {
222 CalculateHapticDeviceMoveInfo() : the_owner( NULL ) {
223 button_pressed =
false;
226 virtual void update();
233 Vec3f last_weight_pos;
236 friend class CalculateHapticDeviceMoveInfo;
242 virtual void resetAll();
244 virtual Vec3f getCenterOfRot();
247 H3DUniquePtr< CalculateHapticDeviceMoveInfo > calculateHapticDeviceMoveInfo;
250 bool calculate_center;
259 class CalculateSWSMoveInfo :
260 public AutoUpdate< TypedField< SFBool, Types< SFVec3f, SFRotation, SFRotation > > > {
263 CalculateSWSMoveInfo() : the_owner( NULL ) {
266 virtual void update();
272 friend class CalculateSWSMoveInfo;
278 virtual void resetAll();
281 H3DUniquePtr< CalculateSWSMoveInfo > calculateSWSMoveInfo;
282 H3DUniquePtr< SpaceWareSensor > sws;
Header file for KeySensor, X3D scene-graph node.
Header file for MouseSensor.
Contains the SFRotation field class.
Contains the SFVec3f field class.
Header file for SpaceWareSensor.
Base class for devices that should be used to navigate the scene.
Definition: H3DNavigationDevices.h:44
static bool getMoveInfo(MoveInfo &move_info, H3DNavigation *h3d_navigation)
Call this function to sum up movement changes from all devices returns true if there are changes.
Definition: H3DNavigationDevices.h:73
string getNavType()
Get the current type of navigation.
Definition: H3DNavigationDevices.h:123
virtual ~H3DNavigationDevices()
Destructor.
Definition: H3DNavigationDevices.h:64
static void setNavTypeForAll(string &_nav_type, H3DNavigation *h3d_navigation)
sets type of navigation for all devices
Definition: H3DNavigationDevices.h:108
virtual Vec3f getCenterOfRot()
Get the center or rotation.
Definition: H3DNavigationDevices.h:128
virtual void disableDevice()
virtual function to remove routes for this device.
Definition: H3DNavigationDevices.h:102
virtual void enableDevice()
virtual function to enable routes for this device.
Definition: H3DNavigationDevices.h:105
void setNavType(string &_nav_type)
Set type of navigation.
Definition: H3DNavigationDevices.h:118
H3DNavigation is a class used for navigation in H3DAPI.
Definition: H3DNavigation.h:41
Takes care of navigation using a haptics device.
Definition: H3DNavigationDevices.h:215
Takes care of navigation using keyboard.
Definition: H3DNavigationDevices.h:194
Take care of mouseNavigation.
Definition: H3DNavigationDevices.h:157
bool isEnabled()
Check if MouseNavigation is enabled.
Definition: H3DNavigationDevices.h:172
Takes care of navigation with SpaceWareSensor.
Definition: H3DNavigationDevices.h:256
A template modifier class for adding type checking on the routes to any Field class.
Definition: TypedField.h:84
H3D API namespace.
Definition: Anchor.h:38
The AutoUpdate field is a template to force the BaseField to update itself as soon as an event is rec...
Definition: FieldTemplates.h:130