bool CameraViewSwitchManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter&) { if (ea.getHandled()) return false; switch(ea.getEventType()) { case(GUIEventAdapter::KEYDOWN): if (ea.getKey()=='[') { if (_currentView == 0) _currentView = _cameraViews.size()-1; else _currentView--; return true; } else if (ea.getKey()==']') { _currentView++; if (_currentView >= _cameraViews.size()) _currentView = 0; return true; } return false; default: return false; } }
bool KeySwitchMatrixManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& aa) { if (!_current) return false; bool handled = false; if (!ea.getHandled() && ea.getEventType()==GUIEventAdapter::KEYDOWN) { KeyManipMap::iterator it=_manips.find(ea.getKey()); if(it != _manips.end()) { CameraManipulator* selectedManipulator = it->second.second.get(); if (selectedManipulator!=_current) { OSG_INFO<<"Switching to manipulator: "<<it->second.first<<std::endl; if ( !selectedManipulator->getNode() ) { selectedManipulator->setNode(_current->getNode()); } selectedManipulator->setByMatrix(_current->getMatrix()); selectedManipulator->init(ea,aa); _current = selectedManipulator; } handled = true; } } return _current->handle(ea,aa) || handled; }
bool ChaseCam::handle(const GUIEventAdapter& ea, GUIActionAdapter& us) { if (ea.getHandled()) return false; osgGA::GUIEventAdapter::EventType et = ea.getEventType(); if (et == GUIEventAdapter::KEYDOWN || et == GUIEventAdapter::KEYUP) { bool onoff = (et == GUIEventAdapter::KEYDOWN); if (ea.getKey() == GUIEventAdapter::KEY_Space) { ship->sendInput(SpaceShipServer::ACCELERATE, onoff); return true; } else if (ea.getKey() == GUIEventAdapter::KEY_Left) { ship->sendInput(SpaceShipServer::LEFT, onoff); return true; } else if (ea.getKey() == GUIEventAdapter::KEY_Right) { ship->sendInput(SpaceShipServer::RIGHT, onoff); return true; } else if (ea.getKey() == GUIEventAdapter::KEY_Up) { ship->sendInput(SpaceShipServer::UP, onoff); return true; } else if (ea.getKey() == GUIEventAdapter::KEY_Down) { ship->sendInput(SpaceShipServer::DOWN, onoff); return true; } else if (ea.getKey() == GUIEventAdapter::KEY_S) { ship->sendInput(SpaceShipServer::BACK, onoff); return true; } } return false; }
bool StateSetManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& aa) { if(!_stateset.valid()) return false; if (!_initialized) { _initialized = true; _backface = (_stateset->getMode(GL_CULL_FACE)&osg::StateAttribute::ON); _lighting =(_stateset->getMode(GL_LIGHTING)&osg::StateAttribute::ON); unsigned int mode = osg::StateAttribute::INHERIT|osg::StateAttribute::ON; _texture = (_stateset->getTextureMode(0,GL_TEXTURE_2D)&mode)!=0 || (_stateset->getTextureMode(0,GL_TEXTURE_3D)&mode)!=0 || (_stateset->getTextureMode(0,GL_TEXTURE_RECTANGLE)&mode)!=0 || (_stateset->getTextureMode(0,GL_TEXTURE_CUBE_MAP)&mode)!=0; #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) _texture |= ((_stateset->getTextureMode(0,GL_TEXTURE_1D)&mode)!=0); #endif } if (ea.getHandled()) return false; if (ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN) { if ( ea.getKey() == _keyEventToggleBackfaceCulling ) { setBackfaceEnabled(!getBackfaceEnabled()); aa.requestRedraw(); return true; } if ( ea.getKey() == _keyEventToggleLighting ) { setLightingEnabled(!getLightingEnabled()); aa.requestRedraw(); return true; } if ( ea.getKey() == _keyEventToggleTexturing ) { setTextureEnabled(!getTextureEnabled()); aa.requestRedraw(); return true; } if ( ea.getKey() == _keyEventCyclePolygonMode ) { cyclePolygonMode(); aa.requestRedraw(); return true; } } return false; }
bool Vwr::CameraManipulator::handle(const GUIEventAdapter& ea, GUIActionAdapter& us) { switch(ea.getEventType()) { case(GUIEventAdapter::FRAME): { return handleFrame(ea, us); } default: break; } if (ea.getHandled()) return false; switch(ea.getEventType()) { case(GUIEventAdapter::PUSH): { return handlePush(ea, us); } case(GUIEventAdapter::RELEASE): { return handleRelease(ea, us); } case(GUIEventAdapter::DRAG): case(GUIEventAdapter::SCROLL): { return handleScroll(ea, us); } case(GUIEventAdapter::MOVE): { return false; } case(GUIEventAdapter::KEYDOWN): { return handleKeyDown(ea, us); } case(GUIEventAdapter::KEYUP): { return handleKeyUp( ea, us ); } case(GUIEventAdapter::FRAME): { if (_thrown) { if (calcMovement()) us.requestRedraw(); } return false; } default: return false; } }
/** Handles events. Returns true if handled, false otherwise.*/ bool StandardManipulator::handle( const GUIEventAdapter& ea, GUIActionAdapter& us ) { switch( ea.getEventType() ) { case GUIEventAdapter::FRAME: return handleFrame( ea, us ); case GUIEventAdapter::RESIZE: return handleResize( ea, us ); default: break; } if( ea.getHandled() ) return false; switch( ea.getEventType() ) { case GUIEventAdapter::MOVE: return handleMouseMove( ea, us ); case GUIEventAdapter::DRAG: return handleMouseDrag( ea, us ); case GUIEventAdapter::PUSH: return handleMousePush( ea, us ); case GUIEventAdapter::RELEASE: return handleMouseRelease( ea, us ); case GUIEventAdapter::KEYDOWN: return handleKeyDown( ea, us ); case GUIEventAdapter::KEYUP: return handleKeyUp( ea, us ); case GUIEventAdapter::SCROLL: if( _flags & PROCESS_MOUSE_WHEEL ) return handleMouseWheel( ea, us ); else return false; default: return false; } }
// -------------------------------------------------------------------------------------------------- bool SphericalManipulator::handle(const GUIEventAdapter &ea, GUIActionAdapter &us) { switch (ea.getEventType()) { case (GUIEventAdapter::FRAME): { double current_frame_time = ea.getTime(); _delta_frame_time = current_frame_time - _last_frame_time; _last_frame_time = current_frame_time; if (_thrown) { if (calcMovement()) us.requestRedraw(); } return false; } default: break; } if (ea.getHandled()) return false; switch (ea.getEventType()) { case (GUIEventAdapter::PUSH): { flushMouseEventStack(); addMouseEvent(ea); us.requestContinuousUpdate(false); _thrown = false; return true; } case (GUIEventAdapter::RELEASE): { if (ea.getButtonMask() == 0) { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; if (timeSinceLastRecordEvent > 0.02) flushMouseEventStack(); if (isMouseMoving()) { if (calcMovement()) { us.requestRedraw(); us.requestContinuousUpdate(true); _thrown = _allowThrow; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } return true; } case (GUIEventAdapter::DRAG): case (GUIEventAdapter::SCROLL): { addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; } case (GUIEventAdapter::MOVE): { return false; } case (GUIEventAdapter::KEYDOWN): if (ea.getKey() == GUIEventAdapter::KEY_Space) { flushMouseEventStack(); _thrown = false; home(ea, us); return true; } return false; case (GUIEventAdapter::FRAME): if (_thrown) { if (calcMovement()) us.requestRedraw(); } return false; default: return false; } return false; }
bool TerrainManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us) { switch(ea.getEventType()) { case(GUIEventAdapter::FRAME): if (_thrown) { if (calcMovement()) us.requestRedraw(); } return false; default: break; } if (ea.getHandled()) return false; switch(ea.getEventType()) { case(GUIEventAdapter::PUSH): { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; } case(GUIEventAdapter::RELEASE): { if (ea.getButtonMask()==0) { if (isMouseMoving()) { if (calcMovement()) { us.requestRedraw(); us.requestContinuousUpdate(true); _thrown = true; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } return true; } case(GUIEventAdapter::DRAG): { addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; } case(GUIEventAdapter::MOVE): { return false; } case(GUIEventAdapter::KEYDOWN): if (ea.getKey()== GUIEventAdapter::KEY_Space) { flushMouseEventStack(); _thrown = false; home(ea,us); us.requestRedraw(); us.requestContinuousUpdate(false); return true; } return false; default: return false; } }
bool DriveManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us) { switch(ea.getEventType()) { case(GUIEventAdapter::FRAME): addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); return false; case(GUIEventAdapter::RESIZE): init(ea,us); us.requestRedraw(); return true; default: break; } if (ea.getHandled()) return false; switch(ea.getEventType()) { case(GUIEventAdapter::PUSH): { addMouseEvent(ea); us.requestContinuousUpdate(true); if (calcMovement()) us.requestRedraw(); return true; } case(GUIEventAdapter::RELEASE): { addMouseEvent(ea); us.requestContinuousUpdate(true); if (calcMovement()) us.requestRedraw(); return true; } case(GUIEventAdapter::DRAG): { addMouseEvent(ea); us.requestContinuousUpdate(true); if (calcMovement()) us.requestRedraw(); return true; } case(GUIEventAdapter::MOVE): { addMouseEvent(ea); us.requestContinuousUpdate(true); if (calcMovement()) us.requestRedraw(); return true; } case(GUIEventAdapter::KEYDOWN): { if (ea.getKey()==GUIEventAdapter::KEY_Space) { flushMouseEventStack(); home(ea,us); return true; } else if (ea.getKey()=='q') { _speedMode = USE_MOUSE_Y_FOR_SPEED; return true; } else if (ea.getKey()=='a') { _speedMode = USE_MOUSE_BUTTONS_FOR_SPEED; return true; } #ifdef KEYBOARD_PITCH else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Up || ea.getKey()=='9') { _pitchUpKeyPressed = true; return true; } else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Down || ea.getKey()=='6') { _pitchDownKeyPressed = true; return true; } #endif return false; } case(GUIEventAdapter::KEYUP): { #ifdef KEYBOARD_PITCH if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Up || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Up || ea.getKey()=='9') { _pitchUpKeyPressed = false; return true; } else if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Down || ea.getKey()==osgGA::GUIEventAdapter::KEY_KP_Down || ea.getKey()=='6') { _pitchDownKeyPressed = false; return true; } #endif return false; } default: return false; } }
bool SceneGraphManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us) { if (ea.getHandled()) return false; BaseViewer *v = dynamic_cast<BaseViewer*>(&us); if (!v) return false; else if (!_init) {_sceneGraph = dynamic_cast<SceneGraph*>(getUserData()); _init=true;} Viewer2D3D *v2d3d = dynamic_cast<Viewer2D3D*>(v->getGraphicsViewer()); if (!v2d3d) return false; if(_sceneGraph.valid() && _sceneGraph->getScene()) setInteractionMode(v2d3d->getProjectionType(), (_sceneGraph->getScene()->getBound()).center(), v2d3d->getZoom()); switch(ea.getEventType()) { case(GUIEventAdapter::PUSH): flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; case(GUIEventAdapter::RELEASE): if (ea.getButtonMask()==0) if (isMouseMoving()) { if (calcMovement()) { us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } return true; case(GUIEventAdapter::DRAG): addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; case(GUIEventAdapter::MOVE): return false; case(GUIEventAdapter::KEYDOWN): if (ea.getKey()== _resetCameraKey) // reset camera { flushMouseEventStack(); _thrown = false; home(ea,us); us.requestRedraw(); us.requestContinuousUpdate(false); return true; } else if(ea.getKey() >= 0xFFE1 && ea.getKey() <= 0xFFEE) { // modifier keys _currentModifier = ea.getKey(); return true; } return false; case(GUIEventAdapter::KEYUP): { if(ea.getKey() == _currentModifier) { _currentModifier = 0; return true; } return false; } case(GUIEventAdapter::FRAME): if (_thrown && calcMovement()) us.requestRedraw(); return false; default: return false; } }