From f06ff1fa5e697cdd2488fccd5e83fc75acf75b94 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Fri, 9 Aug 2024 10:34:25 +0200 Subject: [PATCH 01/32] Handle std::execution issues with Clang/LLVM - those don't know std::execution::par - Add CMake test and safe-use macro to StelUtils --- CMakeLists.txt | 5 +++++ cmake/Check-std_execution.cmake | 7 +++++++ cmake/check-std_execution.cpp | 13 +++++++++++++ src/core/StelUtils.hpp | 9 +++++++++ 4 files changed, 34 insertions(+) create mode 100644 cmake/Check-std_execution.cmake create mode 100644 cmake/check-std_execution.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c08b00e69f901..bc32dad01edd9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1058,6 +1058,11 @@ IF(NOT FROM_CHARS_WORKS) ADD_DEFINITIONS(-DUSE_FAST_FLOAT) ENDIF() +include("cmake/Check-std_execution.cmake") +IF(STD_EXECUTION_KNOWN) +ADD_DEFINITIONS(-DSTD_EXECUTION_KNOWN) +ENDIF() + ########### Top level include directories ########### # This will be used for all compilations in sub-directories INCLUDE_DIRECTORIES( diff --git a/cmake/Check-std_execution.cmake b/cmake/Check-std_execution.cmake new file mode 100644 index 0000000000000..d527424440023 --- /dev/null +++ b/cmake/Check-std_execution.cmake @@ -0,0 +1,7 @@ +message(STATUS "Checking that std::execution::par is supported by the C++ library") +try_compile(STD_EXECUTION_KNOWN "${CMAKE_BINARY_DIR}" "${CMAKE_CURRENT_LIST_DIR}/check-std_execution.cpp") +if(STD_EXECUTION_KNOWN) + message(STATUS "Checking that std::execution::par is supported by the C++ library - yes") +else() + message(STATUS "Checking that std::execution::par is supported by the C++ library - NO") +endif() diff --git a/cmake/check-std_execution.cpp b/cmake/check-std_execution.cpp new file mode 100644 index 0000000000000..c55231698c7fa --- /dev/null +++ b/cmake/check-std_execution.cpp @@ -0,0 +1,13 @@ +#include +#include +#include + + +const std::arraya = {{0., 1., 2., 3.}}; + +int main() +{ + double res = std::reduce(std::execution::par, + a.begin(), a.end(), 0.0, std::plus<>()); + return 0; +} diff --git a/src/core/StelUtils.hpp b/src/core/StelUtils.hpp index f316ce572a0e1..370748d6d53f7 100644 --- a/src/core/StelUtils.hpp +++ b/src/core/StelUtils.hpp @@ -81,6 +81,15 @@ #define L1S(x) QLatin1String(x) +// Allow parallel evaluation of std::transform_reduce(std::execution::par, ...) or +// std::sort(std::execution::par, ...) where known. Not all compilers know it. +// Use std::transform_reduce(STD_EXECUTION_PAR_COMMA ...) for the general case. +#if STD_EXECUTION_KNOWN +# define STD_EXECUTION_PAR_COMMA std::execution::par, +#else +# define STD_EXECUTION_PAR_COMMA +#endif + //! @namespace StelUtils contains general purpose utility functions. namespace StelUtils { From b33736a5a104a14f9cfe13906e04ad8242fcec53 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 23 Jul 2024 17:05:52 +0200 Subject: [PATCH 02/32] Add mutex for thread safety while reading data file --- src/core/planetsephems/jpl_int.h | 4 ++-- src/core/planetsephems/jpleph.cpp | 21 ++++++++++++++------- src/core/planetsephems/jpleph.h | 1 - 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/core/planetsephems/jpl_int.h b/src/core/planetsephems/jpl_int.h index 722bef437b668..a8f01667c819e 100644 --- a/src/core/planetsephems/jpl_int.h +++ b/src/core/planetsephems/jpl_int.h @@ -29,8 +29,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #pragma pack(1) -#include -#include +#include +#include struct interpolation_info { diff --git a/src/core/planetsephems/jpleph.cpp b/src/core/planetsephems/jpleph.cpp index bd83f8e109a96..72841782cc71f 100644 --- a/src/core/planetsephems/jpleph.cpp +++ b/src/core/planetsephems/jpleph.cpp @@ -55,19 +55,22 @@ details of the implementation encapsulated. // Make Large File Support work also on ARM boards, explicitly. #define _FILE_OFFSET_BITS 64 -#include +#include "jpleph.h" +#include "jpl_int.h" + #include +#include #include +#include #include #include #include -#include #include +#include +#include /**** include variable and type definitions, specific for this C version */ -#include "jpleph.h" -#include "jpl_int.h" // GZ patches for Large File Support for DE431 past AD10100... #if defined(Q_OS_WIN) @@ -76,6 +79,7 @@ details of the implementation encapsulated. #define FSeek(__FILE, __OFFSET, _MODE) fseeko(__FILE, __OFFSET, _MODE) #endif +static QMutex mutex; double DLL_FUNC jpl_get_double(const void *ephem, const int value) { @@ -578,20 +582,21 @@ int DLL_FUNC jpl_state(void *ephem, const double et, const int list[14], { struct jpl_eph_data *eph = static_cast(ephem); unsigned i, j, n_intervals; - uint32_t nr; double *buf = eph->cache; double t[2]; const double block_loc = (et - eph->ephem_start) / eph->ephem_step; bool recompute_pvsun; const double aufac = 1.0 / eph->au; + QMutexLocker locker(&mutex); + /* error return for epoch out of range */ if(et < eph->ephem_start || et > eph->ephem_end) return(JPL_EPH_OUTSIDE_RANGE); /* calculate record # and relative time in interval */ - nr = static_cast(block_loc); + uint32_t nr = static_cast(block_loc); t[0] = block_loc - static_cast(nr); if(t[0]==0.0 && nr) { @@ -604,7 +609,7 @@ int DLL_FUNC jpl_state(void *ephem, const double et, const int list[14], { eph->curr_cache_loc = nr; /* Read two blocks ahead to account for header: */ - if(FSeek(eph->ifile, static_cast(nr + 2) * eph->recsize, SEEK_SET)) // lgtm [cpp/integer-multiplication-cast-to-long] + if(FSeek(eph->ifile, static_cast(nr + 2) * eph->recsize, SEEK_SET)) // lgtm [cpp/integer-multiplication-cast-to-long] { // GZ: Make sure we will try again on next call... eph->curr_cache_loc=0; @@ -612,7 +617,9 @@ int DLL_FUNC jpl_state(void *ephem, const double et, const int list[14], } if(fread(buf, sizeof(double), static_cast(eph->ncoeff), eph->ifile) != static_cast(eph->ncoeff)) + { return(JPL_EPH_READ_ERROR); + } if(eph->swap_bytes) swap_64_bit_val(buf, eph->ncoeff); diff --git a/src/core/planetsephems/jpleph.h b/src/core/planetsephems/jpleph.h index 35f6fd97903c9..3fb61939dd43b 100644 --- a/src/core/planetsephems/jpleph.h +++ b/src/core/planetsephems/jpleph.h @@ -114,7 +114,6 @@ int DLL_FUNC jpl_init_error_code( void); /* addition for use in stellarium */ #define JPL_MAX_N_CONSTANTS 1018 -#define CALC_VELOCITY 0 #define CENTRAL_PLANET_ID 11 //ID of sun in JPL enumeration const char * jpl_init_error_message(void); From f40f24368b3bbd62520b9603ed739917fd148df7 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 23 Jul 2024 17:08:18 +0200 Subject: [PATCH 03/32] Let solar system objects be updated concurrently --- src/core/modules/SolarSystem.cpp | 62 ++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 11 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index e919d09fa4622..26a97424467d8 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -60,6 +60,7 @@ #include #include #include +#include SolarSystem::SolarSystem() : StelObjectModule() , shadowPlanetCount(0) @@ -1404,10 +1405,14 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) const bool withAberration=core->getUseAberration(); if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { - for (const auto& p : std::as_const(systemPlanets)) - { - p->computePosition(dateJDE, Vec3d(0.)); - } + //for (const auto& p : std::as_const(systemPlanets)) + //{ + // p->computePosition(dateJDE, Vec3d(0.)); + //} + // TODO(GZ): make sure VSOP and JPL ephems can be run concurrently! + std::function &)> plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(dateJDE, Vec3d(0.));}; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDEZero); + const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); // For higher accuracy, we now make two iterations of light time and aberration correction. In the final @@ -1416,19 +1421,52 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the // used ephemerides already provide aberration-corrected positions for the Moon? const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - for (const auto& p : std::as_const(systemPlanets)) - { - //p->setExtraInfoString(StelObject::DebugAid, ""); + //for (const auto& p : std::as_const(systemPlanets)) + //{ + // //p->setExtraInfoString(StelObject::DebugAid, ""); + // const auto planetPos = p->getHeliocentricEclipticPos(); + // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + // Vec3d aberrationPush(0.); + // if (withAberration && (observerPlanet->englishName!="Earth" || p->englishName!="Moon")) + // aberrationPush=lightTimeDays*aberrationPushSpeed; + // p->computePosition(dateJDE-lightTimeDays, aberrationPush); + //} + std::function &)> plCompPosJDEOne = [=](QSharedPointer &p){ const auto planetPos = p->getHeliocentricEclipticPos(); const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); Vec3d aberrationPush(0.); if (withAberration && (observerPlanet->englishName!=L1S("Earth") || p->englishName!=L1S("Moon"))) aberrationPush=lightTimeDays*aberrationPushSpeed; p->computePosition(dateJDE-lightTimeDays, aberrationPush); - } + }; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDEOne); + // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? - for (const auto& p : std::as_const(systemPlanets)) - { + //for (const auto& p : std::as_const(systemPlanets)) + //{ + // //p->setExtraInfoString(StelObject::DebugAid, ""); + // const auto planetPos = p->getHeliocentricEclipticPos(); + // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + // Vec3d aberrationPush(0.); + // if (withAberration && (observerPlanet->englishName!="Earth" || p->englishName!="Moon")) + // aberrationPush=lightTimeDays*aberrationPushSpeed; + // // The next call may already do nothing if the time difference to the previous round is not large enough. + // p->computePosition(dateJDE-lightTimeDays, aberrationPush); +// // p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") +// // .arg(QString::number(lightTimeDays, 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3))); + + // const auto update = &RotationElements::updatePlanetCorrections; + // if (p->englishName=="Moon") update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + // else if (p->englishName=="Mars") update(dateJDE-lightTimeDays, RotationElements::Mars); + // else if (p->englishName=="Jupiter") update(dateJDE-lightTimeDays, RotationElements::Jupiter); + // else if (p->englishName=="Saturn") update(dateJDE-lightTimeDays, RotationElements::Saturn); + // else if (p->englishName=="Uranus") update(dateJDE-lightTimeDays, RotationElements::Uranus); + // else if (p->englishName=="Neptune") update(dateJDE-lightTimeDays, RotationElements::Neptune); + //} + std::function &)> plCompPosJDETwo = [=](QSharedPointer &p){ //p->setExtraInfoString(StelObject::DebugAid, ""); const auto planetPos = p->getHeliocentricEclipticPos(); const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); @@ -1450,7 +1488,9 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); - } + }; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDETwo); + } else { From 6faf52923686ceca03c047626b18ad460313342c Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 23 Jul 2024 19:52:09 +0200 Subject: [PATCH 04/32] Concurrent VSOP87, finally! - Extended the static cache fields. - should be thread-safe as long as 'body' is different. --- src/core/planetsephems/vsop87.c | 63 +++++++++++++++------------------ src/core/planetsephems/vsop87.h | 8 ++--- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/core/planetsephems/vsop87.c b/src/core/planetsephems/vsop87.c index e5540e7691102..b4babf705238e 100644 --- a/src/core/planetsephems/vsop87.c +++ b/src/core/planetsephems/vsop87.c @@ -47,8 +47,10 @@ so that for given T the functions cos and sin have only to be called 12 times. #include "calc_interpolated_elements.h" #include "elliptic_to_rectangular.h" -#include #include +#include + +#define VSOP87_DIM (8*6) static const int vsop87_max_lambda_factor[12] = { @@ -137196,15 +137198,14 @@ void PrepareLambdaArray(int nr_of_lambdas, (cos,sin)(1*lambda[0]),(cos,sin)(-1*lambda[0]),(cos,sin)(2*lambda[0]),... (cos,sin)(1*lambda[1]),(cos,sin)(-1*lambda[1]),(cos,sin)(2*lambda[1]),... */ - int i,m; - for (i=0;i 0) { if (use_polynomials > 1.0) use_polynomials = 1.0; - for (i=0;i<8*6;i++) { + for (i=0;i0;alpha--) { const int j = vsop87_index_translation_table[i*6+alpha]; @@ -137317,38 +137315,35 @@ void CalcVsop87Elem(const double t,double elem[8*6], void *user) { */ } -/* dirty caching in static variables - If you ever want to allow parallel execution, - make a struct from these and malloc such structs and add pointer arguments to the calls as needed. +/* dirty caching in static variables. This is now thread safe as long as arg 'body' is different. */ -#define VSOP87_DIM (8*6) -static double t_0 = -1e100; -static double t_1 = -1e100; -static double t_2 = -1e100; -static double vsop87_elem_0[VSOP87_DIM]; -static double vsop87_elem_1[VSOP87_DIM]; -static double vsop87_elem_2[VSOP87_DIM]; +static double t_0[8] = {-1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100}; +static double t_1[8] = {-1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100}; +static double t_2[8] = {-1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100}; +static double vsop87_elem_0[8][VSOP87_DIM]; +static double vsop87_elem_1[8][VSOP87_DIM]; +static double vsop87_elem_2[8][VSOP87_DIM]; /* 10 days: */ #define DELTA_T (10.0/365250.0) -static double vsop87_jd0 = -1e100; -static double vsop87_elem[VSOP87_DIM]; +static double vsop87_jd0[8] = {-1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100, -1e100}; +static double vsop87_elem[8][VSOP87_DIM]; -void GetVsop87Coor(double jd,int body,double *xyz) { - GetVsop87OsculatingCoor(jd,jd,body,xyz); +void GetVsop87Coor(double jde, int body, double *xyz) { + GetVsop87OsculatingCoor(jde,jde,body,xyz); } -void GetVsop87OsculatingCoor(const double jd0,const double jd,const int body,double *xyz) { - if (jd0 != vsop87_jd0) { - const double t0 = (jd0 - 2451545.0) / 365250.0; - vsop87_jd0 = jd0; - CalcInterpolatedElements(t0,vsop87_elem, +void GetVsop87OsculatingCoor(const double jde0, const double jde, const int body, double *xyz) { + if (jde0 != vsop87_jd0[body]) { + const double t0 = (jde0 - 2451545.0) / 365250.0; + vsop87_jd0[body] = jde0; + CalcInterpolatedElements(t0,vsop87_elem[body], VSOP87_DIM, &CalcVsop87Elem,DELTA_T, - &t_0,vsop87_elem_0, - &t_1,vsop87_elem_1, - &t_2,vsop87_elem_2, + &t_0[body],vsop87_elem_0[body], + &t_1[body],vsop87_elem_1[body], + &t_2[body],vsop87_elem_2[body], 0); } - EllipticToRectangularA(vsop87_mu[body],vsop87_elem+(body*6),jd-jd0,xyz); + EllipticToRectangularA(vsop87_mu[body],vsop87_elem[body]+(body*6),jde-jde0,xyz); } diff --git a/src/core/planetsephems/vsop87.h b/src/core/planetsephems/vsop87.h index 1d1517b5908eb..2753f1217123c 100644 --- a/src/core/planetsephems/vsop87.h +++ b/src/core/planetsephems/vsop87.h @@ -42,7 +42,7 @@ Furthermore I used the addition formulas so that for given T the functions cos and sin have only to be called 12 times. -ATTENTION! Due to static caching this solution is not reentrant and cannot be parallelized to run in several threads. +ATTENTION! Due to static caching the parallelization to run in several threads works only as long as 'body' (the planet number) is different. ****************************************************************/ @@ -54,7 +54,7 @@ ATTENTION! Due to static caching this solution is not reentrant and cannot be pa extern "C" { #endif -void GetVsop87Coor(double jd,int body,double *xyz); +void GetVsop87Coor(double jde,int body,double *xyz); /* Return the rectangular coordinates of the given planet and the given julian date jd expressed in dynamical time (TAI+32.184s). The origin of the xyz-coordinates is the center of the sun. @@ -62,8 +62,8 @@ void GetVsop87Coor(double jd,int body,double *xyz); which is the reference frame in VSOP87 and VSOP87A. */ -void GetVsop87OsculatingCoor(const double jd0,const double jd, const int body,double *xyz); - /* The oculating orbit of epoch jd0, evaluated at jd, is returned. +void GetVsop87OsculatingCoor(const double jde0,const double jde, const int body,double *xyz); + /* The oculating orbit of epoch jde0, evaluated at jde, is returned. */ #ifdef __cplusplus From 9afa86e9b88244cc8bd32bcdf7704b34058c8814 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 23 Jul 2024 17:08:59 +0200 Subject: [PATCH 05/32] Allow playing with thread pool size --- src/core/StelTextureMgr.cpp | 4 ++-- src/core/modules/SolarSystem.cpp | 7 ++++--- src/main.cpp | 7 +++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core/StelTextureMgr.cpp b/src/core/StelTextureMgr.cpp index b57a4f2be5487..0cb9fc5adbef4 100644 --- a/src/core/StelTextureMgr.cpp +++ b/src/core/StelTextureMgr.cpp @@ -34,8 +34,8 @@ StelTextureMgr::StelTextureMgr(QObject *parent) : QObject(parent), glMemoryUsage(0), loaderThreadPool(new QThreadPool(this)) { #ifdef Q_PROCESSOR_X86_64 - //allow up to 16 textures to be loaded in parallel. Do not use more than half of the cores, as this may cause issues (#3148) - loaderThreadPool->setMaxThreadCount(qBound(1,QThread::idealThreadCount()/2-1, 16)); + //allow up to 8 textures to be loaded in parallel. Do not use more than half of the cores, as this may cause issues (#3148) + loaderThreadPool->setMaxThreadCount(qBound(1,QThread::idealThreadCount()/2-1, 8)); #else //on other archs, for now ensure that just 1 texture is at once in background //otherwise, for large textures loaded in parallel (some scenery3d scenes), the risk of an out-of-memory error is greater on 32bit systems diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 26a97424467d8..c49c711f16943 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1411,7 +1411,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) //} // TODO(GZ): make sure VSOP and JPL ephems can be run concurrently! std::function &)> plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(dateJDE, Vec3d(0.));}; - QtConcurrent::blockingMap(systemPlanets, plCompPosJDEZero); + QtConcurrent::map(systemPlanets, plCompPosJDEZero).waitForFinished(); const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); @@ -1421,6 +1421,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the // used ephemerides already provide aberration-corrected positions for the Moon? const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); + //for (const auto& p : std::as_const(systemPlanets)) //{ // //p->setExtraInfoString(StelObject::DebugAid, ""); @@ -1439,7 +1440,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) aberrationPush=lightTimeDays*aberrationPushSpeed; p->computePosition(dateJDE-lightTimeDays, aberrationPush); }; - QtConcurrent::blockingMap(systemPlanets, plCompPosJDEOne); + QtConcurrent::map(systemPlanets, plCompPosJDEOne).waitForFinished(); // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? //for (const auto& p : std::as_const(systemPlanets)) @@ -1489,7 +1490,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); }; - QtConcurrent::blockingMap(systemPlanets, plCompPosJDETwo); + QtConcurrent::map(systemPlanets, plCompPosJDETwo).waitForFinished(); } else diff --git a/src/main.cpp b/src/main.cpp index b2be5235bd641..865aa08eb9aab 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -49,6 +49,8 @@ #include #include #include +#include + #ifdef Q_OS_MACOS #include @@ -466,6 +468,11 @@ int main(int argc, char **argv) mainWin.show(); SplashScreen::finish(&mainWin); + qDebug() << "Max thread count (Global Pool): " << QThreadPool::globalInstance()->maxThreadCount(); + // Experimental. Use a crazily high number of threads. + //QThreadPool::globalInstance()->setMaxThreadCount(1000); + // Share available cores with the TextureLoader + QThreadPool::globalInstance()->setMaxThreadCount(qMax(1,QThread::idealThreadCount()/2-1)); app.exec(); mainWin.deinit(); From bc65461b4d518df25e473f904b328d9f90d1c4d6 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Thu, 25 Jul 2024 20:43:29 +0200 Subject: [PATCH 06/32] Use just a few threads and split computation Debug message: Report initial number of threads Use reference. --- src/core/modules/SolarSystem.cpp | 165 +++++++++++++++++++++++-------- 1 file changed, 126 insertions(+), 39 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index c49c711f16943..8460939d61849 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1403,19 +1403,48 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) { StelCore *core=StelApp::getInstance().getCore(); const bool withAberration=core->getUseAberration(); + const int availableThreads=qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); + static bool threadMessage=true; + if (threadMessage) + { + qDebug() << "SolarSystem: We should have " << availableThreads << "threads available for computePositions()"; + threadMessage=false; + } + if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { + // 1. First approximation. //for (const auto& p : std::as_const(systemPlanets)) //{ // p->computePosition(dateJDE, Vec3d(0.)); //} - // TODO(GZ): make sure VSOP and JPL ephems can be run concurrently! - std::function &)> plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(dateJDE, Vec3d(0.));}; - QtConcurrent::map(systemPlanets, plCompPosJDEZero).waitForFinished(); - const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + //std::function &)> plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(dateJDE, Vec3d(0.));}; + //QtConcurrent::map(systemPlanets, plCompPosJDEZero).waitForFinished(); + + QList> futures; + + // This defines a function to be thrown onto a pool thread that computes every 'incr'th element. + std::function plCompLoopZero = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->computePosition(dateJDE, Vec3d(0.)); + } + }; + + for (int stride=0; stridegetHeliocentricEclipticPos(); + + // 2. For higher accuracy, we now make two iterations of light time and aberration correction. In the final // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the @@ -1432,17 +1461,40 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // aberrationPush=lightTimeDays*aberrationPushSpeed; // p->computePosition(dateJDE-lightTimeDays, aberrationPush); //} - std::function &)> plCompPosJDEOne = [=](QSharedPointer &p){ - const auto planetPos = p->getHeliocentricEclipticPos(); - const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - Vec3d aberrationPush(0.); - if (withAberration && (observerPlanet->englishName!=L1S("Earth") || p->englishName!=L1S("Moon"))) - aberrationPush=lightTimeDays*aberrationPushSpeed; - p->computePosition(dateJDE-lightTimeDays, aberrationPush); + + //std::function &)> plCompPosJDEOne = [=](QSharedPointer &p){ + // const auto planetPos = p->getHeliocentricEclipticPos(); + // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + // Vec3d aberrationPush(0.); + // if (withAberration && (observerPlanet->englishName!=LS1("Earth") || p->englishName!=LS("Moon"))) + // aberrationPush=lightTimeDays*aberrationPushSpeed; + // p->computePosition(dateJDE-lightTimeDays, aberrationPush); + //}; + //QtConcurrent::map(systemPlanets, plCompPosJDEOne).waitForFinished(); + + std::function plCompLoopOne = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itsetExtraInfoString(StelObject::DebugAid, ""); + const auto planetPos = it->data()->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (observerPlanet->englishName!="Earth" || it->data()->englishName!="Moon")) + aberrationPush=lightTimeDays*aberrationPushSpeed; + it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); + } }; - QtConcurrent::map(systemPlanets, plCompPosJDEOne).waitForFinished(); + for (int stride=0; stridesetExtraInfoString(StelObject::DebugAid, ""); @@ -1456,8 +1508,8 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // // p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") // // .arg(QString::number(lightTimeDays, 'f', 3)) // // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3))); +// // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); // const auto update = &RotationElements::updatePlanetCorrections; // if (p->englishName=="Moon") update(dateJDE-lightTimeDays, RotationElements::EarthMoon); @@ -1467,31 +1519,66 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // else if (p->englishName=="Uranus") update(dateJDE-lightTimeDays, RotationElements::Uranus); // else if (p->englishName=="Neptune") update(dateJDE-lightTimeDays, RotationElements::Neptune); //} - std::function &)> plCompPosJDETwo = [=](QSharedPointer &p){ - //p->setExtraInfoString(StelObject::DebugAid, ""); - const auto planetPos = p->getHeliocentricEclipticPos(); - const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - Vec3d aberrationPush(0.); - if (withAberration && (observerPlanet->englishName!=L1S("Earth") || p->englishName!=L1S("Moon"))) - aberrationPush=lightTimeDays*aberrationPushSpeed; - // The next call may already do nothing if the time difference to the previous round is not large enough. - p->computePosition(dateJDE-lightTimeDays, aberrationPush); -// p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") -// .arg(QString::number(lightTimeDays, 'f', 3)) -// .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// .arg(QString::number(aberrationPushSpeed[0], 'f', 3))); - const auto update = &RotationElements::updatePlanetCorrections; - if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); - else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); - else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); - else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); - else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); - else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); - }; - QtConcurrent::map(systemPlanets, plCompPosJDETwo).waitForFinished(); + //std::function &)> plCompPosJDETwo = [=](QSharedPointer &p){ + // //p->setExtraInfoString(StelObject::DebugAid, ""); + // const auto planetPos = p->getHeliocentricEclipticPos(); + // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + // Vec3d aberrationPush(0.); + // if (withAberration && (observerPlanet->englishName!=LS1("Earth") || p->englishName!=LS("Moon"))) + // aberrationPush=lightTimeDays*aberrationPushSpeed; + // // The next call may already do nothing if the time difference to the previous round is not large enough. + // p->computePosition(dateJDE-lightTimeDays, aberrationPush); +// // p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") +// // .arg(QString::number(lightTimeDays, 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) +// // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); + // const auto update = &RotationElements::updatePlanetCorrections; + // if (p->englishName==LS1("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + // else if (p->englishName==LS1("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + // else if (p->englishName==LS1("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + // else if (p->englishName==LS1("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + // else if (p->englishName==LS1("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + // else if (p->englishName==LS1("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + //}; + //QtConcurrent::map(systemPlanets, plCompPosJDETwo).waitForFinished(); + + std::function plCompLoopTwo = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->setExtraInfoString(StelObject::DebugAid, ""); + const auto planetPos = it->data()->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (observerPlanet->englishName!="Earth" || it->data()->englishName!="Moon")) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); + // it->data()->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") + // .arg(QString::number(lightTimeDays, 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); + + const auto update = &RotationElements::updatePlanetCorrections; + if (it->data()->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (it->data()->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (it->data()->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (it->data()->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (it->data()->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (it->data()->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + } + }; + for (int stride=0; stride Date: Fri, 26 Jul 2024 13:51:09 +0200 Subject: [PATCH 07/32] Add tiny circles as optional markers for minor bodies These are useful to show e.g. 10.000 minor bodies as "asteroid distribution". Also define a static const --- src/core/modules/Planet.cpp | 36 ++++++++++++++++++++++++++----- src/core/modules/Planet.hpp | 9 +++++++- src/core/modules/SolarSystem.cpp | 30 +++++++++++++++++++++++--- src/core/modules/SolarSystem.hpp | 7 ++++++ src/gui/ConfigurationDialog.cpp | 1 + src/gui/ViewDialog.cpp | 1 + src/gui/viewDialog.ui | 10 +++++++++ textures/planet-marker.png | Bin 0 -> 358 bytes 8 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 textures/planet-marker.png diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index e093b5d8bfe35..7bca6975c08ec 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -92,6 +92,7 @@ Vec3f Planet::orbitSaturnColor = Vec3f(1.0f,0.6f,1.0f); Vec3f Planet::orbitUranusColor = Vec3f(1.0f,0.6f,1.0f); Vec3f Planet::orbitNeptuneColor = Vec3f(1.0f,0.6f,1.0f); StelTextureSP Planet::hintCircleTex; +StelTextureSP Planet::markerCircleTex; StelTextureSP Planet::texEarthShadow; bool Planet::drawMoonHalo = true; @@ -2882,7 +2883,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // If asteroid is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of orbital elements!) // AW: Added a special case for educational purpose to drawing orbits for the Solar System Observer // Details: https://sourceforge.net/p/stellarium/discussion/278769/thread/4828ebe4/ - if (((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) + if (!markerFader && ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } @@ -2945,6 +2946,12 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon else labelsFader=false; drawHints(core, planetNameFont); + // TODO: Decide whether isComet should be moved up in the enum list to allow exclusion! + if (getPlanetType()>=Planet::isAsteroid) + { + //qDebug() << getEnglishName(); + drawMarker(core); + } draw3dModel(core,transfo,static_cast(screenRd)); } @@ -3160,7 +3167,7 @@ bool Planet::initShader() if(objShadowShaderProgram) { objShadowShaderProgram->bind(); - const float poissonDisk[] ={ + static const float poissonDisk[] ={ -0.610470f, -0.702763f, 0.609267f, 0.765488f, -0.817537f, -0.412950f, @@ -3441,7 +3448,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans // Else the yellowish halo may be drawn on top of the reddened solar disk which looks bad. // For the other Planets, draw halo after to cover the (possibly dark-contrasting) sphere. - SolarSystem* ssm = GETSTELMODULE(SolarSystem); + static SolarSystem* ssm = GETSTELMODULE(SolarSystem); // Find extinction settings to change colors. The method is rather ad-hoc. const float extinctedMag=getVMagnitudeWithExtinction(core)-getVMagnitude(core); // this is net value of extinction, in mag. @@ -4703,8 +4710,7 @@ void Planet::drawHints(const StelCore* core, const QFont& planetNameFont) // hint disappears smoothly on close view if (hintFader.getInterstate()<=0) return; - tmp -= 10.f; - if (tmp<1) tmp=1; + tmp = qMax(1.0f, tmp - 10.f); sPainter.setColor(labelColor,labelsFader.getInterstate()*hintFader.getInterstate()/tmp*0.7f); // Draw the 2D small circle @@ -4713,6 +4719,25 @@ void Planet::drawHints(const StelCore* core, const QFont& planetNameFont) sPainter.drawSprite2dMode(static_cast(screenPos[0]), static_cast(screenPos[1]), 11); } +// Draw a little marker. Useful for minor bodies to just show "something out there". +void Planet::drawMarker(const StelCore* core) +{ + // TODO: Consider smoothing out the marker when zooming in far enough to make object "naturally" visible. + if (markerFader.getInterstate()<=0) + return; + + const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + StelPainter sPainter(prj); + + sPainter.setColor(labelColor,markerFader.getInterstate()); + + // Draw the 2D small circle + sPainter.setBlending(true); + Planet::markerCircleTex->bind(); + //Planet::hintCircleTex->bind(); + sPainter.drawSprite2dMode(static_cast(screenPos[0]), static_cast(screenPos[1]), 3); +} + Ring::Ring(float radiusMin, float radiusMax, const QString &texname) :radiusMin(radiusMin),radiusMax(radiusMax) { @@ -4926,6 +4951,7 @@ Vec2d Planet::getValidPositionalDataRange(const PositionQuality purpose) const void Planet::update(int deltaTime) { hintFader.update(deltaTime); + markerFader.update(deltaTime); labelsFader.update(deltaTime); orbitFader.update(deltaTime); } diff --git a/src/core/modules/Planet.hpp b/src/core/modules/Planet.hpp index d114593864ab4..7565664721f1b 100644 --- a/src/core/modules/Planet.hpp +++ b/src/core/modules/Planet.hpp @@ -508,6 +508,9 @@ class Planet : public StelObject void setFlagHints(bool b){hintFader = b;} bool getFlagHints(void) const {return hintFader;} + void setFlagMarker(bool b){markerFader = b;} + bool getFlagMarker(void) const {return markerFader;} + void setFlagLabels(bool b){flagLabels = b;} bool getFlagLabels(void) const {return flagLabels;} @@ -725,6 +728,8 @@ class Planet : public StelObject //! Draw the circle and name of the Planet void drawHints(const StelCore* core, const QFont& planetNameFont); + //! Draw a small mark for the planet. This can be used to mark "something" in the sky, for showing distribution of minor bodies. + void drawMarker(const StelCore* core); PlanetOBJModel* loadObjModel() const; @@ -794,6 +799,7 @@ class Planet : public StelObject QSharedPointer parent; // Planet parent i.e. sun for earth QList > satellites; // satellites of the Planet LinearFader hintFader; + LinearFader markerFader; // Useful for markers displayed for minor bodies regardless of magnitude LinearFader labelsFader; // Store the current state of the label for this planet bool flagLabels; // Define whether labels should be displayed bool hidden; // useful for fake planets used as observation positions - not drawn or labeled @@ -808,7 +814,8 @@ class Planet : public StelObject QOpenGLFunctions* gl; static Vec3f labelColor; - static StelTextureSP hintCircleTex; + static StelTextureSP hintCircleTex; // The circle around an SSO + static StelTextureSP markerCircleTex; // An optional marker to have "something" in the sky even if object not visible. static const QMap pTypeMap; // Maps fast type to english name. static const QMap nPlanetMap; // Maps fast IAU number to IAU designation. static const QMap vMagAlgorithmMap; diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 8460939d61849..2d90134cbffd7 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -204,6 +204,7 @@ void SolarSystem::init() setSunScale(conf->value("viewing/sun_scale", 4.0).toDouble()); setFlagPlanets(conf->value("astro/flag_planets").toBool()); setFlagHints(conf->value("astro/flag_planets_hints").toBool()); + setFlagMarkers(conf->value("astro/flag_planets_markers", false).toBool()); setFlagLabels(conf->value("astro/flag_planets_labels", true).toBool()); setLabelsAmount(conf->value("astro/labels_amount", 3.).toDouble()); setFlagOrbits(conf->value("astro/flag_planets_orbits").toBool()); @@ -299,7 +300,8 @@ void SolarSystem::init() texEphemerisNowMarker = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/gear.png"); texEphemerisCometMarker = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/cometIcon.png"); Planet::hintCircleTex = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/planet-indicator.png"); - + Planet::markerCircleTex = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/planet-marker.png"); + StelApp *app = &StelApp::getInstance(); connect(app, SIGNAL(languageChanged()), this, SLOT(updateI18n())); connect(&app->getSkyCultureMgr(), &StelSkyCultureMgr::currentSkyCultureIDChanged, this, &SolarSystem::updateSkyCulture); @@ -2283,7 +2285,7 @@ void SolarSystem::setFlagHints(bool b) bool SolarSystem::getFlagHints(void) const { - for (const auto& p : systemPlanets) + for (const auto& p : std::as_const(systemPlanets)) { if (p->getFlagHints()) return true; @@ -2303,7 +2305,7 @@ void SolarSystem::setFlagLabels(bool b) bool SolarSystem::getFlagLabels() const { - for (const auto& p : systemPlanets) + for (const auto& p : std::as_const(systemPlanets)) { if (p->getFlagLabels()) return true; @@ -2311,6 +2313,27 @@ bool SolarSystem::getFlagLabels() const return false; } +void SolarSystem::setFlagMarkers(bool b) +{ + if (getFlagMarkers() != b) + { + for (const auto& p : std::as_const(systemPlanets)) + p->setFlagMarker(b); + emit markersDisplayedChanged(b); + } +} + +// A bit weird. Currently this returns true if only one marker has been set. However, we keep markers/hints private to the planets, in case particular objects should be marked. +bool SolarSystem::getFlagMarkers() const +{ + for (const auto& p : std::as_const(systemPlanets)) + { + if (p->getFlagMarker()) + return true; + } + return false; +} + void SolarSystem::setFlagLightTravelTime(bool b) { if(b!=flagLightTravelTime) @@ -3793,6 +3816,7 @@ bool SolarSystem::removeMinorPlanet(QString name) qWarning() << "Cannot remove planet " << name << ": Not found."; return false; } + Orbit* orbPtr=static_cast(candidate->orbitPtr); if (orbPtr) orbits.removeOne(orbPtr); diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index ccfca220c5638..45b8313000abd 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -59,6 +59,7 @@ class SolarSystem : public StelObjectModule Q_PROPERTY(int trailsThickness READ getTrailsThickness WRITE setTrailsThickness NOTIFY trailsThicknessChanged) // This is a "forwarding property" only, without own variable. Q_PROPERTY(bool flagHints READ getFlagHints WRITE setFlagHints NOTIFY flagHintsChanged) + Q_PROPERTY(bool flagMarkers READ getFlagMarkers WRITE setFlagMarkers NOTIFY markersDisplayedChanged) Q_PROPERTY(bool flagPointer READ getFlagPointer WRITE setFlagPointer NOTIFY flagPointerChanged) Q_PROPERTY(bool flagNativePlanetNames READ getFlagNativePlanetNames WRITE setFlagNativePlanetNames NOTIFY flagNativePlanetNamesChanged) Q_PROPERTY(bool planetsDisplayed READ getFlagPlanets WRITE setFlagPlanets NOTIFY flagPlanetsDisplayedChanged) @@ -249,6 +250,11 @@ public slots: //! Get the current value of the flag which determines if planet hints are drawn or hidden along labels bool getFlagHints() const; + //! Set flag which determines if planet markers are drawn for minor bodies + void setFlagMarkers(bool b); + //! Get the current value of the flag which determines if planet markers are drawn for minor bodies + bool getFlagMarkers() const; + //! Set flag which determines if planet labels are drawn or hidden. void setFlagLabels(bool b); //! Get the current value of the flag which determines if planet labels are drawn or hidden. @@ -751,6 +757,7 @@ public slots: void labelsDisplayedChanged(bool b); void flagOrbitsChanged(bool b); void flagHintsChanged(bool b); + void markersDisplayedChanged(bool b); void flagDrawMoonHaloChanged(bool b); void flagDrawSunHaloChanged(bool b); void trailsDisplayedChanged(bool b); diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index 163eb630b06fb..3d8c3e82af0b8 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -865,6 +865,7 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("viewing/use_luminance_adaptation", propMgr->getStelPropertyValue("StelSkyDrawer.flagLuminanceAdaptation").toBool()); conf->setValue("astro/flag_planets", propMgr->getStelPropertyValue("SolarSystem.planetsDisplayed").toBool()); conf->setValue("astro/flag_planets_hints", propMgr->getStelPropertyValue("SolarSystem.flagHints").toBool()); + conf->setValue("astro/flag_planets_markers", propMgr->getStelPropertyValue("SolarSystem.flagMarkers").toBool()); conf->setValue("astro/flag_planets_orbits", propMgr->getStelPropertyValue("SolarSystem.flagOrbits").toBool()); conf->setValue("astro/flag_permanent_orbits", propMgr->getStelPropertyValue("SolarSystem.flagPermanentOrbits").toBool()); conf->setValue("astro/object_orbits_thickness", propMgr->getStelPropertyValue("SolarSystem.orbitsThickness").toInt()); diff --git a/src/gui/ViewDialog.cpp b/src/gui/ViewDialog.cpp index 455029033a281..ae76005353831 100644 --- a/src/gui/ViewDialog.cpp +++ b/src/gui/ViewDialog.cpp @@ -253,6 +253,7 @@ void ViewDialog::createDialogContent() connectBoolProperty(ui->planetIsolatedTrailsCheckBox, "SolarSystem.flagIsolatedTrails"); connectIntProperty(ui->planetIsolatedTrailsSpinBox, "SolarSystem.numberIsolatedTrails"); connectBoolProperty(ui->drawMoonHaloCheckBox, "SolarSystem.flagDrawMoonHalo"); + connectBoolProperty(ui->minorPlanetMarkersCheckBox, "SolarSystem.flagMarkers"); connectBoolProperty(ui->drawSunGlareCheckBox, "SolarSystem.flagDrawSunHalo"); connectBoolProperty(ui->drawSunCoronaCheckBox, "SolarSystem.flagPermanentSolarCorona"); connectBoolProperty(ui->shadowEnlargementDanjonCheckBox, "SolarSystem.earthShadowEnlargementDanjon"); diff --git a/src/gui/viewDialog.ui b/src/gui/viewDialog.ui index 1806d177f954c..e12a02c6a834c 100644 --- a/src/gui/viewDialog.ui +++ b/src/gui/viewDialog.ui @@ -1441,6 +1441,16 @@ + + + + Show tiny circles for minor bodies regardless of magnitude + + + Minor Planet Markers + + + diff --git a/textures/planet-marker.png b/textures/planet-marker.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc4a1dec085b1978cf2664c73777cf85c2fefcc GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^93afW0wnX;%77#TOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>gQ95^FVW+f*Nrv6z?@EC)W-l!L-Z$m;j2*vL?Uhm1UGwJaiMKXJ!RECbY~rD6 zHGg=OE=OriV%e$}l)1XZETczO$#7E`=iJH9`5TYOhxQ0^s{?ITEpd$~Nl7e8wMs5Z z1yT$~21X{j2Ijg(W+4U^Rz?<9hDO>3237_J*Om8_qG-s?PsvQH1ZgnVH8j*UG7m8@ bv@!-NwS;Kk6OH-`)WG2B>gTe~DWM4fn>lRt literal 0 HcmV?d00001 From 6f8840da19d7828a46c818dc737c499084b2b1d2 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Fri, 26 Jul 2024 14:42:05 +0200 Subject: [PATCH 08/32] Optimisation for terrestrial observers. Profiler shows high use of this method --- src/core/modules/SolarSystem.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 2d90134cbffd7..3e040436d56d0 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -3697,6 +3697,11 @@ QPair SolarSystem::getSolarEclipseFactor(const StelCore* core) if(planet == sun || planet == core->getCurrentPlanet()) continue; + // Seen from Earth, only Moon, Venus or Mercury are relevant. The rest can be thrown away. There is no asteroid to go in front of the sun... + static const QStringList fromEarth({"Moon", "Mercury", "Venus"}); + if ((core->getCurrentPlanet() == earth) && !fromEarth.contains(planet->englishName)) + continue; + Mat4d trans; planet->computeModelMatrix(trans, true); From 7d9deb27c872a384409afcdc773a630192614295 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Fri, 26 Jul 2024 22:54:12 +0200 Subject: [PATCH 09/32] Allow manual configuration of extra thread count - debug output about running threads - also disable manual threadpool limit --- src/core/modules/SolarSystem.cpp | 44 +++- src/core/modules/SolarSystem.hpp | 9 + src/gui/ConfigurationDialog.cpp | 3 + src/gui/configurationDialog.ui | 425 +++++++++++++++++-------------- src/main.cpp | 6 +- 5 files changed, 285 insertions(+), 202 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 3e040436d56d0..4025fc750c481 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -48,6 +48,7 @@ #include "StelObserver.hpp" #include +#include #include #include @@ -115,6 +116,7 @@ SolarSystem::SolarSystem() : StelObjectModule() , ephemerisSaturnMarkerColor(Vec3f(0.0f, 1.0f, 0.0f)) , allTrails(Q_NULLPTR) , conf(StelApp::getInstance().getSettings()) + , extraThreads(0) { planetNameFont.setPixelSize(StelApp::getInstance().getScreenFontSize()); connect(&StelApp::getInstance(), SIGNAL(screenFontSizeChanged(int)), this, SLOT(setFontSize(int))); @@ -188,7 +190,8 @@ void SolarSystem::init() loadPlanets(); // Load planets data // Compute position and matrix of sun and all the satellites (ie planets) - // for the first initialization Q_ASSERT that center is sun center (only impacts on light speed correction) + // for the first initialization Q_ASSERT that center is sun center (only impacts on light speed correction) + setExtraThreads(conf->value("astro/solar_system_threads", 0).toInt()); computePositions(StelApp::getInstance().getCore()->getJDE(), getSun()); setSelected(""); // Fix a bug on macosX! Thanks Fumio! @@ -1405,13 +1408,18 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) { StelCore *core=StelApp::getInstance().getCore(); const bool withAberration=core->getUseAberration(); - const int availableThreads=qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); + // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. + // Given the comparably low impact of planetary positions on the overall frame time, we don't need more than 4 extra threads. (Profiled with 12.000 objects.) +// const int availablePoolThreads=qBound(0, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount(), 4); // qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); + const int availablePoolThreads=extraThreads; static bool threadMessage=true; if (threadMessage) { - qDebug() << "SolarSystem: We should have " << availableThreads << "threads available for computePositions()"; + qDebug() << "SolarSystem: We should have " << availablePoolThreads << "threads (plus main thread) available for computePositions()"; threadMessage=false; } + static StelObjectMgr* omgr=GETSTELMODULE(StelObjectMgr); + omgr->removeExtraInfoStrings(StelObject::DebugAid); if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { @@ -1428,17 +1436,20 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // This defines a function to be thrown onto a pool thread that computes every 'incr'th element. std::function plCompLoopZero = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->computePosition(dateJDE, Vec3d(0.)); } }; - for (int stride=0; stride plCompLoopOne = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itsetExtraInfoString(StelObject::DebugAid, ""); const auto planetPos = it->data()->getHeliocentricEclipticPos(); @@ -1486,11 +1497,12 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); } }; - for (int stride=0; stride plCompLoopTwo = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->setExtraInfoString(StelObject::DebugAid, ""); const auto planetPos = it->data()->getHeliocentricEclipticPos(); @@ -1573,11 +1586,19 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) else if (it->data()->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); } }; - for (int stride=0; strideaddToExtraInfoString(StelObject::DebugAid, QString("Threads: Ideal: %1, Pool max %2/active %3, SolarSystem using %4
"). + arg(QString::number(QThread::idealThreadCount()), + QString::number(QThreadPool::globalInstance()->maxThreadCount()), + QString::number(QThreadPool::globalInstance()->activeThreadCount()), + QString::number(availablePoolThreads))); + // and we still run the last stride in the main thread. + plCompLoopTwo(availablePoolThreads); // Now the list is being computed by other threads. we can just wait sequentially for completion. for(auto f: futures) f.waitForFinished(); @@ -1652,8 +1673,9 @@ void SolarSystem::draw(StelCore* core) p->computeDistance(obsHelioPos); } - // And sort them from the furthest to the closest - std::sort(systemPlanets.begin(),systemPlanets.end(),biggerDistance()); + // And sort them from the furthest to the closest. std::sort can split this into parallel threads! + std::sort(STD_EXECUTION_PAR_COMMA + systemPlanets.begin(),systemPlanets.end(),biggerDistance()); if (trailFader.getInterstate()>0.0000001f) { diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 45b8313000abd..30e0047ade12b 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -144,6 +144,7 @@ class SolarSystem : public StelObjectModule Q_PROPERTY(int orbitsThickness READ getOrbitsThickness WRITE setOrbitsThickness NOTIFY orbitsThicknessChanged) Q_PROPERTY(bool flagDrawMoonHalo READ getFlagDrawMoonHalo WRITE setFlagDrawMoonHalo NOTIFY flagDrawMoonHaloChanged) Q_PROPERTY(bool flagDrawSunHalo READ getFlagDrawSunHalo WRITE setFlagDrawSunHalo NOTIFY flagDrawSunHaloChanged) + Q_PROPERTY(int extraThreads READ getExtraThreads WRITE setExtraThreads NOTIFY extraThreadsChanged) public: SolarSystem(); @@ -753,6 +754,9 @@ public slots: //! The texture path starts in the scripts directory. void setTextureForPlanet(const QString &planetName, const QString &texName); + int getExtraThreads() const {return extraThreads;} + void setExtraThreads(int n){extraThreads=n;} + signals: void labelsDisplayedChanged(bool b); void flagOrbitsChanged(bool b); @@ -846,6 +850,8 @@ public slots: void solarSystemDataReloaded(); void requestEphemerisVisualization(); + void extraThreadsChanged(const int); + public: /////////////////////////////////////////////////////////////////////////// // Other public methods @@ -1172,6 +1178,9 @@ private slots: // note that we must also always compensate to light time travel, so likely each computation has to be done twice, // with current JDE and JDE-lightTime(distance). QList orbits; // Pointers on created elliptical orbits. 0.16pre: WHY DO WE NEED THIS??? + + //! Number of additional threads. This could be automatically derived, but for now we can experiment. + int extraThreads; }; diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index 3d8c3e82af0b8..2add949fbafea 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -345,6 +345,7 @@ void ConfigurationDialog::createDialogContent() connectBoolProperty(ui->focusOnDaySpinnerCheckBox, "StelGui.flagEnableFocusOnDaySpinner"); ui->overwriteTextColorButton->setup("StelApp.overwriteInfoColor", "color/info_text_color"); ui->daylightTextColorButton ->setup("StelApp.daylightInfoColor", "color/daylight_text_color"); + connectIntProperty(ui->solarSystemThreadNumberSpinBox, "SolarSystem.extraThreads"); // Font selection. We use a hidden, but documented entry in config.ini to optionally show a font selection option. connectIntProperty(ui->screenFontSizeSpinBox, "StelApp.screenFontSize"); @@ -1057,6 +1058,8 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("astro/aberration_factor", core->getAberrationFactor()); conf->setValue("astro/flag_topocentric_coordinates", core->getUseTopocentricCoordinates()); + conf->setValue("astro/solar_system_threads", propMgr->getStelPropertyValue("SolarSystem.extraThreads").toInt()); + // view dialog / DSO tag settings nmgr->storeCatalogFilters(); diff --git a/src/gui/configurationDialog.ui b/src/gui/configurationDialog.ui index b808f3825fbda..f5a30861603dc 100644 --- a/src/gui/configurationDialog.ui +++ b/src/gui/configurationDialog.ui @@ -1796,91 +1796,166 @@
- - + + + + + + Info text color for overwrite + + + + + + + Set one color for text in info panel for all objects + + + Overwrite text color + + + + + + + - Allow mouse to zoom (mousewheel) + When enabled, the "auto zoom out" key will also set the initial viewing direction - Enable mouse zooming + Auto-direction at zoom out - - + + - Activate to view as seen from surface of the planet (recommended). If switched off, display planetocentric view. + Mask out everything outside a central circle in the main view - Topocentric coordinates + Disc viewport - - + + + + Allow mouse to pan (drag) + + + Enable mouse navigation + + + + + + + Spheric mirror distortion is used when projecting Stellarium onto a spheric mirror for low-cost planetarium systems. + + + Spheric mirror distortion + + + true + + + + + + + Flash a short message when toggling mount mode. + + + Indication for mount mode + + + + + - + - Allow keyboard to pan and zoom + Hides the mouse cursor when inactive - Enable keyboard navigation + Mouse cursor timeout: - + Qt::Horizontal - 40 + 30 20 - - - - 0 - 0 - - + - Edit keyboard shortcuts... + seconds - - - :/graphicGui/uibtSettings.png - :/graphicGui/uibtSettings-disabled.png:/graphicGui/uibtSettings.png + + false + + + 1 + + + 0.000000000000000 + + + 3600.000000000000000 + + + 10.000000000000000 - - + + - When enabled, the "auto zoom out" key will also set the initial viewing direction + Allow mouse to zoom (mousewheel) - Auto-direction at zoom out + Enable mouse zooming - - + + - Allow mouse to pan (drag) + Hide other constellations when you click one + + + Hide other constellations when you click one - Enable mouse navigation + Select single constellation + + + + + + Dithering + + + + + + + + @@ -1891,51 +1966,141 @@ - - + + - - - Info text color for overwrite + + + Framerate intent: - + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + min: + + + + + - Set one color for text in info panel for all objects + Minimum intended FPS between user interaction. Set very low to conserve energy or save CPU use. + + false + + + 1 + + + 1000 + + + + + - Overwrite text color + max: + + + + + + + Maximum allowed FPS. 1000 just means "as fast as possible". + + + false + + + 5 + + + 1000 + + + 1000 - - + + - + + + Allow keyboard to pan and zoom + - Dithering + Enable keyboard navigation - + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Edit keyboard shortcuts... + + + + :/graphicGui/uibtSettings.png + :/graphicGui/uibtSettings-disabled.png:/graphicGui/uibtSettings.png + + - - + + - Hide other constellations when you click one + Activate to view as seen from surface of the planet (recommended). If switched off, display planetocentric view. - - Hide other constellations when you click one + + Topocentric coordinates + + + + + + + Kinetic scrolling means dragging text panels directly instead of dragging window handles. - Select single constellation + Use kinetic scrolling @@ -1957,26 +2122,6 @@ - - - - Use decimal degrees for coordinates - - - Use decimal degrees - - - - - - - Activate this option to calculate azimuth from south towards west. - - - Azimuth from South - - - @@ -1987,29 +2132,6 @@ - - - - Mask out everything outside a central circle in the main view - - - Disc viewport - - - - - - - Spheric mirror distortion is used when projecting Stellarium onto a spheric mirror for low-cost planetarium systems. - - - Spheric mirror distortion - - - true - - - @@ -2073,86 +2195,54 @@ - - - - Flash a short message when toggling mount mode. - - - Indication for mount mode - - - - - - - Kinetic scrolling means dragging text panels directly instead of dragging window handles. - - - Use kinetic scrolling - - - - - + + - + - Hides the mouse cursor when inactive + Activate this option to calculate azimuth from south towards west. - Mouse cursor timeout: + Azimuth from South - + Qt::Horizontal - 30 + 40 20 - + - seconds + Use decimal degrees for coordinates - - false - - - 1 - - - 0.000000000000000 - - - 3600.000000000000000 - - - 10.000000000000000 + + Use decimal degrees - - + + - + - Framerate intent: + SolarSystem Extra Threads - + Qt::Horizontal @@ -2165,51 +2255,12 @@ - - - min: - - - - - - - Minimum intended FPS between user interaction. Set very low to conserve energy or save CPU use. - - - false - - - 1 - - - 1000 - - - - - - - max: - - - - - + - Maximum allowed FPS. 1000 just means "as fast as possible". - - - false - - - 5 + A few additional threads may improve speed with many solar system objects. Observe what works best on your multicore system. - 1000 - - - 1000 + 16 diff --git a/src/main.cpp b/src/main.cpp index 865aa08eb9aab..26d39d986787b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -469,10 +469,8 @@ int main(int argc, char **argv) mainWin.show(); SplashScreen::finish(&mainWin); qDebug() << "Max thread count (Global Pool): " << QThreadPool::globalInstance()->maxThreadCount(); - // Experimental. Use a crazily high number of threads. - //QThreadPool::globalInstance()->setMaxThreadCount(1000); - // Share available cores with the TextureLoader - QThreadPool::globalInstance()->setMaxThreadCount(qMax(1,QThread::idealThreadCount()/2-1)); + // Share available cores with the TextureLoader and other jobs + //QThreadPool::globalInstance()->setMaxThreadCount(qMax(1,QThread::idealThreadCount()/2-1)); app.exec(); mainWin.deinit(); From 3e77189ada1e3a2e2b9e3a68968676bfc41c7fdf Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sat, 27 Jul 2024 14:29:56 +0200 Subject: [PATCH 10/32] Re-use StelPainter --- src/core/modules/Comet.cpp | 5 ++++- src/core/modules/Planet.cpp | 21 ++++++++++++--------- src/core/modules/Planet.hpp | 4 ++-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/core/modules/Comet.cpp b/src/core/modules/Comet.cpp index 47c0d4d6849c1..c32856c1d6056 100644 --- a/src/core/modules/Comet.cpp +++ b/src/core/modules/Comet.cpp @@ -493,7 +493,10 @@ void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont drawOrbit(core); // TODO - fade in here also... labelsFader = (flagLabels && ang_dist>0.25f && maxMagLabels>getVMagnitude(core)); - drawHints(core, planetNameFont); + + const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + StelPainter sPainter(prj); + drawHints(core, sPainter, planetNameFont); draw3dModel(core,transfo,static_cast(screenRd)); } diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 7bca6975c08ec..429e064fdee1e 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2945,12 +2945,15 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon labelsFader=true; else labelsFader=false; - drawHints(core, planetNameFont); + + const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + StelPainter sPainter(prj); + drawHints(core, sPainter, planetNameFont); // TODO: Decide whether isComet should be moved up in the enum list to allow exclusion! if (getPlanetType()>=Planet::isAsteroid) { //qDebug() << getEnglishName(); - drawMarker(core); + drawMarker(core, sPainter); } draw3dModel(core,transfo,static_cast(screenRd)); @@ -4693,16 +4696,16 @@ bool Planet::drawObjShadowMap(StelPainter *painter, QMatrix4x4& shadowMatrix) return true; } -void Planet::drawHints(const StelCore* core, const QFont& planetNameFont) +void Planet::drawHints(const StelCore* core, StelPainter &sPainter, const QFont& planetNameFont) { if (labelsFader.getInterstate()<=0.f) return; - const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); - StelPainter sPainter(prj); + //const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + //StelPainter sPainter(prj); sPainter.setFont(planetNameFont); // Draw nameI18 + scaling if it's not == 1. - float tmp = (hintFader.getInterstate()<=0.f ? 7.f : 10.f) + static_cast(getAngularRadius(core)*M_PI/180.)*prj->getPixelPerRadAtCenter()/1.44f; // Shift for nameI18 printing + float tmp = (hintFader.getInterstate()<=0.f ? 7.f : 10.f) + static_cast(getAngularRadius(core)*M_PI/180.)*sPainter.getProjector()->getPixelPerRadAtCenter()/1.44f; // Shift for nameI18 printing sPainter.setColor(labelColor,labelsFader.getInterstate()); const QString label = (sphereScale != 1.) ? QString("%1 (\xC3\x97%2)").arg(getPlanetLabel(), QString::number(sphereScale, 'f', 2)) : getPlanetLabel(); sPainter.drawText(static_cast(screenPos[0]),static_cast(screenPos[1]), label, 0, tmp, tmp, false); @@ -4720,14 +4723,14 @@ void Planet::drawHints(const StelCore* core, const QFont& planetNameFont) } // Draw a little marker. Useful for minor bodies to just show "something out there". -void Planet::drawMarker(const StelCore* core) +void Planet::drawMarker(const StelCore* core, StelPainter &sPainter) { // TODO: Consider smoothing out the marker when zooming in far enough to make object "naturally" visible. if (markerFader.getInterstate()<=0) return; - const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); - StelPainter sPainter(prj); + //const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + //StelPainter sPainter(prj); sPainter.setColor(labelColor,markerFader.getInterstate()); diff --git a/src/core/modules/Planet.hpp b/src/core/modules/Planet.hpp index 7565664721f1b..d205161d9d2de 100644 --- a/src/core/modules/Planet.hpp +++ b/src/core/modules/Planet.hpp @@ -727,9 +727,9 @@ class Planet : public StelObject void drawSurvey(StelCore* core, StelPainter* painter); //! Draw the circle and name of the Planet - void drawHints(const StelCore* core, const QFont& planetNameFont); + void drawHints(const StelCore* core, StelPainter &sPainter, const QFont& planetNameFont); //! Draw a small mark for the planet. This can be used to mark "something" in the sky, for showing distribution of minor bodies. - void drawMarker(const StelCore* core); + void drawMarker(const StelCore* core, StelPainter &sPainter); PlanetOBJModel* loadObjModel() const; From b137c93487df49d687003cb0c0373489557312da Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sun, 4 Aug 2024 20:37:16 +0200 Subject: [PATCH 11/32] Allow batch drawing of asteroid and comet markers. - Based on StelSkyDrawer's star drawing. - Also fix the uncentered planet indicator, and make sure planet marker texture is 16px squared. (Took hours to find min texture size as reason!) - Encapsulate planet and comet drawing to avoid StelPainter mutex issue Also - Parallelize sort - fix in/out fader behaviour - some minor refactoring --- src/core/StelSkyDrawer.cpp | 14 +-- src/core/StelSkyDrawer.hpp | 10 +- src/core/StelTextureMgr.cpp | 6 + src/core/modules/Comet.cpp | 15 ++- src/core/modules/Planet.cpp | 59 +++++---- src/core/modules/Planet.hpp | 8 -- src/core/modules/SolarSystem.cpp | 199 +++++++++++++++++++++++++++++-- src/core/modules/SolarSystem.hpp | 52 +++++++- textures/planet-indicator.png | Bin 465 -> 1128 bytes textures/planet-marker.png | Bin 358 -> 1178 bytes 10 files changed, 299 insertions(+), 64 deletions(-) diff --git a/src/core/StelSkyDrawer.cpp b/src/core/StelSkyDrawer.cpp index 3a83560597de1..a7cbf3597fe9e 100644 --- a/src/core/StelSkyDrawer.cpp +++ b/src/core/StelSkyDrawer.cpp @@ -75,7 +75,6 @@ StelSkyDrawer::StelSkyDrawer(StelCore* acore) : starShaderProgram(Q_NULLPTR), starShaderVars(StarShaderVars()), nbPointSources(0), - maxPointSources(1000), maxLum(0.f), oldLum(-1.f), flagLuminanceAdaptation(false), @@ -446,9 +445,8 @@ void StelSkyDrawer::postDrawPointSource(StelPainter* sPainter) texHalo->bind(); sPainter->setBlending(true, GL_ONE, GL_ONE); - const Mat4f& m = sPainter->getProjector()->getProjectionMatrix(); - const QMatrix4x4 qMat(m[0], m[4], m[8], m[12], m[1], m[5], m[9], m[13], m[2], m[6], m[10], m[14], m[3], m[7], m[11], m[15]); - + const QMatrix4x4 qMat=sPainter->getProjector()->getProjectionMatrix().toQMatrix(); + vbo->bind(); vbo->write(0, vertexArray, nbPointSources*6*sizeof(StarVertex)); vbo->write(maxPointSources*6*sizeof(StarVertex), textureCoordArray, nbPointSources*6*2); @@ -496,10 +494,10 @@ bool StelSkyDrawer::drawPointSource(StelPainter* sPainter, const Vec3d& v, const sPainter->drawSprite2dModeNoDeviceScale(win[0], win[1], rmag); } - unsigned char starColor[3] = {0, 0, 0}; - starColor[0] = static_cast(std::min(static_cast(color[0]*tw*255+0.5f), 255)); - starColor[1] = static_cast(std::min(static_cast(color[1]*tw*255+0.5f), 255)); - starColor[2] = static_cast(std::min(static_cast(color[2]*tw*255+0.5f), 255)); + unsigned char starColor[3] = { + static_cast(std::min(static_cast(color[0]*tw*255+0.5f), 255)), + static_cast(std::min(static_cast(color[1]*tw*255+0.5f), 255)), + static_cast(std::min(static_cast(color[2]*tw*255+0.5f), 255))}; // Store the drawing instructions in the vertex arrays StarVertex* vx = &(vertexArray[nbPointSources*6]); diff --git a/src/core/StelSkyDrawer.hpp b/src/core/StelSkyDrawer.hpp index 4abfc42a60bab..2ebf16ffb3efa 100644 --- a/src/core/StelSkyDrawer.hpp +++ b/src/core/StelSkyDrawer.hpp @@ -115,6 +115,14 @@ class StelSkyDrawer : public QObject, protected QOpenGLFunctions return drawPointSource(sPainter, v, rcMag, colorTable[bVindex], checkInScreen, twinkleFactor); } + //! Draw a point source halo. + //! @param sPainter the StelPainter to use for drawing. + //! @param v the 3d position of the source in J2000 reference frame + //! @param rcMag the radius and luminance of the source as computed by computeRCMag() + //! @param color the RGB color value (0...1, 0...1, 0...1) + //! @param checkInScreen whether source in screen should be checked to avoid unnecessary drawing. + //! @param twinkleFactor allows height-dependent twinkling. Recommended value: min(1,1-0.9*sin(altitude)). Allowed values [0..1] + //! @return true if the source was actually visible and drawn bool drawPointSource(StelPainter* sPainter, const Vec3d& v, const RCMag &rcMag, const Vec3f& bcolor, bool checkInScreen=false, float twinkleFactor=1.0f); //! Draw an image of the solar corona onto the screen at position v. @@ -540,7 +548,7 @@ public slots: //! Current number of sources stored in the buffers (still to display) unsigned int nbPointSources; //! Maximum number of sources which can be stored in the buffers - unsigned int maxPointSources; + constexpr static unsigned int maxPointSources=1000; //! The maximum transformed luminance to apply at the next update float maxLum; diff --git a/src/core/StelTextureMgr.cpp b/src/core/StelTextureMgr.cpp index 0cb9fc5adbef4..37a96e78acca2 100644 --- a/src/core/StelTextureMgr.cpp +++ b/src/core/StelTextureMgr.cpp @@ -88,6 +88,12 @@ StelTextureSP StelTextureMgr::createTexture(const QString& afilename, const Stel qWarning() << "Loading Fuchsia replacement failed."; } + if ((image.width()<16) && (image.height()<16)) + { + qWarning() << "Undersize texture image" << tex->fullPath << "needs rescaling to 16x16 ..."; + image=image.scaled(qMax(image.width(), 16), qMax(image.height(), 16), Qt::IgnoreAspectRatio, Qt::FastTransformation); + } + // Try to use a texture image even if of excessive size. if ((image.width()>maxTexSize) || (image.height()>maxTexSize)) { diff --git a/src/core/modules/Comet.cpp b/src/core/modules/Comet.cpp index c32856c1d6056..1c6520c558cf3 100644 --- a/src/core/modules/Comet.cpp +++ b/src/core/modules/Comet.cpp @@ -20,6 +20,7 @@ #include "Comet.hpp" #include "Orbit.hpp" +#include "SolarSystem.hpp" #include "StelApp.hpp" #include "StelCore.hpp" @@ -448,6 +449,8 @@ void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont if (hidden) return; + static SolarSystem *ss=GETSTELMODULE(SolarSystem); + // Exclude drawing if user set a hard limit magnitude. if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && (getVMagnitude(core) > core->getSkyDrawer()->getCustomPlanetMagnitudeLimit())) return; @@ -461,7 +464,7 @@ void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont // Problematic: Early-out here of course disables the wanted hint circles for dim comets. // The line makes hints for comets 5 magnitudes below sky limiting magnitude visible. // If comet is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of comet elements!) - if ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude() && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) + if ((ss->getMarkerValue()==0.) && ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } @@ -494,9 +497,13 @@ void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont labelsFader = (flagLabels && ang_dist>0.25f && maxMagLabels>getVMagnitude(core)); - const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); - StelPainter sPainter(prj); - drawHints(core, sPainter, planetNameFont); + { // encapsulate painter! + const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + StelPainter sPainter(prj); + drawHints(core, sPainter, planetNameFont); + Vec3f color=Vec3f(0.25, 0.75, 1); + ss->drawAsteroidMarker(core, &sPainter, screenPos[0], screenPos[1], color); // This does not draw directly, but record an entry to be drawn in a batch. + } draw3dModel(core,transfo,static_cast(screenRd)); } diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 429e064fdee1e..a3ba3b0de040e 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -30,6 +30,7 @@ #include "Orbit.hpp" #include "planetsephems/precession.h" #include "planetsephems/EphemWrapper.hpp" +#include "SolarEclipseComputer.hpp" #include "StelObserver.hpp" #include "StelProjector.hpp" #include "sidereal_time.h" @@ -92,7 +93,6 @@ Vec3f Planet::orbitSaturnColor = Vec3f(1.0f,0.6f,1.0f); Vec3f Planet::orbitUranusColor = Vec3f(1.0f,0.6f,1.0f); Vec3f Planet::orbitNeptuneColor = Vec3f(1.0f,0.6f,1.0f); StelTextureSP Planet::hintCircleTex; -StelTextureSP Planet::markerCircleTex; StelTextureSP Planet::texEarthShadow; bool Planet::drawMoonHalo = true; @@ -2834,12 +2834,14 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon if (hidden) return; + static SolarSystem *ss=GETSTELMODULE(SolarSystem); + // Exclude drawing if user set a hard limit magnitude. if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && (getVMagnitude(core) > static_cast(core->getSkyDrawer()->getCustomPlanetMagnitudeLimit()))) { // Get the eclipse factor to avoid hiding the Moon during a total solar eclipse, or planets in transit over the Solar disk. // Details: https://answers.launchpad.net/stellarium/+question/395139 - if (GETSTELMODULE(SolarSystem)->getSolarEclipseFactor(core).first==1.0) + if (ss->getSolarEclipseFactor(core).first==1.0) return; } @@ -2883,7 +2885,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // If asteroid is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of orbital elements!) // AW: Added a special case for educational purpose to drawing orbits for the Solar System Observer // Details: https://sourceforge.net/p/stellarium/discussion/278769/thread/4828ebe4/ - if (!markerFader && ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) + if ((ss->getMarkerValue()==0.) && ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } @@ -2946,14 +2948,29 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon else labelsFader=false; - const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); - StelPainter sPainter(prj); - drawHints(core, sPainter, planetNameFont); - // TODO: Decide whether isComet should be moved up in the enum list to allow exclusion! - if (getPlanetType()>=Planet::isAsteroid) - { - //qDebug() << getEnglishName(); - drawMarker(core, sPainter); + { // scope the StelPainter here! + const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); + StelPainter sPainter(prj); + drawHints(core, sPainter, planetNameFont); + // TODO: Decide whether isComet should be moved up in the enum list to allow exclusion! + if (getPlanetType()>=Planet::isAsteroid) + { + static const QMap colorMap={ + {isAsteroid, Vec3f(0.35, 0.35, .35 )}, + {isPlutino, Vec3f(1 , 1 , 0 )}, + {isComet, Vec3f(0.25, 0.75, 1 )}, + {isDwarfPlanet, Vec3f(1 , 1 , 1 )}, + {isCubewano, Vec3f(1 , 0 , 0.8 )}, + {isSDO, Vec3f(0.5 , 1 , 0.5 )}, + {isOCO, Vec3f(0.75, 0.75, 1 )}, + {isSednoid, Vec3f(0.75, 1 , 0.75)}, + {isInterstellar, Vec3f(1 , 0.25, 0.25)}, + {isUNDEFINED, Vec3f(1 , 0 , 0 )}}; + + Vec3f color=colorMap.value(getPlanetType(), Vec3f(1, 0, 0)); + + ss->drawAsteroidMarker(core, &sPainter, screenPos[0], screenPos[1], color); // This does not draw directly, but record an entry to be drawn in a batch. + } } draw3dModel(core,transfo,static_cast(screenRd)); @@ -4722,25 +4739,6 @@ void Planet::drawHints(const StelCore* core, StelPainter &sPainter, const QFont& sPainter.drawSprite2dMode(static_cast(screenPos[0]), static_cast(screenPos[1]), 11); } -// Draw a little marker. Useful for minor bodies to just show "something out there". -void Planet::drawMarker(const StelCore* core, StelPainter &sPainter) -{ - // TODO: Consider smoothing out the marker when zooming in far enough to make object "naturally" visible. - if (markerFader.getInterstate()<=0) - return; - - //const StelProjectorP prj = core->getProjection(StelCore::FrameJ2000); - //StelPainter sPainter(prj); - - sPainter.setColor(labelColor,markerFader.getInterstate()); - - // Draw the 2D small circle - sPainter.setBlending(true); - Planet::markerCircleTex->bind(); - //Planet::hintCircleTex->bind(); - sPainter.drawSprite2dMode(static_cast(screenPos[0]), static_cast(screenPos[1]), 3); -} - Ring::Ring(float radiusMin, float radiusMax, const QString &texname) :radiusMin(radiusMin),radiusMax(radiusMax) { @@ -4954,7 +4952,6 @@ Vec2d Planet::getValidPositionalDataRange(const PositionQuality purpose) const void Planet::update(int deltaTime) { hintFader.update(deltaTime); - markerFader.update(deltaTime); labelsFader.update(deltaTime); orbitFader.update(deltaTime); } diff --git a/src/core/modules/Planet.hpp b/src/core/modules/Planet.hpp index d205161d9d2de..fdcc0b928e3e9 100644 --- a/src/core/modules/Planet.hpp +++ b/src/core/modules/Planet.hpp @@ -31,7 +31,6 @@ #include "StelFader.hpp" #include "StelTextureTypes.hpp" #include "RotationElements.hpp" -#include "SolarEclipseComputer.hpp" #include #include @@ -508,9 +507,6 @@ class Planet : public StelObject void setFlagHints(bool b){hintFader = b;} bool getFlagHints(void) const {return hintFader;} - void setFlagMarker(bool b){markerFader = b;} - bool getFlagMarker(void) const {return markerFader;} - void setFlagLabels(bool b){flagLabels = b;} bool getFlagLabels(void) const {return flagLabels;} @@ -728,8 +724,6 @@ class Planet : public StelObject //! Draw the circle and name of the Planet void drawHints(const StelCore* core, StelPainter &sPainter, const QFont& planetNameFont); - //! Draw a small mark for the planet. This can be used to mark "something" in the sky, for showing distribution of minor bodies. - void drawMarker(const StelCore* core, StelPainter &sPainter); PlanetOBJModel* loadObjModel() const; @@ -799,7 +793,6 @@ class Planet : public StelObject QSharedPointer parent; // Planet parent i.e. sun for earth QList > satellites; // satellites of the Planet LinearFader hintFader; - LinearFader markerFader; // Useful for markers displayed for minor bodies regardless of magnitude LinearFader labelsFader; // Store the current state of the label for this planet bool flagLabels; // Define whether labels should be displayed bool hidden; // useful for fake planets used as observation positions - not drawn or labeled @@ -815,7 +808,6 @@ class Planet : public StelObject static Vec3f labelColor; static StelTextureSP hintCircleTex; // The circle around an SSO - static StelTextureSP markerCircleTex; // An optional marker to have "something" in the sky even if object not visible. static const QMap pTypeMap; // Maps fast type to english name. static const QMap nPlanetMap; // Maps fast IAU number to IAU designation. static const QMap vMagAlgorithmMap; diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 4025fc750c481..22ddf92d1a70b 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -62,6 +62,11 @@ #include #include #include +#include +#include +#include +#include + SolarSystem::SolarSystem() : StelObjectModule() , shadowPlanetCount(0) @@ -117,6 +122,9 @@ SolarSystem::SolarSystem() : StelObjectModule() , allTrails(Q_NULLPTR) , conf(StelApp::getInstance().getSettings()) , extraThreads(0) + , nbMarkers(0) + , vao(new QOpenGLVertexArrayObject) + , vbo(new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer)) { planetNameFont.setPixelSize(StelApp::getInstance().getScreenFontSize()); connect(&StelApp::getInstance(), SIGNAL(screenFontSizeChanged(int)), this, SLOT(setFontSize(int))); @@ -126,6 +134,15 @@ SolarSystem::SolarSystem() : StelObjectModule() connect(this, SIGNAL(flagPlanetsOrbitsOnlyChanged(bool)), this, SLOT(reconfigureOrbits())); connect(this, SIGNAL(flagIsolatedOrbitsChanged(bool)), this, SLOT(reconfigureOrbits())); connect(this, SIGNAL(flagOrbitsWithMoonsChanged(bool)), this, SLOT(reconfigureOrbits())); + + markerArray=new MarkerVertex[maxMarkers*6]; + textureCoordArray = new unsigned char[maxMarkers*6*2]; + for (unsigned int i=0;iaddShader(&vshader); + markerShaderProgram->addShader(&fshader); + StelPainter::linkProg(markerShaderProgram, "starShader"); + markerShaderVars.projectionMatrix = markerShaderProgram->uniformLocation("projectionMatrix"); + markerShaderVars.texCoord = markerShaderProgram->attributeLocation("texCoord"); + markerShaderVars.pos = markerShaderProgram->attributeLocation("pos"); + markerShaderVars.color = markerShaderProgram->attributeLocation("color"); + markerShaderVars.texture = markerShaderProgram->uniformLocation("tex"); + + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StreamDraw); + vbo->allocate(maxMarkers*6*sizeof(MarkerVertex) + maxMarkers*6*2); + + if(vao->create()) + { + vao->bind(); + setupCurrentVAO(); + vao->release(); + } + + vbo->release(); +} + +void SolarSystem::setupCurrentVAO() +{ + vbo->bind(); + markerShaderProgram->setAttributeBuffer(markerShaderVars.pos, GL_FLOAT, 0, 2, sizeof(MarkerVertex)); + markerShaderProgram->setAttributeBuffer(markerShaderVars.color, GL_UNSIGNED_BYTE, offsetof(MarkerVertex,color), 3, sizeof(MarkerVertex)); + markerShaderProgram->setAttributeBuffer(markerShaderVars.texCoord, GL_UNSIGNED_BYTE, maxMarkers*6*sizeof(MarkerVertex), 2, 0); + vbo->release(); + markerShaderProgram->enableAttributeArray(markerShaderVars.pos); + markerShaderProgram->enableAttributeArray(markerShaderVars.color); + markerShaderProgram->enableAttributeArray(markerShaderVars.texCoord); +} + +void SolarSystem::bindVAO() +{ + if(vao->isCreated()) + vao->bind(); + else + setupCurrentVAO(); +} + +void SolarSystem::releaseVAO() +{ + if(vao->isCreated()) + { + vao->release(); + } + else + { + markerShaderProgram->disableAttributeArray(markerShaderVars.pos); + markerShaderProgram->disableAttributeArray(markerShaderVars.color); + markerShaderProgram->disableAttributeArray(markerShaderVars.texCoord); + } } void SolarSystem::deinit() @@ -1673,7 +1789,7 @@ void SolarSystem::draw(StelCore* core) p->computeDistance(obsHelioPos); } - // And sort them from the furthest to the closest. std::sort can split this into parallel threads! + // And sort them from the farthest to the closest. std::sort can split this into parallel threads! std::sort(STD_EXECUTION_PAR_COMMA systemPlanets.begin(),systemPlanets.end(),biggerDistance()); @@ -1700,11 +1816,78 @@ void SolarSystem::draw(StelCore* core) if ( (p != sun) || (/* (p == sun) && */ !(core->getSkyDrawer()->getFlagDrawSunAfterAtmosphere()))) p->draw(core, maxMagLabel, planetNameFont); } + if (nbMarkers>0) + { + StelPainter sPainter(core->getProjection2d()); + postDrawAsteroidMarkers(&sPainter); + } + if (sObjMgr->getFlagSelectedObjectPointer() && getFlagPointer()) drawPointer(core); } +// Finalize the drawing of asteroid markers (inspired from StelSkyDrawer) +void SolarSystem::postDrawAsteroidMarkers(StelPainter *sPainter) +{ + Q_ASSERT(sPainter); + + if (nbMarkers==0) + return; + + markerCircleTex->bind(); + sPainter->setBlending(true, GL_ONE, GL_ONE); + + const QMatrix4x4 qMat=sPainter->getProjector()->getProjectionMatrix().toQMatrix(); + + vbo->bind(); + vbo->write(0, markerArray, nbMarkers*6*sizeof(MarkerVertex)); + vbo->write(maxMarkers*6*sizeof(MarkerVertex), textureCoordArray, nbMarkers*6*2); + vbo->release(); + + markerShaderProgram->bind(); + markerShaderProgram->setUniformValue(markerShaderVars.projectionMatrix, qMat); + + bindVAO(); + glDrawArrays(GL_TRIANGLES, 0, static_cast(nbMarkers)*6); + releaseVAO(); + + markerShaderProgram->release(); + + nbMarkers = 0; +} + +// Draw a point source halo. +bool SolarSystem::drawAsteroidMarker(StelCore* core, StelPainter* sPainter, const float x, const float y, Vec3f &color) +{ + const float reducer=markerFader.getInterstate(); + if (reducer==0.) + return false; + + Q_ASSERT(sPainter); + const float radius = 3.f * static_cast(sPainter->getProjector()->getDevicePixelsPerPixel()); + unsigned char markerColor[3] = { + static_cast(std::min(static_cast(color[0]*reducer*255+0.5f), 255)), + static_cast(std::min(static_cast(color[1]*reducer*255+0.5f), 255)), + static_cast(std::min(static_cast(color[2]*reducer*255+0.5f), 255))}; + // Store the drawing instructions in the vertex arrays + MarkerVertex* vx = &(markerArray[nbMarkers*6]); + vx->pos.set(x-radius,y-radius); std::memcpy(vx->color, markerColor, 3); ++vx; + vx->pos.set(x+radius,y-radius); std::memcpy(vx->color, markerColor, 3); ++vx; + vx->pos.set(x+radius,y+radius); std::memcpy(vx->color, markerColor, 3); ++vx; + vx->pos.set(x-radius,y-radius); std::memcpy(vx->color, markerColor, 3); ++vx; + vx->pos.set(x+radius,y+radius); std::memcpy(vx->color, markerColor, 3); ++vx; + vx->pos.set(x-radius,y+radius); std::memcpy(vx->color, markerColor, 3); ++vx; + + ++nbMarkers; + if (nbMarkers>=maxMarkers) + { + // Flush the buffer (draw all buffered markers) + postDrawAsteroidMarkers(sPainter); + } + return true; +} + void SolarSystem::drawEphemerisItems(const StelCore* core) { if (flagShow || (!flagShow && getFlagEphemerisAlwaysOn())) @@ -2339,21 +2522,14 @@ void SolarSystem::setFlagMarkers(bool b) { if (getFlagMarkers() != b) { - for (const auto& p : std::as_const(systemPlanets)) - p->setFlagMarker(b); + markerFader = b; emit markersDisplayedChanged(b); } } -// A bit weird. Currently this returns true if only one marker has been set. However, we keep markers/hints private to the planets, in case particular objects should be marked. bool SolarSystem::getFlagMarkers() const { - for (const auto& p : std::as_const(systemPlanets)) - { - if (p->getFlagMarker()) - return true; - } - return false; + return markerFader; } void SolarSystem::setFlagLightTravelTime(bool b) @@ -2403,6 +2579,7 @@ void SolarSystem::update(double deltaTime) { p->update(static_cast(deltaTime*1000)); } + markerFader.update(deltaTime*1000); } // is a lunar eclipse close at hand? diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 30e0047ade12b..9473c5a0e2823 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -48,7 +48,7 @@ typedef QSharedPointer PlanetP; //! This class and the handling of solar system data has seen many changes, and unfortunately, not much has been consistently documented. //! The following is a reverse-engineered analysis. //! -class SolarSystem : public StelObjectModule +class SolarSystem : public StelObjectModule, protected QOpenGLFunctions { Q_OBJECT // This is a "forwarding property" which sets labeling into all planets. @@ -1181,6 +1181,56 @@ private slots: //! Number of additional threads. This could be automatically derived, but for now we can experiment. int extraThreads; + + // BEGIN OF BLOCK RELATED TO MASS MARKER DISPLAY + // Variables used for GL optimization when displaying little markers for the minor bodies. + // These data structures were borrowed from StelSkyDrawer. However, we need only one color. + // Maybe, to extend the idea, have several such Arrays for category-colored main belt, Jupiter Trojans, NEA, KBO etc. + //! Vertex format for a minor body marker. + //! Texture pos is stored in another separately. + struct MarkerVertex { + Vec2f pos; + unsigned char color[4]; // can we remove that? + }; + static_assert(sizeof(MarkerVertex) == 2*4+4, "Size of MarkerVertex must be 12 bytes"); + + //! Buffer for storing the marker positions + MarkerVertex* markerArray; + //! Buffer for storing the texture coordinate array data. + unsigned char* textureCoordArray; + + class QOpenGLShaderProgram* markerShaderProgram; + struct MarkerShaderVars { + int projectionMatrix; + int texCoord; + int pos; + int color; // Can we remove that? + int texture; + }; + MarkerShaderVars markerShaderVars; + + //! Current number of sources stored in the buffer (still to display) + unsigned int nbMarkers; + std::unique_ptr vao; + std::unique_ptr vbo; + //! Binds actual VAO if it's supported, sets up the relevant state manually otherwise. + void bindVAO(); + //! Sets the vertex attribute states for the currently bound VAO so that glDraw* commands can work. + void setupCurrentVAO(); + //! Binds zero VAO if VAO is supported, manually disables the relevant vertex attributes otherwise. + void releaseVAO(); + + //! Maximum number of markers which can be stored in the buffers + constexpr static unsigned int maxMarkers=2048; + void postDrawAsteroidMarkers(StelPainter *sPainter); + StelTextureSP markerCircleTex; // An optional marker to have "something" in the sky even if object not visible. + LinearFader markerFader; // Useful for markers displayed for minor bodies regardless of magnitude + +public: + bool drawAsteroidMarker(StelCore* core, StelPainter* sPainter, const float x, const float y, Vec3f &color); + float getMarkerValue() const {return markerFader.getInterstate();} + + // END OF BLOCK RELATED TO MASS MARKER DISPLAY }; diff --git a/textures/planet-indicator.png b/textures/planet-indicator.png index 078976ea714c1b60ecbf4ce556598d1ae8f71140..28cc2607b9c3a7ff7bd380d684a7b9e146e693a4 100644 GIT binary patch delta 1118 zcmV-k1fl!U1Lz2l8Gi%-007x@vVQ;o010qNS#tmY3ljhU3ljkVnw%H_00SFoLqkwd zXm50Hb7*gHAW1_*AaHVTW@&6?004N}V_;yO;OOGy$|S(RP*7A-A zje(hgfq{X6Au+kQz%d}ehk=2CAum5Kl>rqnGBA9*#=ywHz<L4HwU zNoooM0|V3!27d+y240u^5(W3f%sd4{Q&k2kgNVo|1qcffJ_s=cNG>fZg9jx8g8+jT zgC9dB!zzXcjM9uzjPn?uG8r;8FkNESU~Xi-%VNVakCmA$apIif zTP0E?g(Z(lRY>bfKarUu8!9I#cUHbf!AFr-@q*G69)tuXJmsIW}5^0BtCQMDDZW3l^c|J>oW z;{~T<&VPGdwz{r&Tj{>kW0B`VuLa%v{M~HOlHNM6?SFcQV5fIid-vg9hCciLx(WLx{-5kP zrFH6w>AW+7XU>}SXpYw0l6m_Ua4ig5w0QByr4Gv`EPuGtcvb7_n`?E~HLbt7(O^@@ z<_BA?woTpsVW;n|ReL!0rtdp`K>c9nq1Q+Jj&43Kexml|lhfX3ww#ka-+tlKrMSzd zu76rwTXsYAX6vo5chc|Pyzleiz$4SgtDh=9oB2ZUW!G!wH+64+zAydo=~KbycVF|q zz59{>^TY4rKi~dU{r?XDE({%upgajN0000WV@Og>004R=004l4008;_004mL004C` z008P>0026e000+nl3&F}0002TNkleL#`op{M6+q?f3H}$bf1J3}PFIdl zwoN<9qj2%~7y1k+8CQd@OuR)<>_ijEhb1CQEy~2849;eOiwM}WQHNNwsaRxUTzSjl k0-l-cBw-I;y$hcK09T<#LJP`&iU0rr07*qoM6N<$f~0#0TL1t6 literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyswJ)wB`Jv|saCo9DVb@N3`Pcq z7Pe21Zr}W>zK^+6LxU1_m0ZK1u>Lu%tWsIx;Y9?C1WI$Oa@a2CEqi4B`cIb_Lo1CD=Q%vi8$?crmezcEz*0lJW3ucwP+NX4x+ zlP`)jEATjPy|vMc_22*Oa-)O1QTNVFu5d1L*ln|F>OCgIpB76lEy=Omz$F|gV3Wt( zpBv46`uBm)t6z8TO^%oqez3^m(ydQHj{jC{Zn1U{caKpPIMA)WR`3bCf>T!W54KgZ zMwt%mv23#>o>)46_&H0D`Mm$ayO}-jKCgZ$kvAjv$cN4?E~mf$*?mA)n*GPcwTm7W zM$G?X&s4@KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4{Q&k2kgNVo|1qcff zJ_s=cNG>fZg9jx8g8+jTgC9dB!zzXcjM9uzjPn?uG8r;8FkNESU~Xi-%VNVakCmA< zoAoN26WbJk(nbKDkms+R=!8UN0C?Yg3=V_C>14@ z*Q#698rA(YWHsJu?$es6ovLH4E2R5M?}+|ghuuQb_ zv9_>LwH2{rvHNQO+~Kz41*c=qdtJ7=u6JAMzSLup=R&Uq-V1#e`!4fa<-a~)YvA6X zW5MS`ZiPMz`x3zvDHx>`Z5-nk8x@xq-;yvpadXny#c{8Bv*4S+lbD&|w7H};LTeNub$E6O-CMYHnI*EOxbxzS)#$L0rHt+q|w{$Z!@u2p+D_NMPUen9P!e)1|n}r>^TY4rKi~dU{r?XDE({%upgajN0000WV@Og>004R=004l4 z008;_004mL004C`008P>0026e000+nl3&F}0002_Nklcw>DuZ zsU$8EraCk*W593&FTe#DJxoWYF5IAr2M`C@NtbSn2ZLDMq2BjL^Ji( zQ%`-(l<1(fMl!fbYMk`k9Q?Jd|HI9$eA+6xzG+{rsP!El9T}}qEpm!-iQ?gQp)a7 st|*9s1rHagUx_IY26dkG|J~mM0Nu=yI8X1zNdN!<07*qoM6N<$f@Y)^EC2ui literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^93afW0wnX;%77#TOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>gQ95^FVW+f*Nrv6z?@EC)W-l!L-Z$m;j2*vL?Uhm1UGwJaiMKXJ!RECbY~rD6 zHGg=OE=OriV%e$}l)1XZETczO$#7E`=iJH9`5TYOhxQ0^s{?ITEpd$~Nl7e8wMs5Z z1yT$~21X{j2Ijg(W+4U^Rz?<9hDO>3237_J*Om8_qG-s?PsvQH1ZgnVH8j*UG7m8@ bv@!-NwS;Kk6OH-`)WG2B>gTe~DWM4fn>lRt From cc7945dcf184e07051d8e30262bdc844e07f3b68 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 6 Aug 2024 12:37:56 +0200 Subject: [PATCH 12/32] Avoid duplicate computations --- src/core/StelObject.cpp | 4 ++-- src/core/StelObject.hpp | 4 +++- src/core/modules/Planet.cpp | 25 +++++++++++++++---------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/core/StelObject.cpp b/src/core/StelObject.cpp index dd3df8a01754d..13b350258a561 100644 --- a/src/core/StelObject.cpp +++ b/src/core/StelObject.cpp @@ -315,11 +315,11 @@ float StelObject::getSelectPriority(const StelCore* core) const return qMin(getVMagnitudeWithExtinction(core), 15.0f); } -float StelObject::getVMagnitudeWithExtinction(const StelCore* core) const +float StelObject::getVMagnitudeWithExtinction(const StelCore* core, const float knownVMag) const { Vec3d altAzPos = getAltAzPosGeometric(core); altAzPos.normalize(); - float vMag = getVMagnitude(core); + float vMag = (knownVMag>-1000.f ? knownVMag : getVMagnitude(core)); // without the test, planets flicker stupidly in fullsky atmosphere-less view. if (core->getSkyDrawer()->getFlagHasAtmosphere()) core->getSkyDrawer()->getExtinction().forward(altAzPos, &vMag); diff --git a/src/core/StelObject.hpp b/src/core/StelObject.hpp index 4a64ae6fc0683..5e3acb3cbd295 100644 --- a/src/core/StelObject.hpp +++ b/src/core/StelObject.hpp @@ -263,7 +263,9 @@ class StelObject : public StelRegionObject //! Return object's apparent V magnitude as seen from observer including extinction. //! Extinction obviously only if atmosphere=on. - float getVMagnitudeWithExtinction(const StelCore* core) const; + //! If you already know vMag, it is wise to provide it in the optional @param knownVMag. + //! Else it is called from getVMagnitude() which may be costly. + float getVMagnitudeWithExtinction(const StelCore* core, const float knownVMag=-1000.f) const; //! Return a priority value which is used to discriminate objects by priority //! As for magnitudes, the lower is the higher priority diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index a3ba3b0de040e..15110be70fc67 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2835,9 +2835,10 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon return; static SolarSystem *ss=GETSTELMODULE(SolarSystem); + const float vMagnitude=getVMagnitude(core); // Exclude drawing if user set a hard limit magnitude. - if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && (getVMagnitude(core) > static_cast(core->getSkyDrawer()->getCustomPlanetMagnitudeLimit()))) + if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && ( vMagnitude > static_cast(core->getSkyDrawer()->getCustomPlanetMagnitudeLimit()))) { // Get the eclipse factor to avoid hiding the Moon during a total solar eclipse, or planets in transit over the Solar disk. // Details: https://answers.launchpad.net/stellarium/+question/395139 @@ -2885,7 +2886,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // If asteroid is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of orbital elements!) // AW: Added a special case for educational purpose to drawing orbits for the Solar System Observer // Details: https://sourceforge.net/p/stellarium/discussion/278769/thread/4828ebe4/ - if ((ss->getMarkerValue()==0.) && ((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) + if ((ss->getMarkerValue()==0.) && ((vMagnitude-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } @@ -2943,7 +2944,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // by putting here, only draw orbit if Planet is visible for clarity drawOrbit(core); // TODO - fade in here also... - if (flagLabels && ang_dist>0.25f && maxMagLabels>getVMagnitudeWithExtinction(core)) + if (flagLabels && ang_dist>0.25f && maxMagLabels>getVMagnitudeWithExtinction(core, vMagnitude)) labelsFader=true; else labelsFader=false; @@ -2953,7 +2954,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon StelPainter sPainter(prj); drawHints(core, sPainter, planetNameFont); // TODO: Decide whether isComet should be moved up in the enum list to allow exclusion! - if (getPlanetType()>=Planet::isAsteroid) + if (pType>=Planet::isAsteroid) { static const QMap colorMap={ {isAsteroid, Vec3f(0.35, 0.35, .35 )}, @@ -2973,7 +2974,8 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon } } - draw3dModel(core,transfo,static_cast(screenRd)); + //if (pType(screenRd)); } else if (permanentDrawingOrbits) // A special case for demos drawOrbit(core); @@ -3471,13 +3473,17 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans static SolarSystem* ssm = GETSTELMODULE(SolarSystem); // Find extinction settings to change colors. The method is rather ad-hoc. - const float extinctedMag=getVMagnitudeWithExtinction(core)-getVMagnitude(core); // this is net value of extinction, in mag. + const float vMagnitude=getVMagnitude(core); + const float vMagnitudeWithExtinction=getVMagnitudeWithExtinction(core, vMagnitude); + + const float extinctedMag=vMagnitudeWithExtinction-vMagnitude; // this is net value of extinction, in mag. const float magFactorGreen=powf(0.85f, 0.6f*extinctedMag); const float magFactorBlue=powf(0.6f, 0.5f*extinctedMag); const bool isSun = this==ssm->getSun(); const bool isMoon = this==ssm->getMoon(); const bool currentLocationIsEarth = core->getCurrentLocation().planetName == L1S("Earth"); + const float eclipseFactor = (screenRd>1.f || (isSun && currentLocationIsEarth)) ? static_cast(ssm->getSolarEclipseFactor(core).first) : 1.f; if (isSun && currentLocationIsEarth) { @@ -3522,7 +3528,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans // For the sun, we have again to use the stronger extinction to avoid color mismatch. Vec3f haloColorToDraw(haloColor[0], powf(0.75f, extinctedMag) * haloColor[1], powf(0.42f, 0.9f*extinctedMag) * haloColor[2]); - float haloMag=qMin(-18.f, getVMagnitudeWithExtinction(core)); // for sun on horizon, mag can go quite low, shrinking the halo too much. + float haloMag=qMin(-18.f, vMagnitudeWithExtinction); // for sun on horizon, mag can go quite low, shrinking the halo too much. core->getSkyDrawer()->postDrawSky3dModel(&sPainter, tmp, surfArcMin2, haloMag, haloColorToDraw, isSun); } @@ -3570,7 +3576,6 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans Vec3d sunPos = ssm->getSun()->getEclipticPos() + ssm->getSun()->getAberrationPush(); core->getHeliocentricEclipticModelViewTransform()->forward(sunPos); light.position=sunPos; - const double eclipseFactor = static_cast(ssm->getSolarEclipseFactor(core).first); // Set the light parameters taking sun as the light source light.diffuse.set(1.f, magFactorGreen*1.f, magFactorBlue*1.f); @@ -3587,7 +3592,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans static LandscapeMgr* lmgr = GETSTELMODULE(LandscapeMgr); Q_ASSERT(lmgr); const float atmLum=(lmgr->getFlagAtmosphere() ? lmgr->getAtmosphereAverageLuminance() : 0.0f); - if (atmLum<2000.0f && ( eclipseFactor<=0 || eclipseFactor==1.)) + if (atmLum<2000.0f && ( eclipseFactor<=0 || eclipseFactor==1.f)) { float atmScaling=1.0f - (qMax(1000.0f, atmLum)-1000.0f)*0.001f; // full impact when atmLum<1000. float earthshineFactor=(1.0f-getPhase(ssm->getEarth()->getHeliocentricEclipticPos())); // We really mean the Earth for this! (Try observing from Mars ;-) @@ -3686,7 +3691,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans if (!isSun || drawSunHalo) { - float haloMag=getVMagnitudeWithExtinction(core); + float haloMag=vMagnitudeWithExtinction; // EXPERIMENTAL: for sun on horizon, mag can go quite low, shrinking the halo too much. if (isSun) haloMag=qMin(haloMag, -18.f); From 3d2b83ad71287b9701d5b19ecc2d42ba2f961235 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 6 Aug 2024 18:36:14 +0200 Subject: [PATCH 13/32] Further avoidance of repeated longish calls --- src/core/modules/Comet.cpp | 15 ++++++++++++--- src/core/modules/Comet.hpp | 4 +++- src/core/modules/LandscapeMgr.cpp | 2 +- src/core/modules/MinorPlanet.cpp | 6 +++++- src/core/modules/MinorPlanet.hpp | 4 +++- src/core/modules/Planet.cpp | 25 ++++++++++++++----------- src/core/modules/Planet.hpp | 15 ++++++++++++--- src/core/modules/SolarSystem.cpp | 18 ++++++++++-------- src/core/modules/SolarSystem.hpp | 1 + 9 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/core/modules/Comet.cpp b/src/core/modules/Comet.cpp index 1c6520c558cf3..82c2fb7ea8cdf 100644 --- a/src/core/modules/Comet.cpp +++ b/src/core/modules/Comet.cpp @@ -271,13 +271,20 @@ double Comet::getSiderealPeriod() const return ((semiMajorAxis>0) ? KeplerOrbit::calculateSiderealPeriod(semiMajorAxis, 1.0) : 0.); } + float Comet::getVMagnitude(const StelCore* core) const { + return getVMagnitude(core, 1.0); +} + +float Comet::getVMagnitude(const StelCore* core, const double eclipseFactor) const +{ + Q_UNUSED(eclipseFactor) //If the two parameter system is not used, //use the default radius/albedo mechanism if (slopeParameter < -9.0f) { - return Planet::getVMagnitude(core); + return Planet::getVMagnitude(core, 1.); } //Calculate distances @@ -444,12 +451,14 @@ void Comet::update(int deltaTime) // Draw the Comet and all the related infos: name, circle etc... GZ: Taken from Planet.cpp 2013-11-05 and extended -void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont) +void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont, const double eclipseFactor) { + Q_UNUSED(eclipseFactor) if (hidden) return; static SolarSystem *ss=GETSTELMODULE(SolarSystem); + const float vMagnitude=getVMagnitude(core); // Exclude drawing if user set a hard limit magnitude. if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && (getVMagnitude(core) > core->getSkyDrawer()->getCustomPlanetMagnitudeLimit())) @@ -505,7 +514,7 @@ void Comet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont ss->drawAsteroidMarker(core, &sPainter, screenPos[0], screenPos[1], color); // This does not draw directly, but record an entry to be drawn in a batch. } - draw3dModel(core,transfo,static_cast(screenRd)); + draw3dModel(core,transfo,static_cast(screenRd), 1.0); } else if (!projectionValid && prj.data()->getNameI18() == q_("Orthographic")) diff --git a/src/core/modules/Comet.hpp b/src/core/modules/Comet.hpp index 3c33c2c05d8de..528e7b1d7aa1f 100644 --- a/src/core/modules/Comet.hpp +++ b/src/core/modules/Comet.hpp @@ -72,6 +72,8 @@ class Comet : public Planet //virtual QString getType() const {return "Comet";} //! \todo Find better sources for the g,k system float getVMagnitude(const StelCore* core) const override; + //! Override with additional @param eclipseFactor. The factor is ignored. + float getVMagnitude(const StelCore* core, const double eclipseFactor) const override; //! sets the nameI18 property with the appropriate translation. //! Function overridden to handle the problem with name conflicts. void translateName(const StelTranslator& trans) override; @@ -109,7 +111,7 @@ class Comet : public Planet double getSiderealPeriod() const override; //! re-implementation of Planet's draw() - void draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont) override; + void draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont, const double eclipseFactor) override; // re-implementation of Planet's update() to prepare tails (extinction etc). @param deltaTime: ms (since last call) void update(int deltaTime) override; diff --git a/src/core/modules/LandscapeMgr.cpp b/src/core/modules/LandscapeMgr.cpp index 3c5e73a9113fa..cfd1e482a90b2 100644 --- a/src/core/modules/LandscapeMgr.cpp +++ b/src/core/modules/LandscapeMgr.cpp @@ -682,7 +682,7 @@ void LandscapeMgr::draw(StelCore* core) PlanetP sun=ssys->getSun(); QFont font; font.setPixelSize(StelApp::getInstance().getScreenFontSize()); - sun->draw(core, 0, font); + sun->draw(core, 0, font, 1.0); } // Draw the landscape diff --git a/src/core/modules/MinorPlanet.cpp b/src/core/modules/MinorPlanet.cpp index 82ec75095898b..3c78cc42b7333 100644 --- a/src/core/modules/MinorPlanet.cpp +++ b/src/core/modules/MinorPlanet.cpp @@ -230,11 +230,15 @@ double MinorPlanet::getSiderealPeriod() const } float MinorPlanet::getVMagnitude(const StelCore* core) const +{ + return getVMagnitude(core, 1.); +} +float MinorPlanet::getVMagnitude(const StelCore* core, const double eclipseFactor) const { //If the H-G system is not used, use the default radius/albedo mechanism if (slopeParameter < -9.99f) // G can be somewhat <0! Set to -10 to mark invalid. { - return Planet::getVMagnitude(core); + return Planet::getVMagnitude(core, eclipseFactor); } //Calculate phase angle diff --git a/src/core/modules/MinorPlanet.hpp b/src/core/modules/MinorPlanet.hpp index 39b3357571030..a953acc3bdc4a 100644 --- a/src/core/modules/MinorPlanet.hpp +++ b/src/core/modules/MinorPlanet.hpp @@ -57,11 +57,13 @@ class MinorPlanet : public Planet ~MinorPlanet() override; - //The Comet class inherits the "Planet" type because the SolarSystem class + //The MinorPlanet class inherits the "Planet" type because the SolarSystem class //was not designed to handle different types of objects. // \todo Decide if this is going to be "MinorPlanet" or "Asteroid" //virtual QString getType() const {return "MinorPlanet";} float getVMagnitude(const StelCore* core) const override; + //! Convenience method, necessary override. @param eclipseFactor is ignored. + float getVMagnitude(const StelCore* core, const double eclipseFactor) const override; //! sets the nameI18 property with the appropriate translation. //! Function overridden to handle the problem with name conflicts. void translateName(const StelTranslator& trans) override; diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 15110be70fc67..1fcd4e792e0f4 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2338,6 +2338,10 @@ float Planet::getMeanOppositionMagnitude() const // Computation of the visual magnitude (V band) of the planet. float Planet::getVMagnitude(const StelCore* core) const +{ + return getVMagnitude(core, 1.); +} +float Planet::getVMagnitude(const StelCore* core, double eclipseFactor) const { if (parent == Q_NULLPTR) { @@ -2346,7 +2350,7 @@ float Planet::getVMagnitude(const StelCore* core) const const double distParsec = std::sqrt(core->getObserverHeliocentricEclipticPos().normSquared())*AU/PARSEC; // check how much of it is visible - const double shadowFactor = qMax(0.000128, GETSTELMODULE(SolarSystem)->getSolarEclipseFactor(core).first); + const double shadowFactor = qMax(0.000128, eclipseFactor); // See: Hughes, D. W., Brightness during a solar eclipse // Journal of the British Astronomical Association, vol.110, no.4, p.203-205 // URL: http://adsabs.harvard.edu/abs/2000JBAA..110..203H @@ -2829,20 +2833,20 @@ double Planet::getSpheroidAngularRadius(const StelCore* core) const } //the Planet and all the related infos : name, circle etc.. -void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont) +void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont, const double eclipseFactor) { if (hidden) return; static SolarSystem *ss=GETSTELMODULE(SolarSystem); - const float vMagnitude=getVMagnitude(core); + const float vMagnitude=getVMagnitude(core, eclipseFactor); // Exclude drawing if user set a hard limit magnitude. if (core->getSkyDrawer()->getFlagPlanetMagnitudeLimit() && ( vMagnitude > static_cast(core->getSkyDrawer()->getCustomPlanetMagnitudeLimit()))) { // Get the eclipse factor to avoid hiding the Moon during a total solar eclipse, or planets in transit over the Solar disk. // Details: https://answers.launchpad.net/stellarium/+question/395139 - if (ss->getSolarEclipseFactor(core).first==1.0) + if (eclipseFactor==1.0) return; } @@ -2920,7 +2924,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon { // Draw the rings if we are located on a planet with rings, but not the planet itself. if (rings) - draw3dModel(core, transfo, 1024, true); + draw3dModel(core, transfo, 1024, eclipseFactor, true); return; } @@ -2968,14 +2972,13 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon {isInterstellar, Vec3f(1 , 0.25, 0.25)}, {isUNDEFINED, Vec3f(1 , 0 , 0 )}}; - Vec3f color=colorMap.value(getPlanetType(), Vec3f(1, 0, 0)); + Vec3f color=colorMap.value(pType, Vec3f(1, 0, 0)); ss->drawAsteroidMarker(core, &sPainter, screenPos[0], screenPos[1], color); // This does not draw directly, but record an entry to be drawn in a batch. } } - //if (pType(screenRd)); + draw3dModel(core,transfo,static_cast(screenRd), eclipseFactor); } else if (permanentDrawingOrbits) // A special case for demos drawOrbit(core); @@ -3461,7 +3464,7 @@ void Planet::deinitFBO() shadowInitialized = false; } -void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP transfo, float screenRd, bool drawOnlyRing) +void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP transfo, float screenRd, double solarEclipseFactor, bool drawOnlyRing) { // This is the main method drawing a planet 3d model // Some work has to be done on this method to make the rendering nicer @@ -3473,7 +3476,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans static SolarSystem* ssm = GETSTELMODULE(SolarSystem); // Find extinction settings to change colors. The method is rather ad-hoc. - const float vMagnitude=getVMagnitude(core); + const float vMagnitude=getVMagnitude(core, solarEclipseFactor); const float vMagnitudeWithExtinction=getVMagnitudeWithExtinction(core, vMagnitude); const float extinctedMag=vMagnitudeWithExtinction-vMagnitude; // this is net value of extinction, in mag. @@ -3483,7 +3486,7 @@ void Planet::draw3dModel(StelCore* core, StelProjector::ModelViewTranformP trans const bool isSun = this==ssm->getSun(); const bool isMoon = this==ssm->getMoon(); const bool currentLocationIsEarth = core->getCurrentLocation().planetName == L1S("Earth"); - const float eclipseFactor = (screenRd>1.f || (isSun && currentLocationIsEarth)) ? static_cast(ssm->getSolarEclipseFactor(core).first) : 1.f; + const float eclipseFactor = (screenRd>1.f || (isSun && currentLocationIsEarth)) ? static_cast(solarEclipseFactor) : 1.; if (isSun && currentLocationIsEarth) { diff --git a/src/core/modules/Planet.hpp b/src/core/modules/Planet.hpp index fdcc0b928e3e9..e3258cce4a35e 100644 --- a/src/core/modules/Planet.hpp +++ b/src/core/modules/Planet.hpp @@ -230,7 +230,13 @@ class Planet : public StelObject double getCloseViewFov(const StelCore* core) const override; double getSatellitesFov(const StelCore* core) const override; double getParentSatellitesFov(const StelCore* core) const override; + //! This actually calls getVMagnitude(core, 1.0); + //! If there is danger the object is partly obscured (eclipsed), prefer to use getVMagnitude(core, eclipseFactor). float getVMagnitude(const StelCore* core) const override; + //! Compute visual magnitude following the algorithm set in setApparentMagnitudeAlgorithm(). + //! This is most important to compute Solar magnitude during a solar eclipse. + //! @param eclipseFactor can be computed with SolarSystem::getSolarEclipseFactor(core) + virtual float getVMagnitude(const StelCore* core, double eclipseFactor) const; float getSelectPriority(const StelCore* core) const override; Vec3f getInfoColor(void) const override; //! @return "Planet". For technical reasons this is also returned by Comets and MinorPlanets and the Sun. A better type is returned by getObjectType() @@ -281,8 +287,8 @@ class Planet : public StelObject virtual void translateName(const StelTranslator &trans); // Draw the Planet - // GZ Made that virtual to allow comets having their own draw(). - virtual void draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont); + // @param eclipseFactor should be precomputed via SolarSystem::getSolarEclipseFactor(). + virtual void draw(StelCore* core, float maxMagLabels, const QFont& planetNameFont, const double eclipseFactor); /////////////////////////////////////////////////////////////////////////// // Methods specific to Planet @@ -703,7 +709,10 @@ class Planet : public StelObject //! Draw the 3d model. Call the proper functions if there are rings etc.. //! @param screenRd radius in screen pixels - void draw3dModel(StelCore* core, StelProjector::ModelViewTranformP transfo, float screenRd, bool drawOnlyRing=false); + //! @param solarEclipseFactor Full sun is 1.0, fully covered sun is 0.0. + //! This should be determined beforehand so that repeated calls to this function can be avoided. + //! It is usually safe to use 1.0 when eclipses are rare and umimportant. + void draw3dModel(StelCore* core, StelProjector::ModelViewTranformP transfo, float screenRd, double solarEclipseFactor, bool drawOnlyRing=false); //! Draws the OBJ model, assuming it is available //! @param screenRd radius in screen pixels. diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 22ddf92d1a70b..4a7354b01d673 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1524,6 +1524,8 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) { StelCore *core=StelApp::getInstance().getCore(); const bool withAberration=core->getUseAberration(); + const bool observerPlanetIsEarth = observerPlanet==getEarth(); + // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. // Given the comparably low impact of planetary positions on the overall frame time, we don't need more than 4 extra threads. (Profiled with 12.000 objects.) // const int availablePoolThreads=qBound(0, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount(), 4); // qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); @@ -1608,7 +1610,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) const auto planetPos = it->data()->getHeliocentricEclipticPos(); const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); Vec3d aberrationPush(0.); - if (withAberration && (observerPlanet->englishName!="Earth" || it->data()->englishName!="Moon")) + if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) aberrationPush=lightTimeDays*aberrationPushSpeed; it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); } @@ -1683,7 +1685,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) const auto planetPos = it->data()->getHeliocentricEclipticPos(); const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); Vec3d aberrationPush(0.); - if (withAberration && (observerPlanet->englishName!="Earth" || it->data()->englishName!="Moon")) + if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) aberrationPush=lightTimeDays*aberrationPushSpeed; // The next call may already do nothing if the time difference to the previous round is not large enough. it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); @@ -1809,12 +1811,13 @@ void SolarSystem::draw(StelCore* core) const float sdLimitMag=static_cast(core->getSkyDrawer()->getLimitMagnitude()); const float maxMagLabel = (sdLimitMag<5.f ? sdLimitMag : 5.f+(sdLimitMag-5.f)*1.2f) +(static_cast(labelsAmount)-3.f)*1.2f; + const double eclipseFactor=getSolarEclipseFactor(core).first; // Draw the elements for (const auto& p : std::as_const(systemPlanets)) { if ( (p != sun) || (/* (p == sun) && */ !(core->getSkyDrawer()->getFlagDrawSunAfterAtmosphere()))) - p->draw(core, maxMagLabel, planetNameFont); + p->draw(core, maxMagLabel, planetNameFont, eclipseFactor); } if (nbMarkers>0) { @@ -1822,7 +1825,6 @@ void SolarSystem::draw(StelCore* core) postDrawAsteroidMarkers(&sPainter); } - if (sObjMgr->getFlagSelectedObjectPointer() && getFlagPointer()) drawPointer(core); } @@ -2271,14 +2273,14 @@ StelObjectP SolarSystem::searchByName(const QString& name) const float SolarSystem::getPlanetVMagnitude(QString planetName, bool withExtinction) const { + StelCore *core=StelApp::getInstance().getCore(); + double eclipseFactor=getSolarEclipseFactor(core).first; PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? p = searchMinorPlanetByEnglishName(planetName); - float r = 0.f; + float r = p->getVMagnitude(core, eclipseFactor); if (withExtinction) - r = p->getVMagnitudeWithExtinction(StelApp::getInstance().getCore()); - else - r = p->getVMagnitude(StelApp::getInstance().getCore()); + r = p->getVMagnitudeWithExtinction(core, r); return r; } diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 9473c5a0e2823..fd6c41e9dc6a9 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -888,6 +888,7 @@ public slots: bool removeMinorPlanet(QString name); //! Determines relative amount of sun visible from the observer's position (first element) and the Planet object pointer for eclipsing celestial body (second element). + //! Full sun is 1.0, fully covered sun is 0.0. //! In the unlikely event of multiple objects in front of the sun, only the largest will be reported. QPair getSolarEclipseFactor(const StelCore *core) const; From 86bc71c214cd9c59e0abec616d66f157dd7ff6d0 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 6 Aug 2024 21:15:34 +0200 Subject: [PATCH 14/32] Test again for culled-by-magnitude objects --- src/core/modules/Planet.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 1fcd4e792e0f4..83c2a9702342f 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2890,7 +2890,8 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // If asteroid is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of orbital elements!) // AW: Added a special case for educational purpose to drawing orbits for the Solar System Observer // Details: https://sourceforge.net/p/stellarium/discussion/278769/thread/4828ebe4/ - if ((ss->getMarkerValue()==0.) && ((vMagnitude-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) + const bool cutDimObjects=((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid; + if ((ss->getMarkerValue()==0.) && cutDimObjects && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } @@ -2934,10 +2935,12 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon const double viewportBufferSz = englishName==L1S("Sun") ? screenRd+125. : screenRd; // enlarge if this is sun with its huge halo. const double viewport_left = prj->getViewportPosX(); const double viewport_bottom = prj->getViewportPosY(); + const double viewport_width = prj->getViewportWidth(); + const double viewport_height = prj->getViewportHeight(); if ((prj->project(Vec3d(0.), screenPos) - && screenPos[1]>viewport_bottom - viewportBufferSz && screenPos[1] < viewport_bottom + prj->getViewportHeight()+viewportBufferSz - && screenPos[0]>viewport_left - viewportBufferSz && screenPos[0] < viewport_left + prj->getViewportWidth() + viewportBufferSz)) + && screenPos[1]>viewport_bottom - viewportBufferSz && screenPos[1] < viewport_bottom + viewport_height+viewportBufferSz + && screenPos[0]>viewport_left - viewportBufferSz && screenPos[0] < viewport_left + viewport_width + viewportBufferSz)) { // Draw the name, and the circle if it's not too close from the body it's turning around // this prevents name overlapping (e.g. for Jupiter's satellites) @@ -2978,7 +2981,8 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon } } - draw3dModel(core,transfo,static_cast(screenRd), eclipseFactor); + if (!cutDimObjects) + draw3dModel(core,transfo,static_cast(screenRd), eclipseFactor); } else if (permanentDrawingOrbits) // A special case for demos drawOrbit(core); From fafe88af3f3d258243e3a6e6dc970394a227f988 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 13 Aug 2024 18:19:34 +0200 Subject: [PATCH 15/32] Add a mag threshold for the markers. It just feels more natural with this. However, with Solar System Observer, the mag computation leads to objects in inferior conjunction (between sun and observer) being dimmer and maybe clipped away. Unsure ATM how to deal with this. Another switch to make this threshold optional? Or add a "heliocentric magnitude"? --- src/core/modules/Planet.cpp | 4 +- src/core/modules/SolarSystem.cpp | 3 ++ src/core/modules/SolarSystem.hpp | 15 +++++++- src/gui/ConfigurationDialog.cpp | 1 + src/gui/ViewDialog.cpp | 1 + src/gui/viewDialog.ui | 65 +++++++++++++++++++++----------- 6 files changed, 66 insertions(+), 23 deletions(-) diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 83c2a9702342f..1ebfdbb210eba 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2890,11 +2890,13 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon // If asteroid is too faint to be seen, don't bother rendering. (Massive speedup if people have hundreds of orbital elements!) // AW: Added a special case for educational purpose to drawing orbits for the Solar System Observer // Details: https://sourceforge.net/p/stellarium/discussion/278769/thread/4828ebe4/ - const bool cutDimObjects=((getVMagnitude(core)-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid; + const bool cutDimObjects=((vMagnitude-5.0f) > core->getSkyDrawer()->getLimitMagnitude()) && pType>=Planet::isAsteroid; if ((ss->getMarkerValue()==0.) && cutDimObjects && !core->getCurrentLocation().planetName.contains("Observer", Qt::CaseInsensitive)) { return; } + if (pType>=Planet::isAsteroid && (vMagnitude > ss->getMarkerMagThreshold())) + return; Mat4d mat = Mat4d::translation(eclipticPos) * rotLocalToParent; diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 4a7354b01d673..e7a4721b161b3 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -125,6 +125,7 @@ SolarSystem::SolarSystem() : StelObjectModule() , nbMarkers(0) , vao(new QOpenGLVertexArrayObject) , vbo(new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer)) + , markerMagThreshold(15.) { planetNameFont.setPixelSize(StelApp::getInstance().getScreenFontSize()); connect(&StelApp::getInstance(), SIGNAL(screenFontSizeChanged(int)), this, SLOT(setFontSize(int))); @@ -235,6 +236,7 @@ void SolarSystem::init() setFlagPlanets(conf->value("astro/flag_planets").toBool()); setFlagHints(conf->value("astro/flag_planets_hints").toBool()); setFlagMarkers(conf->value("astro/flag_planets_markers", false).toBool()); + setMarkerMagThreshold(conf->value("astro/planet_markers_mag_threshold", 15.).toDouble()); setFlagLabels(conf->value("astro/flag_planets_labels", true).toBool()); setLabelsAmount(conf->value("astro/labels_amount", 3.).toDouble()); setFlagOrbits(conf->value("astro/flag_planets_orbits").toBool()); @@ -354,6 +356,7 @@ void SolarSystem::init() addAction("actionShow_Planets_EnlargePlanets", displayGroup, N_("Enlarge Planets"), "flagPlanetScale"); addAction("actionShow_Planets_EnlargeSun", displayGroup, N_("Enlarge Sun"), "flagSunScale"); addAction("actionShow_Skyculture_NativePlanetNames", displayGroup, N_("Native planet names (from starlore)"), "flagNativePlanetNames", "Ctrl+Shift+N"); + addAction("actionShow_Planets_ShowAsteroidMarkers", displayGroup, N_("Minor Planet Markers"), "flagMarkers"); connect(StelApp::getInstance().getModule("HipsMgr"), SIGNAL(gotNewSurvey(HipsSurveyP)), this, SLOT(onNewSurvey(HipsSurveyP))); diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index fd6c41e9dc6a9..989cf42d0d965 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -145,6 +145,7 @@ class SolarSystem : public StelObjectModule, protected QOpenGLFunctions Q_PROPERTY(bool flagDrawMoonHalo READ getFlagDrawMoonHalo WRITE setFlagDrawMoonHalo NOTIFY flagDrawMoonHaloChanged) Q_PROPERTY(bool flagDrawSunHalo READ getFlagDrawSunHalo WRITE setFlagDrawSunHalo NOTIFY flagDrawSunHaloChanged) Q_PROPERTY(int extraThreads READ getExtraThreads WRITE setExtraThreads NOTIFY extraThreadsChanged) + Q_PROPERTY(double markerMagThreshold READ getMarkerMagThreshold WRITE setMarkerMagThreshold NOTIFY markerMagThresholdChanged) public: SolarSystem(); @@ -754,8 +755,15 @@ public slots: //! The texture path starts in the scripts directory. void setTextureForPlanet(const QString &planetName, const QString &texName); + //! Return the number of additional threads (in addition to the main thread) configured to compute planet positions. int getExtraThreads() const {return extraThreads;} - void setExtraThreads(int n){extraThreads=n;} + //! Configure the number of additional threads (in addition to the main thread) to compute planet positions. + void setExtraThreads(int n){extraThreads=n; emit extraThreadsChanged(n);} + + //! Return the limiting absolute magnitude configured for plotting minor bodies. 30 means "all". + double getMarkerMagThreshold() const {return markerMagThreshold;} + //! Configure the limiting absolute magnitude for plotting minor bodies. Configured value is clamped to -2..30, 30 means "all". + void setMarkerMagThreshold(double m) {markerMagThreshold=qBound(-2.,m,35.); emit markerMagThresholdChanged(markerMagThreshold);} signals: void labelsDisplayedChanged(bool b); @@ -852,6 +860,8 @@ public slots: void extraThreadsChanged(const int); + void markerMagThresholdChanged(double m); + public: /////////////////////////////////////////////////////////////////////////// // Other public methods @@ -1231,6 +1241,9 @@ private slots: bool drawAsteroidMarker(StelCore* core, StelPainter* sPainter, const float x, const float y, Vec3f &color); float getMarkerValue() const {return markerFader.getInterstate();} +private: + //! absolute value of the dimmest SSO drawn by drawAsteroidMarker() + double markerMagThreshold; // END OF BLOCK RELATED TO MASS MARKER DISPLAY }; diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index 2add949fbafea..5f27d947704b4 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -867,6 +867,7 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("astro/flag_planets", propMgr->getStelPropertyValue("SolarSystem.planetsDisplayed").toBool()); conf->setValue("astro/flag_planets_hints", propMgr->getStelPropertyValue("SolarSystem.flagHints").toBool()); conf->setValue("astro/flag_planets_markers", propMgr->getStelPropertyValue("SolarSystem.flagMarkers").toBool()); + conf->setValue("astro/planet_markers_mag_threshold", propMgr->getStelPropertyValue("SolarSystem.markerMagThreshold").toDouble()); conf->setValue("astro/flag_planets_orbits", propMgr->getStelPropertyValue("SolarSystem.flagOrbits").toBool()); conf->setValue("astro/flag_permanent_orbits", propMgr->getStelPropertyValue("SolarSystem.flagPermanentOrbits").toBool()); conf->setValue("astro/object_orbits_thickness", propMgr->getStelPropertyValue("SolarSystem.orbitsThickness").toInt()); diff --git a/src/gui/ViewDialog.cpp b/src/gui/ViewDialog.cpp index ae76005353831..3fb52cc111203 100644 --- a/src/gui/ViewDialog.cpp +++ b/src/gui/ViewDialog.cpp @@ -254,6 +254,7 @@ void ViewDialog::createDialogContent() connectIntProperty(ui->planetIsolatedTrailsSpinBox, "SolarSystem.numberIsolatedTrails"); connectBoolProperty(ui->drawMoonHaloCheckBox, "SolarSystem.flagDrawMoonHalo"); connectBoolProperty(ui->minorPlanetMarkersCheckBox, "SolarSystem.flagMarkers"); + connectDoubleProperty(ui->minorPlanetMarkerMagThresholdSpinBox, "SolarSystem.markerMagThreshold"); connectBoolProperty(ui->drawSunGlareCheckBox, "SolarSystem.flagDrawSunHalo"); connectBoolProperty(ui->drawSunCoronaCheckBox, "SolarSystem.flagPermanentSolarCorona"); connectBoolProperty(ui->shadowEnlargementDanjonCheckBox, "SolarSystem.earthShadowEnlargementDanjon"); diff --git a/src/gui/viewDialog.ui b/src/gui/viewDialog.ui index e12a02c6a834c..aa703e903f5cc 100644 --- a/src/gui/viewDialog.ui +++ b/src/gui/viewDialog.ui @@ -1397,13 +1397,13 @@ - - + + - Toggle drawing Sun's glare + Toggle drawing halo around the Moon - Sun's glare + Moon's halo @@ -1414,25 +1414,48 @@ - - + + - Toggle drawing halo around the Moon + Toggle drawing Sun's glare - Moon's halo + Sun's glare - - - - Toggle permanent drawing of Sun's corona when atmosphere is disabled - - - Sun's corona - - + + + + + + Show tiny circles for minor bodies regardless of magnitude + + + Minor Planet Markers + + + + + + + Draw markers for objects with magnitude brighter than this + + + 35.000000000000000 + + + 5.000000000000000 + + + 0.100000000000000 + + + 15.000000000000000 + + + + @@ -1441,13 +1464,13 @@ - - + + - Show tiny circles for minor bodies regardless of magnitude + Toggle permanent drawing of Sun's corona when atmosphere is disabled - Minor Planet Markers + Sun's corona From b916df8dd3f6eb7039897b8b72e4a5b454a9b4c6 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Wed, 14 Aug 2024 01:51:12 +0200 Subject: [PATCH 16/32] Allow selection of minor body when marker is plotted --- src/core/modules/Planet.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 1ebfdbb210eba..db199e10d3730 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -1583,9 +1583,13 @@ QPair Planet::getLunarEclipseMagnitudes() const float Planet::getSelectPriority(const StelCore* core) const { - if( (static_cast(StelApp::getInstance().getModuleMgr().getModule("SolarSystem")))->getFlagHints() ) + static SolarSystem *ss=GETSTELMODULE(SolarSystem); + if (pType>=isAsteroid && ss->getFlagMarkers()) + return getVMagnitude(core)-25.f; + + if( ss->getFlagHints() ) { - // easy to select, especially pluto + // easy to select, especially Pluto return getVMagnitudeWithExtinction(core)-15.f; } else From a4dacaa34cf60a0463968470d1a617f00db1d8be Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Wed, 14 Aug 2024 13:00:32 +0200 Subject: [PATCH 17/32] Make magnitude for minor bodies heliocentric if observed from an observer. This avoids the effect described earlier. From SolarSystemObserver, distance can be set up to 50AU, from where minor bodies are way below mag25. This increases "fair" visibility in the more symbolic "markers" view. --- src/core/modules/Comet.cpp | 9 +++++++-- src/core/modules/Comet.hpp | 3 +++ src/core/modules/MinorPlanet.cpp | 7 ++++++- src/core/modules/MinorPlanet.hpp | 3 +++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/modules/Comet.cpp b/src/core/modules/Comet.cpp index 82c2fb7ea8cdf..b0b1c15bbeff4 100644 --- a/src/core/modules/Comet.cpp +++ b/src/core/modules/Comet.cpp @@ -233,7 +233,6 @@ QString Comet::getInfoStringSize(const StelCore *core, const InfoStringGroup &fl return str; } -// Nothing interesting? QString Comet::getInfoStringExtra(const StelCore *core, const InfoStringGroup &flags) const { Q_UNUSED(core) @@ -288,7 +287,13 @@ float Comet::getVMagnitude(const StelCore* core, const double eclipseFactor) con } //Calculate distances - const Vec3d& observerHeliocentricPosition = core->getObserverHeliocentricEclipticPos(); + Vec3d observerHeliocentricPosition; + if (core->getCurrentPlanet()->getPlanetType()==Planet::isObserver) + + observerHeliocentricPosition = Vec3d(0.f,0.f,0.f); + else + observerHeliocentricPosition = core->getObserverHeliocentricEclipticPos(); + const Vec3d& cometHeliocentricPosition = getHeliocentricEclipticPos(); const float cometSunDistance = static_cast(cometHeliocentricPosition.norm()); const float observerCometDistance = static_cast((observerHeliocentricPosition - cometHeliocentricPosition).norm()); diff --git a/src/core/modules/Comet.hpp b/src/core/modules/Comet.hpp index 528e7b1d7aa1f..1b5c1e7066d1b 100644 --- a/src/core/modules/Comet.hpp +++ b/src/core/modules/Comet.hpp @@ -70,6 +70,9 @@ class Comet : public Planet //The Comet class inherits the "Planet" type because the SolarSystem class //was not designed to handle different types of objects. //virtual QString getType() const {return "Comet";} + //! Override for comets. + //! When observer is on an "Observer" planet, the magnitude reported is heliocentric (seen from the Sun). + //! This allows observing comets belt from far away while still seeing the tail. //! \todo Find better sources for the g,k system float getVMagnitude(const StelCore* core) const override; //! Override with additional @param eclipseFactor. The factor is ignored. diff --git a/src/core/modules/MinorPlanet.cpp b/src/core/modules/MinorPlanet.cpp index 3c78cc42b7333..dfd9bd2559f9d 100644 --- a/src/core/modules/MinorPlanet.cpp +++ b/src/core/modules/MinorPlanet.cpp @@ -24,6 +24,7 @@ #include "StelCore.hpp" #include "StelTranslator.hpp" #include "StelLocaleMgr.hpp" +#include "StelObserver.hpp" #include #include @@ -244,7 +245,11 @@ float MinorPlanet::getVMagnitude(const StelCore* core, const double eclipseFacto //Calculate phase angle //(Code copied from Planet::getVMagnitude()) //(this is actually vector subtraction + the cosine theorem :)) - const Vec3d& observerHelioPos = core->getObserverHeliocentricEclipticPos(); + Vec3d observerHelioPos; + if (core->getCurrentObserver()->getCurrentLocation().planetName.contains("Observer")) + observerHelioPos = Vec3d(0.f,0.f,0.f); + else + observerHelioPos = core->getObserverHeliocentricEclipticPos(); const float observerRq = static_cast(observerHelioPos.normSquared()); const Vec3d& planetHelioPos = getHeliocentricEclipticPos(); const float planetRq = static_cast(planetHelioPos.normSquared()); diff --git a/src/core/modules/MinorPlanet.hpp b/src/core/modules/MinorPlanet.hpp index a953acc3bdc4a..8b15587568a40 100644 --- a/src/core/modules/MinorPlanet.hpp +++ b/src/core/modules/MinorPlanet.hpp @@ -61,6 +61,9 @@ class MinorPlanet : public Planet //was not designed to handle different types of objects. // \todo Decide if this is going to be "MinorPlanet" or "Asteroid" //virtual QString getType() const {return "MinorPlanet";} + //! Override for minor planets. + //! When observer is on an "Observer" planet, the magnitude reported is heliocentric (seen from the Sun). + //! This allows observing the asteroid belt freom the side without nearer objects being obscured by phase angle. float getVMagnitude(const StelCore* core) const override; //! Convenience method, necessary override. @param eclipseFactor is ignored. float getVMagnitude(const StelCore* core, const double eclipseFactor) const override; From 2f9605db449e72fd6b02ddc190294c342e840a3f Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Wed, 14 Aug 2024 13:01:31 +0200 Subject: [PATCH 18/32] SUG: update these changes --- guide/ch_interface.tex | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/guide/ch_interface.tex b/guide/ch_interface.tex index 85405dc7848de..f223c84b00a60 100644 --- a/guide/ch_interface.tex +++ b/guide/ch_interface.tex @@ -391,6 +391,20 @@ \subsection{The Tools Tab} from touch-enabled devices like smartphones. \end{description} +\paragraph{Multithreading} \label{sec:gui:configuration:tools:threads} +For every frame, the positions of all planets and minor bodies of the Solar system are computed. +Most of the other time between frame updates is needed for the actual frame drawing, +and waiting for the next frame cycle if you have deliberately set a low frame rate (useful to conserve energy; see below). +If you have many thousands of solar system objects and a moderately new computer, +you may feel that Stellarium becomes slow (few frames/second) but see that mostly only one core of your CPU seems to be busy. +You can try\newFeature{24.3} to distribute the computation of solar system bodies to more CPU cores. +But take note, thread synchronization (combining all results ahead of drawing) takes its time, +so it pays off only when your solar system is really large. +With more than 1000 objects, we recommend starting with 1 additional thread. +Even with 25.000 objects, assigning more than 4 additional threads on a 20-core CPU does not show any further gain. +Frame drawing is still performed by the main thread, and too many objects still slow down the program. +Just try out what works best on your system. + \paragraph{Framerate intent} \label{sec:gui:configuration:tools:fps} The pace of screen updates (frames per second, FPS) depends on several factors: CPU speed, graphics card speed, screen size, number of displayed objects and grids, etc. As is common for interactive programs, the main program thread runs on a single core also on a multicore system. @@ -679,6 +693,17 @@ \subsection{The Solar System Objects (SSO) Tab} in the sky, which can be nice for didactic purposes or demonstrations. \item[Planets] will increase the apparent size of major planets. \end{description} +\item[Show minor body markers]\newFeature{24.3} Show a little circle at the location of every minor body (comet, + asteroid, \ldots), down to the configured visual magnitude. + The marks are shown regardless of sky brightness, even in daytime. Also, in this mode, markers for objects + with highly outdated orbital elements are still plotted (see \ref{sec:plugins:SolarSystemEditor} + and Appendix~\ref{sec:ssystem.ini:minor}). + This is useful to show the distribution of asteroids and comets on the sky, + or especially when viewed from the Solar System Observer (see \ref{sec:gui:location:observers}). + + From the ``Observer'' viewpoints, the visual magnitude is computed as seen from the Sun, + so that objects in inferior conjunction ae not dimmed down and filtered away by effects of phase angle. + \item[Show orbits] adds a rendition of the orbit or trajectory of an SSO. For efficiency, orbits are not displayed when the object is not inside the screen, unless you set the ``permanently'' option. You can further fine-tune the selection From 4ff4aa666d9853607a96d33890be5396dc75ffbe Mon Sep 17 00:00:00 2001 From: Ruslan Kabatsayev Date: Fri, 23 Aug 2024 01:42:52 +0400 Subject: [PATCH 19/32] Simplify SolarSystem::computePosition This reduces creation of threads and synchronization to one time, yielding better performance, and at the same times massively improves readability. Author: Ruslan Kabatsayev --- src/core/modules/SolarSystem.cpp | 227 ++++++++----------------------- 1 file changed, 54 insertions(+), 173 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index e7a4721b161b3..ff39fbc4172a7 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1527,8 +1527,6 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) { StelCore *core=StelApp::getInstance().getCore(); const bool withAberration=core->getUseAberration(); - const bool observerPlanetIsEarth = observerPlanet==getEarth(); - // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. // Given the comparably low impact of planetary positions on the overall frame time, we don't need more than 4 extra threads. (Profiled with 12.000 objects.) // const int availablePoolThreads=qBound(0, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount(), 4); // qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); @@ -1539,189 +1537,72 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) qDebug() << "SolarSystem: We should have " << availablePoolThreads << "threads (plus main thread) available for computePositions()"; threadMessage=false; } - static StelObjectMgr* omgr=GETSTELMODULE(StelObjectMgr); - omgr->removeExtraInfoStrings(StelObject::DebugAid); + // Activate this to show debug aid strings in screen InfoString + //static StelObjectMgr* omgr=GETSTELMODULE(StelObjectMgr); + //omgr->removeExtraInfoStrings(StelObject::DebugAid); if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { - // 1. First approximation. - //for (const auto& p : std::as_const(systemPlanets)) - //{ - // p->computePosition(dateJDE, Vec3d(0.)); - //} + // Position of this planet will be used in the subsequent computations + observerPlanet->computePosition(dateJDE, Vec3d(0.)); + const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); + const Vec3d &obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - //std::function &)> plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(dateJDE, Vec3d(0.));}; - //QtConcurrent::map(systemPlanets, plCompPosJDEZero).waitForFinished(); + const auto processPlanet = [this,dateJDE,observerIsEarth,withAberration, + &obsPosJDE,&aberrationPushSpeed](const PlanetP& p) + { + // 1. First approximation. + p->computePosition(dateJDE, Vec3d(0.)); - QList> futures; + // For higher accuracy, we now make two iterations of light time and aberration correction. In the final + // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply + // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See + // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the + // used ephemerides already provide aberration-corrected positions for the Moon? + auto planetPos = p->getHeliocentricEclipticPos(); + double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + const bool needToApplyAberration = withAberration && (!observerIsEarth || p != getMoon()); + Vec3d aberrationPush(0.); + if(needToApplyAberration) + aberrationPush=lightTimeDays*aberrationPushSpeed; + p->computePosition(dateJDE-lightTimeDays, aberrationPush); + + // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? + planetPos = p->getHeliocentricEclipticPos(); + lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + if(needToApplyAberration) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + p->computePosition(dateJDE-lightTimeDays, aberrationPush); - // This defines a function to be thrown onto a pool thread that computes every 'incr'th element. - std::function plCompLoopZero = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->computePosition(dateJDE, Vec3d(0.)); - } + const auto update = &RotationElements::updatePlanetCorrections; + if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); }; - // Move to external threads, but also run a part in the main thread. The index 'availableThreads' is just the last group of objects. - for (int stride=0; stridegetHeliocentricEclipticPos(); - - // 2. For higher accuracy, we now make two iterations of light time and aberration correction. In the final - // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply - // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See - // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the - // used ephemerides already provide aberration-corrected positions for the Moon? - const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - - //for (const auto& p : std::as_const(systemPlanets)) - //{ - // //p->setExtraInfoString(StelObject::DebugAid, ""); - // const auto planetPos = p->getHeliocentricEclipticPos(); - // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - // Vec3d aberrationPush(0.); - // if (withAberration && (observerPlanet->englishName!="Earth" || p->englishName!="Moon")) - // aberrationPush=lightTimeDays*aberrationPushSpeed; - // p->computePosition(dateJDE-lightTimeDays, aberrationPush); - //} - - //std::function &)> plCompPosJDEOne = [=](QSharedPointer &p){ - // const auto planetPos = p->getHeliocentricEclipticPos(); - // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - // Vec3d aberrationPush(0.); - // if (withAberration && (observerPlanet->englishName!=LS1("Earth") || p->englishName!=LS("Moon"))) - // aberrationPush=lightTimeDays*aberrationPushSpeed; - // p->computePosition(dateJDE-lightTimeDays, aberrationPush); - //}; - //QtConcurrent::map(systemPlanets, plCompPosJDEOne).waitForFinished(); - - std::function plCompLoopOne = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itsetExtraInfoString(StelObject::DebugAid, ""); - const auto planetPos = it->data()->getHeliocentricEclipticPos(); - const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - Vec3d aberrationPush(0.); - if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) - aberrationPush=lightTimeDays*aberrationPushSpeed; - it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); - } + for(int i = indexMin; i <= indexMax; ++i) + processPlanet(planets[i]); }; - for (int stride=0; stride> futures; + const auto totalThreads = availablePoolThreads+1; + const auto blockSize = systemPlanets.size() / totalThreads; + for(int threadN=0; threadNsetExtraInfoString(StelObject::DebugAid, ""); - // const auto planetPos = p->getHeliocentricEclipticPos(); - // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - // Vec3d aberrationPush(0.); - // if (withAberration && (observerPlanet->englishName!="Earth" || p->englishName!="Moon")) - // aberrationPush=lightTimeDays*aberrationPushSpeed; - // // The next call may already do nothing if the time difference to the previous round is not large enough. - // p->computePosition(dateJDE-lightTimeDays, aberrationPush); -// // p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") -// // .arg(QString::number(lightTimeDays, 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); - - // const auto update = &RotationElements::updatePlanetCorrections; - // if (p->englishName=="Moon") update(dateJDE-lightTimeDays, RotationElements::EarthMoon); - // else if (p->englishName=="Mars") update(dateJDE-lightTimeDays, RotationElements::Mars); - // else if (p->englishName=="Jupiter") update(dateJDE-lightTimeDays, RotationElements::Jupiter); - // else if (p->englishName=="Saturn") update(dateJDE-lightTimeDays, RotationElements::Saturn); - // else if (p->englishName=="Uranus") update(dateJDE-lightTimeDays, RotationElements::Uranus); - // else if (p->englishName=="Neptune") update(dateJDE-lightTimeDays, RotationElements::Neptune); - //} - - //std::function &)> plCompPosJDETwo = [=](QSharedPointer &p){ - // //p->setExtraInfoString(StelObject::DebugAid, ""); - // const auto planetPos = p->getHeliocentricEclipticPos(); - // const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - // Vec3d aberrationPush(0.); - // if (withAberration && (observerPlanet->englishName!=LS1("Earth") || p->englishName!=LS("Moon"))) - // aberrationPush=lightTimeDays*aberrationPushSpeed; - // // The next call may already do nothing if the time difference to the previous round is not large enough. - // p->computePosition(dateJDE-lightTimeDays, aberrationPush); -// // p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") -// // .arg(QString::number(lightTimeDays, 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) -// // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); - - // const auto update = &RotationElements::updatePlanetCorrections; - // if (p->englishName==LS1("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); - // else if (p->englishName==LS1("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); - // else if (p->englishName==LS1("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); - // else if (p->englishName==LS1("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); - // else if (p->englishName==LS1("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); - // else if (p->englishName==LS1("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); - //}; - //QtConcurrent::map(systemPlanets, plCompPosJDETwo).waitForFinished(); - - - std::function plCompLoopTwo = [=](int offset){ - for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->setExtraInfoString(StelObject::DebugAid, ""); - const auto planetPos = it->data()->getHeliocentricEclipticPos(); - const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - Vec3d aberrationPush(0.); - if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) - aberrationPush=lightTimeDays*aberrationPushSpeed; - // The next call may already do nothing if the time difference to the previous round is not large enough. - it->data()->computePosition(dateJDE-lightTimeDays, aberrationPush); - // it->data()->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") - // .arg(QString::number(lightTimeDays, 'f', 3)) - // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) - // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) - // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); - - const auto update = &RotationElements::updatePlanetCorrections; - if (it->data()->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); - else if (it->data()->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); - else if (it->data()->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); - else if (it->data()->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); - else if (it->data()->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); - else if (it->data()->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); - } - }; - for (int stride=0; strideaddToExtraInfoString(StelObject::DebugAid, QString("Threads: Ideal: %1, Pool max %2/active %3, SolarSystem using %4
"). - arg(QString::number(QThread::idealThreadCount()), - QString::number(QThreadPool::globalInstance()->maxThreadCount()), - QString::number(QThreadPool::globalInstance()->activeThreadCount()), - QString::number(availablePoolThreads))); - // and we still run the last stride in the main thread. - plCompLoopTwo(availablePoolThreads); - // Now the list is being computed by other threads. we can just wait sequentially for completion. - for(auto f: futures) + // and the last thread is the current one + loop(blockSize*(totalThreads-1), systemPlanets.size()-1); + for(auto& f : futures) f.waitForFinished(); } else From 66cbb5b760af34f34489a6babcd1a443e6b6e158 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Fri, 23 Aug 2024 14:54:44 +0200 Subject: [PATCH 20/32] Avoid costly triple timezone lookup per frame --- plugins/NavStars/src/gui/NavStarsWindow.cpp | 3 +- plugins/Novae/src/Nova.cpp | 8 +- plugins/Novae/src/Nova.hpp | 2 +- plugins/RemoteControl/src/MainService.cpp | 2 +- plugins/Supernovae/src/Supernova.cpp | 6 +- plugins/Supernovae/src/Supernova.hpp | 2 +- .../src/TextUserInterface.cpp | 5 +- src/core/SolarEclipseComputer.cpp | 12 +-- src/core/StelCore.hpp | 1 + src/core/StelLocaleMgr.cpp | 18 ++-- src/core/StelLocaleMgr.hpp | 12 ++- src/core/modules/Planet.cpp | 5 +- src/core/modules/SolarSystem.cpp | 12 +-- src/gui/AstroCalcDialog.cpp | 82 +++++++++++-------- src/gui/StelGuiItems.cpp | 13 +-- 15 files changed, 106 insertions(+), 77 deletions(-) diff --git a/plugins/NavStars/src/gui/NavStarsWindow.cpp b/plugins/NavStars/src/gui/NavStarsWindow.cpp index 877598e2b80b6..fa40c9277cbca 100644 --- a/plugins/NavStars/src/gui/NavStarsWindow.cpp +++ b/plugins/NavStars/src/gui/NavStarsWindow.cpp @@ -199,7 +199,8 @@ void NavStarsWindow::populateToday() astronomicalTwilightDuration = StelUtils::hoursToHmsStr(duration, true); // fill the data - ui->labelToday->setText(localeMgr->getPrintableDateLocal(core->getJD())); + const double JD=core->getJD(); + ui->labelToday->setText(localeMgr->getPrintableDateLocal(JD, core->getUTCOffset(JD))); ui->labelDayBegin->setText(dayBegin); ui->labelDayEnd->setText(dayEnd); ui->labelDayDuration->setText(dayDuration); diff --git a/plugins/Novae/src/Nova.cpp b/plugins/Novae/src/Nova.cpp index fb3bfba7edb13..64fa7c450cf58 100644 --- a/plugins/Novae/src/Nova.cpp +++ b/plugins/Novae/src/Nova.cpp @@ -22,7 +22,7 @@ #include "StelCore.hpp" #include "StelUtils.hpp" #include "StelTranslator.hpp" -#include "StelModuleMgr.hpp" +//#include "StelModuleMgr.hpp" #include "StelSkyDrawer.hpp" #include "StelLocaleMgr.hpp" #include "StelPainter.hpp" @@ -130,9 +130,9 @@ QString Nova::getDesignation() const return designation; } -QString Nova::getMaxBrightnessDate(const double JD) const +QString Nova::getMaxBrightnessDate(const StelCore *core, const double JD) const { - return StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(JD); + return StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(JD, core->getUTCOffset(JD)); } QString Nova::getInfoString(const StelCore* core, const InfoStringGroup& flags) const @@ -157,7 +157,7 @@ QString Nova::getInfoString(const StelCore* core, const InfoStringGroup& flags) if (flags&Extra) { - oss << QString("%1: %2").arg(q_("Maximum brightness"), getMaxBrightnessDate(peakJD)) << "
"; + oss << QString("%1: %2").arg(q_("Maximum brightness"), getMaxBrightnessDate(core, peakJD)) << "
"; if (distance>0) { //TRANSLATORS: Unit of measure for distance - Light Years diff --git a/plugins/Novae/src/Nova.hpp b/plugins/Novae/src/Nova.hpp index 845e62641a2a0..f618adc6a55b4 100644 --- a/plugins/Novae/src/Nova.hpp +++ b/plugins/Novae/src/Nova.hpp @@ -118,7 +118,7 @@ class Nova : public StelObject static bool syncShowLabels; - QString getMaxBrightnessDate(const double JD) const; + QString getMaxBrightnessDate(const StelCore *core, const double JD) const; }; #endif // NOVA_HPP diff --git a/plugins/RemoteControl/src/MainService.cpp b/plugins/RemoteControl/src/MainService.cpp index fbc2b89e1f4b2..e381b20cfd606 100644 --- a/plugins/RemoteControl/src/MainService.cpp +++ b/plugins/RemoteControl/src/MainService.cpp @@ -140,7 +140,7 @@ void MainService::get(const QByteArray& operation, const APIParameters ¶mete QString localIso = StelUtils::julianDayToISO8601String(jday+gmtShift,true); //time zone string - QString timeZone = localeMgr->getPrintableTimeZoneLocal(jday); + QString timeZone = localeMgr->getPrintableTimeZoneLocal(jday, core->getUTCOffset(jday)); QJsonObject obj2; obj2.insert("jday",jday); diff --git a/plugins/Supernovae/src/Supernova.cpp b/plugins/Supernovae/src/Supernova.cpp index 851bab7257fa3..0c201e2c2e534 100644 --- a/plugins/Supernovae/src/Supernova.cpp +++ b/plugins/Supernovae/src/Supernova.cpp @@ -109,9 +109,9 @@ QString Supernova::getEnglishName(void) const return name; } -QString Supernova::getMaxBrightnessDate(const double JD) const +QString Supernova::getMaxBrightnessDate(const StelCore *core, const double JD) const { - return StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(JD); + return StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(JD, core->getUTCOffset(JD)); } QString Supernova::getMagnitudeInfoString(const StelCore *core, const InfoStringGroup& flags, const int decimals) const @@ -152,7 +152,7 @@ QString Supernova::getInfoString(const StelCore* core, const InfoStringGroup& fl if (flags&Extra) { oss << QString("%1: %2").arg(q_("Type of supernova"), sntype) << "
"; - oss << QString("%1: %2").arg(q_("Maximum brightness"), getMaxBrightnessDate(peakJD)) << "
"; + oss << QString("%1: %2").arg(q_("Maximum brightness"), getMaxBrightnessDate(core, peakJD)) << "
"; if (distance>0) { //TRANSLATORS: Unit of measure for distance - Light Years diff --git a/plugins/Supernovae/src/Supernova.hpp b/plugins/Supernovae/src/Supernova.hpp index 64b1ff603a3ed..648e022376640 100644 --- a/plugins/Supernovae/src/Supernova.hpp +++ b/plugins/Supernovae/src/Supernova.hpp @@ -119,7 +119,7 @@ class Supernova : public StelObject static bool syncShowLabels; - QString getMaxBrightnessDate(const double JD) const; + QString getMaxBrightnessDate(const StelCore *core, const double JD) const; }; #endif // SUPERNOVA_HPP diff --git a/plugins/TextUserInterface/src/TextUserInterface.cpp b/plugins/TextUserInterface/src/TextUserInterface.cpp index e43f5499074be..93e788e1ecd4c 100644 --- a/plugins/TextUserInterface/src/TextUserInterface.cpp +++ b/plugins/TextUserInterface/src/TextUserInterface.cpp @@ -661,9 +661,10 @@ void TextUserInterface::draw(StelCore* core) { double jd = core->getJD(); int text_x = x + xVc*2/3, text_y = y + pixOffset; + const double utcOffsetHrs=core->getUTCOffset(jd); - QString newDate = StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(jd) + " " - +StelApp::getInstance().getLocaleMgr().getPrintableTimeLocal(jd); + QString newDate = StelApp::getInstance().getLocaleMgr().getPrintableDateLocal(jd, utcOffsetHrs) + " " + +StelApp::getInstance().getLocaleMgr().getPrintableTimeLocal(jd, utcOffsetHrs); if (fovMaskDisk) { text_x = xVc + fovOffsetY - pixOffset; diff --git a/src/core/SolarEclipseComputer.cpp b/src/core/SolarEclipseComputer.cpp index d5ab401a02f09..0918c472c4db5 100644 --- a/src/core/SolarEclipseComputer.cpp +++ b/src/core/SolarEclipseComputer.cpp @@ -2005,21 +2005,21 @@ void SolarEclipseComputer::generateKML(const EclipseMapData& data, const QString stream << "\n" << toKMLColorString(eclipseLimitsColor) << "\n\n\n"; { - const auto timeStr = localeMgr->getPrintableTimeLocal(data.greatestEclipse.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(data.greatestEclipse.JD, core->getUTCOffset(data.greatestEclipse.JD)); stream << "\n"+q_("Greatest eclipse")+" ("+timeStr+")\n\n"; stream << data.greatestEclipse.longitude << "," << data.greatestEclipse.latitude << ",0.0\n"; stream << "\n\n\n"; } { - const auto timeStr = localeMgr->getPrintableTimeLocal(data.firstContactWithEarth.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(data.firstContactWithEarth.JD, core->getUTCOffset(data.firstContactWithEarth.JD)); stream << "\n"+q_("First contact with Earth")+" ("+timeStr+")\n\n"; stream << data.firstContactWithEarth.longitude << "," << data.firstContactWithEarth.latitude << ",0.0\n"; stream << "\n\n\n"; } { - const auto timeStr = localeMgr->getPrintableTimeLocal(data.lastContactWithEarth.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(data.lastContactWithEarth.JD, core->getUTCOffset(data.lastContactWithEarth.JD)); stream << "\n"+q_("Last contact with Earth")+" ("+timeStr+")\n\n"; stream << data.lastContactWithEarth.longitude << "," << data.lastContactWithEarth.latitude << ",0.0\n"; stream << "\n\n\n"; @@ -2102,7 +2102,7 @@ void SolarEclipseComputer::generateKML(const EclipseMapData& data, const QString if(data.centralEclipseStart.JD > 0) { - const auto timeStr = localeMgr->getPrintableTimeLocal(data.centralEclipseStart.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(data.centralEclipseStart.JD, core->getUTCOffset(data.centralEclipseStart.JD)); stream << "\n"+q_("Central eclipse begins")+" ("+timeStr+")\n\n"; stream << data.centralEclipseStart.longitude << "," << data.centralEclipseStart.latitude << ",0.0\n"; stream << "\n\n\n"; @@ -2110,7 +2110,7 @@ void SolarEclipseComputer::generateKML(const EclipseMapData& data, const QString if(data.centralEclipseEnd.JD > 0) { - const auto timeStr = localeMgr->getPrintableTimeLocal(data.centralEclipseEnd.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(data.centralEclipseEnd.JD, core->getUTCOffset(data.centralEclipseEnd.JD)); stream << "\n"+q_("Central eclipse ends")+" ("+timeStr+")\n\n"; stream << data.centralEclipseEnd.longitude << "," << data.centralEclipseEnd.latitude << ",0.0\n"; stream << "\n\n\n"; @@ -2127,7 +2127,7 @@ void SolarEclipseComputer::generateKML(const EclipseMapData& data, const QString for(const auto& outline : data.umbraOutlines) { - const auto timeStr = localeMgr->getPrintableTimeLocal(outline.JD); + const auto timeStr = localeMgr->getPrintableTimeLocal(outline.JD, core->getUTCOffset(outline.JD)); startLinePlaceMark(timeStr, outline.eclipseType); stream << "1\nabsoluto\n\n"; for(const auto& p : outline.curve) diff --git a/src/core/StelCore.hpp b/src/core/StelCore.hpp index f61dee88efcb4..84abac86e5d53 100644 --- a/src/core/StelCore.hpp +++ b/src/core/StelCore.hpp @@ -314,6 +314,7 @@ class StelCore : public QObject //! Get the information on the current location const StelLocation& getCurrentLocation() const; //! Get the UTC offset on the current location (in hours) + //! N.B. This is a rather costly operation. Re-use where possible! double getUTCOffset(const double JD) const; QString getCurrentTimeZone() const; diff --git a/src/core/StelLocaleMgr.cpp b/src/core/StelLocaleMgr.cpp index 483de9dae075e..48da46169da48 100644 --- a/src/core/StelLocaleMgr.cpp +++ b/src/core/StelLocaleMgr.cpp @@ -132,9 +132,9 @@ const StelTranslator& StelLocaleMgr::getScriptsTranslator() const } // Return the time in ISO 8601 format that is : %Y-%m-%d %H:%M:%S -QString StelLocaleMgr::getISO8601TimeLocal(double JD) const +QString StelLocaleMgr::getISO8601TimeLocal(double JD, double utcOffsetHrs) const { - return StelUtils::julianDayToISO8601String(JD + core->getUTCOffset(JD)*StelCore::JD_HOUR); + return StelUtils::julianDayToISO8601String(JD + utcOffsetHrs*StelCore::JD_HOUR); } //! get the six ints from an ISO8601 date time, understood to be local time, make a jdate out @@ -154,10 +154,10 @@ double StelLocaleMgr::getJdFromISO8601TimeLocal(const QString& t, bool* ok) cons // Return a string with the local date formatted according to the dateFormat variable -QString StelLocaleMgr::getPrintableDateLocal(double JD) const +QString StelLocaleMgr::getPrintableDateLocal(double JD, double utcOffsetHrs) const { int year, month, day, dayOfWeek; - const double shift = core->getUTCOffset(JD)*StelCore::JD_HOUR; + const double shift = utcOffsetHrs*StelCore::JD_HOUR; StelUtils::getDateFromJulianDay(JD+shift, &year, &month, &day); dayOfWeek = StelUtils::getDayOfWeek(year, month, day); QString str; @@ -193,10 +193,10 @@ QString StelLocaleMgr::getPrintableDateLocal(double JD) const // Return a string with the local time (according to timeZoneMode variable) formatted // according to the timeFormat variable -QString StelLocaleMgr::getPrintableTimeLocal(double JD) const +QString StelLocaleMgr::getPrintableTimeLocal(double JD, double utcOffsetHrs) const { int hour, minute, second, millsec; - const double shift = core->getUTCOffset(JD)*StelCore::JD_HOUR; + const double shift = utcOffsetHrs*StelCore::JD_HOUR; StelUtils::getTimeFromJulianDay(JD+shift, &hour, &minute, &second, &millsec); QTime t(hour, minute, second, millsec); switch (timeFormat) @@ -218,7 +218,7 @@ QString StelLocaleMgr::getPrintableTimeLocal(double JD) const } } -QString StelLocaleMgr::getPrintableTimeZoneLocal(double JD) const +QString StelLocaleMgr::getPrintableTimeZoneLocal(double JD, double utcOffsetHrs) const { QString timeZone = ""; QString timeZoneST = ""; @@ -238,7 +238,7 @@ QString StelLocaleMgr::getPrintableTimeZoneLocal(double JD) const timeZoneST = qc_("LTST", "solar time"); } - const double shift = core->getUTCOffset(JD); + const double shift = utcOffsetHrs; QTime tz = QTime(0, 0, 0).addSecs(static_cast(3600*qAbs(shift))); if(shift<0.0) timeZone = QString("UTC-%1").arg(tz.toString("hh:mm")); @@ -251,7 +251,7 @@ QString StelLocaleMgr::getPrintableTimeZoneLocal(double JD) const else { // TODO: Make sure LMST/LTST would make sense on other planet, or inhibit it? - const double shift = core->getUTCOffset(JD); + const double shift = utcOffsetHrs; QTime tz = QTime(0, 0, 0).addSecs(static_cast(3600*qAbs(shift))); if(shift<0.0) timeZone = QString("UTC-%1").arg(tz.toString("hh:mm")); diff --git a/src/core/StelLocaleMgr.hpp b/src/core/StelLocaleMgr.hpp index cb08c60971320..e8260e9a7a719 100644 --- a/src/core/StelLocaleMgr.hpp +++ b/src/core/StelLocaleMgr.hpp @@ -130,17 +130,21 @@ class StelLocaleMgr }; //! Get a localized, formatted string representation of the date component of a Julian date. - QString getPrintableDateLocal(double JD) const; + //! @param utcOffsetHrs from StelCore::getUTCOffset(JD) + QString getPrintableDateLocal(double JD, double utcOffsetHrs) const; //! Get a localized, formatted string representation of the time component of a Julian date. - QString getPrintableTimeLocal(double JD) const; + //! @param utcOffsetHrs from StelCore::getUTCOffset(JD) + QString getPrintableTimeLocal(double JD, double utcOffsetHrs) const; //! Get a localized, formatted string representation of the time zone of a Julian date. - QString getPrintableTimeZoneLocal(double JD) const; + //! @param utcOffsetHrs from StelCore::getUTCOffset(JD) + QString getPrintableTimeZoneLocal(double JD, double utcOffsetHrs) const; //! Return the time in ISO 8601 format that is : %Y-%m-%dT%H:%M:%S //! @param JD the time and date expressed as a Julian date value. - QString getISO8601TimeLocal(double JD) const; + //! @param utcOffsetHrs from StelCore::getUTCOffset(JD) + QString getISO8601TimeLocal(double JD, double utcOffsetHrs) const; //! Return the JD time for a local time ISO 8601 format that is: //! %Y-%m-%dT%H:%M:%S, but %Y can be a large number with sign, and diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index db199e10d3730..8a72fd22e4948 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -757,8 +757,9 @@ QString Planet::getInfoString(const StelCore* core, const InfoStringGroup& flags if (orbitPtr && pType>=isArtificial) { StelLocaleMgr* localeMgr = &StelApp::getInstance().getLocaleMgr(); - double JDE = static_cast(orbitPtr)->getEpochJDE(); - oss << q_("NOTE: elements for epoch %1 probably outdated. Consider updating data!").arg(localeMgr->getPrintableDateLocal(JDE)) << "
"; + const double JDE = static_cast(orbitPtr)->getEpochJDE(); + const double utcOffsetHrs = core->getUTCOffset(JDE); + oss << q_("NOTE: elements for epoch %1 probably outdated. Consider updating data!").arg(localeMgr->getPrintableDateLocal(JDE, utcOffsetHrs)) << "
"; } } postProcessInfoString(str, flags); diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index ff39fbc4172a7..a586e4f3c0d53 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1965,14 +1965,15 @@ void SolarSystem::fillEphemerisDates() const int fsize = AstroCalcDialog::EphemerisList.count(); if (fsize==0) return; - StelLocaleMgr* localeMgr = &StelApp::getInstance().getLocaleMgr(); + static StelLocaleMgr* localeMgr = &StelApp::getInstance().getLocaleMgr(); + static StelCore *core = StelApp::getInstance().getCore(); const bool showSmartDates = getFlagEphemerisSmartDates(); double JD = AstroCalcDialog::EphemerisList.first().objDate; bool withTime = (fsize>1 && (AstroCalcDialog::EphemerisList[1].objDate-JD<1.0)); int fYear, fMonth, fDay, sYear, sMonth, sDay, h, m, s; QString info; - const double shift = StelApp::getInstance().getCore()->getUTCOffset(JD)*StelCore::JD_HOUR; + const double shift = core->getUTCOffset(JD)*StelCore::JD_HOUR; StelUtils::getDateFromJulianDay(JD+shift, &fYear, &fMonth, &fDay); bool sFlag = true; sYear = fYear; @@ -1983,7 +1984,7 @@ void SolarSystem::fillEphemerisDates() for (int i = 0; i < fsize; i++) { - JD = AstroCalcDialog::EphemerisList[i].objDate; + const double JD = AstroCalcDialog::EphemerisList[i].objDate; StelUtils::getDateFromJulianDay(JD+shift, &fYear, &fMonth, &fDay); if (showSkippedData && ((i + 1)%dataStep)!=1 && dataStep!=1) @@ -2031,10 +2032,11 @@ void SolarSystem::fillEphemerisDates() else { // OK, let's use standard formats for date and time (as defined for whole planetarium) + const double utcOffsetHrs = core->getUTCOffset(JD); if (withTime) - AstroCalcDialog::EphemerisList[i].objDateStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD)); + AstroCalcDialog::EphemerisList[i].objDateStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs)); else - AstroCalcDialog::EphemerisList[i].objDateStr = localeMgr->getPrintableDateLocal(JD); + AstroCalcDialog::EphemerisList[i].objDateStr = localeMgr->getPrintableDateLocal(JD, utcOffsetHrs); } } } diff --git a/src/gui/AstroCalcDialog.cpp b/src/gui/AstroCalcDialog.cpp index a8b11e1f56253..53bd2c91508c9 100644 --- a/src/gui/AstroCalcDialog.cpp +++ b/src/gui/AstroCalcDialog.cpp @@ -1086,8 +1086,9 @@ void AstroCalcDialog::currentCelestialPositions() const bool withDecimalDegree = StelApp::getInstance().getFlagShowDecimalDegrees(); const double JD = core->getJD(); - const double utcShift = core->getUTCOffset(core->getJD()) / 24.; // Fix DST shift... - ui->celestialPositionsTimeLabel->setText(q_("Positions on %1").arg(QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD)))); + const double utcOffsetHrs = core->getUTCOffset(JD); + const double utcShift = utcOffsetHrs / 24.; // Fix DST shift... + ui->celestialPositionsTimeLabel->setText(q_("Positions on %1").arg(QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD,utcOffsetHrs)))); Vec4d rts; Vec3d observerHelioPos; double angularDistance; @@ -1530,7 +1531,8 @@ void AstroCalcDialog::currentHECPositions() HECPosition object; const double JD = core->getJD(); - ui->hecPositionsTimeLabel->setText(q_("Positions on %1").arg(QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD)))); + const double utcOffsetHrs = core->getUTCOffset(JD); + ui->hecPositionsTimeLabel->setText(q_("Positions on %1").arg(QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD,utcOffsetHrs)))); QList planets; QList allplanets = solarSystem->getAllPlanets(); @@ -1955,7 +1957,7 @@ void AstroCalcDialog::generateEphemeris() for (int i = 0; i <= elements; i++) { Vec3d pos, sunPos; - double JD = firstJD + i * currentStep; + const double JD = firstJD + i * currentStep; core->setJD(JD); core->update(0); // force update to get new coordinates @@ -1997,9 +1999,10 @@ void AstroCalcDialog::generateEphemeris() } ACEphemTreeWidgetItem* treeItem = new ACEphemTreeWidgetItem(ui->ephemerisTreeWidget); + const double utcOffsetHrs = core->getUTCOffset(JD); treeItem->setText(EphemerisCOName, nameI18n); treeItem->setData(EphemerisCOName, Qt::UserRole, englishName); - treeItem->setText(EphemerisDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD))); // local date and time + treeItem->setText(EphemerisDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs))); // local date and time treeItem->setData(EphemerisDate, Qt::UserRole, JD); treeItem->setText(EphemerisRA, coordStrings.first); treeItem->setData(EphemerisRA, Qt::UserRole, idxRow); @@ -2206,18 +2209,25 @@ void AstroCalcDialog::generateRTS() } else { - transitStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), StelUtils::getHoursMinutesFromJulianDay(JD+utcShift)); + const double utcOffsetHrs = core->getUTCOffset(JD); + transitStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), StelUtils::getHoursMinutesFromJulianDay(JD+utcShift)); } if (rts[3]==30 || rts[3]<0 || rts[3]>50) // no rise time riseStr = dash; else - riseStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(rts[0]), StelUtils::getHoursMinutesFromJulianDay(rts[0]+utcShift)); + { + const double utcOffsetHrs = core->getUTCOffset(rts[0]); + riseStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(rts[0], utcOffsetHrs), StelUtils::getHoursMinutesFromJulianDay(rts[0]+utcShift)); + } if (rts[3]==40 || rts[3]<0 || rts[3]>50) // no set time setStr = dash; else - setStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(rts[2]), StelUtils::getHoursMinutesFromJulianDay(rts[2]+utcShift)); + { + const double utcOffsetHrs = core->getUTCOffset(rts[2]); + setStr = QString("%1 %2").arg(localeMgr->getPrintableDateLocal(rts[2], utcOffsetHrs), StelUtils::getHoursMinutesFromJulianDay(rts[2]+utcShift)); + } ACRTSTreeWidgetItem* treeItem = new ACRTSTreeWidgetItem(ui->rtsTreeWidget); treeItem->setText(RTSCOName, name); @@ -2646,8 +2656,10 @@ void AstroCalcDialog::generateLunarEclipses() else uMagStr = QString("%1").arg(QString::number(uMag, 'f', 3)); + ACLunarEclipseTreeWidgetItem* treeItem = new ACLunarEclipseTreeWidgetItem(ui->lunareclipseTreeWidget); - treeItem->setText(LunarEclipseDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD))); // local date and time + const double utcOffsetHrs = core->getUTCOffset(JD); + treeItem->setText(LunarEclipseDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs))); // local date and time treeItem->setData(LunarEclipseDate, Qt::UserRole, JD); treeItem->setText(LunarEclipseSaros, sarosStr); treeItem->setToolTip(LunarEclipseSaros, q_("Saros series number of eclipse (each eclipse in a Saros is separated by an interval of 18 years 11.3 days)")); @@ -2810,7 +2822,8 @@ void AstroCalcDialog::selectCurrentLunarEclipse(const QModelIndex& modelIndex) q_("Moon leaves umbra"), q_("Moon leaves penumbra")}; treeItem->setText(LunarEclipseContact, events.at(i)); - treeItem->setText(LunarEclipseContactDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD))); + const double utcOffsetHrs = core->getUTCOffset(JD); + treeItem->setText(LunarEclipseContactDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs))); treeItem->setData(LunarEclipseContactDate, Qt::UserRole, JD); core->setJD(JD); core->setUseTopocentricCoordinates(saveTopocentric); @@ -3190,7 +3203,8 @@ void AstroCalcDialog::generateSolarEclipses() longitudeStr = StelUtils::decDegToLongitudeStr(eclipseLongitude, true, false, !withDecimalDegree); ACSolarEclipseTreeWidgetItem* treeItem = new ACSolarEclipseTreeWidgetItem(ui->solareclipseTreeWidget); - treeItem->setText(SolarEclipseDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD))); // local date and time + const double utcOffsetHrs = core->getUTCOffset(JD); + treeItem->setText(SolarEclipseDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs))); // local date and time treeItem->setData(SolarEclipseDate, Qt::UserRole, JD); treeItem->setText(SolarEclipseSaros, sarosStr); treeItem->setToolTip(SolarEclipseSaros, q_("Saros series number of eclipse (each eclipse in a Saros is separated by an interval of 18 years 11.3 days)")); @@ -3484,28 +3498,28 @@ void AstroCalcDialog::generateSolarEclipsesLocal() } ACSolarEclipseLocalTreeWidgetItem* treeItem = new ACSolarEclipseLocalTreeWidgetItem(ui->solareclipselocalTreeWidget); - treeItem->setText(SolarEclipseLocalDate, QString("%1").arg(localeMgr->getPrintableDateLocal(JDmax))); // local date + treeItem->setText(SolarEclipseLocalDate, QString("%1").arg(localeMgr->getPrintableDateLocal(JDmax, core->getUTCOffset(JDmax)))); // local date treeItem->setData(SolarEclipseLocalDate, Qt::UserRole, JDmax); treeItem->setText(SolarEclipseLocalType, eclipseTypeStr); - treeItem->setText(SolarEclipseLocalFirstContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD1))); + treeItem->setText(SolarEclipseLocalFirstContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD1, core->getUTCOffset(JD1)))); if (centraleclipse && JD2setText(SolarEclipseLocalFirstContact, dash); treeItem->setToolTip(SolarEclipseLocalFirstContact, q_("The time of first contact")); if (centraleclipse) - treeItem->setText(SolarEclipseLocal2ndContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD2))); + treeItem->setText(SolarEclipseLocal2ndContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD2, core->getUTCOffset(JD2)))); else treeItem->setText(SolarEclipseLocal2ndContact, dash); treeItem->setToolTip(SolarEclipseLocal2ndContact, q_("The time of second contact")); - treeItem->setText(SolarEclipseLocalMaximum, QString("%1").arg(localeMgr->getPrintableTimeLocal(JDmax))); + treeItem->setText(SolarEclipseLocalMaximum, QString("%1").arg(localeMgr->getPrintableTimeLocal(JDmax, core->getUTCOffset(JDmax)))); treeItem->setToolTip(SolarEclipseLocalMaximum, q_("The time of greatest eclipse")); treeItem->setText(SolarEclipseLocalMagnitude, magStr); if (centraleclipse) - treeItem->setText(SolarEclipseLocal3rdContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD3))); + treeItem->setText(SolarEclipseLocal3rdContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD3, core->getUTCOffset(JD3)))); else treeItem->setText(SolarEclipseLocal3rdContact, dash); treeItem->setToolTip(SolarEclipseLocal3rdContact, q_("The time of third contact")); - treeItem->setText(SolarEclipseLocalLastContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD4))); + treeItem->setText(SolarEclipseLocalLastContact, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD4, core->getUTCOffset(JD4)))); if (centraleclipse && JD3>JD4) // central eclipse in progress at Sunset treeItem->setText(SolarEclipseLocalLastContact, dash); treeItem->setToolTip(SolarEclipseLocalLastContact, q_("The time of fourth contact")); @@ -3681,7 +3695,8 @@ void AstroCalcDialog::selectCurrentSolarEclipse(const QModelIndex& modelIndex) treeItem->setData(SolarEclipseContact, Qt::UserRole, false); break; } - treeItem->setText(SolarEclipseContactDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), localeMgr->getPrintableTimeLocal(JD))); + const double utcOffsetHrs = core->getUTCOffset(JD); + treeItem->setText(SolarEclipseContactDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JD, utcOffsetHrs))); treeItem->setData(SolarEclipseContactDate, Qt::UserRole, JD); treeItem->setText(SolarEclipseContactLatitude, StelUtils::decDegToLatitudeStr(latDeg, !withDecimalDegree)); treeItem->setData(SolarEclipseContactLatitude, Qt::UserRole, latDeg); @@ -3842,7 +3857,7 @@ void AstroCalcDialog::saveSolarEclipseMap() core->update(0); // Use year-month-day in the file name - const auto eclipseDateStr = localeMgr->getPrintableDateLocal(JDMid); + const auto eclipseDateStr = localeMgr->getPrintableDateLocal(JDMid, core->getUTCOffset(JDMid)); const auto fileBaseName = q_("Solar Eclipse") + " " + eclipseDateStr; QString selectedFilter("(*.kml)"); QString filePath = QFileDialog::getSaveFileName(&StelMainView::getInstance(), @@ -4345,9 +4360,10 @@ void AstroCalcDialog::generateTransits() } } } - const double shift = core->getUTCOffset(JDMid)/24.; + const double utcOffsetHrs = core->getUTCOffset(JDMid); + const double shift = utcOffsetHrs/24.; ACTransitTreeWidgetItem* treeItem = new ACTransitTreeWidgetItem(ui->transitTreeWidget); - treeItem->setText(TransitDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JDMid), localeMgr->getPrintableTimeLocal(JDMid))); // local date and time + treeItem->setText(TransitDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JDMid, utcOffsetHrs), localeMgr->getPrintableTimeLocal(JDMid, utcOffsetHrs))); // local date and time treeItem->setData(TransitDate, Qt::UserRole, JDMid); treeItem->setText(TransitPlanet, planetStr); treeItem->setData(TransitPlanet, Qt::UserRole, planetStr); @@ -4356,7 +4372,7 @@ void AstroCalcDialog::generateTransits() { if (saveTopocentric && altitudeContact1 < 0.) { - treeItem->setText(TransitContact1, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD1))); + treeItem->setText(TransitContact1, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD1, core->getUTCOffset(JD1)))); #if (QT_VERSION>=QT_VERSION_CHECK(5,15,0)) treeItem->setForeground(TransitContact1, Qt::gray); #else @@ -4364,7 +4380,7 @@ void AstroCalcDialog::generateTransits() #endif } else - treeItem->setText(TransitContact1, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD1))); + treeItem->setText(TransitContact1, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD1, core->getUTCOffset(JD1)))); } else treeItem->setText(TransitContact1, dash); @@ -4374,7 +4390,7 @@ void AstroCalcDialog::generateTransits() treeItem->setText(TransitContact2, dash); else if (saveTopocentric && altitudeContact2 < 0.) { - treeItem->setText(TransitContact2, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD2))); + treeItem->setText(TransitContact2, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD2, core->getUTCOffset(JD2)))); #if (QT_VERSION>=QT_VERSION_CHECK(5,15,0)) treeItem->setForeground(TransitContact2, Qt::gray); #else @@ -4382,14 +4398,14 @@ void AstroCalcDialog::generateTransits() #endif } else - treeItem->setText(TransitContact2, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD2))); + treeItem->setText(TransitContact2, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD2, core->getUTCOffset(JD2)))); treeItem->setData(TransitContact2, Qt::UserRole, StelUtils::getHoursFromJulianDay(JD2 + shift)); treeItem->setToolTip(TransitContact2, q_("The time of second contact, the entire disk of the planet is internally tangent to the Sun")); if (transitMagnitude > 0.) { if (saveTopocentric && altitudeMidtransit < 0.) { - treeItem->setText(TransitMid, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JDMid))); + treeItem->setText(TransitMid, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JDMid, utcOffsetHrs))); #if (QT_VERSION>=QT_VERSION_CHECK(5,15,0)) treeItem->setForeground(TransitMid, Qt::gray); #else @@ -4397,7 +4413,7 @@ void AstroCalcDialog::generateTransits() #endif } else - treeItem->setText(TransitMid, QString("%1").arg(localeMgr->getPrintableTimeLocal(JDMid))); + treeItem->setText(TransitMid, QString("%1").arg(localeMgr->getPrintableTimeLocal(JDMid, utcOffsetHrs))); } else treeItem->setText(TransitMid, dash); @@ -4424,7 +4440,7 @@ void AstroCalcDialog::generateTransits() treeItem->setText(TransitContact3, dash); else if (saveTopocentric && altitudeContact3 < 0.) { - treeItem->setText(TransitContact3, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD3))); + treeItem->setText(TransitContact3, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD3, core->getUTCOffset(JD3)))); #if (QT_VERSION>=QT_VERSION_CHECK(5,15,0)) treeItem->setForeground(TransitContact3, Qt::gray); #else @@ -4432,14 +4448,14 @@ void AstroCalcDialog::generateTransits() #endif } else - treeItem->setText(TransitContact3, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD3))); + treeItem->setText(TransitContact3, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD3, core->getUTCOffset(JD3)))); treeItem->setData(TransitContact3, Qt::UserRole, StelUtils::getHoursFromJulianDay(JD3 + shift)); treeItem->setToolTip(TransitContact3, q_("The time of third contact, the planet reaches the opposite limb and is once again internally tangent to the Sun")); if (transitMagnitude > 0.) { if (saveTopocentric && altitudeContact4 < 0.) { - treeItem->setText(TransitContact4, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD4))); + treeItem->setText(TransitContact4, QString("(%1)").arg(localeMgr->getPrintableTimeLocal(JD4, core->getUTCOffset(JD4)))); #if (QT_VERSION>=QT_VERSION_CHECK(5,15,0)) treeItem->setForeground(TransitContact4, Qt::gray); #else @@ -4447,7 +4463,7 @@ void AstroCalcDialog::generateTransits() #endif } else - treeItem->setText(TransitContact4, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD4))); + treeItem->setText(TransitContact4, QString("%1").arg(localeMgr->getPrintableTimeLocal(JD4, core->getUTCOffset(JD4)))); } else treeItem->setText(TransitContact4, dash); @@ -5894,8 +5910,8 @@ void AstroCalcDialog::fillPhenomenaTableVis(const QString &phenomenType, double ACPhenTreeWidgetItem* treeItem = new ACPhenTreeWidgetItem(ui->phenomenaTreeWidget); treeItem->setText(PhenomenaType, phenomenType); // local date and time - const double shift = core->getUTCOffset(JD)*StelCore::JD_HOUR; - treeItem->setText(PhenomenaDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD), StelUtils::getHoursMinutesFromJulianDay(JD+shift))); + const double utcOffsetHrs = core->getUTCOffset(JD); + treeItem->setText(PhenomenaDate, QString("%1 %2").arg(localeMgr->getPrintableDateLocal(JD, utcOffsetHrs), StelUtils::getHoursMinutesFromJulianDay(JD+utcOffsetHrs*StelCore::JD_HOUR))); treeItem->setData(PhenomenaDate, Qt::UserRole, JD); treeItem->setText(PhenomenaObject1, firstObjectName); treeItem->setText(PhenomenaMagnitude1, (firstObjectMagnitude > 90.f ? dash : QString::number(firstObjectMagnitude, 'f', 2))); diff --git a/src/gui/StelGuiItems.cpp b/src/gui/StelGuiItems.cpp index fe2570464b785..5e733cde4ee85 100644 --- a/src/gui/StelGuiItems.cpp +++ b/src/gui/StelGuiItems.cpp @@ -749,22 +749,25 @@ void BottomStelBar::updateButtonsGroups() // This is also called when button groups have been updated. void BottomStelBar::updateText(bool updatePos, bool updateTopocentric) { - StelCore* core = StelApp::getInstance().getCore(); + static StelCore* core = StelApp::getInstance().getCore(); const double jd = core->getJD(); + const double utcOffsetHrs=core->getUTCOffset(jd); const double deltaT = core->getDeltaT(); const double sigma = StelUtils::getDeltaTStandardError(jd); QString validRangeMarker = ""; core->getCurrentDeltaTAlgorithmValidRangeDescription(jd, &validRangeMarker); - const StelLocaleMgr& locmgr = StelApp::getInstance().getLocaleMgr(); - QString tz = locmgr.getPrintableTimeZoneLocal(jd); + static StelLocaleMgr& locmgr = StelApp::getInstance().getLocaleMgr(); QString newDateInfo = " "; if (getFlagShowTime()) { if (getFlagShowTz()) - newDateInfo = QString("%1 %2 %3").arg(locmgr.getPrintableDateLocal(jd), locmgr.getPrintableTimeLocal(jd), tz); + { + QString tz = locmgr.getPrintableTimeZoneLocal(jd, utcOffsetHrs); + newDateInfo = QString("%1 %2 %3").arg(locmgr.getPrintableDateLocal(jd, utcOffsetHrs), locmgr.getPrintableTimeLocal(jd, utcOffsetHrs), tz); + } else - newDateInfo = QString("%1 %2").arg(locmgr.getPrintableDateLocal(jd), locmgr.getPrintableTimeLocal(jd)); + newDateInfo = QString("%1 %2").arg(locmgr.getPrintableDateLocal(jd, utcOffsetHrs), locmgr.getPrintableTimeLocal(jd, utcOffsetHrs)); } QString newDateAppx = QString("JD %1").arg(jd, 0, 'f', 5); // up to seconds if (getFlagTimeJd()) From 620154c41f5714bc81be02d30989eb21b272512e Mon Sep 17 00:00:00 2001 From: Ruslan Kabatsayev Date: Fri, 23 Aug 2024 22:15:16 +0400 Subject: [PATCH 21/32] Compute transformation matrices in the computePositions threaded loop Author: Ruslan Kabatsayev --- src/core/modules/SolarSystem.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index a586e4f3c0d53..b0c6c1120b481 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1548,9 +1548,10 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); const Vec3d &obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); + const double dateJD = dateJDE - (StelApp::getInstance().getCore()->computeDeltaT(dateJDE))/86400.0; - const auto processPlanet = [this,dateJDE,observerIsEarth,withAberration, - &obsPosJDE,&aberrationPushSpeed](const PlanetP& p) + const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, + obsPosJDE,aberrationPushSpeed](const PlanetP& p, const Vec3d& observerPosFinal) { // 1. First approximation. p->computePosition(dateJDE, Vec3d(0.)); @@ -1583,12 +1584,25 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + + if(p != observerPlanet) + { + const double light_speed_correction = (AU / (SPEED_OF_LIGHT * 86400)) * + (p->getHeliocentricEclipticPos()-observerPosFinal).norm(); + p->computeTransMatrix(dateJD-light_speed_correction, dateJDE-light_speed_correction); + } }; - const auto loop = [&planets=systemPlanets,&processPlanet](const int indexMin, const int indexMax) + // This will be used for computation of transformation matrices + processPlanet(observerPlanet, Vec3d(0.)); + observerPlanet->computeTransMatrix(dateJD, dateJDE); + const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); + + const auto loop = [&planets=systemPlanets,processPlanet, + observerPosFinal](const int indexMin, const int indexMax) { for(int i = indexMin; i <= indexMax; ++i) - processPlanet(planets[i]); + processPlanet(planets[i], observerPosFinal); }; QList> futures; @@ -1619,8 +1633,8 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) else if (p->englishName==L1S("Uranus")) update(dateJDE, RotationElements::Uranus); else if (p->englishName==L1S("Neptune")) update(dateJDE, RotationElements::Neptune); } + computeTransMatrices(dateJDE, observerPlanet->getHeliocentricEclipticPos()); } - computeTransMatrices(dateJDE, observerPlanet->getHeliocentricEclipticPos()); } // Compute the transformation matrix for every elements of the solar system. From 00e26e3d1c22be79c54a237f6fff004dfe7c61ec Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Fri, 23 Aug 2024 23:02:16 +0200 Subject: [PATCH 22/32] Two string comparisons less per SSO --- src/core/modules/MinorPlanet.cpp | 3 ++- src/core/modules/Planet.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/modules/MinorPlanet.cpp b/src/core/modules/MinorPlanet.cpp index dfd9bd2559f9d..512c652060c4a 100644 --- a/src/core/modules/MinorPlanet.cpp +++ b/src/core/modules/MinorPlanet.cpp @@ -246,7 +246,8 @@ float MinorPlanet::getVMagnitude(const StelCore* core, const double eclipseFacto //(Code copied from Planet::getVMagnitude()) //(this is actually vector subtraction + the cosine theorem :)) Vec3d observerHelioPos; - if (core->getCurrentObserver()->getCurrentLocation().planetName.contains("Observer")) + if (core->getCurrentPlanet()->getPlanetType()==Planet::isObserver) + observerHelioPos = Vec3d(0.f,0.f,0.f); else observerHelioPos = core->getObserverHeliocentricEclipticPos(); diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 8a72fd22e4948..65fcc72c9d6a7 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -2928,7 +2928,7 @@ void Planet::draw(StelCore* core, float maxMagLabels, const QFont& planetNameFon StelProjector::ModelViewTranformP transfo = core->getHeliocentricEclipticModelViewTransform(); transfo->combine(mat); - if (getEnglishName() == core->getCurrentLocation().planetName) + if (this == core->getCurrentPlanet()) { // Draw the rings if we are located on a planet with rings, but not the planet itself. if (rings) From 48a569b946fe01ccb97a315a56289f7204d241ec Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sat, 24 Aug 2024 10:35:52 +0200 Subject: [PATCH 23/32] Use StelObserver as argument - also use string references in a few more functions --- plugins/Observability/src/Observability.cpp | 51 +++++++++++---------- src/core/StelObserver.cpp | 5 +- src/core/modules/Planet.cpp | 13 ++---- src/core/modules/Planet.hpp | 6 ++- src/core/modules/SolarSystem.cpp | 37 +++++++-------- src/core/modules/SolarSystem.hpp | 26 +++++------ 6 files changed, 71 insertions(+), 67 deletions(-) diff --git a/plugins/Observability/src/Observability.cpp b/plugins/Observability/src/Observability.cpp index 2333e188dc53a..5369ce0677487 100644 --- a/plugins/Observability/src/Observability.cpp +++ b/plugins/Observability/src/Observability.cpp @@ -766,12 +766,13 @@ void Observability::updateSunData(StelCore* core) nDays = (year==sameYear)?366:365; // Compute Earth's position throughout the year: + const StelObserver *obs=core->getCurrentObserver(); Vec3d pos, sunPos; for (int i=0; icomputeDeltaT(yearJD[i].first)/86400.0; - myEarth->computePosition(yearJD[i].second, Vec3d(0.)); + myEarth->computePosition(obs, yearJD[i].second, Vec3d(0.)); myEarth->computeTransMatrix(yearJD[i].first, yearJD[i].second); pos = myEarth->getHeliocentricEclipticPos(); sunPos = core->j2000ToEquinoxEqu((StelCore::matVsop87ToJ2000)*(-pos), StelCore::RefractionOff); @@ -780,7 +781,7 @@ void Observability::updateSunData(StelCore* core) } //Return the Earth to its current time: - myEarth->computePosition(myJD.second, Vec3d(0.)); + myEarth->computePosition(obs, myJD.second, Vec3d(0.)); myEarth->computeTransMatrix(myJD.first, myJD.second); } /////////////////////////////////////////////////// @@ -989,16 +990,17 @@ void Observability::getSunMoonCoords(StelCore *core, QPair JD, double &eclLon, bool getBack) //, Vec3d &AltAzVector) { + const StelObserver *obs=core->getCurrentObserver(); if (getBack) // Return the Moon and Earth to their current position: { - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); - myMoon->computePosition(JD.second, Vec3d(0.)); + myMoon->computePosition(obs, JD.second, Vec3d(0.)); myMoon->computeTransMatrix(JD.first, JD.second); } else // Compute coordinates: { - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); Vec3d earthPos = myEarth->getHeliocentricEclipticPos(); double curSidT; @@ -1011,7 +1013,7 @@ void Observability::getSunMoonCoords(StelCore *core, QPair JD, curSidT = myEarth->getSiderealTime(JD.first, JD.second)/Rad2Deg; RotObserver = (Mat4d::zrotation(curSidT))*ObserverLoc; LocTrans = (StelCore::matVsop87ToJ2000)*(Mat4d::translation(-earthPos)); - myMoon->computePosition(JD.second, Vec3d(0.)); + myMoon->computePosition(obs, JD.second, Vec3d(0.)); myMoon->computeTransMatrix(JD.first, JD.second); Vec3d moonPos = myMoon->getHeliocentricEclipticPos(); sunPos = (core->j2000ToEquinoxEqu(LocTrans*moonPos, StelCore::RefractionOff))-RotObserver; @@ -1028,16 +1030,17 @@ void Observability::getSunMoonCoords(StelCore *core, QPair JD, // getBack controls whether Earth and Moon must be returned to their original positions after computation. void Observability::getMoonDistance(StelCore *core, QPair JD, double &distance, bool getBack) { + const StelObserver *obs=core->getCurrentObserver(); if (getBack) // Return the Moon and Earth to their current position: { - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); - myMoon->computePosition(JD.second, Vec3d(0.)); + myMoon->computePosition(obs, JD.second, Vec3d(0.)); myMoon->computeTransMatrix(JD.first, JD.second); } else { // Compute coordinates: - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); Vec3d earthPos = myEarth->getHeliocentricEclipticPos(); // double curSidT; @@ -1050,7 +1053,7 @@ void Observability::getMoonDistance(StelCore *core, QPair JD, do // curSidT = myEarth->getSiderealTime(JD)/Rad2Deg; // RotObserver = (Mat4d::zrotation(curSidT))*ObserverLoc; LocTrans = (StelCore::matVsop87ToJ2000)*(Mat4d::translation(-earthPos)); - myMoon->computePosition(JD.second, Vec3d(0.)); + myMoon->computePosition(obs, JD.second, Vec3d(0.)); myMoon->computeTransMatrix(JD.first, JD.second); Pos1 = myMoon->getHeliocentricEclipticPos(); Pos2 = core->j2000ToEquinoxEqu(LocTrans*Pos1, StelCore::RefractionOff); //-RotObserver; @@ -1066,20 +1069,21 @@ void Observability::getMoonDistance(StelCore *core, QPair JD, do // Get the Coords of a planet: void Observability::getPlanetCoords(StelCore *core, QPair JD, double &RA, double &Dec, bool getBack) { + const StelObserver *obs=core->getCurrentObserver(); if (getBack) { // Return the planet to its current time: - myPlanet->computePosition(JD.second, Vec3d(0.)); + myPlanet->computePosition(obs, JD.second, Vec3d(0.)); myPlanet->computeTransMatrix(JD.first, JD.second); - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); } else { // Compute planet's position: - myPlanet->computePosition(JD.second, Vec3d(0.)); + myPlanet->computePosition(obs, JD.second, Vec3d(0.)); myPlanet->computeTransMatrix(JD.first, JD.second); Pos1 = myPlanet->getHeliocentricEclipticPos(); - myEarth->computePosition(JD.second, Vec3d(0.)); + myEarth->computePosition(obs, JD.second, Vec3d(0.)); myEarth->computeTransMatrix(JD.first, JD.second); Pos2 = myEarth->getHeliocentricEclipticPos(); LocTrans = (StelCore::matVsop87ToJ2000)*(Mat4d::translation(-Pos2)); @@ -1102,6 +1106,7 @@ bool Observability::calculateSolarSystemEvents(StelCore* core, int bodyType) hHoriz = calculateHourAngle(mylat, refractedHorizonAlt, selDec); bool raises = hHoriz > 0.0; + const StelObserver *obs=core->getCurrentObserver(); // Only recompute ephemeris from second to second (at least) // or if the source has changed (i.e., Sun <-> Moon). This saves resources: @@ -1109,7 +1114,7 @@ bool Observability::calculateSolarSystemEvents(StelCore* core, int bodyType) { lastType = bodyType; - myEarth->computePosition(myJD.second, Vec3d(0.)); + myEarth->computePosition(obs, myJD.second, Vec3d(0.)); myEarth->computeTransMatrix(myJD.first, myJD.second); Vec3d earthPos = myEarth->getHeliocentricEclipticPos(); @@ -1122,14 +1127,14 @@ bool Observability::calculateSolarSystemEvents(StelCore* core, int bodyType) curSidT = myEarth->getSiderealTime(myJD.first, myJD.second)/Rad2Deg; RotObserver = (Mat4d::zrotation(curSidT))*ObserverLoc; LocTrans = (StelCore::matVsop87ToJ2000)*(Mat4d::translation(-earthPos)); - myMoon->computePosition(myJD.second, Vec3d(0.)); + myMoon->computePosition(obs, myJD.second, Vec3d(0.)); myMoon->computeTransMatrix(myJD.first, myJD.second); Pos1 = myMoon->getHeliocentricEclipticPos(); Pos2 = (core->j2000ToEquinoxEqu(LocTrans*Pos1, StelCore::RefractionOff))-RotObserver; } else // Planet position { - myPlanet->computePosition(myJD.second, Vec3d(0.)); + myPlanet->computePosition(obs, myJD.second, Vec3d(0.)); myPlanet->computeTransMatrix(myJD.first, myJD.second); Pos1 = myPlanet->getHeliocentricEclipticPos(); LocTrans = (StelCore::matVsop87ToJ2000)*(Mat4d::translation(-earthPos)); @@ -1901,20 +1906,20 @@ QString Observability::getReportAsJson() { QString report = QString("{ "); if ((isMoon(objectSelection) && show_FullMoon) || (!isSun(objectSelection) && !isMoon(objectSelection) && shouldShowYear())) { - report += QString("\"%1\": \"%2\", ").arg("title").arg(msgThisYear); + report += QString("\"title\": \"%1\", ").arg(msgThisYear); if (show_Best_Night || show_FullMoon) { - report += QString("\"%1\": \"%2\", ").arg("bestNight").arg(lineBestNight); + report += QString("\"bestNight\": \"%1\", ").arg(lineBestNight); } if (show_Good_Nights) { - report += QString("\"%1\": \"%2\", ").arg("observableRange").arg(lineObservableRange); + report += QString("\"observableRange\": \"%1\", ").arg(lineObservableRange); } if (show_AcroCos) { - report += QString("\"%1\": \"%2\", ").arg("acronychal").arg(lineAcro); - report += QString("\"%1\": \"%2\", ").arg("cosmic").arg(lineCosm); - report += QString("\"%1\": \"%2\" ").arg("heliacal").arg(lineHeli); + report += QString("\"acronychal\": \"%1\", ").arg(lineAcro); + report += QString("\"cosmic\": \"%1\", ").arg(lineCosm); + report += QString("\"heliacal\": \"%1\" ").arg(lineHeli); } } report += QString("}"); diff --git a/src/core/StelObserver.cpp b/src/core/StelObserver.cpp index 2d6263762d8b9..7ff151a854f9e 100644 --- a/src/core/StelObserver.cpp +++ b/src/core/StelObserver.cpp @@ -41,7 +41,7 @@ class ArtificialPlanet : public Planet //! @param f1 mixing factor. [0...1]. 1 means dest. void computeAverage(double f1); //! This does nothing, but avoids a crash. - void computePosition(const double dateJDE, const Vec3d &aberrationPush) override; + void computePosition(const StelObserver *observer, const double dateJDE, const Vec3d &aberrationPush) override; private: void setRot(const Vec3d &r); static Vec3d getRot(const Planet* p); @@ -139,8 +139,9 @@ Vec3d ArtificialPlanet::getRot(const Planet* p) return r; } -void ArtificialPlanet::computePosition(const double dateJDE, const Vec3d &aberrationpush) +void ArtificialPlanet::computePosition(const StelObserver *observer, const double dateJDE, const Vec3d &aberrationpush) { + Q_UNUSED(observer) Q_UNUSED(dateJDE) Q_UNUSED(aberrationpush) } diff --git a/src/core/modules/Planet.cpp b/src/core/modules/Planet.cpp index 65fcc72c9d6a7..69404c4dfb824 100644 --- a/src/core/modules/Planet.cpp +++ b/src/core/modules/Planet.cpp @@ -1767,23 +1767,18 @@ QVector Planet::getCandidatesForShadow() const return res; } -void Planet::computePosition(const double dateJDE, const Vec3d &aberrationPush) +void Planet::computePosition(const StelObserver *observer, const double dateJDE, const Vec3d &aberrationPush) { // Having hundreds of Minor Planets makes this very slow. Especially on transitions between locations (StelCore::moveObserverTo()) // it seems acceptable to disable position updates for minor bodies. // TODO: Maybe test for target location and allow updates in this case. - StelCore *core=StelApp::getInstance().getCore(); bool isTransitioning=false; - if (core) - { - const StelObserver *obs=core->getCurrentObserver(); - if (obs) - isTransitioning=obs->isTraveling(); - } + if (observer) + isTransitioning=observer->isTraveling(); if (isTransitioning && orbitPtr) return; - if (fabs(lastJDE-dateJDE)>deltaJDE) + if (fabs(dateJDE-lastJDE)>deltaJDE) { coordFunc(dateJDE, &eclipticPos[0], &eclipticVelocity[0], orbitPtr); lastJDE = dateJDE; diff --git a/src/core/modules/Planet.hpp b/src/core/modules/Planet.hpp index e3258cce4a35e..38153f73e852b 100644 --- a/src/core/modules/Planet.hpp +++ b/src/core/modules/Planet.hpp @@ -51,6 +51,7 @@ class KeplerOrbit; class StelFont; class StelPainter; class StelTranslator; +class StelObserver; class StelOBJ; class StelOpenGLArray; class HipsSurvey; @@ -394,9 +395,10 @@ class Planet : public StelObject //! Note: The only place where this is not used for Earth is to build up orbits for planet moons w.r.t. the parent planet orientation. double getRotObliquity(double JDE) const; - //! Compute the position and orbital velocity in the parent Planet coordinate system + //! Compute the position and orbital velocity in the parent Planet coordinate system and set aberrationPush + //! Does not compute new position when dateJDE is less than deltaJDE away from lastJDE //! You can add the aberrationPush value according to Edot*lightTime in Explanatory Supplement (2013) formula 7.55. - virtual void computePosition(const double dateJDE, const Vec3d &aberrationPush); + virtual void computePosition(const StelObserver *observer, const double dateJDE, const Vec3d &aberrationPush); //! Compute the position and orbital velocity in the parent Planet coordinate system, and return them in eclPosition and eclVelocity //! These may be preferred when we want to avoid setting the actual position (e.g., RTS computation) virtual void computePosition(const double dateJDE, Vec3d &eclPosition, Vec3d &eclVelocity) const; diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index b0c6c1120b481..13b2a4f475b20 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1526,6 +1526,7 @@ bool SolarSystem::loadPlanets(const QString& filePath) void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) { StelCore *core=StelApp::getInstance().getCore(); + const StelObserver *obs=core->getCurrentObserver(); const bool withAberration=core->getUseAberration(); // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. // Given the comparably low impact of planetary positions on the overall frame time, we don't need more than 4 extra threads. (Profiled with 12.000 objects.) @@ -1544,17 +1545,17 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { // Position of this planet will be used in the subsequent computations - observerPlanet->computePosition(dateJDE, Vec3d(0.)); + observerPlanet->computePosition(obs, dateJDE, Vec3d(0.)); const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); const Vec3d &obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); const double dateJD = dateJDE - (StelApp::getInstance().getCore()->computeDeltaT(dateJDE))/86400.0; const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, - obsPosJDE,aberrationPushSpeed](const PlanetP& p, const Vec3d& observerPosFinal) + obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p, const Vec3d& observerPosFinal) { // 1. First approximation. - p->computePosition(dateJDE, Vec3d(0.)); + p->computePosition(obs, dateJDE, Vec3d(0.)); // For higher accuracy, we now make two iterations of light time and aberration correction. In the final // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply @@ -1567,7 +1568,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) Vec3d aberrationPush(0.); if(needToApplyAberration) aberrationPush=lightTimeDays*aberrationPushSpeed; - p->computePosition(dateJDE-lightTimeDays, aberrationPush); + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? planetPos = p->getHeliocentricEclipticPos(); @@ -1575,7 +1576,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) if(needToApplyAberration) aberrationPush=lightTimeDays*aberrationPushSpeed; // The next call may already do nothing if the time difference to the previous round is not large enough. - p->computePosition(dateJDE-lightTimeDays, aberrationPush); + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); const auto update = &RotationElements::updatePlanetCorrections; if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); @@ -1624,7 +1625,7 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) for (const auto& p : std::as_const(systemPlanets)) { p->setExtraInfoString(StelObject::DebugAid, ""); - p->computePosition(dateJDE, Vec3d(0.)); + p->computePosition(obs, dateJDE, Vec3d(0.)); const auto update = &RotationElements::updatePlanetCorrections; if (p->englishName==L1S("Moon")) update(dateJDE, RotationElements::EarthMoon); else if (p->englishName==L1S("Mars")) update(dateJDE, RotationElements::Mars); @@ -1690,7 +1691,7 @@ void SolarSystem::draw(StelCore* core) } // And sort them from the farthest to the closest. std::sort can split this into parallel threads! - std::sort(STD_EXECUTION_PAR_COMMA + std::sort(//STD_EXECUTION_PAR_COMMA systemPlanets.begin(),systemPlanets.end(),biggerDistance()); if (trailFader.getInterstate()>0.0000001f) @@ -2055,7 +2056,7 @@ void SolarSystem::fillEphemerisDates() } } -PlanetP SolarSystem::searchByEnglishName(QString planetEnglishName) const +PlanetP SolarSystem::searchByEnglishName(const QString &planetEnglishName) const { for (const auto& p : systemPlanets) { @@ -2088,7 +2089,7 @@ PlanetP SolarSystem::searchByEnglishName(QString planetEnglishName) const return PlanetP(); } -PlanetP SolarSystem::searchMinorPlanetByEnglishName(QString planetEnglishName) const +PlanetP SolarSystem::searchMinorPlanetByEnglishName(const QString &planetEnglishName) const { for (const auto& p : systemMinorBodies) { @@ -2171,7 +2172,7 @@ StelObjectP SolarSystem::searchByName(const QString& name) const return StelObjectP(); } -float SolarSystem::getPlanetVMagnitude(QString planetName, bool withExtinction) const +float SolarSystem::getPlanetVMagnitude(const QString &planetName, bool withExtinction) const { StelCore *core=StelApp::getInstance().getCore(); double eclipseFactor=getSolarEclipseFactor(core).first; @@ -2184,7 +2185,7 @@ float SolarSystem::getPlanetVMagnitude(QString planetName, bool withExtinction) return r; } -QString SolarSystem::getPlanetType(QString planetName) const +QString SolarSystem::getPlanetType(const QString &planetName) const { PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? @@ -2194,7 +2195,7 @@ QString SolarSystem::getPlanetType(QString planetName) const return p->getObjectType(); } -double SolarSystem::getDistanceToPlanet(QString planetName) const +double SolarSystem::getDistanceToPlanet(const QString &planetName) const { PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? @@ -2202,7 +2203,7 @@ double SolarSystem::getDistanceToPlanet(QString planetName) const return p->getDistance(); } -double SolarSystem::getElongationForPlanet(QString planetName) const +double SolarSystem::getElongationForPlanet(const QString &planetName) const { PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? @@ -2210,7 +2211,7 @@ double SolarSystem::getElongationForPlanet(QString planetName) const return p->getElongation(StelApp::getInstance().getCore()->getObserverHeliocentricEclipticPos()); } -double SolarSystem::getPhaseAngleForPlanet(QString planetName) const +double SolarSystem::getPhaseAngleForPlanet(const QString &planetName) const { PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? @@ -2218,7 +2219,7 @@ double SolarSystem::getPhaseAngleForPlanet(QString planetName) const return p->getPhaseAngle(StelApp::getInstance().getCore()->getObserverHeliocentricEclipticPos()); } -float SolarSystem::getPhaseForPlanet(QString planetName) const +float SolarSystem::getPhaseForPlanet(const QString &planetName) const { PlanetP p = searchByEnglishName(planetName); if (p.isNull()) // Possible was asked the common name of minor planet? @@ -3648,7 +3649,7 @@ void SolarSystem::reloadPlanets() } // Set the algorithm for computation of apparent magnitudes for planets in case observer on the Earth -void SolarSystem::setApparentMagnitudeAlgorithmOnEarth(QString algorithm) +void SolarSystem::setApparentMagnitudeAlgorithmOnEarth(const QString &algorithm) { Planet::setApparentMagnitudeAlgorithm(algorithm); emit apparentMagnitudeAlgorithmOnEarthChanged(algorithm); @@ -3762,7 +3763,7 @@ bool SolarSystem::getFlagEarthShadowEnlargementDanjon() const return earthShadowEnlargementDanjon; } -void SolarSystem::setOrbitColorStyle(QString style) +void SolarSystem::setOrbitColorStyle(const QString &style) { static const QMapmap={ { QString("groups"), Planet::ocsGroups}, @@ -3914,7 +3915,7 @@ QPair SolarSystem::getEarthShadowRadiiAtLunarDistance() const return QPair(Vec3d(f2, f2_AU, rUmbraAU), Vec3d(f1, f1_AU, rPenumbraAU)); } -bool SolarSystem::removeMinorPlanet(QString name) +bool SolarSystem::removeMinorPlanet(const QString &name) { PlanetP candidate = searchMinorPlanetByEnglishName(name); if (!candidate) diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 989cf42d0d965..d78e43c2064a6 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -600,32 +600,32 @@ public slots: //! @param planetName the case in-sensitive English planet name. //! @param withExtinction the flag for use extinction effect for magnitudes (default not use) //! @return a magnitude - float getPlanetVMagnitude(QString planetName, bool withExtinction=false) const; + float getPlanetVMagnitude(const QString &planetName, bool withExtinction=false) const; //! Get type for Solar system bodies for scripts //! @param planetName the case in-sensitive English planet name. //! @return a type of planet (star, planet, moon, observer, artificial, asteroid, plutino, comet, dwarf planet, cubewano, scattered disc object, Oort cloud object, sednoid, interstellar object) - QString getPlanetType(QString planetName) const; + QString getPlanetType(const QString &planetName) const; //! Get distance to Solar system bodies for scripts //! @param planetName the case in-sensitive English planet name. //! @return a distance (in AU) - double getDistanceToPlanet(QString planetName) const; + double getDistanceToPlanet(const QString &planetName) const; //! Get elongation for Solar system bodies for scripts //! @param planetName the case in-sensitive English planet name. //! @return a elongation (in radians) - double getElongationForPlanet(QString planetName) const; + double getElongationForPlanet(const QString &planetName) const; //! Get phase angle for Solar system bodies for scripts //! @param planetName the case in-sensitive English planet name. //! @return a phase angle (in radians) - double getPhaseAngleForPlanet(QString planetName) const; + double getPhaseAngleForPlanet(const QString &planetName) const; //! Get phase for Solar system bodies for scripts //! @param planetName the case in-sensitive English planet name. //! @return phase, i.e. illuminated fraction [0..1] - float getPhaseForPlanet(QString planetName) const; + float getPhaseForPlanet(const QString &planetName) const; //! Set the algorithm for computation of apparent magnitudes for planets in case observer on the Earth. //! Possible values: @@ -646,7 +646,7 @@ public slots: //! @param algorithm the case in-sensitive algorithm name //! @note: The structure of algorithms is almost identical, just the numbers are different! //! You should activate Mueller's algorithm to simulate the eye's impression. (Esp. Venus!) - void setApparentMagnitudeAlgorithmOnEarth(QString algorithm); + void setApparentMagnitudeAlgorithmOnEarth(const QString &algorithm); //! Get the algorithm used for computation of apparent magnitudes for planets in case observer on the Earth //! @see setApparentMagnitudeAlgorithmOnEarth() @@ -718,7 +718,7 @@ public slots: bool getFlagEarthShadowEnlargementDanjon() const; //! Set style of colors of orbits for Solar system bodies - void setOrbitColorStyle(QString style); + void setOrbitColorStyle(const QString &style); //! Get style of colors of orbits for Solar system bodies QString getOrbitColorStyle() const; @@ -852,8 +852,8 @@ public slots: void ephemerisJupiterMarkerColorChanged(const Vec3f & color); void ephemerisSaturnMarkerColorChanged(const Vec3f & color); - void orbitColorStyleChanged(QString style); - void apparentMagnitudeAlgorithmOnEarthChanged(QString algorithm); + void orbitColorStyleChanged(const QString &style); + void apparentMagnitudeAlgorithmOnEarthChanged(const QString &algorithm); void solarSystemDataReloaded(); void requestEphemerisVisualization(); @@ -868,9 +868,9 @@ public slots: //! Get a pointer to a Planet object. //! @param planetEnglishName the English name of the desired planet. //! @return The matching planet pointer if exists or Q_NULLPTR. - PlanetP searchByEnglishName(QString planetEnglishName) const; + PlanetP searchByEnglishName(const QString &planetEnglishName) const; - PlanetP searchMinorPlanetByEnglishName(QString planetEnglishName) const; + PlanetP searchMinorPlanetByEnglishName(const QString &planetEnglishName) const; //! Get the Planet object pointer for the Sun. PlanetP getSun() const {return sun;} @@ -895,7 +895,7 @@ public slots: //! New 0.16: delete a planet from the solar system. Writes a warning to log if this is not a minor object. - bool removeMinorPlanet(QString name); + bool removeMinorPlanet(const QString &name); //! Determines relative amount of sun visible from the observer's position (first element) and the Planet object pointer for eclipsing celestial body (second element). //! Full sun is 1.0, fully covered sun is 0.0. From 2c9963d55961d72c6a88e1cc79a626665e49563a Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sat, 24 Aug 2024 15:36:47 +0200 Subject: [PATCH 24/32] Add core as argument --- src/core/StelCore.cpp | 2 +- src/core/modules/SolarSystem.cpp | 67 +++++++++++++++++--------------- src/core/modules/SolarSystem.hpp | 3 +- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/src/core/StelCore.cpp b/src/core/StelCore.cpp index 802061ff28413..f214af9e7df42 100644 --- a/src/core/StelCore.cpp +++ b/src/core/StelCore.cpp @@ -2125,7 +2125,7 @@ void StelCore::updateTime(double deltaTime) // GZ maybe setting this static can speedup a bit? static SolarSystem* solsystem = static_cast(StelApp::getInstance().getModuleMgr().getModule("SolarSystem")); // Likely the most important location where we need JDE: - solsystem->computePositions(getJDE(), getCurrentPlanet()); + solsystem->computePositions(this, getJDE(), getCurrentPlanet()); } void StelCore::resetSync() diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 13b2a4f475b20..9114a006b1282 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -213,6 +213,8 @@ void SolarSystem::init() initializeOpenGLFunctions(); Q_ASSERT(conf); + StelApp *app = &StelApp::getInstance(); + StelCore *core=app->getCore(); Planet::init(); loadPlanets(); // Load planets data @@ -220,7 +222,7 @@ void SolarSystem::init() // Compute position and matrix of sun and all the satellites (ie planets) // for the first initialization Q_ASSERT that center is sun center (only impacts on light speed correction) setExtraThreads(conf->value("astro/solar_system_threads", 0).toInt()); - computePositions(StelApp::getInstance().getCore()->getJDE(), getSun()); + computePositions(core, core->getJDE(), getSun()); setSelected(""); // Fix a bug on macosX! Thanks Fumio! setFlagDrawMoonHalo(conf->value("viewing/flag_draw_moon_halo", true).toBool()); @@ -334,11 +336,9 @@ void SolarSystem::init() Planet::hintCircleTex = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/planet-indicator.png"); markerCircleTex = StelApp::getInstance().getTextureManager().createTexture(StelFileMgr::getInstallationDir()+"/textures/planet-marker.png"); - StelApp *app = &StelApp::getInstance(); connect(app, SIGNAL(languageChanged()), this, SLOT(updateI18n())); connect(&app->getSkyCultureMgr(), &StelSkyCultureMgr::currentSkyCultureIDChanged, this, &SolarSystem::updateSkyCulture); connect(&StelMainView::getInstance(), SIGNAL(reloadShadersRequested()), this, SLOT(reloadShaders())); - StelCore *core = app->getCore(); connect(core, SIGNAL(locationChanged(StelLocation)), this, SLOT(recreateTrails())); connect(core, SIGNAL(dateChangedForTrails()), this, SLOT(recreateTrails())); @@ -1523,9 +1523,8 @@ bool SolarSystem::loadPlanets(const QString& filePath) // Compute the position for every elements of the solar system. // The order is not important since the position is computed relatively to the mother body -void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) +void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP observerPlanet) { - StelCore *core=StelApp::getInstance().getCore(); const StelObserver *obs=core->getCurrentObserver(); const bool withAberration=core->getUseAberration(); // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. @@ -1547,12 +1546,12 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) // Position of this planet will be used in the subsequent computations observerPlanet->computePosition(obs, dateJDE, Vec3d(0.)); const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); - const Vec3d &obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - const double dateJD = dateJDE - (StelApp::getInstance().getCore()->computeDeltaT(dateJDE))/86400.0; + const double dateJD = dateJDE - (core->computeDeltaT(dateJDE))/86400.0; const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, - obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p, const Vec3d& observerPosFinal) + obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p) // , const Vec3d& observerPosFinal) { // 1. First approximation. p->computePosition(obs, dateJDE, Vec3d(0.)); @@ -1589,36 +1588,42 @@ void SolarSystem::computePositions(double dateJDE, PlanetP observerPlanet) if(p != observerPlanet) { const double light_speed_correction = (AU / (SPEED_OF_LIGHT * 86400)) * - (p->getHeliocentricEclipticPos()-observerPosFinal).norm(); + (p->getHeliocentricEclipticPos()-obsPosJDE).norm(); p->computeTransMatrix(dateJD-light_speed_correction, dateJDE-light_speed_correction); } }; // This will be used for computation of transformation matrices - processPlanet(observerPlanet, Vec3d(0.)); + processPlanet(observerPlanet); //, Vec3d(0.)); observerPlanet->computeTransMatrix(dateJD, dateJDE); - const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); + //const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); + // Update this. It will be available in the threaded function + obsPosJDE = observerPlanet->getHeliocentricEclipticPos(); + + //const auto loop = [&planets=systemPlanets,processPlanet, + // observerPosFinal](const int indexMin, const int indexMax) + //{ + // for(int i = indexMin; i <= indexMax; ++i) + // processPlanet(planets[i], observerPosFinal); + //}; + + //QList> futures; + //const auto totalThreads = availablePoolThreads+1; + //const auto blockSize = systemPlanets.size() / totalThreads; + //for(int threadN=0; threadN> futures; - const auto totalThreads = availablePoolThreads+1; - const auto blockSize = systemPlanets.size() / totalThreads; - for(int threadN=0; threadNgetJDE(), getSun()); + computePositions(core, core->getJDE(), getSun()); setSelected(""); recreateTrails(); diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index d78e43c2064a6..5e5cdbab3938a 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -918,9 +918,10 @@ public slots: QPair getEarthShadowRadiiAtLunarDistance() const; //! Compute the position and transform matrix for every element of the solar system. + //! @param core the central StelCore instance //! @param dateJDE the Julian Day in JDE (Ephemeris Time or equivalent) //! @param observerPlanet planet of the observer (Required for light travel time or aberration computation). - void computePositions(double dateJDE, PlanetP observerPlanet); + void computePositions(StelCore *core, double dateJDE, PlanetP observerPlanet); //! Get the list of all the bodies of the solar system. const QList& getAllPlanets() const {return systemPlanets;} From a4dcab4449b25009a3b170a25b89f361b886dc35 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sat, 24 Aug 2024 16:20:40 +0200 Subject: [PATCH 25/32] Reactivate blockwise manual thread assignment - also clean up docs - also improve setting thread number - also reactivate parallel sort --- src/core/modules/SolarSystem.cpp | 78 ++++++++++++++++---------------- src/core/modules/SolarSystem.hpp | 3 +- src/gui/ConfigurationDialog.cpp | 4 +- src/gui/configurationDialog.ui | 4 +- 4 files changed, 46 insertions(+), 43 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 9114a006b1282..c374691e37a07 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1527,31 +1527,31 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser { const StelObserver *obs=core->getCurrentObserver(); const bool withAberration=core->getUseAberration(); - // We distribute computing over a few threads from the current threadpool, but also compute one stride in the main thread so that this does not starve. - // Given the comparably low impact of planetary positions on the overall frame time, we don't need more than 4 extra threads. (Profiled with 12.000 objects.) -// const int availablePoolThreads=qBound(0, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount(), 4); // qMax(1, QThreadPool::globalInstance()->maxThreadCount()-QThreadPool::globalInstance()->activeThreadCount()); - const int availablePoolThreads=extraThreads; + // We distribute computing over a few threads from the current threadpool, but also compute one block in the main thread so that this does not starve. + // Given the comparably low impact of planetary positions on the overall frame time, we usually don't need more than about 4 extra threads. (Profiled with 12.000 objects.) static bool threadMessage=true; if (threadMessage) { - qDebug() << "SolarSystem: We should have " << availablePoolThreads << "threads (plus main thread) available for computePositions()"; + qDebug() << "SolarSystem: We have configured" << extraThreads << "threads (plus main thread) for computePositions()."; + if (extraThreads > QThreadPool::globalInstance()->maxThreadCount()-1) + { + qDebug() << "This is more than the maximum additional thread count (" << QThreadPool::globalInstance()->maxThreadCount()-1 << ")."; + qDebug() << "Consider reducing this number to avoid oversubscription."; + } threadMessage=false; } - // Activate this to show debug aid strings in screen InfoString - //static StelObjectMgr* omgr=GETSTELMODULE(StelObjectMgr); - //omgr->removeExtraInfoStrings(StelObject::DebugAid); if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { // Position of this planet will be used in the subsequent computations observerPlanet->computePosition(obs, dateJDE, Vec3d(0.)); const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); - Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); const double dateJD = dateJDE - (core->computeDeltaT(dateJDE))/86400.0; const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, - obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p) // , const Vec3d& observerPosFinal) + obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p, const Vec3d& observerPosFinal) { // 1. First approximation. p->computePosition(obs, dateJDE, Vec3d(0.)); @@ -1594,36 +1594,31 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser }; // This will be used for computation of transformation matrices - processPlanet(observerPlanet); //, Vec3d(0.)); + processPlanet(observerPlanet, Vec3d(0.)); observerPlanet->computeTransMatrix(dateJD, dateJDE); - //const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); - // Update this. It will be available in the threaded function - obsPosJDE = observerPlanet->getHeliocentricEclipticPos(); - - //const auto loop = [&planets=systemPlanets,processPlanet, - // observerPosFinal](const int indexMin, const int indexMax) - //{ - // for(int i = indexMin; i <= indexMax; ++i) - // processPlanet(planets[i], observerPosFinal); - //}; - - //QList> futures; - //const auto totalThreads = availablePoolThreads+1; - //const auto blockSize = systemPlanets.size() / totalThreads; - //for(int threadN=0; threadNgetHeliocentricEclipticPos(); + // Threadable loop function for self-set number of additional worker threads + const auto loop = [&planets=systemPlanets,processPlanet, + observerPosFinal](const int indexMin, const int indexMax) + { + for(int i = indexMin; i <= indexMax; ++i) + processPlanet(planets[i], observerPosFinal); + }; + QList> futures; + const int totalThreads = extraThreads+1; + const auto blockSize = systemPlanets.size() / totalThreads; + for(int threadN=0; threadN0.0000001f) @@ -3952,3 +3947,10 @@ void SolarSystem::onNewSurvey(HipsSurveyP survey) // Not visible by default for the moment. survey->setProperty("visible", false); } + +void SolarSystem::setExtraThreads(int n) +{ + extraThreads=qBound(0,n,QThreadPool::globalInstance()->maxThreadCount()-1); + StelApp::immediateSave("astro/solar_system_threads", extraThreads); + emit extraThreadsChanged(extraThreads); +} diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 5e5cdbab3938a..9e11af86c69d3 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -758,7 +758,8 @@ public slots: //! Return the number of additional threads (in addition to the main thread) configured to compute planet positions. int getExtraThreads() const {return extraThreads;} //! Configure the number of additional threads (in addition to the main thread) to compute planet positions. - void setExtraThreads(int n){extraThreads=n; emit extraThreadsChanged(n);} + //! The argument will be bounded by 0 and QThreadPool::globalInstance()->maxThreadCount()-1 + void setExtraThreads(int n); //! Return the limiting absolute magnitude configured for plotting minor bodies. 30 means "all". double getMarkerMagThreshold() const {return markerMagThreshold;} diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index 5f27d947704b4..f909345b82171 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -63,6 +63,7 @@ #endif #include #include +#include //! Simple helper extension class which can guarantee int inputs in a useful range. class MinMaxIntValidator: public QIntValidator @@ -346,6 +347,7 @@ void ConfigurationDialog::createDialogContent() ui->overwriteTextColorButton->setup("StelApp.overwriteInfoColor", "color/info_text_color"); ui->daylightTextColorButton ->setup("StelApp.daylightInfoColor", "color/daylight_text_color"); connectIntProperty(ui->solarSystemThreadNumberSpinBox, "SolarSystem.extraThreads"); + ui->solarSystemThreadNumberSpinBox->setMaximum(QThreadPool::globalInstance()->maxThreadCount()-1); // Font selection. We use a hidden, but documented entry in config.ini to optionally show a font selection option. connectIntProperty(ui->screenFontSizeSpinBox, "StelApp.screenFontSize"); @@ -1059,8 +1061,6 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("astro/aberration_factor", core->getAberrationFactor()); conf->setValue("astro/flag_topocentric_coordinates", core->getUseTopocentricCoordinates()); - conf->setValue("astro/solar_system_threads", propMgr->getStelPropertyValue("SolarSystem.extraThreads").toInt()); - // view dialog / DSO tag settings nmgr->storeCatalogFilters(); diff --git a/src/gui/configurationDialog.ui b/src/gui/configurationDialog.ui index f5a30861603dc..ddde6ba921e56 100644 --- a/src/gui/configurationDialog.ui +++ b/src/gui/configurationDialog.ui @@ -2237,7 +2237,7 @@ - SolarSystem Extra Threads + Additional threads for solar system @@ -2260,7 +2260,7 @@ A few additional threads may improve speed with many solar system objects. Observe what works best on your multicore system. - 16 + 31
From 248ba999283e5596544d4036de71af8ee27c2486 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sun, 25 Aug 2024 23:18:33 +0200 Subject: [PATCH 26/32] Improve marker mag threshold setting --- src/core/modules/SolarSystem.cpp | 7 +++++++ src/core/modules/SolarSystem.hpp | 6 +++--- src/gui/viewDialog.ui | 7 +++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index c374691e37a07..0cdaa24e9d9db 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -3954,3 +3954,10 @@ void SolarSystem::setExtraThreads(int n) StelApp::immediateSave("astro/solar_system_threads", extraThreads); emit extraThreadsChanged(extraThreads); } + +void SolarSystem::setMarkerMagThreshold(double m) +{ + markerMagThreshold=qBound(-2.,m,37.); + StelApp::immediateSave("astro/planet_markers_mag_threshold", markerMagThreshold); + emit markerMagThresholdChanged(markerMagThreshold); +} diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 9e11af86c69d3..0c87ef0f0618e 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -761,10 +761,10 @@ public slots: //! The argument will be bounded by 0 and QThreadPool::globalInstance()->maxThreadCount()-1 void setExtraThreads(int n); - //! Return the limiting absolute magnitude configured for plotting minor bodies. 30 means "all". + //! Return the limiting absolute magnitude configured for plotting minor bodies. (min. mag. 37 includes de facto "all".) double getMarkerMagThreshold() const {return markerMagThreshold;} - //! Configure the limiting absolute magnitude for plotting minor bodies. Configured value is clamped to -2..30, 30 means "all". - void setMarkerMagThreshold(double m) {markerMagThreshold=qBound(-2.,m,35.); emit markerMagThresholdChanged(markerMagThreshold);} + //! Configure the limiting absolute magnitude for plotting minor bodies. Configured value is clamped to -2..37 (practical limit) + void setMarkerMagThreshold(double m); signals: void labelsDisplayedChanged(bool b); diff --git a/src/gui/viewDialog.ui b/src/gui/viewDialog.ui index aa703e903f5cc..bf4327402335f 100644 --- a/src/gui/viewDialog.ui +++ b/src/gui/viewDialog.ui @@ -1441,12 +1441,15 @@ Draw markers for objects with magnitude brighter than this - - 35.000000000000000 + + 1 5.000000000000000 + + 37.000000000000000 + 0.100000000000000 From 5700684c1fcdced026961527b6358aae8425b32d Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 27 Aug 2024 13:49:21 +0200 Subject: [PATCH 27/32] Fix missing old-fashioned storing of new settings --- src/core/StelApp.hpp | 6 ++++-- src/gui/ConfigurationDialog.cpp | 22 ++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/core/StelApp.hpp b/src/core/StelApp.hpp index fb4f8c7227b55..8cb12555c004f 100644 --- a/src/core/StelApp.hpp +++ b/src/core/StelApp.hpp @@ -236,8 +236,10 @@ class StelApp : public QObject static void initStatic(); static void deinitStatic(); - //! Allow immediate storing of config.ini entries. - //! Storing only takes place if property StelApp.flagImmediateSave is set. + //! Power feature: allow immediate storing of config.ini entries. + //! Storing only takes place if property StelApp.flagImmediateSave is set, + //! a flag activated with a manual config.ini entry gui/immediate_save_details=true + //! Items saved with this method still need to be saved as well with ConfigurationDialog::saveAllSettings()! static void immediateSave(const QString &key, const QVariant &value); //! Add a progression indicator to the GUI (if applicable). diff --git a/src/gui/ConfigurationDialog.cpp b/src/gui/ConfigurationDialog.cpp index f909345b82171..b65bd9354d14e 100644 --- a/src/gui/ConfigurationDialog.cpp +++ b/src/gui/ConfigurationDialog.cpp @@ -917,6 +917,7 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("astro/flag_planets_nomenclature_terminator_only",propMgr->getStelPropertyValue("NomenclatureMgr.flagShowTerminatorZoneOnly").toBool()); conf->setValue("astro/planet_nomenclature_solar_altitude_min", propMgr->getStelPropertyValue("NomenclatureMgr.terminatorMinAltitude").toInt()); conf->setValue("astro/planet_nomenclature_solar_altitude_max", propMgr->getStelPropertyValue("NomenclatureMgr.terminatorMaxAltitude").toInt()); + conf->setValue("astro/planet_markers_mag_threshold", propMgr->getStelPropertyValue("SolarSystem.markerMagThreshold").toDouble()); // view dialog / markings tab settings conf->setValue("viewing/flag_gridlines", propMgr->getStelPropertyValue("GridLinesMgr.gridlinesDisplayed").toBool()); @@ -1060,6 +1061,7 @@ void ConfigurationDialog::saveAllSettings() conf->setValue("astro/flag_aberration", core->getUseAberration()); conf->setValue("astro/aberration_factor", core->getAberrationFactor()); conf->setValue("astro/flag_topocentric_coordinates", core->getUseTopocentricCoordinates()); + conf->setValue("astro/solar_system_threads", propMgr->getStelPropertyValue("SolarSystem.extraThreads").toInt()); // view dialog / DSO tag settings nmgr->storeCatalogFilters(); @@ -1117,19 +1119,15 @@ void ConfigurationDialog::saveAllSettings() // configuration dialog / selected object info tab const StelObject::InfoStringGroup& flags = gui->getInfoTextFilters(); - if (flags == StelObject::InfoStringGroup(StelObject::None)) - conf->setValue("gui/selected_object_info", "none"); - else if (flags == StelObject::InfoStringGroup(StelObject::DefaultInfo)) - conf->setValue("gui/selected_object_info", "default"); - else if (flags == StelObject::InfoStringGroup(StelObject::ShortInfo)) - conf->setValue("gui/selected_object_info", "short"); - else if (flags == StelObject::InfoStringGroup(StelObject::AllInfo)) - conf->setValue("gui/selected_object_info", "all"); - else - { - conf->setValue("gui/selected_object_info", "custom"); + static const QMapselectedObjectInfoMap={ + {StelObject::InfoStringGroup(StelObject::None), "none"}, + {StelObject::InfoStringGroup(StelObject::DefaultInfo), "default"}, + {StelObject::InfoStringGroup(StelObject::ShortInfo), "short"}, + {StelObject::InfoStringGroup(StelObject::AllInfo), "all"} + }; + QString selectedObjectInfo=selectedObjectInfoMap.value(flags, "custom"); + if (selectedObjectInfo=="custom") saveCustomSelectedInfo(); - } // toolbar auto-hide status conf->setValue("gui/auto_hide_horizontal_toolbar", propMgr->getStelPropertyValue("StelGui.autoHideHorizontalButtonBar").toBool()); From 93a011e072e395655ee4f9eab080f06204b386d7 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Tue, 27 Aug 2024 23:07:16 +0200 Subject: [PATCH 28/32] Rename button and action for minor body markers --- src/core/modules/SolarSystem.cpp | 2 +- src/gui/viewDialog.ui | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 0cdaa24e9d9db..a8b94ddc01592 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -356,7 +356,7 @@ void SolarSystem::init() addAction("actionShow_Planets_EnlargePlanets", displayGroup, N_("Enlarge Planets"), "flagPlanetScale"); addAction("actionShow_Planets_EnlargeSun", displayGroup, N_("Enlarge Sun"), "flagSunScale"); addAction("actionShow_Skyculture_NativePlanetNames", displayGroup, N_("Native planet names (from starlore)"), "flagNativePlanetNames", "Ctrl+Shift+N"); - addAction("actionShow_Planets_ShowAsteroidMarkers", displayGroup, N_("Minor Planet Markers"), "flagMarkers"); + addAction("actionShow_Planets_ShowMinorBodyMarkers", displayGroup, N_("Mark minor bodies"), "flagMarkers"); connect(StelApp::getInstance().getModule("HipsMgr"), SIGNAL(gotNewSurvey(HipsSurveyP)), this, SLOT(onNewSurvey(HipsSurveyP))); diff --git a/src/gui/viewDialog.ui b/src/gui/viewDialog.ui index bf4327402335f..1d33b320fbb95 100644 --- a/src/gui/viewDialog.ui +++ b/src/gui/viewDialog.ui @@ -1432,7 +1432,7 @@ Show tiny circles for minor bodies regardless of magnitude - Minor Planet Markers + Mark minor bodies
From b69962fbe2df75704d3cd80614b4e920056f0a0a Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Wed, 28 Aug 2024 00:17:56 +0200 Subject: [PATCH 29/32] SUG: update details, new GUI figures --- guide/ch_interface.tex | 7 ++++--- guide/pictures/config_dialog_tools_tab.png | Bin 188562 -> 234012 bytes guide/pictures/view_dialog_sso_tab.png | Bin 67406 -> 162319 bytes 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/guide/ch_interface.tex b/guide/ch_interface.tex index f223c84b00a60..ff86eb15b11de 100644 --- a/guide/ch_interface.tex +++ b/guide/ch_interface.tex @@ -693,7 +693,7 @@ \subsection{The Solar System Objects (SSO) Tab} in the sky, which can be nice for didactic purposes or demonstrations. \item[Planets] will increase the apparent size of major planets. \end{description} -\item[Show minor body markers]\newFeature{24.3} Show a little circle at the location of every minor body (comet, +\item[Mark minor bodies] Show\newFeature{24.3} a little circle at the location of every minor body (comet, asteroid, \ldots), down to the configured visual magnitude. The marks are shown regardless of sky brightness, even in daytime. Also, in this mode, markers for objects with highly outdated orbital elements are still plotted (see \ref{sec:plugins:SolarSystemEditor} @@ -701,8 +701,9 @@ \subsection{The Solar System Objects (SSO) Tab} This is useful to show the distribution of asteroids and comets on the sky, or especially when viewed from the Solar System Observer (see \ref{sec:gui:location:observers}). - From the ``Observer'' viewpoints, the visual magnitude is computed as seen from the Sun, - so that objects in inferior conjunction ae not dimmed down and filtered away by effects of phase angle. + From the ``Observer'' viewpoints, the visual magnitude for minor bodies is computed as seen from the Sun, + so that objects in inferior conjunction ae not dimmed down and filtered away by effects of phase angle, + and comet tails are better visible. \item[Show orbits] adds a rendition of the orbit or trajectory of an SSO. For efficiency, orbits are not displayed when the object is not inside the screen, diff --git a/guide/pictures/config_dialog_tools_tab.png b/guide/pictures/config_dialog_tools_tab.png index cdde27d1b084ceb8da133aea06d60bc5ffb34aec..dbb801c932429938930829c99b6221aea03bcc7a 100644 GIT binary patch literal 234012 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

97()$ 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 )Nb5Qt8W(L=xQvLt6_%uM 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

!0Vj}{aLA?terCZir)rw6a1 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 literal 188562 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 F%hJ%zgf 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 diff --git a/guide/pictures/view_dialog_sso_tab.png b/guide/pictures/view_dialog_sso_tab.png index dacbe12d22d200a800208080ac734e2c2b5beffe..c16f8be52911040435ec583b3403c0d64bda8f89 100644 GIT binary patch literal 162319 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 literal 67406 zcmYIv1ymH_`Zo$9D$*b&x#9{dCDPqUD@%8GcS^%j($cb&EDh47(k&$o($dlm-^;!K zd%igbbzNp>_KoNH)r2c4NIiW_{um7n?Wv5k_F<8-x#tPFqM^~C$%u=nxTkM7Ti9z)xqR_hNWF}fLpv{L!KlD{628)sGo5EC z%UP0S=~-Me?fR|j`C`hxxYUuH`)FSxFEJ&2RBmP30)Ba+U72l@BgYj0+d=M;ujBK(2FlVZxcN>BLm z^qKkX&HbGPy)W07Prmv2`Je2u{JObb6|T(^#Tw_NoY^x4-{L<Lod0`?LkJVaN)PzImw&#CC=-c|h9OxyQ7F@Q$3zmt z9P-LUKh-^)i2dhg^6$p&?)ZcbMJ%~16pdSQ`@X7AkPAmZ@C~v=!wfV^LMAL+UdhNY z#K%EPMleW&K9zjY7t+M}?|Eq7IStG;%Oal3ps(YZWp32`Q z=bPdl^YlZO?zjXp0!kc=F!DdMwQK0$bT1K!uD#peUc}Hzp=Z;3`FEelF=k9G#Ka)E!WQjb`#1&8{OE=@ zv%hfuudkqQSp8Pc(L;H4)$jV4>2=MYDrFUOS%ssh(6}_JyD!WQRSHAmJq~UQW=3 z!jv`d{Inq}>C%3CPM4zT`gM5T3kf(oJ-Vp))AFh3m*bw`RGLt51=Izdmg8EFIu>mZ zqvk@F`w`1b(uDg53;1Xmpqm1$qRf`!@;Fq>wEvM z3$wVD)8B-@f5lhei4yN!FIJy24x2B)`XS%~EBK^F#a|Jr1Rc_lO-G(%-i%QVC6&J; z7S-W-c~UW1{r!V4mK-!l)H)u9-j4u_X(Sj7S`&Q`gQRH5P9kw)ZKo7|rA7%>_Hczm zBxAQ{B%Wjqq2Be5E0bup(l5(uxb6+_#S)8c)WZN;6^m*ue4MFb&LBL|6>ef;I99ek zv|KOaZW=hzj3B*q@06ZIL^QMLR@YFDT5@1zCqPeH+^fs$NEIRC8rrqIXs@ViYIh!h z-*=7BXZ`r88rg6^Dq5q6u>>nBDl%`vFbKag5w3+#etmaIdSik8ajTugRXA6dR99C( z*9?l0@fT^O*6`oI>hQz?Q=byq?_J>PG>Sh+4Ig6xF9?v3#m|gA z2aE+Yk!;)#z-61XBBNrEy^LwqDC9`ZHvSPNlV3={kE2Q&QLLQ(SY;KsNlE22-eb%_ zS|V{U4PPH;|CyA=6C?p6bN)a=8N2Q8(~G5_qA}}1x&;w03BZsVM5e{OB|o}|&pdgE z+h{th%|RYdY?8=;Rt2tywnu72pQDCCG0qgRmzZZO8ewWHQeb#ouaH$xo%V$?u*?HniD?P3` zKkPS+z0B6pWe5nvUr6{Y%PZ`CxVzxTIYVP-Y}%rM5G8wOijo<7U}o;<)D<0g6UhPrb1&H4EO7X^|_rc5>$(FpqAsitQ6p^e}inioB@nQ_>Uta zTP-@eu#AENV*IWMkLD9k7}MrL@E%7;1|L!W9=jT) zY9OJ^HJ|)~Vn?Cvzwe--bxWxS;i>$uVt*8S0KvW+NpO4=dnl`nM~D62S7@P6NQ@%K zj?tgsJR*|VI0kjA+lm9bZN&Lz@Y7cm3R?O3UB_~TI33Q#-I#)-TwwCr_Pd}FE9uV3 z{iNlSMp_M#Q4aY-$}WmX293D;{=x42H49O9yB!=jR4}nOmvbT4{zzzJ&UeF#9XGL> zM_q@(61(=?r0UuqE$-GOIP_(IAyC_H6epqRCFr>o>ejBIMy*=+!2QAD9+_(6@{VkG zUt72(zSZ|%BjShtEX8xQvU0D2a`kP@K!?+4Tr^<@u(AwrdBFbY$EiKg7|GJt&6z%d+>hSR@GllW-=h;wCbMvomSQ6YL991;@Zx(s_r1c&P|Ph4Gj3%>k(-!TG(s)T_-R#wr`c`iSSj*bpX zn~>>rl-6A5fn0-$br0oPv zbGA9qcX7Feg&Qvw zGx`1IwNzA&R#|SH;Bfj_Y0amkq@?aAM}wd%D@ki>-*AMX%*?zVmDh`HQZs3V zzs$eQY>tLN5${!0#>U3lE3N(fZohv=8#)x9e6du9Lh)t{nsYc(zLa^-O-UjVi-l2d zBU7pbf14tw+vL7~vNMB1jc~}{2>9K2+u5<4`yA5$;*jtEzM`m+1a3%X<k;5w2W@gEQ^_7&AbaZrJWfv%BDaeD`uSv&Mgwlk=S6v&U zB#qWyQX9eg9687{($kO5y*;2fBOC%894cyRZu?6ed~Um8$iI&D)6>&*vE55cOIicx zm9X0CY6nU#R#rT0Op8=zDAb-e!?)EB_x_uMpl|1T$_Z6wL-{T`AqMYcWp`XJqbRuk zVxQDjH{RRu_3-dm6HU!mOy_pEzBqO(oX{+(X=v~?Ffed-b~ZL{U$mdxImynZ4Ka|E zl)UdROcz@|W$oHHx8ba+re?*F+UT~o>D=JXe=~>;iqiMS0Rt8En$z$&lfsIMMXTGT zB8nbwoY2603k34mvki=6Al^F&!NTRd9t~pcZEAlrtK@;_hjoApO{xx(I(l~=5En;4 zWXuNBD`s}EviJA*3kzS-(M2F9CnwcaRXbU?#!|mP5zE|-bGEfJ6y)UKw!+fHOEs&V z%)w4%VPhLMARhKffD$q=m!flqOz( zWusfXXq<}2(b(Ml@7!Mi(5tJf!Gs3TaBy+;Rq}Iko`3}sy?o{CXJu8STC~c|d{|9_ z6Z+)wV@*xX-P!tO*G8j?&kK8g$wzc|I2#v})|fNxw2{mUF{fNUu0tg8mK6K;BCWNy z6eC@-V6=X2mq5haRmZl?;6X~!otGjvJ3ajg-jP7 zJoVX5-J(w>_07#0>K^euD|3x*Z^@rZC`;z-{|tWe;K745?=fPDSQ9d%{>tLf4Hz?X zW?EW2hKBko4WPU@lZ7J2^Qf!09xD?}kn^R2H;_`j1tK1xs~WMyUjZq^r`Vgz^w`WyUx z`!Kgjw@kN;iHS*eFN_VWas*6KPJta;UU^KFf=qq3ko*hEQbtC`#N_jM>S;#ScVS<4jVP z>kx>?5gl>5+;87j*VUP`k|H7^ULjJmvh>u|zZMsBqzzDZ?ekMV4qjVdkD(IKR983W zOw()jTs=JR?duyIDd{mrm6W_@VR7T8B#&Z}f(60_@|04wY1 z?YTCxb)N1mu)tt)T{84Ro}Ql3R06#Ylzo)}G_x%}T6jSR2aW}!JZx+Z_FWjDYwNtA ze6$xhgz0cMfeHnq#_aq2iYu}*apKC6k~vSFJQ+6U@H35P>m)6bmygo0rH<%mIo{c8 zN3tQ&i|0NXm$Z63K@YO7da|xM?XKRmE(q~*4z7+(2+6W` z9v>f%y;}^7jm3|n%B^t7XfcXhUt9C^@)FC&>jRq+l%t~;X_=W+)YM?Tyng+<{ar(h zTD*Chyu5q>O)~s;u*8P;dy)-g!1` zo{<`{6CzQJZLEbVjEc5%+Sw>e3yTd^K7avaWO}x@w;LBQ6gM4u3PW8x;BvZj9HtNJZdk~5Fp8aw&iY>46!#62n5)4Fp|Etb9;ykLY$6} zkPvLT#xJi5J%fyt~pKXYH@%uZ=pnVy>$7!}t`uf66_)ulkf z@Suggtk0i6LBhlOkWfMQe_y_SmBtH7Nl9tmlEZ9&^0l%u&VbYqWu}qD?eb|`SfSuB z5LeLs>db)#k7h2}M1!b9oDL`_k0}0mHiP@dqK%St0%fH?&A`#IvawN%NCL@I4!dNo z|AE(S{hiZwh1*t5)_jkw{rTV7dZ)A)beYr?`QL@!ff!!t0$!>_K+foKm@Uz&rNrs7 z1B>KSC><$w!`$xCiD}jO_347&(cj^pKSiyqtiTPteLq6+_xOTIt#r1*Wosl)7LupV zO*tPLeFr%ys-9V*DWjo^ikKJ~ImqQX8|^9A?ZIAtDAO&#&K@UbqTh$}nAEDuit~p) zYdLn;FT4GqKk6YS&e8?+e!Z0^4in3%o2i5^qy1Ky^llb${o2i|y*A`Uf^Lqo_TAG> zrfO5endSp(>MVi%|8?q9qmYY+VM;;o!?`` zwzfb|#L3C2=zt!-+Q8a+JA$R<*VZwBS2`|oKs!1=SoJ#H-RIZ)@L_ax6n*rLe0X$} zJ~2a~rmbs!|Nadl{s{laucxM_rmH(YGt*dCS10rnBbY!|cFHbO8Uju2m7M8LIN*r} z{a)z2M{#R2dTfHaJ$cXg0V*i5%tk>`UPLX_mO^ zC}z81DiZ;`sG+WY_WSij=Lr}^fD7hYd@lc7Jivecr#qG&5D&XKZal1Qk$A^w6bckd z-Lhx29Q^!|cqmX8G42BhZH%6pFGHfwJ|U$<6r3BK2ziwv=j!Tuzy!!^F9FjGIdm!X0vogWQZ3Wci*Qm$jbicIjQO>altHs9v} z8}7{nBB9BBF2|eWp}5q$UR3*VvzV^sILIC1fk=a^kVLHZCNjlP3*le}Qan0>^$B_$ z1fB7bMM(zzy1KgB-Y!-x^5MGD{Vf59$M=XMC2B)~`p3eexM2DaM?!hl*3HIdM@!ET zeB{uORrNFgnP8s>j_57DRZ~&PMQu(_e*U3PUGON4}^89gKbR_hJ^O94;{KTUY{SX0}%4u_fGb}p=&(Oro&u|c*gQLpuA`O z4M~K_Ze`ECR|v<(xo0f8{Sw2fmP|s@v58>&h||Tc4rdAabXM{Q|9zba#Kw}*O)58m zN1^n2FJ1)D=o8x&7HWyY;f-^d%#W*QM96!g@p{#NeCeYd}!2M=Y!7=H~X~$kSbD*$tB@>^O*+lbJG< zj`eB#DpiYYEG&A~7zt-Q;BdH;Q&oo{4^&4LJ`TRLHgn_L?&;-Qa(NLE|Grg57z_qL z5}3HlYp|?HBJ#d|HTU$Kw&tXWlFU$$q6;Al!Iv1`a0Y7`7aQB0gS-le*;CrgYBDm9 zdcMgftRJoq)z;Lk4Hbd0LYpLh`?2o6UW2nmqH%o^n2m}GHf16&PfzLn`~kKUxnyRY zcgarE3|gOxDxfkYHm{|k$F3G`hi=oNmhAxhIy=MYV>3Qo%_<)1W{p%Ws=wT7#L6ao zsURKq%}NuE?mTtG#o&$8Ep3qMb-fK~2#?1Bq|4#_@Z5~l)YUbqUm0)a_IPUo^w}%l z)`h(V@geQiYsDqK(2x)u#GD(2ex%!cBRc98z8g(US9~6|te>Ay8!IHk+{%inhq8Jm zYL*A|(vInw881+mi{?cO|YUO*5LES#Rb@jYGt}5?3-PNY&pZ~%F6iIm}X{X zYR`qpqbgxq+S*Ouz8P0*;v!rD+^{E|B;J=$PHMMp;3Q%YfIXRf>O z>X@0WUtgYDqzbxhjsff?q1gf3}(d--%hBJ5Pwz<^eMG=-Nl z{3+OnGlGtciR7fD-1f9%D@Y(`7}sC_`SYd2um^^vuB)5*1h=#K<8s~Z?(WISNq?|l zmYuWn(e_johrDc@xFi2B4xfu7i>x6oLBY&mm2?+HV6-i7tC6t-cL+S>{M0t z=1o=FUfPX@wsyBKo^LM`7OgUs^J3*4=aF1u~7i{J_{4QIBVjLwb*KZ>QJJmoF&Bo{JHn8jOvpfJ0e1 z8;V%idr1ML73HzBvolm&g+`n-WOu$93p+AZEG+I31$@GjZY)O^`@?=l5_ z0C(8f`}0R%LxYU$X|rzDyF5T8WqSRmrZj*Urmfx2+W+Sd&2X(z#pJzXLa?0Olf%U6 zcsPfLIds(2k_VW8oOh6c6)cJq3M4k$4RIogI}nBKrnP1>&_)^&cXeFmC-CO25@TY6 z@Abvbj2meZ1w~e!$6-E#ZRoJj7_rQgpzmgLYpn$y#W}_arIqGKN(yFMdA{V+ce?kD-k9w#!>fV1;CL5QNto~NvEyhHyCB&(D=g?S=@pB!~ta9>gZe9jngkx=ku7 zjfat;(3l|oiz5n($bS`LV4h0b7>0CTys8IaEpE?{J>{xQ=zQbXFMC!zajYpDPIxR= zT!kxE$`?>x5J*<+H(XrF%}>NR$A16D!NIxNRBLVUJZ8kl01IzzZS6qg{uc|)qH%`! zo*}`@NNv@iU*L{`f&oP|_*`vY`vK?kJucGA5cJU`>NvudQC1%Q_3P7=_2Bw2 z7-(*lavnL^p~EZA{vMoABSNy|{Ehi}-O#p*(i~+_1cnZ^j$3@JLMsqal7SEzKpyAj z1OU>L3>(=x<{v5$(&s=bcd7_=s^<)Q+waJNO|oHPESQ1(dV9Wb>jl?2Ie!!!K<#%` z)zN__p^QRNmhd^Q_L^uUH8xPC$#nvK9JlqR`u2?a_5%mG1Qr=KCcI;&7yXFDJXHZg z0HjZTJuNLhUf#{q%c`;{{>3-&|78I_J%#mga&R0SAA>Tncd*(A>sy1b{feU5y#bYV zb#=Am6pb5zf0Yo z-I|+gob%MMVzRqi8W0rEN6Hl4d!)-i)#KvgBD6u()p3tT3F7`Bz4QiFl?HNwAzmhJ zfD@25X1ox#XmL8g1WZjs3`pO@VwSm+OaL3C7W4*tN(NDK#AcCN`t@s_*Qu?C$NAM& z6B0@!5&O}G$v7M@B||{lcr@ zUTeKmtCW>vX|Qq$EH7?gEG${+>9Y$pt9TO1mHQJDmemMkIgA1e!_?H26GdCT8wBU3 zq#`HpWzZ6C$%ekmPrhXg2@Taq8o(|DR)w_C0ib`Nu@YnW|NUfIl_H+9UiGL6iTtV0 z`lQ8&JIhe+c8>hHbYjV7HM)7#=*h9`9XbkgZlGRh4FZq`gR$dAZPldYoAEM zD3Vx$LAf6ESl33e*ww;9i=atvl8;>$S+;*FCJi zo&q%~np?PDNpupqck)nVfe*kuv*F3=VD`%OX^Z=A_90FUF!xGU-XPA&!-X5IqK3C8rpc zLFD082tdpbWePwFh%(m!UYnSjlDQ&y1bLyk2H+sj4jKU-%g;B33u;Ix^YZbmZmIt3Y_QB!Fxa1O7|hx~5-Ew+Kmb$NZWa}JLu zGY&DxFDRI}{sM^VYajC}mcGUlDR{!>X0Omy;DV6PW&*0)ic6nVGG{pVLs+hbh3#)k z4p>`U`G?1}sYv(eR*%CZD8fu3>t^9*Lg=ze=u!`Gh-+WJ(|B7me{|qRg_tAeGw6PX zaeEhx>RDD#7paw9T;IUQ{anL(jOh~10fhP0JKnD)Eq!q}Kj}Oll$3<~=UH@{fb{6u z>qUmPW5|xY0niW%Bzu=s|LjCoMsD&2)296k3yQP9fPw%_f@|hJ z2iw|@c&VpDZ(w4>W43?qwM%F5bp5OZpvlTMDmhn)O@36Iy!-G%gmn4IGv>)1*GM** z93BCIjCXm`a*$W{`#4x^?K6C7PfDP@U@LBQyQi9JB;BdbeU;mN$thd z1QTU}eD8=PI+pjNFke!|#Gm(w(^YT|j;|lGVYji$T?oFkY}>7IHv_jkZkeF~b}vM; zw8xki@X!oCH|a#l5QC9DU1g%Z+4>J!T3Wz`u9?_6-Y|>?+AAP!8UCnm-+;jfOv`Zb z$B!SwNFs*T`ws5`J(Qb&#hO#NY@)0Yp@KnAQdv<^p(uF1GT-b4+>$A34|n&^-khJE zb9d5!qWbz>>C6O3x{*;+s}bcD7e|_s65uDF=b$D{s{pAv#>Kv(zFof^pAh<2V&}IG zfDl%8j*AprqG$GVK3T>fD;Jldb?CzN?y2v;K-PSs_&OLK3X}JL3uZn}R?}$2srKH*aiML@$FjweWOUh%m_nC=y^>Ei|lx z@f6GcHN8t1!QJJsQI8+JJRcR%3;FCq&m@?_M5FOhRUWIm5&(9^Z&H;QM*Lu!Zi5+A z;5OFQ-Y44{`57G>&cNea`4RXKBEzg9k$w|H$rDE=CKrdK3j(DS>?VZ_-b4)!Ry?dv zC}SXC@DD{GKdE@p0fVlaNmXJ7a`Y3;Xf-sgRKf=+94C-Wk}5rOE@ z0`wc?a?M5>GBslTT_HVyG*y!HDGrWdwu z*5(&VOXmv$5DkGw>?t6G!^+Q}UMMs)Fu;Z_Hil-n0pb+hez#Br5`ZweSZSauvXb_D zXS^pGpPYos03@eG7kh_MLEd0`sTX9`Vx?yRz8)+5U{w$dI1X^iWCHRldz7Dmq1z^F z{9GLc;I1SUt%`;Q4>$Ljs*wS2g);~Fb8_;7b8r5kDi~9rqmPfkIoci{Wmn$&S0N@5 zz>9nwq1)`)Vd_0Y8uCLOfYy`+-z1Z#nCP91eJ%UMkl?UJFHcO&3pP>B5=`2Jci{y? z>5^CizE_YpcGtTunj!|NXCYy`~Jc-!XW|q8}{7kFX>`oeXflH zM2}xHGavB#E&hCvxt^Sq1l)Vh1A!S3_LFD$z{|>Un{B~M5I)=L*9w%uvx|Z~4zS8( z5M9ednF4)&p-Jgt4M1CZ$-oe1r_12lm_hWO2J--vD0-=AnjjVUi(?G)R8=^9nJ=c+PfjYwJm{D06bee|(f97@3E9q~vn^ zOGUsADRHD4GSR|oUZN5pGMIsjAT$E301rWOFvy{Z*{}E7Dkn@$P3f~H zaAqqL1%G|Y51rR8MLm{RZaq&d({8;fa_3h-IrUa*!!>B@?h-;}WebKCE9L!%lAr2^ z-1&jV;R2ejV|`7D7d9@g8Ht<{k%_Hsv~i??1~4Z$se{nqa1e2k%wZ#sLZKK4!tY|f zltX^&_#!hi z6CEEeYFJyWx&=gk(A>ctx3`PS%04M{7q&eHB`BFi4BeuI8=jaLa-amxMF+0XRRe%-EAfh;+$Wi$U)`MBxID-ve)%wR zzrDTv=TA@srXemDlI_d;0Nn%b?3~}N&nkW2rYGw%Q8(v; zsGtDCJZx+t1iU7lO}6(t>q<)G;p6t)k!+l41Hh{W;7bX9jCS5dxc4k>@+C*)eJ@js%`LeJ#lr@$4T$Ju3u>@$qZjE!AC7e#gg*cM)rYo`8 zP*g!dsJXl`Ck;V3gy0c-g)n5pyM+ykc#Lr$i#EA0@m(I69gu%9T|B#!rGmxXlKsEmT8|*T;ib_IaVv1Zo=)uZF zK!yP3pI12*-d(08O&aoZZ6&Y261Gn%02YblV(V0vbit@ee)eRLF*{iODbkRdq-^gl zfqdw@f>B@J>%*U-YGPu61Ex_OM&|Wv_Nt-~(KCwMO})gV1Q1fW`70%~#EqjYos|2= zOyL z40B|7pyN@e&F%iw0@1nvnr}5VjEJ~*c}x3s1|I5lEnC z=rp-kG&Ed*8UQpg6e>hCdzL|Cnxb1@$w`77tz-2N3~P7r!ZT5V|b@)lh9{^yHs0pI*@UV*p4`yst(Y+o2F z`^)8ER8067(aSBD&3m-s`{Yqb=wLv=!g+=jR`%^xtzQw8F}9)7F3!)Fuj-z-uYki+ z5Qqd^URz`NVr)2T!boz4 zK^O-_RyqtF>OqVZ4hDInFw@O~6Ro6Q8$9W;srwoRQ!n}bZ72q0FA47lIrF}{vrJF_ zt14)um0N8Rz1`_O^UpcS5S!KE(I$S9O|&&b8|W%;4^G4T^BZID+O$Ui_P(( z;o)HbR?`Md5l9je63}|`#pZtg{0XLymzVc_;TRCVKrEq4@h+izE({^)$s-q@KlrZ% zp;?mTesAZhy9fZY^~1SVzbyAOYq4IKGqG~m^aid(Y|{n^8RVywd9N}RC}db#TE@Nb za9{&&z)!3qQraL^BwilK*D}H3iLK{px3fCh{H&~#3qrr<=HzKL3&ss1t2KAHTF<>S zOV$pD%7C^^fsGkrS~He=eqL`A`Lbe9K|ukOg14NU0Gk1s<6T~uy09{l!<9L>mbtmQ z+Cv&!2!OjB@<2hukElaJGcqzLEoE>lm&~~NTBP2wPjd{4}xJPL?Y-er#O&#XhoM|#8O!E&2lt7b;UIw7G z!!RWyL!KdiLxa6>Zhmacd3%zrcBW)>V}whcpNbm5Pbw+ zF+2(reh6l=n~5$KOSbIUP=n3LBM#u}AyJkf8%2W!eDL+3AkZBv-M)1khpL43Su>n0X30qyNS z)XE zx&h-HY%TZ9tc;B36cl{ILwC{D>;U*a$zwYcF;Ap6d^|in93;%(Z~(EjnUlvYU&N^< z;T*+5UJ%@QvO+?8$Da72?N_a%kPx0~8D*l5{i~l#OSLW6JE@zS07L?tmnmY9 zVN*xY%)kLGJAi=Rw9!pS#N~oYb=Nc^==#`YFoW5sfMr8L(WhAda!z_l!IU$NEQB^h zvGU%~A*oRuCmTt`3xY>WTL;@yZ{i@C-2U2i_CHLkfJkB#38p19H1sY&P;Gs%*K)$H zWvr2JaWPq81VlwX{se^rKBu*Qpe6&s(SMLd93exvmn;`nrEPllu&3l3$r2R^Gm?fl z@MaXMY?e&nA3SvQdI>1qm3)$kGEq@ck(U<;kTtvQ={h+bPCqiv8UB0hIWs*CmI@Gb zfq@X$v(grdi|&smbJ4`&bC<*73>C#nOi0+Ce>8>-(mqoXVObRl1Yo12~x znK`8;q^YimDf*0M!>~@W+!ghOy8E!$|$2`$|o=4^Y%nqAt z&y0es5iA2Tj;(wSLc3w3S0Ja-+0}LGQ)>Deg#vIGypEef*>iiZ_7Z2V1Dz!Yg&Ht@ z650k#5e&hp@@1(f6xJ(G-uzAbXDoadE%$<-K)_VSX--Q-`@#)j2 zV9a^aJ?S!!fIZT$_=1(9JMZPG5ZlV0Qa~3e%j?&3O&*76@LY!4P$;4j#z%?MIHy24 z4@8d#BA-)J!JsfF_kp0cHD}cnXzHbUtsw6%0G+Jz$VEt@Yh*0X;m6z z96Hq#A%(@o+s&uEkDq|&My{_8w`y(YDm6>U2a-me^EY;UlHzr9WpBGH`yI4F3g(AC zP%o2K)nPT|<)Gp8Ra#tw)v*M@i;@I@mLOc*S5<*nV!uD-4Xh8yOKLW@KENkSPix(mD{C>RE`hrt3FPrC_I)7-2$X$UovK*NM00NHcateRSKW`3DPTdB-V zd2@9*L@nfN&5=4H)8+Q_aJ@d|X*U57gg$&|JG=tHv5Bn#zlUgsKNVkg+~FTExggBI z5YH#$4;CGORK6!Xme$O)PJB3_%K#Dsu4zXe&gOe{R8$pe;z&$x1abZ(Ih(GoWrY$F* zd@K50(<33lj}HGkpM?&y>CoUH&eNyza&mb7nafE6*Lb4*LqHEaIz5e_iJZI%|M0X&EzK3l7gn6w{lbU8 zZtkue;)ybPMMcqzgZT?>>v5oLzH|w2 zLyvTT67@PA`f)b3smet!0}w4Da<9jg94GX&?w&aM#?}^}I=viS$LOnn!-(_N{{*nY zm+PF*d6tOdas0oQmhSHDElAG_sRx$x?7i0mH-Yme^!?LGpC4(af8FVBfP||RCmw_+ z|2lbX)qUQwD)wwTkn>(SIo^YVbU-NpHJq4`y2?12=gJt%f$nw2-)y7((9w~jhF{Yj(U`Wbc-$1jk12=${C?@dT;UJJD1LZ;!^lNG9-@lwt+|c`5EZ$B= zLHEUQL43`C#_aX~efGy<13XdFDvzu|X7^H;bbd?3$tBXu{WlW1MESgMEl{XIyGY8M zt-LPRiF;eNtu_>Wi&^~ZN#N~%(LnU-s;p=8obrfwFO@rY`WtzDpa-di^3Ga2Ydy}i zdj4{bo42Mexpr&5YF2S?5?Qw(-}BV#By%e3*`2zDW*vCP+($TCc=CB;3UpcH3B8)p zuhHiPcn>Wd$Cp#5HG_WrD_FR22JB(ml}PxjYjbeI^;qE<#lwpKWdX>+S8Suc`lE~n ze&;Q<_j2I$^oIhfr|VM*9}9OarF=BmwCh!dBaf|0jhx3FgXrd4N=y9(;)6$QPF#Iv z6I)6!hTg_}#6uj-)ulw#hL^Lz;YaN&{TWhUDrsu;8L(rEFf`PXyf zq8VMJUdxL;xSXDMj~ss#!;Bi9A8R7we|{W5mJM>BBBoXPl9wlo*^bAA>ew_vmX=mK zD?{Hyp6tA>b_L%kN6J6Z2S6fx(UWO%uhQvwBRZyJ)cmMJ_29QA=fEwfdug*Sl}I;i z%ngss+YW#BXG80H(AV0nwE^Z&pAS;fTg>EK)cE)}a%iijj!t~oPfLrQVJx30w#u#y z7u`h(CiPAjIX{LOTWFQ^d^;Hxv#yP8d8oVS+|1LwV>`*`1bOqYfeI(<;!FNopxqU& z|DqIlf`A;yy8Kf*8y=Q%I&V3t@Y@rexJ5U)+_DI4ZnE2poS(wUZaG`#s3Nb?Oh8#?<4nW-bUGAU1F{%;$r+tVuUrK>r3#QhqQE=CD z`6E;9YE&A!DH!qc*>kQ_QRvc6LrP|-dPR+7lMg!nj}I~3-?3cOwl*iy{kSk`(=u&m z*W|X&J#7X#7`#9yZyJUTeV*Eyc&Nc6$=to_)v2;x$koc0EROTiz0@P?S|FW8Vk*l;g@k8TqFc&3FGfk zAmfLPIddkeh*RQ;+eOL4-RbS>u8e1sw&wf-3UYLXW3j+#?yAwXhBgxTkTI{38+bt1 z2Rlv{+-!}>@sH`X$IgeG6Hm&xbVp4;%#D9zBcna698ByW!xuHpp8sGbT83NM)LcNX zMkvMOJyhIWG(lx+)NebA@Y4o_-nNy?_NNa8vbNf0a6QVHf7-jdb zyQ(nxxjFS|7!J1kmO#Lt4ZO`JpP~%q2Z~b7WD*y)&K`PpR_v*GqK#i3DDk{)c_<}# z8M-%V)pFFRhpL$PJ>5w4;I{^MB%Wxut(y|Gt}>_1KnjbNv1_MC01WUWQ$y2*6<*2t zPhWZzyykv=rNIiA0lpUT?0wOBb(oQh^PjaY^cA%qPB!P5vRp#+s6W+zGCj0Py(A3@ zUq}wFF5}0pN4+KUTKQGn$d-2EY-U5Es?}ZVDfz>O{9pY8C(riqv%e$_O*~=5z2{zQ z1C6|1O*%S~AEcUj1d5VYb(y%b3vK;EphYzv^v9-7olYeC7s&jlr5oV;Gf2$_{&xg0 zlBStx$7YTl+Sm8pF{+gI@G*=uqr*OL@|y=f3khaODEdpqX)A@yZ@6VaSQBHPYz~-&&q|7&o}V_#^nD(vxW_{0 zDct{>X60BS(xq&o6~C>CoZTn(2XF1FCbGi(qLmA$$+6G0c>kiw<>&9bvYm1ZMW^Al zRU_;5NYg5^j(*diPk-te+(#a|i@lt=_wZaG-hnXn)F`adT5D`QY7EFcZ$#IKU+XVp zmT`3tH+%hesq3@Nr{Ng{Nr&at>iu(e$1s!?#mYNO%%2;=_q_ITm2z9%N~a&_@;#8% zLy7ncqtQ0bMdOiEQHh+KPH2Sv%8_b&3uZd&YVNjW?U<2c_89tU-RU0FGpN{smd|sa zGOmc0`cYl6U5Y9VVFtRoCROw#oexRPM*?6E$B+zWq0xv)B&@9Bq&#)G4_ZT5FVGdX9oopieYMGvR!9+3*(4 zH(`kv;41U<(G3b};Qi6m+oA|bTg5ba5m4f$WjcV^a$ZZ3!;;9EFHI9)>G7b-IkKpk z9W|-6J4Ahssm*Zk7(Oty;2Gw#KYYuBz#mxjTC3K&^c1UeoPAx?s5R{n6AIm`iLIc; zy`uPkjD2-nRb9940t7bFp&;ELDc#-OUDDkR(g@Ps4br8gbV^7n9h(xQK|osIF7*A* zcg{WMckkJMC>!RUd#*L-nqxd;JmZ<)n;b&sUTpreFO3<$$XtjzOONy654Pkv%zaTk zWNT*5fPe0Bjs%*U!S82SZSl=rwTfU6xCID>H2}%xlDaQ!ir&&MJ)9QR7#&HIsQc5Zg?)~wq^K{l_ano&M?#v*=dCMPu)2>2)UCtn#2XAL8OPQn$8+!<1@c2!b@qT6I!aj$7;t}pOd@`Z28Jii33O}F1 zH~yW40%vy*|D8n(g%7l*gMfVM`C=IBT`;+y*)pf?&rFe(&wn3F*oHznU+3JE{-qIb zs@7R?14+czm4<0Xg6|hlqsvKACQVAvpq%L5&+qX1v^lKooLSWDwS5%Az8gsbY~S2< z7#OUW>p0{rIa16nr!F+)?@JmzAqyQHS~};w{ZWxHVjn4f_O#^ie0oWOiG;Pw;r<5n z5}?{V?cO|$qf6sEhx<|KTHmD6#6jE?G`jS;omXV)V))Q^V9C9RzCI(t%I+G2QYZFx ze#T12xcM^t_tQhvS3}_b>^=1B*DpgV6zJ0uUi6dw zd8+2bH%gO8gm%)0#pV<58YocW9S<&i5rqG=zE%*dfPrLaQb(Q5y@LP*7!l&+y^(SJ z$PPTdCwbDuy|IqFJh+)B3ow1J(zQv=9{rFmQ>QP21`^Vb^T~y@{ur`1H z0>%hX0S_fGqh}2lDRNb57u~s}^p+3xb%}3@C2x*{jg1R8 zp$F&3nS3oAsvJdZ(QL)iu{W5apkNS&XeD)yB7GznbOS(6+I~Np(>y*7$Zscm-_r8p z7WmTy!jWH6LR~twdwDB&0Rsrb6u$s)BtA+f%ND;8%$wS6Pz=NP)0wUwT6j@Mhe7IA zVouOEPdG5%uZArs1KMV=pGn@=XD5Nwh{@9L1z+eFmHqvQsQdfQ=~A;gYIs?c^PWrC z$00$;8e-?IyT4nJ{CN|~nfjx|;sA_+|M}C$s`pwSz<~9iKEvuQpn*S18fx90Z3i2F zP`^Qc`DY}el{WURFlfq64b|^z?@o*c$D28rYh+OVUXQ)DyEpPASQ!9PV;6K0yJM?! z)2B{?+TSEifO+RNU4cU3zYSkh%5l90>rk{-h3r~&Rs7Gs_zJzb$a!A+{ilHEC}ZPv z;pqHMQW47z&*{&ETwSxd`B4u}&YMlE(Yb(4?SQy-kH7uE2~Iy|4c1uZX{4tKR7q_J*h`a z1qZbb`A>gV9Mk&?K)7S~%5| zb-Fe}S3~C%Oi{}pic~QgO(d8O#;SiybWAt+dzqC5hMsVl1~s4GZf!PBE9fl}#megm zbtLloT}&MNeQ3Y4nCKhy2smj=&||Cv^S(e!0(0Fg>x4n`<@qlXo^M9Wdnu+xMc6Dl z9SwPM*aUtq?6a<$>CBwGm`UfRHYi^bX>xrXL}ydW18#2Oh|WIeW~C2pL65WWa^hiL zZ?w?Rbk7AGXm{0;4pB(4DxAp!Qm;+a^=7aMX70H)`3r|_EVqyv&kCzw;xU-v!ELTy z?SLuncS^*JD{tq;R~+y)*#1nqZf#}*rw=Mm79o=VdE3MB)x-JbX83SQiDq;C%%M}0 zzl>ldk+$sVg{pUduP`GX=;aL&Wk;ACH_)_W<;KnrkSXrI)+NE3z1j_ zelGlxYSr4?+cyF?AK4JhuYG)2N5K6{TOQ%(`L7}Hs$ELF;!W!qEL#coazcNTvPDQD z!{WsZ+labr9HINwed8m@N`DuG4t}JB#-zdC7{%K=7-bDE#NgetBMWCDipN!5a9*jS zV)L-*51*`Xm<13X8yfojEzW<{QPO@aoq0SRy3?bj%ySUFwt+t zzr2QS&lmcDrq7jyXbkjZ`VkD@rW0o2#e4?Wgc?C>2J-pZ{_cr_ z{E*AnMjL1uZis&4g;zw~8?dYtBkHq>3%XSYV5AhstU1Z`GI^ILTJYNJzEJ+#D7@#n zs4sQqLGiW855BB4C1a}e&+*OWEyM(E5r1}x+3FH%DT7=r2M@=+#f9@7ituHoQf|Rp zqle?P)sFTCQ@z_X65gFX(lLkTsl%qExZ3TZkKr>Q%7IF0v-SDk#0mWV*|*g$)bOba zjF|yE&!dLxW{Hn^T;%;wv|<%D<1Su)QJV0;X*4GciSar(rvAGe12U&%TbZs~_47Yn zT&&)oPZ;?gOt*|gRMu#2b9LhUvR~SB;)Tior43r}pxQx1AY{w2gU0L$R3taI6S3_G^qK4*4GA$3};~rzRDWF zpjN86-h#!~IlZu>ORG!ONzxi(;9rxd+qk*{HE zthyKh{<=ZrxbDb4v-93`@Wz*Q%-u-ozNn@mcht4I4khe(t-;`V;Oy^-3)pDqdRVUSzum4!@ zNnKlnz(j1MInxs3zot?-C)uuhZeKyf$zg=-WELfkSOT;}%}{ z*5q<@UcMTIeaI+hON1s0(J0ml!Z(`W4gmAIzuyd-8PV6mo6Rm%?^m+|AShx^1~!#5|NGjU_UF=^QSKWuW9i4}xQ z-PhflbIp%H)~v^Sm#U0Bn{5Ekl;1ID_9*J-oM!orwPP{qYYiw7x-0^CvZ zAQSUl1)_!|1O`~khASvgez!RMft*UW{37%6&j*!v@dz4ZMmN0(-@wSqN?0|`n$Qyu zu7cxoZPgDONgCcS_4hsjH`Rj9tc8QZhfHgdKnY256j~}E`{Qu;q;lYn|LM#JL48mv zbF;1vGhL^^{F#;-s*k>u6_Jexx6Q*lCpqL5Is*ZQ=PAChueY`3VG9a?;rE+hJ`E2} z*41`;ivd3(T3i%$Io2#m1%kq1=fye68>R$X&@D~*Wj8ZB4^wyhKYI*~XQn<>?l%W{ ztGBPcZ^v@O;|}jPJSq6bnzp~nNJhryo&O%TOmSu!D(C+Y87T(gNVSkCzoVbfr`A%l z36-KqpoJ6V-WHzeW3&WwjLxv#GC%N}neL>Yw94>*5jG&&i;y5E40I(8Dv&?pVh$Ik zP1eCDiV!wx=6_+H{Uj_5_O(iUDk4mcUY5>NARejN2}xX0=_ahf!|R7C7b9Iq7Vf6f z^oU}&VjcpY2F&|kWLcBKv=}5Aqqb6-YT*k?(bzzK(2+i5Hc$7YG`q(n+U*h(c-
      ;^LUti=SNeo=KXQzu2;;s|$UTt@X9`|#^NKI-$76 zQnM?AIkn{z0}qM8JeLW0iJ&c#GBM~ItUBEA$hgAgd~U|RUNO&grtMhMFid=AcAf~* z&_vRRxuYPXi=LmNSUd6QFr63 zwD?Ghl$0cSr`>aY-k0H`djL*jv6U`HfnP>wH+ktyn496aZo{=4!+^n_93mFTu?-sce+&m{;ku`w%&W3L{5Uv^c3UuX>1*j$ZLOY~U4S zqJP*V8UritOgIpT8{|1G0$6{REpxfCCcosHYGI*o&7ANlYs(UET%xym0%MZ=?TWQS zrtbHZ`>Gsx69r+NGsNyBJ;>a|RD~C&JCV9ij<$*i^LQV|q|jQHi8;^a@?zWJ0rUWi z%W=JCzRYY*o%ka`{FrEQSU*2%F?(5JIXQa4dvzBk+IMt?L~iGZHnjXt6(o63Cwn*Q zqS2wPgoP9f-_wml!;r@m$sq+c96Z%=R?n~mgSQxq#=;=--|OPkevf(_@IlCMv{ zq~sj3YvUM?2Ie8E5j4QNCHC zueHLtbFTFkm09Z#gdgdn1qoL0nd3-WwNGwR24hs{y3*xTc$b_L;fTYEiFJZkg0-Gu zsnaqVq#)@MPDCJPbn2Xe4gENMU}94qJbn8HDC?|sj zCDx1sKd!kNQ#~)cwgbiVhSI_Znye z3%O0sh;*-iU|T=~h23-q5vy&SnP_Dlz4Do~cEy@!lU_wmzBfG0e#t^HF{mKyq$TU=*VN#PXK6g~xf>Ly9~s{54&MCSk?tq8?4yDoU0e&hPJ3qT zuX-k|9Sy_S%&V~f!K-D0UmaS5`{v8QrP8~&pTpd6imkVhcw+pFXf_=J4m11;_pc?^ zb@GBy@R&xL-6a9XC+acW>nFIw{U~ zT+$4mLIN)GN-5YUrHYbR!)^QvKU;?4=ONeaqM}bfqvdzQt(uKBmBe&e@G`D85rb@1 zjrAZgt5suzjMeH@JTn z+iTYJ^qVRs3Cta}q}*w^Q}QQwz4$Kt@TQOMq25!lKfRXMnx1Hp+!YqoWu;oUOTT&I zGUDp1Rmd78XkMNDn{T@z{PfC5jdY9i|wDlKSLkM|$&@wI~D;E5H9It!1_l(yy;xW}9x=lbr<^jgj$Z z!wHxO@jAt|>cm7mL>gxl>}Ot@Eu(wNeyMhw>|{>@-4G!Y#az|$MM^w+=nDm0i-Ef1 zq_;Lby*j% zmH3^nK3r!X;*ZCKvu83ix75buo$8d>Ty zpAOD?dRy-qDb%(X>7{IXYJ|?_+mJRs2TbD}B}MaXht?pOe0H4381X_VhtqS{wD=1C@LuN>U)GDf5(z3Ppw5mjL41uk>C|r zhuq$7mylmnR0ImG_Mr#{W7A(E-rsPi_? zlBL(}Abf%z-60-bc=6w&FW(L9*H$Sif#F8XHkgr-5kz!icD*H#!wQNJ2;J=}f#p+R z@ylF|f!-Ln2|%D_+}j{KGGN&3QH_G`NeDPkU%uSzKlT~7a?TPr2nP_yZ5Mg^9W-h^ zeBc!bk~}~F0{hlq>G^|#Q_ZXX1VEGBLLqJBObE=dnThucfS&w&ppT{Td! z8eZ6y%Q}61@h>ib%xbP-07r(pzKM&+%{M!8q@!^GU*56HqDWHgDYZIZ%UX#a#jIr_ z;C-E3^m@3vtQ-$37N&L;DY229JVjF& zr?)7tM(3z4ECq5>xC$BNw)5wneIB2`r~gDxK7sNw;v{px)@r}c z<&(^3R{e7aAYzqJQ7u;oDbW7wM)#*_U`-;ZofY?Hlfu;0v}B3K(h@s&Nts9vVblw$tS@#p?QrOGgf3TZ&nulrC6LYNhNgboAU<&)QAtuQgzNTMFa zHte*tCqIyDOOJ0h0@^i3v>&Lyx#4@PT;?4uW!(8vr36RSc9gvNMIz|gjSjfpKb)M+ ztq8`;#V=HRAou_>o|wCQ%c)_sN-z=OK?%l`loTs=uI=hpXbc%fWw?UK?08;Ezi_4T~jl$#m>hL@eP`hQ(j=@EDr*;h<3 zvG`f@Cb+ecWq?gCfB8)7VZ`Gp$%hynzBR)x-`Yf<+K(7Od;HT=A+;);-Z0XT_@736AD_Ra)}!<-Wb zXL^;K<4CBeYB(}{VuI96Ie@AA3tgMKyduqyqK?+WYUTm#oocjq2B?d)9on)g6jmV zSAGHu1Cm$esaJjW8G-pm+qn{jEZJW$%lC>8)4y;i`S=th%V{i=a&9j#gBMeCf>#7? zeW5mb9-LpTZIwHgR$Hc4D+S$N2?+8nwUpL-D!J&a8c2hWN!Yl+?OjGyDfYeoY{Wt# zrr`5k=>3WS@#S>!24}s9UMrNIh1Fd}d8IK?$CAnZU+S>DjjtP` zlj=d~!K1ql|2S~=nBYFaV7c@jdeC4Ek1KLfVn@91nnHh787IOND0`H7R|-U(JYq-I{m=j$5M9ACkyqePD4~KcWZPRB=v) z4{Kqq?JIWOGfyav0G+wMaR*aeC|ciS$uE95{s4gA0=F0ES3r%v%++t*x$gb*o??0} zRdpfZwy&))^t;c#lU>=4@48)FUbgAiw6wG|ulRs;Ug<KK}$A?za=w%5?W(`+RNY`Kn%NA+^nUba=ClsalgU!^5x1b^XG!@asJs z63_aD=M7kD3ft|%nz1xX9@cIL{hS3d*YIsV7JMPMQYzt4c=NRE21U2|Qpm2o znJ5Hs8t1uUO*{PVta!^h=3BUxZ=S9r^5%WCu-m6m_l3>V?MJBi-kRzRj z#EBFU$kV0N^mMiGyeOez@_yUJ$BDB?@zF?-OR!W-WW9DMD zNZ9<5g0%^C-V|A_a^jhpcb;$nXre#q*WBOVbFIE{1qJI|@7KdgK-s0k#l}i?MAE^- zW9au|1!@as1to>P`^>H-DI(a-3txUSd$p~rnKrM^#88nM+Uml;K&;T?(!2y0VWxVBs4q)BW7tjH z#m6I%CGF9=6}n`Jh80N=yDm`@5=O^S%bRx#=|Eqib0 z03X1@H1S(I^^(eb^-y%wgBrDMH=Et{JZ!v z^qEptehs!VMM9r&&>%Kk6fd0yx4-bTEDf;ndGluWP%*gl zO2jn4avNNxUcHA1KixcT(i*F=rqsS8H7a{qcf{H?xPzNBcYpNr=Iw+@ODy?LowDIz(x!4J~gFG?Y z?>|0MqQUZSBVsggmig&s^BK%rFILLX=SfK^O0hlA1Qiqnn%k&RPD*`GNSJaK9qC9_ z{O<@76qhMQA|sS06+UR{MJ6W;66D3=$r%ez1PykY5U@LYN)x0k9Sg!xEHLVsF^BrO zFgoN&#VpjOK=KTs0eT-1ce2{~GwP)y;%Hy2fG6~8s_esUm(oeB(tA}GlRZ!7cI1`V z*z33O$Fb17c3WS%6ojuw1$D(Q{r2uJnl3gV z&(od<+lC|_=zXvm{W4)dk#I)o{nz0%LMte6j~2GvgWJk|7vFfAs#9$xEnzSuJB z)*H`N$BZyWo7oOmE=Wny@5~=MN#4Q0% z()&mZOpKiv#Gv#cgQEUy!l2@YBq5I52xD`VJESajb3sU9Btt}Arn%PBlQCCC3{p^W zet8MPv-8h|mIHVgqJgf8JKZX8Y;d7gppQB<)U@PNIkIZ^<^fElWEcr?asS$ly@-AL z`R&i4vvXqP_ts4N)qD_*2@qb9By&W9PMk98WDp`rXuB^g1p4~a=<9+u1MwMHtjT@0 zza6`L8}W7ZVf?3{a1Q%-CzJ-x59lDb!WQ-x*cq4!JpM7KJvhJvs@@t^>AtD}NB%dP zq}-xu!|JE)$G+AMGo}!Wki+{oTSRv2FZjl%T1;CB%zgH`D?B3KPz<^ep}Q%eYIn#! z%F5HfoC6TdKH|a06cYiO2i)Iwi%$PSs*?lXHm!R9qlKKV%$)g3U^80#XRfmcq=$O5 zFZLhC0zN+^oWxC2p!^*Z{v_yZb2_frv7MyQYk>t#w!~tGZ7_~RUL!4Y-X?PqnpTV% zSNQtAClkz_hhDcAT#mK*RX`S9<}Xj@-e@^L z1<+O+r8*ZiMW`QpQ~-NKr3c0APX-7;VRQE{UG?>6xxPmyJ{|5~0*V&ez3cA;0btpA zkm&r%$#xa>6G~dnntrGRUqssLa-v1%zO4-nP~ZlXYOo;S1w8D|UzL7`^S-9eD{X9q zuhAs_LxI>PYVhv>zX8uFK;7I z)4+2K9`KWLfcZ3tU9`AX}-w>=Qoo7DHFAk^9&QEi{>_qN>jzCoabBKt3A<<;iK^ zkL;ukf%WW=9uqcx-sf+Hjc3bv< z5o4MhZTeBjBg3}kSxpUmgc+s||5FaE!vX|9$qBzH=5Gczu#VBX5geYFqLPO0RV<#3 z$GpYp-9Rbxc)sO~kc?$Fw}1D0TgYf1gSBSn!9n=@!NJXG%Y>gpwb(1oJcq!@b%R3c6;><^=A{B+;(`}{yDx{>4Nl$-M?b|OJUX#H+# zs^0-$V?an3y*%y!8`!GVLPx*Ywt+txztb?; z?P}4(5$X>0IWOwv%K`mJ0z^2ln{V8XbL z&lUv*uhs%}H|JmA4SmKl4}!75<7w20&+PJcCql)U3FI-LGE-#ya|3hnvpwb0iEGYj zibe}&4`{*jE*a>yNZ9RDOq{OFO)V)8A>#w%(Lt}{i#IV54r{ zv2Mp-UZq>V5?4SLlzq<)7ZSxm{Q{wmPquAWd%As9)k4E;%5sFdHOB8r`e;zF^(GZ^ zU5h8@7G2LL){i8C7QWHx>{8uet^5;~rN_{6w}dFEzl?D1NkoR=H2 zV$FTgoF&^3felXC>DcZUb_dbo2z4<&XRi7VeOSJW!i$Ue<~Q$B_UHBu#J?XfRDhAT zX@9JKoaxuf7yx@4m;2!XcvHkyy?>iKzqvTveWdvCH8loY7lhQH!J>sPQ)iS-HvWJ0KDShaIe1qXV%A3h`v_M?7b}*W5T7a>9}hSxI3F8=5s%C*{G%~k|H2vtNXAKtX^R1G8riut2|*7yEc1Ha@9v>#jEYI5)+wvKf~0vbQ6@ z`i#J>HQoGED1eF+YdjG^J7O5dPAWbjuEX_l75P=|Q{Sc3=;bQXj=BnZwRgiyw9#Uq zDT3qRKi-_@&9}CUQI%4Gey;vlcH~^^GQsLS=sm8m+93=l>c%i0$byeIq-WYJE($9Z z*E>Ja08_#_fn(ttDPPqK1=Pi2PVIz;xxb*YqgvmF1WzZ2NpR~yfi<@l#3LxzV4Bk1 z!5A~)YJk-1wEAKVbT)qQN4({G88)FyB*$Zv~@{UE*YX zG6d}pMT0(9UESWQ;)ag^fpV6J$igKTSDXHzAi-km*u%-1p;p$>OZR=EO;zqH-*_23 z6kP)hYSCA;k?Y1RXJ10r@-Jwa$g)K)B%UU#s+dWJJVT;l;AenY&ra(7Rz@nl{__>Z zlRyY;3WFGp=&Pa6KR+b5n23eY1Sdma%}u=0%WqBC#K<9L+MB)kcO|vn8uLp{v@Z4i z?A)~PY)sa&5tN?Pi{Kv{h@fJKdydrEcRk5l9AC_2TxGrtV$K zf9>(9M07<*Oki4&2M}&+J4INt)fIO=*gq5YG!YYy&oIjO) zf{*gen1ulq?I|bP$aCMw=;b$OW9vUNl>ATC+`l{&;~IfyuGr?VO4)vf0YGulM#as` z+r#av@Y{O~6!@$HZB=vG~A$cUp=RQZ1q*`mC?h<{;g159`N$y>LcvP2mbqus~_}P zQCdD7D}7R(26fy7sK4uO0Of5stAz}LWj9)8F(#Slr!;hnpxRVncFdR{`S;Jy!r#(h zhsM7JM;F~(xqzSvQ+4lLlWY0(0B-)rxsT9!xexTIFo!3Y%jp7z14yoiq=4?$mo>46 z-nWO%wfZfpXRk7C1xIZ!uZ~_0PLo(X#5*PLyafV{P8?h6wqj5CA|K0|XE;B^gv%8U z;jJi0K*;odwufNo5`iZTfcXy(kJ<4pF9{V;SqLl?H#~b~BSdTU-Db!)jT;5w5qDS> zePp988`k+6`ff=0`#B8o58Zu8T8+;BGDYwYIDr%ph)wAt{-v8^=-U4))As+vFJbkD zZ7__ApO5dIvMzm)JCAW5zY50_ghe?!so%nQ9 zu`tv%#uj3^$Fwhw#&pq?WN2yWqjvi1V}T0oeSPbR*Hx>`D39>Xrbwg>Mlo&V=c@Z> z@4YnKT0h&KtpEIK?Mw~<1KfKS;(XnS2{q`GHkJK@E;eYpzbW$HFn?><$dvCOB z5qRF{O9oM=NlB9_WgV3q?Kf=oM$eeu_C>=K$KyKfqW-xFVffC<%Dkvq&Cp*v6o`IA zHRW=rE00AG>*?M+8p~ECP$lV-6Dcj=(klbqJk50AI*@>AA|4T>gv-x zUmZQrdJBOa6I4q;o*xK%T;sZ8F6&n-`9am_lsZ4Tm3UcON(8< zCq=XnVZz0NzEK22o(11jeqJw3>vS5As8K1s%X3AO$8t}bKWxxNaWTz?n_r&wj{pVk z)uf;pvJhZf`FhA>KfYpNAv4W^#_vRz90d(a1*eakh8?fLE>lyzvPCe)`EkU7s&ul^ z$gr;ltb3-A%xBu6{R_(0Dmn8v7WnY`3vu93zf5naFY2X&`n^9=bw`be-)W-zlkZCx zdBEv2DeL>*IzHTN*9v&-f#cTDsyrhwdV14j@6MeAW8#DYCsw8ginf2I3Zp``Vi>=usI%<5^0a`4$o=@e&`Y^U1Ju*l+YCyA>hBOt;j zy{0SE01OD0t7_ys{Q-51_aFLcUmn3HYn^#u@3$huyNlZUv9a9&Pf)^=-q=1aLh?$M}vbHO;zb$*%amP@T82&Ogg&owKLgF1AzodNT1jfKB|q+I%69q=(KO6?pOxXLkB z;w>V)%^TuXt@Ex8+yDZ>ZDijqi_5V_N0~D^CZ>b`MgR&cAyZ5=P94}j+$$R11uFaP z5y?yRK`ZeojK&8nw6tT+%D5RuQ0Yf!?k#4EapwZv$KTqYt_us zW9-yCzrH7(_TtvcOQP936JFqQFc$JS2Q^UcuJkU`tJGKg9{L{c9QGij>}8X=ygmIk0f)SI-VFFK4?4J8>_+3km)g z=c#H|$S_G&)4oWSld}@`(MvNIcvFhzovPB>Gjm$!!dB5+XVXY%-mpj&p|UQ1Xw!*c zRC)6z0KqEcx}Akp&NO~I0M0rW@j>kty?qP}U3z^iiGc<(9!P;k zKUD-KVb`qke`c72HEB^)|5Hs`u7PF-hG;`+0Vu1$hLD_y&xL?QMzAIUneiv*xK6Q; zt}uij^LSK;)nycipsBV8$10nCWLxmIV0E|)6r@Ir;`gm)W0T-EZ#5sv{NFhUvJGaC zV$$6k7#n7Q@{aH&wQC0flUC^*r98uptQi6w-q=tL^5D;Xb(2<~sh8_o8r6acHyV) z9(_qdD4~z>R})D6E(0_fE5Wr9_mwmfF4X{hFCN)**H}{Qu_FZozBXdN%}Gz<03E_S zKVKg(%CQ$~e`w^tlV2GU*k|l%SI-IMv5fvkDqO>1d7+ZZVcTZNQ$KB6RZ>~Yoyc1@ zOk;AXrO8WiR>4`;AgbwJV-5=%)Z??xk2gR6B8R7#bP)AKh80>9UO6tZP`PLo#WLYQ zWzbw=N|yDAla?i0q#@(Xt=unl-Cx_rc=9!tj-vepEo%VV}iZsA{?hUwWQnDgM ztB|EP4{Q`Q2-*4u_3G@&*;@!0`01Pt&gmQqVxAejVBXdcw9v3uxArE`ooh)&(jIqd z7+=r-Q%4J&5|HfuT6~^%&q~4eDK*Xm9!4n4s)g+^6IN+z4e^yuFRehcqU?=|>2T)W*9B&MK%wg=@aaZtCc7>o$pZ9ZCAm(60O`D*}Z5V3lp@ zwI|%rH0#~4MY%%`&f*>e2MaQZcu9ES?Sn!I@YMZWR z?OV6Y66W7A3>mH1X0Vr#|-6UBw4ibpwmQ-LENIBGGa1U|Au}`s>VNxs(%% zhL10lcx@9pM_CrR>zfQf_8D`Wzf!ZXimG*ZJ<@3@|5KuSOEGJFLx;^Lsf1Xt}hv$cfL|LFs_%KgC2WyjFU%mRy{H|GdItA!LvsfelJ+& zRSSmMTohw&NLj(rH@mAkEWP$?q?%2f+ZTAVxkQyTQ^RAOsw8o(g{84u8b=@T-oxfH zV){r7?yO?g9X*}W8H-)kk}HDVEwMDsfaSq)EObAq$<=H!@n) z4G%o6s#OvfGO@CkQst;RUqrQXraNQ=PjY7jE#aJ+EfH!(LW;V5W>?H)bd7}(KG|co z*UF%%2b(6p?yC-g1b9{)ZB9kcpTe)xTURx}>1T~V#B@nxEM!K~#+>8mk%B4UiBNKn z2P&&^yc}2Nxcvq>c_f>1!5+Y++iD(kt-3eL%gcjl)AVY0;9!0)!hzTitjz;_7Zo1r`<6oA^_kRmt-0}kvpj>j7V$ZY zz>9)j5~?pv-cW(*Z}8}*mM=q5TNma>hn_zGPRADev(&=1=4Fqi)D3%rKeGUV&VzYY z3c=_d_KaYrjCTM3K;Ri;Oo_J7(K*W)-IetgLFAf4-PWI!NL+7o3k6U2}c>!D#Jn#MH_DI}v|-c>#AVcY>(Pmks<>pHKj* zLx(-vXva-&Wpg<)0psKP0Y?s^uE+5Czf)+o=q#mLs-+Y6*B$7o&8r9ASMx{A{#@Vc zN7%y)Q+X{-xET_4749wekAhXSu_*R^5O@bD6&pQ-p4r^oRI7g#&ipTgO<3vn>)!p{ zw$3XO$C)O2FCI&0HXl%4*2w=-6;+J!Wn*G+|9)-9_qOAxyhS9ysry05|9)`^@o35W zq;W1e?!Ipu?F!~KQ`;-Yr9aOLxLlh+&M^0%`ttu@P1l!=bqi{lY=rZ<1*B(Buu>@% z;d_feKwyo@;Q+Kyg!3ZvPdI3WslIGA7Fd_7I13nUk9X$_)`44RJ$KN(XE(ypJA+ogqv@1j7w(j}7iJhIQCJZ7d?9bqysFjKGjX zLTG4*%?1=V-CZJQpC*UCfRiN)2#9)0gcBShYM4jHtT*NJs(MdULd~K2eTw+O*y<<@ zaOHb(xPJmO^xp`KXSkbFkg*+g8+g^Hw7YIixJim|lwg=JQTma?IPedLak_M=>EE{^ z4_&d;`0W2M_7zZZG~Kp?6Fj&D26uNtu!P|5?i$=3f+e^^aCZxCK@!|OxLa@rcV3h4 zzxTiQ$$B@d*Gl(HH&s(za`ri=_HIZ6?1Sv8E-n{IK`w#z&RxILi`%lsno_`qe?)uzUrZ+T z5KZdlH7Nh{07+JqFa-+g&Y5nw6oLw>0O1r$g2O6@9MjoAG1Xn^g2~%w3H8-jVYd#9 zKSd_C8|p$&j|I+FwsIkRq0)NmCsC-ucM^xmW07Mx)*4hpy7df+QbiViq!H0i2Wfzq zuE29u2Yw`-@Q*h@wqba~+E_>^uoeJ)`#ZI`GQ|oi$p8Ppze*u{%Nb!I`1ygVK|x9^ z)IkK)>po!<{J?mbfh>ynJ=YPr1WU__I@Cx5B@EFwPb0E#HytLvd#Q4# zel2pA@Wjp|I7uJ9N2vrylaP-n5ej7Sr(4*qk4YDB-H%uQI~7o3^=F&zo03Eo@!1To zR+<87^(%O9kK6Lc;mML|B;osv!1r%AWK!jvkzo+bdq)TNRHUH9BrRbwl#txp-rR0x z{aI9!ob9p@KHz9`k##7Q-t5IlT&*DQ4TY045V;X(=la`u5d(RPec z^(BX}EiSocfnj6DZ@2cR*P`A0JwzKM{A8?i+*13g;QjADA(o+RXPl$Gg}&$)6PQSw z0u2coWL~zo=h#^1g0j?lk`;Y|;Qvp&OTD&eWPabZp+y=Mi5#dpb4Dv`eB0rO`3Hv( zMA77Jvlf&V+LUN%lyV+2-Gt%p+JaMp-qx0i$pbry)07(&_g8c*@hQW9-WBkK>xab4s zr?iSAOxV40*ycwr=7d9>mT&G?1Ru{%=n^#1sgZV3zsbuy9tXSqT%2I*_`bGWeIM^; zBVRCS)9ANh{LskqU^KW0b^hIWOxLXr7_3X!wx2$=o+w{89(0ImhD(Qc`0ND(3G7M} zBi#il9&5TL?SF*e^)b2f-Sh!!mh+XDM87v)Ps#F26G?If*+*Bc*FT>2kvnek@NjqD zy84|7S<7#)q7*CtwP!^6&_DnecO4L7d_KO; zq$hxG@EseZ=d-N?`2}pu=)wP`|Yfxu~#VosRJGCgh0@0mSJv50_^9@?o!ZZb_Tfcv|-t{FX8&n4Z##mlEn5Zez6jA}6SsUCTRM9&wKai+IxDacsbJf0 zvgzT-Iu^jaPn|pQ=P%&`kkAMSPL*Mxr>3XtXlSr%AAshnXU?r--iKE~1_T`0 zzo(XTCQbe~)0)4W1ZB?TT<$OaENS%+mQV96>pk zS&E3oQ`pq$Y1UZD+MMdE_@Bqp!X?BI}tY#v?GTV4(ATk%md3_JpIz} zY5$EbY4~g0h1CAVyimvW&$Fwvcj%;xk3AUryORMk(af`F8s~|-tmN_q3C*K~DAjTo|8s2Co%+H~20?=BFZn-pSHuY8M zY=hxWiaDs|EVc3B*SwQ(n@lPc*JaM}4WEPFoAJ0dcw0UGL@LV=to6_Dv&YUD^Y#ma zWASZhGvdwsF-AQ^tZ^KHU9k`Q#zKS${wLnsnP`*iAc>;MSas$wtYlp#S^c;3tH%^2 zD$NwKe}})Tw!c1aTJxOUlL$tZx-5O_iE&{V2z)=krJCw$T%5f^GKY*ifD*uVhcS!r z&o0Jdk(n)9VYJ=zwWHAvYx$O-_kDr$X>gNpD+LW>1x=@&knDvO!8FZbmUJu;_ceDs z#l_N%VZaE4S}&hR#9Iy^fdT` z3TV_?@&RA#TO8lt0x2S_W~3YZH_on7dAAA2m z`B~3{{n0w5&{^>&0d$ae2&B@M1=ucvAUYu9-P`h~@>s@Fk91;N;s-g z%9b#}EwB|yQV<(R+C%q`W7Mn>Q)<|1Sjhj8dE`2_Fga>%eeK#e;yQNmI5#Kc^!D}n z<}vxs*vDZp+T%O&-#ku@?_?Jzl)M&f0&1*pk%P+77vnTeqbz-@!)%e`Ua8>Fz5eqt z=U99_52S*FB>Wk6;2Ka}?jHmaBg)GMc{o-Fi3tcs#%2}`9Vw9J5)^UaQjRzlHVeoS zn40~1JZq!PDkE-Xt$h}_Y$ScjBh07CB$n4U1Ht`DKXHn{Qr|L3kc8n!3bS0QNCq*X zv->;e5tS$jxp-rk(#%C7dEb*J@H$GUwh zV*t?-{L|Hm&{yxf%dN=nBNNZ?j)S7-_SMb2@!vZpCj^6NB!(imw~&5|{MU9=Y3%fI z=}yEoh&c)V3Oi(K?>S+(ICF4~CHdjj30x4Bcy4aMh&4g>eRN+9H5n-6BJhdDO?;h~ ztA*i!CIKP&+>iv(sAE& zb7Znm>w4+;6df4hXS}#S16uR;OsUBcbTtx9%CW}Jmf)H$Q6)I9z3gF64*urxbq1qC zSXQ>U$3oxc%P2mSkQmp-UA?kVF2s5b}>S?38 zviYR*SDhUD82PrR5D^R$zKIJ%(Bdo)8$Um}0+R6E-Q26iIZjSi+Q{fA8HKLj0GE0n zQtZU*&owyb=aoBXhil-sm;~F=#II7UlnAxc@gu(q)4^#ndn+%p!p%OrM(=w0-A#Y= zyMFo^Q&d}q-{s3CoPz&`$$bIODk9`=Zlb>*u|NfWvTu@pRcEW3f#R)uK1;6p>wfmP z?$$A=s3;$M#l^{k-}%TK1o4Nf^%pgy%_-GEbpmp5cBCb(tzIGt1Fu6r=-sl&Yv@e3 zw>X{nJ%1US@*6&08nxaMJ^#I{48o2sfiY?(v50T7@6PT&@8rMFeItU4GfR?nMnRH1 z9Gcc3e-KC8gQ?&M(F>K%cErHD{gW5%3nY!JN4h@TKz{!G*;^C$DTA&`Mxho_Jx)#b zaNnUdR$?pg`kCjwe__dd!%Ug8S52p~{Btr40@|DuJ2MieOd`9Qo~y<>*K%@*tq}(x zCUEt7#q*#7_mMjr!m%HwJ+QBD{WTWR#a=;oUc|qd0$xlL!=KqbYxYq2RjjF0ZIrt+ zqBv$Sv*5eBBV-i?O)qpr*->&yq?-zn4A5?`A{^O0=So){iL7TAfjMf+5igK3 zy6y#X77#t|)>e5#)tJJ(j6ua(y@Nw&=arH@RF;+Xe^|38IQBs%zCWB9G&Lje-F&(F zHo(H%Ta!v!vgO6fuU_L>hEkB=MfP}T;l<&)bEs5p;VNKiq8%g;I*-A^k0uzqeMm_@t@^G}Z|L4uMX3&s zW^uetv}YSd{*Xj0`*!0sh?e5uXtEHpE2qsVXl!IcnTw4!yd@nyUm^gic~~0xbsM=O zpEA&uDC9jkQ5}Uwx<9E*S@s6m>alLYM1@gQvH6T#rJdj~dZmsZySAL0_;+(PrnO$E zV{n{Y)GcS3`P4o=lli*&x&jrf2u3&A5y-&Lx${>R%g!$Xm$-5e5&gjh9T`}f9W--c zjdTm;51&9pd`yHYonsuRGY~u}v=v%1ep)R8FN{gP{z}j2J&MGGJFI9|A1}P{hIrTO z955`1(pMnYzN=4EhU|k-m2LL(TsFza_qRg9{r#{kZ(b!b7^eoSk&AzgNH7a57hdAs zV8fVQ*6zFca4jmzC$4@lNYF96kwPNW5UhfSRi3x zZAUh6QuuO~OLO|c%8*trQAp3%^o60a6^!|ky$%1;QlkTRd0{LP+%I8*4Id^Yi%7hH0x{7JeyUNkU8g5GqC0xwN8aK7QZDA9UZ{0S9JO1szs9YUJNCkR4AkBlDjv)?dhC7BCMbQJ3Ha) zFx0_P2wo}=RzKIsFH$ff`L-xA;uI!`Hg4E4Bwm$~(1tBf;VYb2EF%e2_?I$;82V_{ zqiy2LG7_DhB-{YNeU4r1(t z!~Oa0VePn~sCbAZB_V3`P{Nx(JW=d1i9rnF0_;m`uhA$!M@N03Fi7WPE-3fl2=dRC zXc3{IRr19a&Uf(DLZS>Gq1a^#cNzO<|#EKUdsQ)rax z<*#bRjF?;6zB@?SoO^kWjg_h28c`eyF#yapRodkbKUQoEO`L&ISb$;tM+Q~|)-}7P z*23Fa7#|6P-^h?|yH#b#SN3ZJp87DAFXujQc-R0};1TZj!0QWit=J~_Zi=p8(O!L17pjK4~zYmZ;LJai~S$UC!F*Doj9MLZjts1OvLatO4;MD2IrJ-Z)E46Wj&Id*0(=LN)$p zlY&4inG%s4!^kFidx_VPF5;MgxNi`e1%zjS)PY_4%x;zxuRLji97TpXwtL3o14}HZ zQxKg9Dtn7Vd0VId0JDlw$L^<$pyJ2M-cd!clOCM99XEa0(+_3Fiu z>Jk??TmKIE+Gn_E{`u7<`iI>0SjdtqcTb2oK7IIja_v1|)EiQ~`I^_kl6i?B+9AX| z3IPSpBuhcRDe=y`b#}koFLQb{g)>Qo8zuYkePyU+LG zV{f9M&eaFtorQCQcmXn2-H3*UU?H)&0*-xW%2(e~Jwy4u^)m|UXS)R~O)YRPt(ci> z%I!}ev6P`D1$11eO9`A>p)B*S`V8gNj@o03=HXt|Q&v_Wx|Eq}dClzq7+sQzQ}y7Q zNespySWhu@_IoJ{oFcPug3Za#zYtaiC73n#QkWHY7}1`h_0+;ABj0NFx-d^(c#Zj{ z>zip#c>j=0B0R?$%!!-L@t7bj%vrUdmYGrp!;I!c$}-2~gMQHsk62XH4F+@(jC?^Y z2Ymk`c=EsIXgP>d5EJKvvoBDpl(7#_!V{j1AVE#G9FfpBg zxB2%siNWxM|NgG$Gf@aRFor>(5*2zt7`e@>(e~Agz96^tsk?ybI>3qO`#zQH3m|L9 z+<*k!7%u5WRL9hS2AuY9#7j`(7v9gCcW5^TA>)mX4G&wd{AfO#l=r(+M=dt{mBLX( zB>B{Xr{7fY3b-HBG!cHm=)fPCxfuoBPF9xN?jhD{W%sL@@4PB-u{aww*9L*wYx-s@ zV+4Q^I+TNC<%ZMO9HP{kN)`;j+|o}V`g~HPwjbm#@Cr`S-y^jfJ=q!Tnu=Y z-lT@$`U@1G@s^p90qAP&o*ykWPhBo0M@ar$@tne-_0s5nF#^6;@1GUtces=>Bx0aQwnvxn}_XvSM+ ziC9VzMUX#6lp#oXgF-R%Eqi}6xE0N&+!4>61ez?WMA=rG=y*Dx!|$Ll#)xD=%TAUY zaRXj8;__g&iVBlsvGJN6MVZS{Hje3AT3{t}Uv;E0C__se+V(;}j*`HaO-9$Qp1 zyr(1?J3Z@TU{0_P6pL-+iVD!vGB8ZDeY(U6OH|)$m)4R&aatFHhrSh}!2GV%UCf3h zW9Mgv9>N5PVc#wp=l53@tJCZ>BZq-Oub^PSrvk5L?wYE!>I3BM<87DEtQV$ZpHnK2 zNrS->%GFu5VL# ze>#3`k{57Z$J<9$9Ms6=M=@7@)>Bg3ms5)E?#mx_n6>=hwgII>f<3)(@ZX#ci zr^loF-nXCA~BF0{@Pgphyu=uX{;OY<_V zJ^V`Vjt(h^fzYu_qk$oLiii%FLS%z=c1<0W*G2-mORO|OePSR76BFXO&&Gl2?O?=& z!J6_foJCRwPrvb?6{3lgp}^Y(zP6uieSP#==wt@yScC_qy+{@Yx5)1;=}D56_54^6 zL?stUqGE$eIECrq^!!fVr}3j0{fMED-;6CX0ZE7m&M{Bb^q)_T4A2n>w|jdaS&WVT zU>Sd?V4+riipydju>?AJZS@IS+(6J%U&h-;K&1~Aw0ifuk$B-xJsJ$Ruh(w;V$0gy z?Dy|Qu$(2&gV!9`CVZ=21YRl3u2bpmLvx}2rpd{8mcNI-(Xb7*tu=~5`5$ds1XtQR zm-NPA8ZMPGsvdl~LM46mS!5kbZk@~=ti9d;+K_zK6#c?U)L92ACeoK*PBk$|LKDv} zk8c77^os)PyCKZ*Z~}GR@U()`IU7t@@Es1>@Hr-)QTeCxnoLxlfzh?RDt9-ET|WxMAKCX+qPd3I_(3y!XUb|r#)~Y+DrCGQa#E5(}nh1 z=Q5A8LbqKt_#L}f%4;Xf16u)hQp0NSASFms(U-;MdKl1-od|vA8PJY6p!~GtBI=x? zZ{*B23xgnMR^O=k1t`yin+gvzWdumC&B5spp z$FMunUu>WNMhxyOM8ETqHzF8FLV!9Xt!abxE8ZpO;+>2D{#h5R`R2PxZhwX{D8T*| z9UTaXDr5^$LV)9*a^6K*4nNHR&ul{Fzd<`ym~y zAjc>~7=^e5MgRbSfi7;*r82EU^RFE~sT|`zc$d)4by3aR309UM_+~8?rjv~$P9aP} z0nwWY3)>haSM3T8rle_j>duK*l28VWpN16Gtx1V_4qVTL%m`7Rh^ri2B z3-Qd;nGXbd^9GbX1W7gBhj=QNaL$=&5zHfnw0*2uvqPK0E8b@P1!yrT0f(6f<_*c3famptec*pK`}Uz{fd9+E-IKQC7}y>A$mY7 z8%}QHeE(z07^kwuOedw8Rk-;vdGK`%psneT@2S#S!&{Pt*)xdKFj%di+Itwf;xk)S zN-;80Juuxs#XB}D=iwDt)SyH$6m(^FQ`lNlJZK*%&WliKA4aJhf*t=FI)Ho+RYxKJ zfgxOC^Pvt~2{x9UjAr1do?|%T+b2?fb{X;s3wND{=ls5-I~I-k66}7591AADGa0Ya1qs~I23_*xo&-ShC8}Ja_exD-H#fS^fk3+j7Xv6MSKZ9C*AK}yb zxg=dpVWazuY`d!*wmO>w=Bi|m}eTgs7?^xJIAeem2SPH1f{)GW{91uOT80j$RAY+g} z*@vAXIJq31uTUYzeYcjMzt%bD46!%AGewVY-Vb(=NuW_{_q9F2PLM13p@$A~Zv#D@ z9r1h;l2vZuODt@A>$3WAtF4dd8vE|pWboz@GSKv)4KSNy;EH~T1G;7*Y{CXzA(xl7 zkDBuIOxLS`jMSRZv+9Sh*t%@aLe}cEC#F^dZRID*l$y`A5M~^(%KEK-0a$Lo@8deZ zqcx>rMQUqG3HWO#n!QUyF+VDa3EvcUQFcArcWJvNCrwP)*ND}&Ma`xaI!Hc0W&JvN zqX4)GdUW!6Ojf#a@31;4%PqC+8vF|i<1PNE4UVH9@5VroG>ugSH;3gqZiCm=TgPN5((Pbt`@2sBEB`N;MAMWj)Z`vx zQ8G1r^k~Ec)HehG(q@J(z&0VUHfhQK*$IGO9d%nuqEa;TaG zWZ@%PA=A*C*L^fJEJJ!M{(UD!4vTYKrVGHVxLqUe5<>f0I7ZfR{L(tO8k&8?Lu2+HP@X|-K$Da!OMJX->RngE0J3u*cbZ<;Du zWEK&i0`tM$g#4Q4h)56<=@PPj3b+eFuP&>9Xy#7J<(Ilpt6Z_;Qd60ywm!{#at|uP z_P6&@87P~uPo@{^qQI&Pi98$TVvJT%(SV;+&$S=n`<*_%ajY`?gVAtg0e2Cz!1{R6 z=nI#bo{2d;dX16=4CuagO1(mBW?8o@6apw7O^g9-5Tz4Qq(XwcycR?~x6Pc*H<5fz z&6}j^DE)EIlyDRmP2E>bU13uc z9&5BO>@uz{J?PMC&;uruzGzf{*lvd*E!ox$WK%Wo*1O$G(dr#<>rd{ZQ3}Nt0WGmY zAR_CsucDfww+a8Qelvthw-#mh)v(d%YS_?p2TmUdv8FS@C!*Ek+-&N!g_0%6ufrBX zBn~|~3)MODG=weQCiAAXr|Fv)41`EtpDEaInBo+Roq$$9w3x3i6-%qToH?64goyjg zdxAuLjtzX!0ASS{?2cws4(U`{15lt^)q-osZW%CK;OchCyk&tI-`FqAo`P}CR;V{t zSk@TS`BYZV)*_PgKKy-9KP}53`%#xN2tzs5(Hp<>{dW|n9Fy5-X~aiEa^^y@WNWewx{?AT(=@*ov0*aytmOBfnELu@_mlADaqO% z7$$q;0<#&xOZTLX6rZng*~Lvhcd`jb8u*Z@m0LM^OnCy>&ZJ~=VgdrZN-I=WK0eD9 zMRWiuOd#X(J9V< zUxmTAA&I_VP7}!OHj7{L96ckg-_x#NJ8<$o$&JCWZRB5AH702-QT@rGTGd{P_o4M; z-1FURhpRMJengUu7}K2Dzsi%4&Mr;qQTs_ZZ|w^Ba)&MF)usb%;J>`MoDgfuE%Xaw z>(7rqEnvCLnrV%mey7M|CUDUn&wuZ%)qqoPkY;HY*wFJE>IDvCG>*5=Bzg$l32~0! zk@``l?CV(jSP75R{SmOGx}wgQJ@Dad+B~02RH3gopeN&JS`5?rK2rB7+cMP*>-|*e zhrh7e#IOmFqXkCJ%nY|b6Vcmtt>vpo&W_KJO3m7jY5G#{no?EqwBd^8zBvQR1J{{8 zKsdbh`moh~-I$@QasXV`1-hv>^H!8d71D0X3Vx?jv1&chEfkrl-#}aBwf8X5f?`QIXgQG zv|kUL@8+WIy5WcskdRao+E`ncQ>&^I0>2}5!i*61pEffRj)N700*Ug5l#me!`KpjFHa-v%co<6x&b0Rq2f4Up!^cc~Yz6 zT$G`x+hAS0?s#sCXN#FVcv0hq{sVY50?ILhAoeP-NmQUP+FsH3U1Ymz3FJJA957|? zNTyCz_MVvRDOiaXudjSrOMsc)Ld=TiTeq5?n9wRRS9T ztA1jMpR6{nV5BykmZ^_*!7R?c-_W^Py2|Ujs%S(kmnx7{w;Utr5)veGFq)~*ZT&5> zm*kXx`|Mwru9QL!!fTCPCp@$peL574!SQ-FW*Nzh4n%TN|HI512eLxx92 zi=MK5KfPDa!5TB0){lA`I_XGReK?9D^*xF0xX~BdBB{d?rNa?}Y7*5fuzanNL_adq zhEytjOgt-}CC!TNOjA1_VHM+k^x$y>Nsc<+gZKY%eNdH|wd8c;JJq?bsgmjptVcfA z8Oo?u?PjvZzB+EHIBXjd zsCzbrAJHxxQl)j|KF_W$9@r`5mxX;^ybJ}#jfBLnoB876vCG;=afBuvPyu)-;fUoL zc2FOlRtKk7Ka$>7X1G#sCMjXc?|M}b&cEYvh{k(*7CuI`mekjq$#Jj2e5CaGcFfI% zO+~fL`8de*GfxD}g(B#*$52?3PV^q(tTgS5wD%1oY$!eslrVg}mV;<0lo}5YK)1Kz zXW_PCqBMkm9V0(V`FUQ-nIYD3v4utNk^Oxf_2>CdRX>o&9=1-oK@z@>XWjKSLhgIj z$8j>Lb+>taMkPgTK@fH0y74=!nXf%7~<$ATeOtrd%mmZc2$h(zm)t4F)wD_Rt z?L$EMa3c0bv_-m);4Yoige23`o1e(wo=rVJie4{z=I*IFH}NW>!d4NsM*C_(qDlt9 zZ${7h89XH3wJF7lzkzhs(w!Aae>gs|o(nf-|MPJP1d~mq@uQny*eg_sD0ppLF=_&} z(&01F8X}Pq+1juCukZ^kl`bF~{pI%i>*o{m=b>+Z|It>H{G6he=98L?e#CdteWW@nGY1cJ_yg34&DDXgP!sAqXwI zKV#YKUc1E+nF|k@MRIg;a7Y%WZM{b{T)P_{mYJlCdFyO{z+k>|d-mnaH|Z0-Y1g)< zz=XvlS@u0bT~t=PF777#S*^$g?TJZSpa-=t3=A3lwDjfz+mYfO_9k$0@$qfXSKla4 zMRf286_EESj~CA$6--ktHWh0iZ%F9^Q`Foqdl>OhR$p%JUU9m`4nKcm;Z$5xZeE=$ zPZRv{j$$||>8d}FP~X>x(wBU0%$#dsVe^dT*M0|8e!riAiLGm_O1k4_rs#Pc!RNWp z@0k%8*q`5}p_3v3?sho)y3w&}Yfkg4SGoN)Fd!pKy0Zc^=vyO=U_f(kXa_|;M1g(? zN%*MC|Km}93A*5nt8bQSZD}EtiE3V!yXM!YDNcov8hIbTT|2+?UV@JSx-5s;iD5tx zv9k_!aq>p@6PJ~Zm~`6+r>NJ^apeNOl0ar|xq;deb=m&_7<~ho)V5la;oO(_v z$E%yrh87K-6rAOQVfxi85rv!Iyp!?0{RLRA7Z~41*zjOkJ*aFWvVdZQ-#H2-v-Bxy zVoZYQ0uL1QGVzp3yl+wA+*CS66BBkdBouOdHC=Jtawy#@8~Ye!XOz@|MFO?c9;S;} z0@{z8pBqgaK{$zys=(o*ij__p(VraV(~rV__OI2oV!Nql-KhVAJcU9&BKSX>{+4vz zw9ShC28_Yg(Xh9#Y7Y`XQjq@;g{+ZjT$v9U7&OHTKa@EUrDsO`UR?}H zsLLw~X#s2)2dEHaI5ELO35?=zdLN#9&gb7 zuEQaV19j#{`_B)g2n5f)K!9B&E5jKU52a^R4jCL~{oT1b*V;%!2^-7^15#T*jzToegy�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 Dc>OlG From edf0407db786c783b27703b845355732b047ecda Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Wed, 11 Sep 2024 17:28:12 +0200 Subject: [PATCH 30/32] Fix crash Thanks to Ruslan! --- src/core/modules/SolarSystem.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index a8b94ddc01592..3b4d15918a0c5 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1561,7 +1561,7 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the // used ephemerides already provide aberration-corrected positions for the Moon? - auto planetPos = p->getHeliocentricEclipticPos(); + Vec3d planetPos = p->getHeliocentricEclipticPos(); double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); const bool needToApplyAberration = withAberration && (!observerIsEarth || p != getMoon()); Vec3d aberrationPush(0.); @@ -1599,7 +1599,7 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); // Threadable loop function for self-set number of additional worker threads - const auto loop = [&planets=systemPlanets,processPlanet, + const auto loop = [&planets=std::as_const(systemPlanets),processPlanet, observerPosFinal](const int indexMin, const int indexMax) { for(int i = indexMin; i <= indexMax; ++i) From 9c8a7575be24bb1b91c49b7bfc71c682700cd970 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sun, 15 Sep 2024 10:58:28 +0200 Subject: [PATCH 31/32] Restore all 4 solutions for comparison Use config.ini:[devel]/compute_positions_algorithm (default:2): 0=old single-threaded 3-loop solution 1=first QtConcurrent::blockingMap() 3-loop solution 2=strided manual multithreading 3-loop solution 3=blocked manual multithreading 1-loop solution Solution 3 would be fastest, but has problems for moons, where position depends on the parent planet's positions which may not have been computed yet. --- src/core/modules/SolarSystem.cpp | 352 +++++++++++++++++++++++++------ src/core/modules/SolarSystem.hpp | 7 + 2 files changed, 298 insertions(+), 61 deletions(-) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index 3b4d15918a0c5..d7c90606b07e1 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -126,6 +126,7 @@ SolarSystem::SolarSystem() : StelObjectModule() , vao(new QOpenGLVertexArrayObject) , vbo(new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer)) , markerMagThreshold(15.) + , computePositionsAlgorithm(conf->value("devel/compute_positions_algorithm", 2).toInt()) { planetNameFont.setPixelSize(StelApp::getInstance().getScreenFontSize()); connect(&StelApp::getInstance(), SIGNAL(screenFontSizeChanged(int)), this, SLOT(setFontSize(int))); @@ -1543,88 +1544,317 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser if (flagLightTravelTime) // switching off light time correction implies no aberration for the planets. { - // Position of this planet will be used in the subsequent computations - observerPlanet->computePosition(obs, dateJDE, Vec3d(0.)); - const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); - const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); - const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - const double dateJD = dateJDE - (core->computeDeltaT(dateJDE))/86400.0; + const StelObserver *obs=core->getCurrentObserver(); + const bool observerPlanetIsEarth = observerPlanet==getEarth(); + //static StelObjectMgr* omgr=GETSTELMODULE(StelObjectMgr); + //omgr->removeExtraInfoStrings(StelObject::DebugAid); - const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, - obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p, const Vec3d& observerPosFinal) + switch (computePositionsAlgorithm) + { + case 3: // Ruslan's 1-loop solution. This would be faster, but has problems with moons when the respective planet has not been computed yet. { + // Position of this planet will be used in the subsequent computations + observerPlanet->computePosition(obs, dateJDE, Vec3d(0.)); + const bool observerIsEarth = observerPlanet->englishName==L1S("Earth"); + const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); + const double dateJD = dateJDE - (core->computeDeltaT(dateJDE))/86400.0; + + const auto processPlanet = [this,dateJD,dateJDE,observerIsEarth,withAberration,observerPlanet, + obsPosJDE,aberrationPushSpeed,obs](const PlanetP& p, const Vec3d& observerPosFinal) + { + // 1. First approximation. + p->computePosition(obs, dateJDE, Vec3d(0.)); + + // For higher accuracy, we now make two iterations of light time and aberration correction. In the final + // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply + // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See + // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the + // used ephemerides already provide aberration-corrected positions for the Moon? + Vec3d planetPos = p->getHeliocentricEclipticPos(); + double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + const bool needToApplyAberration = withAberration && (!observerIsEarth || p != getMoon()); + Vec3d aberrationPush(0.); + if(needToApplyAberration) + aberrationPush=lightTimeDays*aberrationPushSpeed; + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + + // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? + planetPos = p->getHeliocentricEclipticPos(); + lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + if(needToApplyAberration) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + + const auto update = &RotationElements::updatePlanetCorrections; + if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + + if(p != observerPlanet) + { + const double light_speed_correction = (AU / (SPEED_OF_LIGHT * 86400)) * + (p->getHeliocentricEclipticPos()-obsPosJDE).norm(); + p->computeTransMatrix(dateJD-light_speed_correction, dateJDE-light_speed_correction); + } + }; + + // This will be used for computation of transformation matrices + processPlanet(observerPlanet, Vec3d(0.)); + observerPlanet->computeTransMatrix(dateJD, dateJDE); + const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); + + // Threadable loop function for self-set number of additional worker threads + const auto loop = [&planets=std::as_const(systemPlanets),processPlanet, + observerPosFinal](const int indexMin, const int indexMax) + { + for(int i = indexMin; i <= indexMax; ++i) + processPlanet(planets[i], observerPosFinal); + }; + + QList> futures; + const int totalThreads = extraThreads+1; + const auto blockSize = systemPlanets.size() / totalThreads; + for(int threadN=0; threadNcomputePosition(obs, dateJDE, Vec3d(0.)); + QList> futures; + // This defines a function to be thrown onto a pool thread that computes every 'incr'th element. + auto plCompLoopZero = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->computePosition(obs, dateJDE, Vec3d(0.)); + } + }; - // For higher accuracy, we now make two iterations of light time and aberration correction. In the final + // Move to external threads, but also run a part in the main thread. The index 'availableThreads' is just the last group of objects. + for (int stride=0; stridegetHeliocentricEclipticPos(); + + // 2.&3.: For higher accuracy, we now make two iterations of light time and aberration correction. In the final // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the // used ephemerides already provide aberration-corrected positions for the Moon? - Vec3d planetPos = p->getHeliocentricEclipticPos(); - double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - const bool needToApplyAberration = withAberration && (!observerIsEarth || p != getMoon()); - Vec3d aberrationPush(0.); - if(needToApplyAberration) - aberrationPush=lightTimeDays*aberrationPushSpeed; - p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); - // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? - planetPos = p->getHeliocentricEclipticPos(); - lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); - if(needToApplyAberration) - aberrationPush=lightTimeDays*aberrationPushSpeed; - // The next call may already do nothing if the time difference to the previous round is not large enough. - p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); - - const auto update = &RotationElements::updatePlanetCorrections; - if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); - else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); - else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); - else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); - else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); - else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); - - if(p != observerPlanet) + auto plCompLoopOne = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) + aberrationPush=lightTimeDays*aberrationPushSpeed; + it->data()->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + } + }; + for (int stride=0; stridegetHeliocentricEclipticPos()-obsPosJDE).norm(); - p->computeTransMatrix(dateJD-light_speed_correction, dateJDE-light_speed_correction); + auto future=QtConcurrent::run(plCompLoopOne, stride); + futures.append(future); } - }; + plCompLoopOne(extraThreads); // main thread's share of the computation task + // Now the list is being computed by other threads. we can just wait sequentially for completion. + for(auto f: futures) + f.waitForFinished(); + futures.clear(); + + // 3. Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? + auto plCompLoopTwo = [=](int offset){ + for (auto it=systemPlanets.cbegin()+offset, end=systemPlanets.cend(); itdata()->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (!observerPlanetIsEarth || it->data() != getMoon())) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + it->data()->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + //it->data()->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") + // .arg(QString::number(lightTimeDays, 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); + + const auto update = &RotationElements::updatePlanetCorrections; + if (it->data()->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (it->data()->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (it->data()->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (it->data()->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (it->data()->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (it->data()->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + } + }; + for (int stride=0; strideaddToExtraInfoString(StelObject::DebugAid, QString("Threads: Ideal: %1, Pool max %2/active %3, SolarSystem using %4
      "). + // arg(QString::number(QThread::idealThreadCount()), + // QString::number(QThreadPool::globalInstance()->maxThreadCount()), + // QString::number(QThreadPool::globalInstance()->activeThreadCount()), + // QString::number(extraThreads))); + // and we still run the last stride in the main thread. + plCompLoopTwo(extraThreads); + // Now the list is being computed by other threads. we can just wait sequentially for completion. + for(auto f: futures) + f.waitForFinished(); + } + break; + case 1: // Simple multithreading with QtConcurrent::blockingMap(). 3-loop solution. This is closely following the original solution: + { + // First, compute approximate positions at JDE. + // Then for each object, compute light time and repeat light-time corrected. + // Third, check new light time, and recompute if needed. - // This will be used for computation of transformation matrices - processPlanet(observerPlanet, Vec3d(0.)); - observerPlanet->computeTransMatrix(dateJD, dateJDE); - const Vec3d observerPosFinal = observerPlanet->getHeliocentricEclipticPos(); + // 1. First approximation. + auto plCompPosJDEZero = [=](QSharedPointer &pl){pl->computePosition(obs, dateJDE, Vec3d(0.));}; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDEZero); - // Threadable loop function for self-set number of additional worker threads - const auto loop = [&planets=std::as_const(systemPlanets),processPlanet, - observerPosFinal](const int indexMin, const int indexMax) - { - for(int i = indexMin; i <= indexMax; ++i) - processPlanet(planets[i], observerPosFinal); - }; + const Vec3d &obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); - QList> futures; - const int totalThreads = extraThreads+1; - const auto blockSize = systemPlanets.size() / totalThreads; - for(int threadN=0; threadNgetHeliocentricEclipticVelocity() * core->getAberrationFactor(); + + auto plCompPosJDEOne = [=](QSharedPointer &p){ + const Vec3d planetPos = p->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (!observerPlanetIsEarth || p != getMoon() )) + aberrationPush=lightTimeDays*aberrationPushSpeed; + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + }; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDEOne); + + // 3. Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? + auto plCompPosJDETwo = [=](QSharedPointer &p){ + const Vec3d planetPos = p->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (!observerPlanetIsEarth || p != getMoon() )) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + //p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") + // .arg(QString::number(lightTimeDays, 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[1], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[2], 'f', 3))); + + const auto update = &RotationElements::updatePlanetCorrections; + if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + }; + QtConcurrent::blockingMap(systemPlanets, plCompPosJDETwo); + } + break; + case 0: + default: // Original single-threaded. { - const int indexMin = blockSize*threadN; - const int indexMax = blockSize*(threadN+1)-1; - futures.append(QtConcurrent::run(loop, indexMin,indexMax)); + // First, compute approximate positions at JDE. + // Then for each object, compute light time and repeat light-time corrected. + // Third, check new light time, and recompute if needed. + + for (const auto& p : std::as_const(systemPlanets)) + { + p->computePosition(obs, dateJDE, Vec3d(0.)); + } + const Vec3d obsPosJDE=observerPlanet->getHeliocentricEclipticPos(); + + // For higher accuracy, we now make two iterations of light time and aberration correction. In the final + // round, we also compute rotation data. May fix sub-arcsecond inaccuracies, and optionally apply + // aberration in the way described in Explanatory Supplement (2013), 7.55. For reasons unknown (See + // discussion in GH:#1626) we do not add anything for the Moon when observed from Earth! Presumably the + // used ephemerides already provide aberration-corrected positions for the Moon? + const Vec3d aberrationPushSpeed=observerPlanet->getHeliocentricEclipticVelocity() * core->getAberrationFactor(); + for (const auto& p : std::as_const(systemPlanets)) + { + //p->setExtraInfoString(StelObject::DebugAid, ""); + const auto planetPos = p->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (observerPlanet->englishName!=L1S("Earth") || p->englishName!=L1S("Moon"))) + aberrationPush=lightTimeDays*aberrationPushSpeed; + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + } + // Extra accuracy with another round. Not sure if useful. Maybe hide behind a new property flag? + for (const auto& p : std::as_const(systemPlanets)) + { + //p->setExtraInfoString(StelObject::DebugAid, ""); + const auto planetPos = p->getHeliocentricEclipticPos(); + const double lightTimeDays = (planetPos-obsPosJDE).norm() * (AU / (SPEED_OF_LIGHT * 86400.)); + Vec3d aberrationPush(0.); + if (withAberration && (observerPlanet->englishName!=L1S("Earth") || p->englishName!=L1S("Moon"))) + aberrationPush=lightTimeDays*aberrationPushSpeed; + // The next call may already do nothing if the time difference to the previous round is not large enough. + p->computePosition(obs, dateJDE-lightTimeDays, aberrationPush); + //p->setExtraInfoString(StelObject::DebugAid, QString("LightTime %1d; obsSpeed %2/%3/%4 AU/d") + // .arg(QString::number(lightTimeDays, 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3)) + // .arg(QString::number(aberrationPushSpeed[0], 'f', 3))); + + const auto update = &RotationElements::updatePlanetCorrections; + if (p->englishName==L1S("Moon")) update(dateJDE-lightTimeDays, RotationElements::EarthMoon); + else if (p->englishName==L1S("Mars")) update(dateJDE-lightTimeDays, RotationElements::Mars); + else if (p->englishName==L1S("Jupiter")) update(dateJDE-lightTimeDays, RotationElements::Jupiter); + else if (p->englishName==L1S("Saturn")) update(dateJDE-lightTimeDays, RotationElements::Saturn); + else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); + else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); + } + } // end of default (original single-threaded) solution + } - // and the last thread is the current one - loop(blockSize*(totalThreads-1), systemPlanets.size()-1); - for(auto& f : futures) - f.waitForFinished(); } else { for (const auto& p : std::as_const(systemPlanets)) { - p->setExtraInfoString(StelObject::DebugAid, ""); + //p->setExtraInfoString(StelObject::DebugAid, ""); p->computePosition(obs, dateJDE, Vec3d(0.)); const auto update = &RotationElements::updatePlanetCorrections; if (p->englishName==L1S("Moon")) update(dateJDE, RotationElements::EarthMoon); diff --git a/src/core/modules/SolarSystem.hpp b/src/core/modules/SolarSystem.hpp index 0c87ef0f0618e..61e438cd9dde9 100644 --- a/src/core/modules/SolarSystem.hpp +++ b/src/core/modules/SolarSystem.hpp @@ -1246,6 +1246,13 @@ private slots: private: //! absolute value of the dimmest SSO drawn by drawAsteroidMarker() double markerMagThreshold; + //! Preliminary experimental select-per-config.ini. + //! 0: original single-threaded 3 loops + //! 1: blockingMap + //! 2: strided pool threads plus main thread + //! 3: Ruslan's 1-pass loop (suspected to have a logical error.) + //! To configure the experimental new solution, add [devel]/compute_positions_algorithm=0|1|2|3. Default=2 + int computePositionsAlgorithm; // END OF BLOCK RELATED TO MASS MARKER DISPLAY }; From 320b184a72e2f8855cae9bdf490ca29b1694fd55 Mon Sep 17 00:00:00 2001 From: Georg Zotti Date: Sun, 15 Sep 2024 21:51:11 +0200 Subject: [PATCH 32/32] Restore transformation matrix application in the conservative solutions --- src/core/modules/SolarSystem.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core/modules/SolarSystem.cpp b/src/core/modules/SolarSystem.cpp index d7c90606b07e1..0e8a6f104be18 100644 --- a/src/core/modules/SolarSystem.cpp +++ b/src/core/modules/SolarSystem.cpp @@ -1735,6 +1735,7 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser // Now the list is being computed by other threads. we can just wait sequentially for completion. for(auto f: futures) f.waitForFinished(); + computeTransMatrices(dateJDE, observerPlanet->getHeliocentricEclipticPos()); } break; case 1: // Simple multithreading with QtConcurrent::blockingMap(). 3-loop solution. This is closely following the original solution: @@ -1790,6 +1791,7 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); }; QtConcurrent::blockingMap(systemPlanets, plCompPosJDETwo); + computeTransMatrices(dateJDE, observerPlanet->getHeliocentricEclipticPos()); } break; case 0: @@ -1846,6 +1848,7 @@ void SolarSystem::computePositions(StelCore *core, double dateJDE, PlanetP obser else if (p->englishName==L1S("Uranus")) update(dateJDE-lightTimeDays, RotationElements::Uranus); else if (p->englishName==L1S("Neptune")) update(dateJDE-lightTimeDays, RotationElements::Neptune); } + computeTransMatrices(dateJDE, observerPlanet->getHeliocentricEclipticPos()); } // end of default (original single-threaded) solution }