void PerspectiveCamera::mouseDragged(CameraScratch &scratch, QMouseEvent *event) { int xDiff = scratch.pickX - event->pos().x(); int yDiff = scratch.pickY - event->pos().y(); if (scratch.moveType == MoveType::ROTATING) { Vector3 origLook = eye() + lookDir(); setYRot(yRot() + xDiff * 0.5f); setUpRot(upRot() + yDiff * -0.5f); // move eye to look at original focal point (Maya style) Vector3 lookAway = lookDir() * -1; setCenter(origLook + lookAway); } else if (scratch.moveType == MoveType::PANNING) { float panScale = 0.05f; Vector3 mUp = scratch.origUp * -1.0f * yDiff * panScale; Vector3 mLeft = scratch.origLeft * -1.0f * xDiff * panScale; setCenter(eye() + mUp + mLeft); } else if (scratch.moveType == MoveType::TRUCKING) { Point3 at = lookat(); Vector3 l = lookDir() * -0.01f * yDiff; setCenter(l + center()); } scratch.pickX = event->pos().x(); scratch.pickY = event->pos().y(); }
void SimulationWidget::mouseMoveEvent(QMouseEvent *event) { int dx = event->x() - this->lastPos.x(); int dy = event->y() - this->lastPos.y(); if (event->buttons() & Qt::LeftButton) { setXRot(this->xRot + dy); setYRot(this->yRot + dx); } else if (event->buttons() & Qt::RightButton) setZRot(this->zRot + dx); this->lastPos = event->pos(); }//end mouseMoveEvent