void AngleMeasure::handleMouseClicks(class QMouseEvent* event) { if (!flagShowAngleMeasure) { event->setAccepted(false); return; } if (event->type()==QEvent::MouseButtonPress && event->button()==Qt::LeftButton) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(event->x(),event->y(),startPoint); // first click reset the line... only draw it after we've dragged a little. if (!dragging) { lineVisible = false; endPoint = startPoint; } else lineVisible = true; dragging = true; calculateEnds(); event->setAccepted(true); return; } else if (event->type()==QEvent::MouseButtonRelease && event->button()==Qt::LeftButton) { dragging = false; calculateEnds(); event->setAccepted(true); return; } else if (event->type()==QEvent::MouseButtonPress && event->button()==Qt::RightButton) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(event->x(),event->y(),endPoint); calculateEnds(); event->setAccepted(true); return; } event->setAccepted(false); }
void AngleMeasure::update(double deltaTime) { messageFader.update((int)(deltaTime*1000)); lineVisible.update((int)(deltaTime*1000)); static StelCore *core=StelApp::getInstance().getCore(); withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees(); // if altAz endpoint linked to the rotating sky, move respective point(s) if (flagShowHorizontalStartSkylinked) { startPointHor = core->equinoxEquToAltAz(startPoint, StelCore::RefractionAuto); calculateEnds(); } if (flagShowHorizontalEndSkylinked) { endPointHor = core->equinoxEquToAltAz(endPoint, StelCore::RefractionAuto); calculateEnds(); } }
bool AngleMeasure::handleMouseMoves(int x, int y, Qt::MouseButtons) { if (dragging) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(x,y,endPoint); calculateEnds(); lineVisible = true; return true; } else return false; }
bool AngleMeasure::handleMouseMoves(int x, int y, Qt::MouseButtons) { if (dragging) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(x,y,endPoint); { // Nick Fedoseev patch: improve click match Vec3d win; prj->project(endPoint,win); float dx = x - win.v[0]; float dy = y - win.v[1]; prj->unProject(x+dx, y+dy, endPoint); } const StelProjectorP prjHor = StelApp::getInstance().getCore()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff); prjHor->unProject(x,y,endPointHor); calculateEnds(); lineVisible = true; return true; } else return false; }
void AngleMeasure::handleMouseClicks(class QMouseEvent* event) { if (!flagShowAngleMeasure) { event->setAccepted(false); return; } if (event->type()==QEvent::MouseButtonPress && event->button()==Qt::LeftButton) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(event->x(),event->y(),startPoint); { // Nick Fedoseev patch: improve click match Vec3d win; prj->project(startPoint,win); float dx = event->x() - win.v[0]; float dy = event->y() - win.v[1]; prj->unProject(event->x()+dx, event->y()+dy, startPoint); } const StelProjectorP prjHor = StelApp::getInstance().getCore()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff); prjHor->unProject(event->x(),event->y(),startPointHor); // first click reset the line... only draw it after we've dragged a little. if (!dragging) { lineVisible = false; endPoint = startPoint; endPointHor=startPointHor; } else lineVisible = true; dragging = true; calculateEnds(); event->setAccepted(true); return; } else if (event->type()==QEvent::MouseButtonRelease && event->button()==Qt::LeftButton) { dragging = false; calculateEnds(); event->setAccepted(true); return; } else if (event->type()==QEvent::MouseButtonPress && event->button()==Qt::RightButton) { const StelProjectorP prj = StelApp::getInstance().getCore()->getProjection(StelCore::FrameEquinoxEqu); prj->unProject(event->x(),event->y(),endPoint); { // Nick Fedoseev patch: improve click match Vec3d win; prj->project(endPoint,win); float dx = event->x() - win.v[0]; float dy = event->y() - win.v[1]; prj->unProject(event->x()+dx, event->y()+dy, endPoint); } const StelProjectorP prjHor = StelApp::getInstance().getCore()->getProjection(StelCore::FrameAltAz, StelCore::RefractionOff); prjHor->unProject(event->x(),event->y(),endPointHor); calculateEnds(); event->setAccepted(true); return; } event->setAccepted(false); }