![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: $ $Revision: $ $State: $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 00015 #include <vrvCore/vrvCore.h> 00016 #include <vrvCore/DtEventProcessorInterface.h> 00017 #include <vrvCore/DtElementEntry.h> 00018 00019 namespace makVrv 00020 { 00021 class DtDe; 00022 class DtInputDriver; 00023 class DtObserver; 00024 class DtIntersectorResult; 00025 00029 class DT_DLL_VRVCORE DtObserverEventProcessor : public DtEventProcessorInterface 00030 { 00031 public: 00032 00034 DtObserverEventProcessor(DtInputDriver& inputDriver, DtDe& de); 00035 00037 virtual ~DtObserverEventProcessor(); 00038 00039 bool isMouseLooking() const; 00040 bool isTerrainDragging() const; 00041 bool isTerrainOrbitDragging() const; 00042 bool isViewDragging() const; 00043 00049 void getHiddenMousePosition( int& mouseX, int& mouseY ); 00050 00054 virtual bool processMouseEvent( const DtMouseEvent& ev, DtChannel& channel); 00055 00059 virtual bool processKeyboardEvent( const DtKeyEvent& ev, DtChannel& channel); 00060 00063 virtual const std::string& className(); 00064 00066 void processRightClickOnSelection( DtChannel& channel, 00067 const DtUniqueID& objectId, const DtMouseState& mouseState ); 00068 00071 static bool isJumpToEvent( DtMouseEvent::EventType mouseEventType, 00072 DtMouseState::MouseModifier mouseModifiers, DtElementEntry::ObjectType type ); 00073 00076 static bool isAttachToEvent( DtMouseEvent::EventType mouseEventType, 00077 DtMouseState::MouseModifier mouseModifiers, DtElementEntry::ObjectType type ); 00078 00079 protected: 00080 00081 void processObjectMousedOn( DtObserver& observer, DtChannel& channel, 00082 const DtMouseEvent& mouseEvent, const DtIntersectorResult& isectResult); 00083 00084 void processTerrainMousedOn( DtObserver& observer, DtChannel& channel, 00085 const DtMouseEvent& mouseEvent, const DtIntersectorResult& isectResult); 00086 00087 void showMouse( DtChannel& channel ); 00088 void hideMouse( DtChannel& channel, const DtMouseEvent& mouseEvent ); 00089 00090 //View drag behavior 00091 void viewDrag(DtObserver&, DtChannel&, const DtMouseEvent& ); 00092 void startViewDrag(DtObserver&, DtChannel&, const DtMouseEvent& ); 00093 void continueViewDrag(DtObserver&, DtChannel&, const DtMouseEvent& ); 00094 void stopViewDrag(DtObserver&, DtChannel&, const DtMouseEvent& ); 00095 00096 //Mouse look behavior 00097 void mouseLook(DtObserver&, DtChannel&, const DtMouseEvent& ); 00098 void startMouseLook(DtObserver&, DtChannel&, const DtMouseEvent& ); 00099 void continueMouseLook( DtObserver&, DtChannel&, const DtMouseEvent& ); 00100 void stopMouseLook(DtObserver&, DtChannel&, const DtMouseEvent& ); 00101 00102 //Terrain drag behavior 00103 void dragTerrain( DtObserver&, DtChannel&, const DtMouseEvent& ); 00104 void startDragTerrain( DtObserver&, DtChannel&, const DtMouseEvent& ); 00105 void continueDragTerrain( DtObserver&, DtChannel&, const DtMouseEvent&); 00106 void stopDragTerrain( DtObserver&, DtChannel&, const DtMouseEvent& ); 00107 00108 void scrollLevelObserverByWheel( DtObserver& observer, DtChannel& channel, 00109 const DtMouseEvent& mouseEvent); 00110 void moveObserverByWheel( DtObserver&, DtChannel&, const DtMouseEvent&); 00111 void changeViewMagnificationByWheel( DtObserver&, DtChannel&, 00112 const DtMouseEvent&); 00113 void changeViewResolutionByWheel( DtObserver& observer, 00114 DtChannel& channel, const DtMouseEvent& mouseEvent ); 00115 void resetMagnification( DtObserver&, DtChannel&, const DtMouseEvent&); 00116 00117 void changeObserverSpeedByWheel(DtObserver& observer, DtChannel& channel, 00118 const DtMouseEvent& me); 00119 00120 void moveObserverOverTerrain( DtObserver&, DtChannel&, const DtMouseEvent& ); 00121 void orbitObserverOverTerrain( DtObserver&, DtChannel&, const DtMouseEvent&); 00122 00123 void pickIntoScene(DtObserver&, DtChannel&, const DtMouseEvent&); 00124 void rotate2DObserver(DtObserver&, double xDelta, double yDelta); 00125 00127 DtElementEntry::ObjectType typeFromId( const DtUniqueID& id ); 00128 00129 protected: 00130 00131 DtDe& myDe; 00132 DtInputDriver& myInputDriver; 00133 std::string myName; 00134 00135 bool myIsMouseLooking; 00136 double myLastMouseLookX; 00137 double myLastMouseLookY; 00138 00140 bool myIsTerrainDragging; 00141 bool myIsTerrainOrbitDragging; 00142 DtMouseEvent myLastTerrainDragMouseEvent; 00143 00144 bool myIsViewDragging; 00145 double myLastViewDragX; 00146 double myLastViewDragY; 00147 00148 int myHiddenMouseX; 00149 int myHiddenMouseY; 00150 00151 double myDragStartX; 00152 double myDragStartY; 00153 double myDragStartZ; 00154 00157 char myQuadrant; 00158 00161 double myVirtualMouseX; 00162 double myVirtualMouseY; 00163 double myHalfWindowWidth; 00164 double myHalfWindowHeight; 00165 }; 00166 }