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 
32 #include <QFont>
33 
34 class Orbit;
35 class StelTranslator;
36 class StelObject;
37 class StelCore;
38 class StelProjector;
39 class QSettings;
40 
41 typedef QSharedPointer<Planet> PlanetP;
42 
47 {
48  Q_OBJECT
49  Q_PROPERTY(bool labelsDisplayed
50  READ getFlagLabels
51  WRITE setFlagLabels)
52  Q_PROPERTY(bool orbitsDisplayed
53  READ getFlagOrbits
54  WRITE setFlagOrbits)
55  Q_PROPERTY(bool trailsDisplayed
56  READ getFlagTrails
57  WRITE setFlagTrails)
58  Q_PROPERTY(bool planetsDisplayed
59  READ getFlagPlanets
60  WRITE setFlagPlanets)
61 
62 public:
63  SolarSystem();
64  virtual ~SolarSystem();
65 
67  // Methods defined in the StelModule class
73  virtual void init();
74 
75  virtual void deinit();
76 
81  virtual void draw(StelCore *core);
82 
85  virtual void update(double deltaTime);
86 
88  virtual double getCallOrder(StelModuleActionName actionName) const;
89 
91  // Methods defined in StelObjectManager class
100  virtual QList<StelObjectP> searchAround(const Vec3d& v, double limitFov, const StelCore* core) const;
101 
105  virtual StelObjectP searchByNameI18n(const QString& nameI18n) const;
106 
110  virtual StelObjectP searchByName(const QString& name) const;
111 
119  virtual QStringList listMatchingObjectsI18n(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const;
127  virtual QStringList listMatchingObjects(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const;
128  virtual QStringList listAllObjects(bool inEnglish) const { Q_UNUSED(inEnglish) return QStringList(); }
129  virtual QStringList listAllObjectsByType(const QString& objType, bool inEnglish) const;
130  virtual QString getName() const { return "Solar System"; }
131 
132 public slots:
134  // Method callable from script and GUI
135  // Properties setters and getters
137  void setFlagPlanets(bool b);
139  bool getFlagPlanets() const;
140 
142  void setFlagTrails(bool b);
144  bool getFlagTrails() const;
145 
147  void setFlagHints(bool b);
149  bool getFlagHints() const;
150 
152  void setFlagLabels(bool b);
154  bool getFlagLabels() const;
155 
159  void setLabelsAmount(float a) {labelsAmount=a;}
162  float getLabelsAmount(void) const {return labelsAmount;}
163 
165  void setFlagOrbits(bool b);
167  bool getFlagOrbits() const {return flagOrbits;}
168 
170  void setFlagMarkers(bool b) { flagMarker=b; }
172  bool getFlagMarkers() const {return flagMarker;}
173 
175  void setFlagLightTravelTime(bool b);
178  bool getFlagLightTravelTime(void) const {return flagLightTravelTime;}
179 
181  void setFontSize(float newFontSize);
182 
189  void setLabelsColor(const Vec3f& c);
191  const Vec3f& getLabelsColor(void) const;
192 
199  void setOrbitsColor(const Vec3f& c);
201  Vec3f getOrbitsColor(void) const;
202 
209  void setTrailsColor(const Vec3f& c) {trailColor=c;}
211  Vec3f getTrailsColor() const {return trailColor;}
212 
219  void setPointersColor(const Vec3f& c) {pointerColor=c;}
221  Vec3f getPointersColor() const {return pointerColor;}
222 
224  void setFlagMoonScale(bool b);
226  bool getFlagMoonScale(void) const {return flagMoonScale;}
227 
229  void setMoonScale(double f);
231  float getMoonScale(void) const {return moonScale;}
232 
234  void updateI18n();
235 
240  float getPlanetVMagnitude(QString planetName, bool withExtinction=false) const;
241 
245  QString getPlanetType(QString planetName) const;
246 
250  double getDistanceToPlanet(QString planetName) const;
251 
255  double getElongationForPlanet(QString planetName) const;
256 
260  double getPhaseAngleForPlanet(QString planetName) const;
261 
265  float getPhaseForPlanet(QString planetName) const;
266 
280  void setApparentMagnitudeAlgorithmOnEarth(QString algorithm);
281 
283  QString getApparentMagnitudeAlgorithmOnEarth() const;
284 
286  void setFlagNativeNames(bool b);
288  bool getFlagNativeNames(void) const;
289 
291  void setFlagTranslatedNames(bool b);
293  bool getFlagTranslatedNames(void) const;
294 
296  void setFlagIsolatedTrails(bool b);
298  bool getFlagIsolatedTrails(void) const;
299 
301  void setFlagIsolatedOrbits(bool b);
303  bool getFlagIsolatedOrbits(void) const;
304 
305 public:
307  // Other public methods
311  PlanetP searchByEnglishName(QString planetEnglishName) const;
312 
314  PlanetP getSun() const {return sun;}
315 
317  PlanetP getEarth() const {return earth;}
318 
320  PlanetP getMoon() const {return moon;}
321 
323  bool nearLunarEclipse();
324 
326  QStringList getAllPlanetEnglishNames() const;
327 
329  QStringList getAllPlanetLocalizedNames() const;
330 
332  void reloadPlanets();
333 
335  double getEclipseFactor(const StelCore *core) const;
336 
338  // DEPRECATED
344  QString getPlanetHashString();
345 
350  void computePositions(double dateJDE, const Vec3d& observerPos = Vec3d(0.));
351 
354  const QList<PlanetP>& getAllPlanets() const {return systemPlanets;}
355 
356 private slots:
358  void selectedObjectChange(StelModule::StelModuleSelectAction action);
359 
361  void setStelStyle(const QString& section);
362 
366  void updateSkyCulture(const QString& skyCultureDir);
367 
368 private:
374  StelObjectP search(Vec3d v, const StelCore* core) const;
375 
378  void computeTransMatrices(double dateJDE, const Vec3d& observerPos = Vec3d(0.));
379 
381  void drawPointer(const StelCore* core);
382 
387  void loadPlanets();
388 
390  bool loadPlanets(const QString& filePath);
391 
392  void recreateTrails();
393 
395  void setFlagPermanentOrbits(bool b);
396 
398  int shadowPlanetCount;
399  PlanetP sun;
400  PlanetP moon;
401  PlanetP earth;
402 
405  void setSelected(const QString& englishName);
407  void setSelected(PlanetP obj);
409  PlanetP getSelected(void) const {return selected;}
411  PlanetP selected;
412 
413  // Moon scale value
414  bool flagMoonScale;
415  float moonScale;
416 
417  QFont planetNameFont;
418 
420  float labelsAmount;
421 
423  QList<PlanetP> systemPlanets;
424 
425  // Master settings
426  bool flagOrbits;
427  bool flagLightTravelTime;
428 
430  StelTextureSP texPointer;
431 
432  bool flagShow;
433  bool flagMarker;
434  bool flagNativeNames;
435  bool flagTranslatedNames;
436  bool flagIsolatedTrails;
437  bool flagIsolatedOrbits;
438 
439  class TrailGroup* allTrails;
440  LinearFader trailFader;
441  Vec3f trailColor;
442  Vec3f pointerColor;
443 
444  QHash<QString, QString> planetNativeNamesMap;
445 
447  // DEPRECATED
449  QList<Orbit*> orbits; // Pointers on created elliptical orbits
450 };
451 
452 
453 #endif // _SOLARSYSTEM_HPP_
double getElongationForPlanet(QString planetName) const
Get elongation for Solar system bodies from scripts.
void setLabelsAmount(float a)
Set the amount of planet labels.
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.
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
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.
float getLabelsAmount(void) const
Get the amount of planet labels.
bool nearLunarEclipse()
Determine if a lunar eclipse is close at hand?
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
bool getFlagMarkers() const
Get the current value of the flag which determines if planet markers are drawn or hidden...
virtual QStringList listMatchingObjectsI18n(const QString &objPrefix, int maxNbItem=5, bool useStartOfWords=false) const
Find objects by translated name prefix.
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 setPointersColor(const Vec3f &c)
Set the color used to draw planet pointers.
Vec3f getPointersColor() const
Get the current color used to draw planet pointers.
float getMoonScale(void) const
Get the display scaling factor for Earth's oon.
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:46
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.
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 ...
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
void setFlagMarkers(bool b)
Set flag which determines if planet markers are drawn or hidden.
virtual QStringList listMatchingObjects(const QString &objPrefix, int maxNbItem=5, bool useStartOfWords=false) const
Find objects by translated name prefix.
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 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...
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.
const Vec3f & getLabelsColor(void) const
Get the current color used to draw planet labels.
QString getPlanetHashString()
Get a hash of locale and ssystem.ini names for use with the TUI.
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.