diff --git a/src/core/modules/GridLinesMgr.cpp b/src/core/modules/GridLinesMgr.cpp index b6d3b14d7cdff..c17addc4c6651 100644 --- a/src/core/modules/GridLinesMgr.cpp +++ b/src/core/modules/GridLinesMgr.cpp @@ -245,6 +245,7 @@ struct ViewportEdgeIntersectCallbackData Vec4f textColor; QString text; // Label to display at the intersection of the lines and screen side double raAngle; // Used for meridians + double gridStepMeridianRad; // used as rounding threshold StelCore::FrameType frameType; }; @@ -255,7 +256,7 @@ void viewportEdgeIntersectCallback(const Vec3d& screenPos, const Vec3d& directio const Vec4f tmpColor = d->sPainter->getColor(); d->sPainter->setColor(d->textColor); const bool withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees(); - const bool useOldAzimuth = StelApp::getInstance().getFlagSouthAzimuthUsage(); + const bool useSouthAzimuth = StelApp::getInstance().getFlagSouthAzimuthUsage(); const float ppx = static_cast(d->sPainter->getProjector()->getDevicePixelsPerPixel()); const int viewportWidth = d->sPainter->getProjector()->getViewportWidth(); @@ -288,7 +289,7 @@ void viewportEdgeIntersectCallback(const Vec3d& screenPos, const Vec3d& directio if (qFuzzyCompare(raAngle, 2*M_PI) && qFuzzyCompare(delta, -M_PI)) textAngle = 0; - if (useOldAzimuth) + if (useSouthAzimuth) textAngle += M_PI; if (withDecimalDegree) @@ -298,19 +299,12 @@ void viewportEdgeIntersectCallback(const Vec3d& screenPos, const Vec3d& directio break; } - case StelCore::FrameObservercentricEclipticJ2000: - case StelCore::FrameObservercentricEclipticOfDate: - case StelCore::FrameGalactic: - case StelCore::FrameSupergalactic: + default: { - raAngle = d->raAngle; - if (raAngle<0.) - raAngle += 2.*M_PI; + raAngle = StelUtils::fmodpos(d->raAngle, 2.*M_PI); + lon = StelUtils::fmodpos(lon, 2.*M_PI); - if (lon<0.) - lon += 2*M_PI; - - if (std::fabs(2.*M_PI-lon)<0.001) // We are at meridian 0 + if (std::fabs(2.*M_PI-lon)gridStepMeridianRad/250.) // We are at meridian 0 lon = 0.; const double delta = raAngleraAngle; - lon = M_PI-lon; - - if (raAngle<0) - raAngle+=2.*M_PI; - - if (lon<0) - lon+=2.*M_PI; - - if (std::fabs(2.*M_PI-lon)<0.01) // We are at meridian 0 - lon = 0.; - - if (std::fabs(lon-raAngle) < 0.01) - textAngle = -raAngle+M_PI; - else - { - const double delta = raAngleframeType==StelCore::FrameFixedEquatorial) textAngle=2.*M_PI-textAngle; + + textAngle=StelUtils::fmodpos(textAngle, 2.*M_PI); if (withDecimalDegree) text = StelUtils::radToDecDegStr(textAngle, 4, false, true); else - text = StelUtils::radToHmsStrAdapt(textAngle); + { + if (QList{StelCore::FrameObservercentricEclipticJ2000, StelCore::FrameObservercentricEclipticOfDate, + StelCore::FrameGalactic, StelCore::FrameSupergalactic}.contains(d->frameType)) + text = StelUtils::radToDmsStrAdapt(textAngle); + else + text = StelUtils::radToHmsStrAdapt(textAngle); + } } } } @@ -408,13 +381,9 @@ void SkyGrid::draw(const StelCore* core) const // Look for all meridians and parallels intersecting with the disk bounding the viewport // Check whether the pole are in the viewport - bool northPoleInViewport = false; - bool southPoleInViewport = false; Vec3f win; - if (prj->project(Vec3f(0,0,1), win) && prj->checkInViewport(win)) - northPoleInViewport = true; - if (prj->project(Vec3f(0,0,-1), win) && prj->checkInViewport(win)) - southPoleInViewport = true; + const bool northPoleInViewport = (prj->project(Vec3f(0,0,1), win) && prj->checkInViewport(win)); + const bool southPoleInViewport = (prj->project(Vec3f(0,0,-1), win) && prj->checkInViewport(win)); // Get the longitude and latitude resolution at the center of the viewport Vec3d centerV; prj->unProject(prj->getViewportPosX()+prj->getViewportWidth()/2., prj->getViewportPosY()+prj->getViewportHeight()/2.+1., centerV); @@ -461,6 +430,7 @@ void SkyGrid::draw(const StelCore* core) const ViewportEdgeIntersectCallbackData userData(&sPainter); userData.textColor = textColor; userData.frameType = frameType; + userData.gridStepMeridianRad = gridStepMeridianRad; ///////////////////////////////////////////////// // Draw all the meridians (great circles) @@ -473,7 +443,7 @@ void SkyGrid::draw(const StelCore* core) const for (i=0; i 180 deg - sPainter.drawGreatCircleArc(p1, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData); - sPainter.drawGreatCircleArc(p2, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData); + sPainter.drawGreatCircleArc(p1, middlePoint, nullptr, viewportEdgeIntersectCallback, &userData); + sPainter.drawGreatCircleArc(p2, middlePoint, nullptr, viewportEdgeIntersectCallback, &userData); fpt.transfo4d(rotLon); } @@ -517,7 +487,7 @@ void SkyGrid::draw(const StelCore* core) const for (int j=0; j 180 deg - sPainter.drawGreatCircleArc(p1, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData); - sPainter.drawGreatCircleArc(p2, middlePoint, Q_NULLPTR, viewportEdgeIntersectCallback, &userData); + sPainter.drawGreatCircleArc(p1, middlePoint, nullptr, viewportEdgeIntersectCallback, &userData); + sPainter.drawGreatCircleArc(p2, middlePoint, nullptr, viewportEdgeIntersectCallback, &userData); } }