diff --git a/src/core/StelCore.cpp b/src/core/StelCore.cpp index 62a8052ae4b80..e8cdf3d2f93e6 100644 --- a/src/core/StelCore.cpp +++ b/src/core/StelCore.cpp @@ -1291,7 +1291,7 @@ void StelCore::setAberrationFactor(double factor) { if (!fuzzyEquals(aberrationFactor, factor)) { - aberrationFactor=qBound(0.,factor, 5.); + aberrationFactor=qBound(0.,factor, 10000.); StelApp::immediateSave("astro/aberration_factor", aberrationFactor); emit aberrationFactorChanged(factor); } diff --git a/src/core/StelGeodesicGrid.cpp b/src/core/StelGeodesicGrid.cpp index cec6f21359492..83a2748aef4c4 100644 --- a/src/core/StelGeodesicGrid.cpp +++ b/src/core/StelGeodesicGrid.cpp @@ -313,7 +313,7 @@ int StelGeodesicGrid::getZoneNumberForPoint(const Vec3f &v,int searchLevel) cons // First iteration on the icosahedron base triangles void StelGeodesicGrid::searchZones(const QVector& convex, int **inside_list,int **border_list, - int maxSearchLevel) const + int maxSearchLevel,const Vec3d vel) const { if (maxSearchLevel < 0) maxSearchLevel = 0; else if (maxSearchLevel > maxLevel) maxSearchLevel = maxLevel; @@ -329,12 +329,13 @@ void StelGeodesicGrid::searchZones(const QVector& convex, #else bool corner_inside[12][static_cast(convex.size())]; #endif + const Vec3f velf = vel.toVec3f(); for (int h=0;h& convex, corner_inside[icosahedron_triangles[i].corners[0]], corner_inside[icosahedron_triangles[i].corners[1]], corner_inside[icosahedron_triangles[i].corners[2]], - inside_list,border_list,maxSearchLevel); + inside_list,border_list,maxSearchLevel,velf); } #if defined __STRICT_ANSI__ || !defined __GNUC__ delete[] halfs_used; @@ -360,7 +361,7 @@ void StelGeodesicGrid::searchZones(int lev,int index, const bool *corner1_inside, const bool *corner2_inside, int **inside_list,int **border_list, - const int maxSearchLevel) const + const int maxSearchLevel,const Vec3f vel) const { #if defined __STRICT_ANSI__ || !defined __GNUC__ int *halfs_used = new int[static_cast(halfSpacesUsed)]; @@ -416,26 +417,26 @@ void StelGeodesicGrid::searchZones(int lev,int index, { const int i = halfs_used[h]; const SphericalCap& half_space(convex.at(i)); - edge0_inside[i] = half_space.contains(t.e0); - edge1_inside[i] = half_space.contains(t.e1); - edge2_inside[i] = half_space.contains(t.e2); + edge0_inside[i] = half_space.contains(t.e0+vel); + edge1_inside[i] = half_space.contains(t.e1+vel); + edge2_inside[i] = half_space.contains(t.e2+vel); } searchZones(lev,index+0, convex,halfs_used,halfs_used_count, corner0_inside,edge2_inside,edge1_inside, - inside_list,border_list,maxSearchLevel); + inside_list,border_list,maxSearchLevel,vel); searchZones(lev,index+1, convex,halfs_used,halfs_used_count, edge2_inside,corner1_inside,edge0_inside, - inside_list,border_list,maxSearchLevel); + inside_list,border_list,maxSearchLevel,vel); searchZones(lev,index+2, convex,halfs_used,halfs_used_count, edge1_inside,edge0_inside,corner2_inside, - inside_list,border_list,maxSearchLevel); + inside_list,border_list,maxSearchLevel,vel); searchZones(lev,index+3, convex,halfs_used,halfs_used_count, edge0_inside,edge1_inside,edge2_inside, - inside_list,border_list,maxSearchLevel); + inside_list,border_list,maxSearchLevel,vel); #if defined __STRICT_ANSI__ || !defined __GNUC__ delete[] edge0_inside; delete[] edge1_inside; @@ -453,7 +454,7 @@ void StelGeodesicGrid::searchZones(int lev,int index, /************************************************************************* Return a search result matching the given spatial region *************************************************************************/ -const GeodesicSearchResult* StelGeodesicGrid::search(const QVector& convex, int maxSearchLevel) const +const GeodesicSearchResult* StelGeodesicGrid::search(const QVector& convex, int maxSearchLevel,const Vec3d vel) const { // Try to use the cached version if (maxSearchLevel==lastMaxSearchlevel && convex==lastSearchRegion) @@ -463,7 +464,7 @@ const GeodesicSearchResult* StelGeodesicGrid::search(const QVector // Else recompute it and update cache parameters lastMaxSearchlevel = maxSearchLevel; lastSearchRegion = convex; - cacheSearchResult->search(convex, maxSearchLevel); + cacheSearchResult->search(convex, maxSearchLevel,vel); return cacheSearchResult; } @@ -501,14 +502,14 @@ void GeodesicSearchResult::print() const } } -void GeodesicSearchResult::search(const QVector& convex, int maxSearchLevel) +void GeodesicSearchResult::search(const QVector& convex, int maxSearchLevel, const Vec3d vel) { for (int i=grid.getMaxLevel();i>=0;i--) { inside[i] = zones[i]; border[i] = zones[i]+StelGeodesicGrid::nrOfZones(i); } - grid.searchZones(convex,inside,border,maxSearchLevel); + grid.searchZones(convex,inside,border,maxSearchLevel,vel); } void GeodesicSearchInsideIterator::reset(void) diff --git a/src/core/StelGeodesicGrid.hpp b/src/core/StelGeodesicGrid.hpp index 865e85074c6ec..d4795a3367646 100644 --- a/src/core/StelGeodesicGrid.hpp +++ b/src/core/StelGeodesicGrid.hpp @@ -79,7 +79,7 @@ class StelGeodesicGrid //! Return a search result matching the given spatial region //! The result is cached, meaning that it is very fast to search the same region consecutively //! @return a GeodesicSearchResult instance which must be used with GeodesicSearchBorderIterator and GeodesicSearchInsideIterator - const GeodesicSearchResult* search(const QVector& convex, int maxSearchLevel) const; + const GeodesicSearchResult* search(const QVector& convex, int maxSearchLevel, const Vec3d vel) const; private: friend class GeodesicSearchResult; @@ -100,7 +100,7 @@ class StelGeodesicGrid //! In order to restrict search depth set maxSearchLevel < maxLevel, //! for full search depth set maxSearchLevel = maxLevel, void searchZones(const QVector& convex, - int **inside,int **border,int maxSearchLevel) const; + int **inside,int **border,int maxSearchLevel, const Vec3d vel) const; const Vec3f& getTriangleCorner(int lev, int index, int cornerNumber) const; void initTriangle(int lev,int index, @@ -121,7 +121,7 @@ class StelGeodesicGrid const bool *corner0_inside, const bool *corner1_inside, const bool *corner2_inside, - int **inside,int **border,int maxSearchLevel) const; + int **inside,int **border,int maxSearchLevel, const Vec3f vel) const; const int maxLevel; struct Triangle @@ -149,7 +149,7 @@ class GeodesicSearchResult friend class GeodesicSearchBorderIterator; friend class StelGeodesicGrid; - void search(const QVector& convex, int maxSearchLevel); + void search(const QVector& convex, int maxSearchLeve, const Vec3d vel); const StelGeodesicGrid &grid; int **const zones; diff --git a/src/core/modules/StarMgr.cpp b/src/core/modules/StarMgr.cpp index 74809851072b1..c46f295888b93 100644 --- a/src/core/modules/StarMgr.cpp +++ b/src/core/modules/StarMgr.cpp @@ -1348,10 +1348,6 @@ void StarMgr::draw(StelCore* core) QVector viewportCaps = prj->getViewportConvexPolygon(margin, margin)->getBoundingSphericalCaps(); viewportCaps.append(core->getVisibleSkyArea()); - const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps,maxSearchLevel); - - // Set temporary static variable for optimization - const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate(); // prepare for aberration: Explan. Suppl. 2013, (7.38) const bool withAberration=core->getUseAberration(); @@ -1361,6 +1357,11 @@ void StarMgr::draw(StelCore* core) vel = core->getAberrationVec(core->getJDE()); } + const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxSearchLevel)->search(viewportCaps, maxSearchLevel, vel); + + // Set temporary static variable for optimization + const float names_brightness = labelsFader.getInterstate() * starsFader.getInterstate(); + // Prepare openGL for drawing many stars StelPainter sPainter(prj); QFont font=QGuiApplication::font(); @@ -1484,7 +1485,8 @@ QList StarMgr::searchAround(const Vec3d& vv, double limFov, const e3 *= f; // Search the triangles SphericalConvexPolygon c(e3, e2, e2, e0); - const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel); + Vec3d vel(0.); + const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(lastMaxSearchLevel)->search(c.getBoundingSphericalCaps(),lastMaxSearchLevel,vel); double withParallax = core->getUseParallax() * core->getParallaxFactor(); Vec3d diffPos(0., 0., 0.); @@ -1533,12 +1535,6 @@ QList StarMgr::searchWithin(const SphericalRegionP region, const S #endif largerCaps.append(SphericalCap(cap.n, qMin(cap.d, 0.75))); // 0.83 seemed still too small, unclear why. 0.75 seems to work. } - const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel); - -#ifndef NDEBUG - // Just some temporary debug output. - geodesic_search_result->print(); -#endif // prepare for aberration: Explan. Suppl. 2013, (7.38) const bool withAberration=core->getUseAberration(); Vec3d vel(0.); @@ -1546,6 +1542,12 @@ QList StarMgr::searchWithin(const SphericalRegionP region, const S { vel = core->getAberrationVec(core->getJDE()); } + const GeodesicSearchResult* geodesic_search_result = core->getGeodesicGrid(maxGeodesicGridLevel)->search(largerCaps,maxGeodesicGridLevel,vel); + +#ifndef NDEBUG + // Just some temporary debug output. + geodesic_search_result->print(); +#endif #ifndef NDEBUG qDebug() << "We have" << gridLevels.count() << " ZoneArrays in gridLevels at maxGeodesicGridLevel:" << maxGeodesicGridLevel; diff --git a/src/gui/configurationDialog.ui b/src/gui/configurationDialog.ui index 5daa6a892acdb..1733b27d89118 100644 --- a/src/gui/configurationDialog.ui +++ b/src/gui/configurationDialog.ui @@ -2306,7 +2306,7 @@ 1 - 5.000000000000000 + 10000.000000000000000 0.100000000000000