void motion(int x, int y) { OSG::Real32 w = win->getWidth(), h = win->getHeight(); OSG::Real32 a = -2. * ( lastx / w - .5 ), b = -2. * ( .5 - lasty / h ), c = -2. * ( x / w - .5 ), d = -2. * ( .5 - y / h ); if ( mouseb & ( 1 << GLUT_LEFT_BUTTON ) ) { tball.updateRotation( a, b, c, d ); } else if ( mouseb & ( 1 << GLUT_MIDDLE_BUTTON ) ) { tball.updatePosition( a, b, c, d ); } else if ( mouseb & ( 1 << GLUT_RIGHT_BUTTON ) ) { tball.updatePositionNeg( a, b, c, d ); } lastx = x; lasty = y; }
void MyOSGQGLWidget::mouseMoveEvent(QMouseEvent *me) { OSG::Real32 w = osgWin->getWidth(); // force the calc to Real32 OSG::Real32 h = osgWin->getHeight(); OSG::Real32 a = -2. * (lastx / w - .5 ); OSG::Real32 b = -2. * (.5 - lasty / h ); OSG::Real32 c = -2. * (me->pos().x() / w - .5); OSG::Real32 d = -2. * (.5 - me->pos().y() / h); if(mouseb & Qt::LeftButton) { tball.updateRotation(a, b, c, d); } else if(mouseb & Qt::MidButton) { tball.updatePosition(a, b, c, d); } else if(mouseb & Qt::RightButton) { tball.updatePositionNeg(a, b, c, d); } lastx = me->pos().x(); lasty = me->pos().y(); updateGL(); }
void motion(int x, int y) { float w = win->getWidth(), h = win->getHeight(); float a = -2 * ( lastx / w - 0.5 ), b = -2 * ( 0.5 - lasty / h ), c = -2 * ( x / w - 0.5 ), d = -2 * ( 0.5 - y / h ); if ( mouseb & ( 1 << GLUT_LEFT_BUTTON ) ) { trackball.updateRotation( a, b, c, d ); } else if ( mouseb & ( 1 << GLUT_MIDDLE_BUTTON ) ) { trackball.updatePosition( a, b, c, d ); } else if ( mouseb & ( 1 << GLUT_RIGHT_BUTTON ) ) { trackball.updatePositionNeg( a, b, c, d ); } lastx = x; lasty = y; }
static OSStatus handleMouseEvent(EventHandlerCallRef nextHandler, EventRef event, void *userData) { OSStatus err; OSG::Real32 w,h,a,b,c,d; // Get the pressed mouse button EventMouseButton mouseButton; err = GetEventParameter(event, kEventParamMouseButton, typeMouseButton, 0, sizeof(mouseButton), 0, &mouseButton); if (err != noErr) return err; // Get the modifier keys ::UInt32 modifierKeys; err = GetEventParameter(event, kEventParamKeyModifiers, typeUInt32, 0, sizeof(modifierKeys), 0, &modifierKeys); if (err != noErr) return err; // Traditionally, Apple mice just have one button. It is common practice to simulate // the middle and the right button by pressing the option or the control key. if (mouseButton == kEventMouseButtonPrimary) { if (modifierKeys & optionKey) mouseButton = kEventMouseButtonTertiary; if (modifierKeys & controlKey) mouseButton = kEventMouseButtonSecondary; } // Get the location of the mouse pointer ::Point location; err = GetEventParameter(event, kEventParamMouseLocation, typeQDPoint, 0, sizeof(location), 0, &location); if (err != noErr) return err; // Handle the different kinds of events ::UInt32 eventKind = GetEventKind(event); switch (eventKind) { // mouse button pressed case kEventMouseDown: lastx = location.h; lasty = location.v; switch (mouseButton) { case kEventMouseButtonPrimary: // left button break; case kEventMouseButtonSecondary: // right button tball.setAutoPositionNeg(true); break; case kEventMouseButtonTertiary: // middle button tball.setAutoPosition(true); break; } break; // mouse button released case kEventMouseUp: switch (mouseButton) { case kEventMouseButtonPrimary: // left button break; case kEventMouseButtonSecondary: // right button tball.setAutoPositionNeg(false); break; case kEventMouseButtonTertiary: // middle button tball.setAutoPosition(false); break; } break; // mouse moved while a button is pressed case kEventMouseDragged: w = win->getWidth(); h = win->getHeight(); a = -2. * ( lastx / w - .5 ); b = -2. * ( .5 - lasty / h ); c = -2. * ( location.h / w - .5 ); d = -2. * ( .5 - location.v / h ); switch (mouseButton) { case kEventMouseButtonPrimary: // left button tball.updateRotation( a, b, c, d ); break; case kEventMouseButtonSecondary: // right button tball.updatePositionNeg( a, b, c, d ); break; case kEventMouseButtonTertiary: // middle button tball.updatePosition( a, b, c, d ); break; } lastx = location.h; lasty = location.v; // Redraw the whole window redraw(); break; } // We have to return eventNotHandledErr, otherwise the system is // not able to operate the menu and the window border return eventNotHandledErr; }