Stellarium 0.15.0
SolarSystem.hpp
1 /*
2  * Stellarium
3  * Copyright (C) 2002 Fabien Chereau
4  * Copyright (c) 2010 Bogdan Marinov
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
19  */
20 
21 #ifndef _SOLARSYSTEM_HPP_
22 #define _SOLARSYSTEM_HPP_
23 //sun is already defined in Sun C/Solaris
24 #if defined(sun)
25 #undef sun
26 #endif
27 
28 #include "StelObjectModule.hpp"
29 #include "StelTextureTypes.hpp"
30 #include "Planet.hpp"
31 #include "StelGui.hpp"
32 
33 #include <QFont>
34 
35 class Orbit;
36 class StelTranslator;
37 class StelObject;
38 class StelCore;
39 class StelProjector;
40 class QSettings;
41 
42 typedef QSharedPointer<Planet> PlanetP;
43 
48 {
49  Q_OBJECT
50  Q_PROPERTY(bool labelsDisplayed // This is a "forwarding property" which sets labeling into all planets.
51  READ getFlagLabels
52  WRITE setFlagLabels
53  NOTIFY labelsDisplayedChanged)
54  Q_PROPERTY(bool flagOrbits // was bool orbitsDisplayed
55  READ getFlagOrbits
56  WRITE setFlagOrbits
57  NOTIFY flagOrbitsChanged)
58  Q_PROPERTY(bool trailsDisplayed
59  READ getFlagTrails
60  WRITE setFlagTrails
61  NOTIFY trailsDisplayedChanged)
62  Q_PROPERTY(bool flagHints // was bool hintsDisplayed. This is a "forwarding property" only, without own variable.
63  READ getFlagHints
64  WRITE setFlagHints
65  NOTIFY flagHintsChanged)
66  Q_PROPERTY(bool flagPointer // was bool pointersDisplayed
67  READ getFlagPointer
68  WRITE setFlagPointer
69  NOTIFY flagPointerChanged)
70  Q_PROPERTY(bool flagNativeNames // was bool nativeNamesDisplayed
72  WRITE setFlagNativeNames
73  NOTIFY flagNativeNamesChanged)
74  Q_PROPERTY(bool flagTranslatedNames
77  NOTIFY flagTranslatedNamesChanged)
78 
79  //StelProperties
80  Q_PROPERTY(bool planetsDisplayed
81  READ getFlagPlanets
82  WRITE setFlagPlanets
83  NOTIFY flagPlanetsDisplayedChanged
84  )
85  Q_PROPERTY(bool flagIsolatedOrbits
88  NOTIFY flagIsolatedOrbitsChanged
89  )
90  Q_PROPERTY(bool flagIsolatedTrails
93  NOTIFY flagIsolatedTrailsChanged
94  )
95  Q_PROPERTY(bool flagLightTravelTime
98  NOTIFY flagLightTravelTimeChanged
99  )
100  Q_PROPERTY(bool flagMoonScale
101  READ getFlagMoonScale
102  WRITE setFlagMoonScale
103  NOTIFY flagMoonScaleChanged
104  )
105  Q_PROPERTY(double moonScale
106  READ getMoonScale
107  WRITE setMoonScale
108  NOTIFY moonScaleChanged
109  )
110  Q_PROPERTY(double labelsAmount
111  READ getLabelsAmount
112  WRITE setLabelsAmount
113  NOTIFY labelsAmountChanged
114  )
115  Q_PROPERTY(bool ephemerisMarkersDisplayed
116  READ getFlagEphemerisMarkers
117  WRITE setFlagEphemerisMarkers
118  NOTIFY ephemerisMarkersChanged
119  )
120  Q_PROPERTY(bool ephemerisDatesDisplayed
121  READ getFlagEphemerisDates
122  WRITE setFlagEphemerisDates
123  NOTIFY ephemerisDatesChanged
124  )
125 
126 public:
127  SolarSystem();
128  virtual ~SolarSystem();
129 
131  // Methods defined in the StelModule class
137  virtual void init();
138 
139  virtual void deinit();
140 
145  virtual void draw(StelCore *core);
146 
149  virtual void update(double deltaTime);
150 
152  virtual double getCallOrder(StelModuleActionName actionName) const;
153 
155  // Methods defined in StelObjectManager class
164  virtual QList<StelObjectP> searchAround(const Vec3d& v, double limitFov, const StelCore* core) const;
165 
169  virtual StelObjectP searchByNameI18n(const QString& nameI18n) const;
170 
174  virtual StelObjectP searchByName(const QString& name) const;
175 
176  virtual QStringList listAllObjects(bool inEnglish) const;
177  virtual QStringList listAllObjectsByType(const QString& objType, bool inEnglish) const;
178  virtual QString getName() const { return "Solar System"; }
179 
180 public slots:
182  // Method callable from script and GUI
183  // Properties setters and getters
185  void setFlagPlanets(bool b);
187  bool getFlagPlanets() const;
188 
190  void setFlagTrails(bool b);
192  bool getFlagTrails() const;
193 
195  void setFlagHints(bool b);
197  bool getFlagHints() const;
198 
200  void setFlagLabels(bool b);
202  bool getFlagLabels() const;
203 
207  void setLabelsAmount(double a) {if(a!=labelsAmount) {labelsAmount=a; emit labelsAmountChanged(a);}}
210  double getLabelsAmount(void) const {return labelsAmount;}
211 
213  void setFlagOrbits(bool b);
215  bool getFlagOrbits() const {return flagOrbits;}
216 
218  void setFlagPointer(bool b) { if (b!=flagPointer) { flagPointer=b; emit flagPointerChanged(b); }}
220  bool getFlagPointer() const { return flagPointer;}
221 
223  void setFlagLightTravelTime(bool b);
226  bool getFlagLightTravelTime(void) const {return flagLightTravelTime;}
227 
230  void setFontSize(float newFontSize);
231 
238  void setLabelsColor(const Vec3f& c);
241  const Vec3f& getLabelsColor(void) const;
242 
249  void setOrbitsColor(const Vec3f& c);
252  Vec3f getOrbitsColor(void) const;
253 
260  void setTrailsColor(const Vec3f& c) {trailColor=c;}
263  Vec3f getTrailsColor() const {return trailColor;}
264 
271  void setPointerColor(const Vec3f& c) {pointerColor=c;}
274  Vec3f getPointerColor() const {return pointerColor;}
275 
277  void setFlagMoonScale(bool b);
279  bool getFlagMoonScale(void) const {return flagMoonScale;}
280 
282  void setMoonScale(double f);
284  double getMoonScale(void) const {return moonScale;}
285 
287  void updateI18n();
288 
293  float getPlanetVMagnitude(QString planetName, bool withExtinction=false) const;
294 
298  QString getPlanetType(QString planetName) const;
299 
303  double getDistanceToPlanet(QString planetName) const;
304 
308  double getElongationForPlanet(QString planetName) const;
309 
313  double getPhaseAngleForPlanet(QString planetName) const;
314 
318  float getPhaseForPlanet(QString planetName) const;
319 
333  void setApparentMagnitudeAlgorithmOnEarth(QString algorithm);
334 
337  QString getApparentMagnitudeAlgorithmOnEarth() const;
338 
340  void setFlagNativeNames(bool b);
342  bool getFlagNativeNames(void) const;
343 
345  void setFlagTranslatedNames(bool b);
347  bool getFlagTranslatedNames(void) const;
348 
350  void setFlagIsolatedTrails(bool b);
352  bool getFlagIsolatedTrails(void) const;
353 
355  void setFlagIsolatedOrbits(bool b);
357  bool getFlagIsolatedOrbits(void) const;
358 
360  void setFlagCustomGrsSettings(bool b);
363 
366  void setCustomGrsLongitude(int longitude);
369  int getCustomGrsLongitude();
370 
373  void setCustomGrsDrift(double drift);
375  double getCustomGrsDrift();
376 
379  void setCustomGrsJD(double JD);
381  double getCustomGrsJD();
382 signals:
383  void labelsDisplayedChanged(bool b);
384  void flagOrbitsChanged(bool b);
385  void flagHintsChanged(bool b);
386  void trailsDisplayedChanged(bool b);
387  void flagPointerChanged(bool b);
388  void flagNativeNamesChanged(bool b);
389  void flagTranslatedNamesChanged(bool b);
390  void flagPlanetsDisplayedChanged(bool b);
391  void flagIsolatedOrbitsChanged(bool b);
392  void flagIsolatedTrailsChanged(bool b);
393  void flagLightTravelTimeChanged(bool b);
394  void flagMoonScaleChanged(bool b);
395  void moonScaleChanged(double f);
396  void labelsAmountChanged(double f);
397  void ephemerisMarkersChanged(bool b);
398  void ephemerisDatesChanged(bool b);
399 
400 public:
402  // Other public methods
406  PlanetP searchByEnglishName(QString planetEnglishName) const;
407 
409  PlanetP getSun() const {return sun;}
410 
412  PlanetP getEarth() const {return earth;}
413 
415  PlanetP getMoon() const {return moon;}
416 
418  bool nearLunarEclipse();
419 
421  QStringList getAllPlanetEnglishNames() const;
422 
424  QStringList getAllPlanetLocalizedNames() const;
425 
427  void reloadPlanets();
428 
430  double getEclipseFactor(const StelCore *core) const;
431 
435  void computePositions(double dateJDE, const Vec3d& observerPos = Vec3d(0.));
436 
438  const QList<PlanetP>& getAllPlanets() const {return systemPlanets;}
439 
440 private slots:
442  void selectedObjectChange(StelModule::StelModuleSelectAction action);
443 
447  void updateSkyCulture(const QString& skyCultureDir);
448 
449  void setFlagEphemerisMarkers(bool b);
450  bool getFlagEphemerisMarkers() const;
451 
452  void setFlagEphemerisDates(bool b);
453  bool getFlagEphemerisDates() const;
454 
455 private:
461  StelObjectP search(Vec3d v, const StelCore* core) const;
462 
465  void computeTransMatrices(double dateJDE, const Vec3d& observerPos = Vec3d(0.));
466 
468  void drawPointer(const StelCore* core);
469 
474  void loadPlanets();
475 
477  bool loadPlanets(const QString& filePath);
478 
479  void recreateTrails();
480 
482  void setFlagPermanentOrbits(bool b);
483 
485  int shadowPlanetCount;
486  PlanetP sun;
487  PlanetP moon;
488  PlanetP earth;
489 
492  void setSelected(const QString& englishName);
494  void setSelected(PlanetP obj);
496  PlanetP getSelected(void) const {return selected;}
498  PlanetP selected;
499 
500  // Moon scale value
501  bool flagMoonScale;
502  double moonScale;
503 
504  QFont planetNameFont;
505 
507  double labelsAmount;
508 
510  QList<PlanetP> systemPlanets;
511 
512  // Master settings
513  bool flagOrbits;
514  bool flagLightTravelTime;
515 
517  StelTextureSP texPointer;
518  StelTextureSP texCircle; // The symbolic circle texture
519 
520  bool flagShow;
521  bool flagPointer; // show red cross selection pointer?
522  bool flagNativeNames; // show native names?
523  bool flagTranslatedNames; // show translated names?
524  bool flagIsolatedTrails;
525  bool flagIsolatedOrbits;
526  bool ephemerisMarkersDisplayed;
527  bool ephemerisDatesDisplayed;
528 
529  class TrailGroup* allTrails;
530  StelGui* gui;
531  QSettings* conf;
532  LinearFader trailFader;
533  Vec3f trailColor;
534  Vec3f pointerColor;
535 
536  QHash<QString, QString> planetNativeNamesMap;
537 
538  QList<Orbit*> orbits; // Pointers on created elliptical orbits
539 };
540 
541 
542 #endif // _SOLARSYSTEM_HPP_
double getElongationForPlanet(QString planetName) const
Get elongation for Solar system bodies from scripts.
void setPointerColor(const Vec3f &c)
Set the color used to draw planet pointers.
float getPhaseForPlanet(QString planetName) const
Get phase for Solar system bodies from scripts.
bool getFlagTranslatedNames(void) const
Get the current value of the flag which enables showing translated names for planets or not...
Definition: Orbit.hpp:22
virtual void update(double deltaTime)
Update time-varying components.
QStringList getAllPlanetEnglishNames() const
Get the list of all the planet english names.
void setFlagOrbits(bool b)
Set flag which determines if planet orbits are drawn or hidden.
bool getFlagMoonScale(void) const
Get the current value of the flag which determines if Earth's moon is scaled or not.
QString getApparentMagnitudeAlgorithmOnEarth() const
Get the algorithm used for computation of apparent magnitudes for planets in case observer on the Ear...
virtual double getCallOrder(StelModuleActionName actionName) const
Used to determine what order to draw the various StelModules.
void setFlagMoonScale(bool b)
Set flag which determines if Earth's moon is scaled or not.
Vec3f getPointerColor() const
Get the current color used to draw planet pointers.
void setFlagIsolatedOrbits(bool b)
Set flag which enabled the showing of isolated orbits for selected objects only or not...
PlanetP getSun() const
Get the Planet object pointer for the Sun.
PlanetP getEarth() const
Get the Planet object pointer for the Earth.
Class used to translate strings to any language.
Implementation of StelFader which implements a linear transition.
Definition: StelFader.hpp:77
double getCustomGrsDrift()
Get speed of annual drift for Great Red Spot (System II is used)
double getLabelsAmount(void) const
Get the amount of planet labels.
The base abstract class for sky objects used in Stellarium like Stars, Planets, Constellations etc...
Definition: StelObject.hpp:36
void reloadPlanets()
Reload the planets.
Define the StelTextureSP type.
bool getFlagCustomGrsSettings()
Get the current value of the flag which determines if custom settings for Great Red Spot on Jupiter i...
bool nearLunarEclipse()
Determine if a lunar eclipse is close at hand?
double getCustomGrsJD()
Get initial JD for calculation of position of Great Red Spot.
int getCustomGrsLongitude()
Get longitude of Great Red Spot (System II is used)
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
PlanetP getMoon() const
Get the Planet object pointer for Earth's moon.
void computePositions(double dateJDE, const Vec3d &observerPos=Vec3d(0.))
Compute the position and transform matrix for every element of the solar system.
bool getFlagTrails() const
Get the current value of the flag which determines if planet trails are drawn or hidden.
void setFlagHints(bool b)
Set flag which determines if planet hints are drawn or hidden along labels.
void setCustomGrsLongitude(int longitude)
Set longitude of Great Red Spot (System II is used)
bool getFlagLightTravelTime(void) const
Get the current value of the flag which determines if light travel time calculation is used or not...
void setFlagLabels(bool b)
Set flag which determines if planet labels are drawn or hidden.
void setApparentMagnitudeAlgorithmOnEarth(QString algorithm)
Set the algorithm for computation of apparent magnitudes for planets in case observer on the Earth...
bool getFlagLabels() const
Get the current value of the flag which determines if planet labels are drawn or hidden.
bool getFlagPlanets() const
Get the current value of the flag which determines if planet are drawn or hidden. ...
Specialization of StelModule which manages a collection of StelObject.
virtual QList< StelObjectP > searchAround(const Vec3d &v, double limitFov, const StelCore *core) const
Search for SolarSystem objects in some area around a point.
const QList< PlanetP > & getAllPlanets() const
Get the list of all the bodies of the solar system.
void setOrbitsColor(const Vec3f &c)
Set the color used to draw planet orbit lines.
This StelObjectModule derivative is used to model SolarSystem bodies.
Definition: SolarSystem.hpp:47
void setFlagPointer(bool b)
Set flag which determines if the planet pointer (red cross) is drawn or hidden on a selected planet...
virtual QStringList listAllObjects(bool inEnglish) const
List all StelObjects.
void setFlagIsolatedTrails(bool b)
Set flag which enabled the showing of isolated trails for selected objects only or not...
Vec3f getTrailsColor() const
Get the current color used to draw planet trails lines.
void setFlagCustomGrsSettings(bool b)
Set flag which determines if custom settings is using for Great Red Spot on Jupiter.
double getEclipseFactor(const StelCore *core) const
Determines relative amount of sun visible from the observer's position.
Provide the main interface to all operations of projecting coordinates from sky to screen...
bool getFlagIsolatedTrails(void) const
Get the current value of the flag which enables showing of isolated trails for selected objects only ...
double getMoonScale(void) const
Get the display scaling factor for Earth's moon.
bool getFlagIsolatedOrbits(void) const
Get the current value of the flag which enables showing of isolated orbits for selected objects only ...
void setFlagTranslatedNames(bool b)
Set flag which enable use translated names for planets or not.
double getDistanceToPlanet(QString planetName) const
Get distance to Solar system bodies from scripts.
QStringList getAllPlanetLocalizedNames() const
Get the list of all the planet localized names.
Vec3f getOrbitsColor(void) const
Get the current color used to draw planet orbit lines.
double getPhaseAngleForPlanet(QString planetName) const
Get phase angle for Solar system bodies from scripts.
virtual void init()
Initialize the SolarSystem.
StelModuleActionName
Define the possible action for which an order is defined.
Definition: StelModule.hpp:117
virtual StelObjectP searchByNameI18n(const QString &nameI18n) const
Search for a SolarSystem object based on the localised name.
void setLabelsColor(const Vec3f &c)
Set the color used to draw planet labels.
bool getFlagNativeNames(void) const
Get the current value of the flag which enables showing native names for planets or not...
void setFlagNativeNames(bool b)
Set flag which enable use native names for planets or not.
StelModuleSelectAction
Enum used when selecting objects to define whether to add to, replace, or remove from the existing se...
Definition: StelModule.hpp:109
void setTrailsColor(const Vec3f &c)
Set the color used to draw planet trails lines.
void setLabelsAmount(double a)
Set the amount of planet labels.
void setFontSize(float newFontSize)
Set planet names font size.
bool getFlagOrbits() const
Get the current value of the flag which determines if planet orbits are drawn or hidden.
void setMoonScale(double f)
Set the display scaling factor for Earth's moon.
void updateI18n()
Translate names. (public so that SolarSystemEditor can call it).
virtual void deinit()
Called before the module will be delete, and before the openGL context is suppressed.
QSharedPointer< StelTexture > StelTextureSP
Use shared pointer to simplify memory managment.
bool getFlagHints() const
Get the current value of the flag which determines if planet hints are drawn or hidden along labels...
virtual QStringList listAllObjectsByType(const QString &objType, bool inEnglish) const
List all StelObjects by type.
Main class for the GUI based on QGraphicView.
Definition: StelGui.hpp:53
void setFlagPlanets(bool b)
Set flag which determines if planets are drawn or hidden.
QString getPlanetType(QString planetName) const
Get type for Solar system bodies from scripts.
float getPlanetVMagnitude(QString planetName, bool withExtinction=false) const
Get the V magnitude for Solar system bodies from scripts.
void setCustomGrsDrift(double drift)
Set speed of annual drift for Great Red Spot (System II is used)
bool getFlagPointer() const
Get the current value of the flag which determines if planet pointers are drawn or hidden...
void setCustomGrsJD(double JD)
Set initial JD for calculation of position of Great Red Spot.
const Vec3f & getLabelsColor(void) const
Get the current color used to draw planet labels.
void setFlagTrails(bool b)
Set flag which determines if planet trails are drawn or hidden.
void setFlagLightTravelTime(bool b)
Set flag which determines if the light travel time calculation is used or not.
PlanetP searchByEnglishName(QString planetEnglishName) const
Get a pointer to a Planet object.
virtual void draw(StelCore *core)
Draw SolarSystem objects (planets).
virtual StelObjectP searchByName(const QString &name) const
Search for a SolarSystem object based on the English name.