@@ -145,25 +145,30 @@ bool Sky::init()
145145 {
146146 if (selection >= skyListNameStart)
147147 {
148- m_mode = TEXTURE ;
149148 setSkyEntry (m_skies[selection - skyListNameStart]);
150149 }
151150 else if (selection == 0 )
152151 {
153152 setSkyDisabled ();
154153 }
155154 else if (selection == 1 )
156- {
157- setSkyAuto ();
158- }
159- else if (selection == 2 )
160155 {
161156 setSkyEphemeris ();
162157 } });
163158
164159 skyPath = configString (" sky" , " skyDir" , " /data/Geodata/sky" )->value ();
165160 loadSkies ();
166161
162+ autoSkyButton = new ui::Button (skyGroup, " autoSky" );
163+ autoSkyButton->setText (" Auto Sky" );
164+ autoSkyButton->setState (false );
165+ autoSkyButton->setCallback ([this ](bool state)
166+ {
167+ if (state)
168+ setSkyAuto ();
169+ else
170+ m_mode = TEXTURE ; });
171+
167172 northAngle = 0 ;
168173 update ();
169174
@@ -315,7 +320,6 @@ void Sky::updateSkyMenu()
315320
316321 std::vector<std::string> skyNames = {
317322 " None" ,
318- " Auto" ,
319323#ifdef HAVE_EPHEMERIS
320324 " Ephemeris" ,
321325#endif
@@ -371,6 +375,7 @@ void Sky::setSky(std::string_view nameOrFile)
371375void Sky::setSkyDisabled ()
372376{
373377 m_mode = DISABLED ;
378+ autoSkyButton->setState (false );
374379 removeExistingSky ();
375380}
376381
@@ -379,6 +384,7 @@ void Sky::setSkyEphemeris()
379384#ifdef HAVE_EPHEMERIS
380385 removeExistingSky ();
381386 m_mode = EPHEMERIS ;
387+ autoSkyButton->setState (false );
382388 m_ephemeralSky = std::make_unique<EphemeralSky>(skyGroup, skyRootNode);
383389#else
384390 std::cerr << " Cannot switch to Ephemeris sky, compiled without osgEphemeris. Disabling sky." << std::endl;
@@ -389,6 +395,7 @@ void Sky::setSkyEphemeris()
389395void Sky::setSkyAuto ()
390396{
391397 m_mode = AUTO ;
398+ autoSkyButton->setState (true );
392399 m_currentAutoSky = nullptr ;
393400 updateAutoSky ();
394401}
@@ -495,17 +502,17 @@ void Sky::updateAutoSky()
495502 double lon = globalPosition.x ();
496503 double lat = globalPosition.y ();
497504
498- const auto dist2 = [](const SkyEntry* s, double lon, double lat)
505+ const auto dist2 = [](const SkyEntry * s, double lon, double lat)
499506 {
500507 const double dx = s->longitude - lon;
501508 const double dy = s->latitude - lat;
502- return dx* dx + dy* dy;
509+ return dx * dx + dy * dy;
503510 };
504511
505512 const double currentDistSq = dist2 (m_currentAutoSky, lon, lat);
506- const double closestDistSq = dist2 (closestSky, lon, lat);
513+ const double closestDistSq = dist2 (closestSky, lon, lat);
507514
508- constexpr double SKY_THRESHOLD = 1e-4 ; // roughly 1 km
515+ constexpr double SKY_THRESHOLD = 1e-4 ; // roughly 1 km
509516
510517 if (closestSky != m_currentAutoSky && ((currentDistSq - closestDistSq) > SKY_THRESHOLD ))
511518 {
0 commit comments