Stellarium 0.15.0
1 /*
2  * Stellarium
3  * Copyright (C) 2006 Fabien Chereau
4  * Copyright (C) 2010 Bogdan Marinov (add/remove landscapes feature)
5  * Copyright (C) 2012 Timothy Reaves
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
20  */
25 #include "StelModule.hpp"
26 #include "StelUtils.hpp"
27 #include "Landscape.hpp"
29 #include <QMap>
30 #include <QStringList>
32 class Atmosphere;
33 class Cardinals;
34 class QSettings;
51 class LandscapeMgr : public StelModule
52 {
54  Q_PROPERTY(bool atmosphereDisplayed
56  WRITE setFlagAtmosphere
57  NOTIFY atmosphereDisplayedChanged)
58  Q_PROPERTY(bool cardinalsPointsDisplayed
61  NOTIFY cardinalsPointsDisplayedChanged)
62  Q_PROPERTY(bool fogDisplayed
63  READ getFlagFog
64  WRITE setFlagFog
65  NOTIFY fogDisplayedChanged)
66  Q_PROPERTY(bool landscapeDisplayed
67  READ getFlagLandscape
68  WRITE setFlagLandscape
69  NOTIFY landscapeDisplayedChanged)
70  Q_PROPERTY(bool illuminationDisplayed
73  NOTIFY illuminationDisplayedChanged)
74  Q_PROPERTY(bool labelsDisplayed
75  READ getFlagLabels
76  WRITE setFlagLabels
77  NOTIFY labelsDisplayedChanged)
78  Q_PROPERTY(bool databaseUsage
81  NOTIFY lightPollutionUsageChanged)
82  Q_PROPERTY(bool flagLandscapeAutoSelection
85  NOTIFY flagLandscapeAutoSelectionChanged)
86  Q_PROPERTY(bool flagLandscapeSetsLocation
89  NOTIFY flagLandscapeSetsLocationChanged
90  )
91  Q_PROPERTY(bool flagLandscapeUseMinimalBrightness
94  NOTIFY flagLandscapeUseMinimalBrightnessChanged
95  )
96  Q_PROPERTY(bool flagLandscapeSetsMinimalBrightness
99  NOTIFY flagLandscapeSetsMinimalBrightnessChanged
100  )
101  Q_PROPERTY(double defaultMinimalBrightness
104  NOTIFY defaultMinimalBrightnessChanged
105  )
106  Q_PROPERTY(bool flagAtmosphereAutoEnabling
109  NOTIFY setFlagAtmosphereAutoEnableChanged
110  )
111  Q_PROPERTY(QString currentLandscapeID
115  )
116 public:
117  LandscapeMgr();
118  virtual ~LandscapeMgr();
121  // Methods defined in the StelModule class
126  virtual void init();
129  virtual void draw(StelCore* core);
138  virtual void update(double deltaTime);
141  virtual double getCallOrder(StelModuleActionName actionName) const;
144  // Methods specific to the landscape manager
148  bool loadLandscape(QMap<QString, QString>& param);
158  Landscape* createFromFile(const QString& landscapeFile, const QString& landscapeId);
160  // GZ: implement StelModule's method. For test purposes only, we implement a manual transparency sampler.
161  // TODO: comment this away for final builds. Please leave it in until this feature is finished.
162  // virtual void handleMouseClicks(class QMouseEvent*);
164 public slots:
166  // Methods callable from scripts and GUI
170  float getLuminance() const;
172  float getAtmosphereAverageLuminance() const;
180  void setAtmosphereAverageLuminance(const float overrideLuminance);
183  QMap<QString,QString> getNameToDirMap() const;
188  QStringList getAllLandscapeNames() const;
193  QStringList getAllLandscapeIDs() const;
198  QStringList getUserLandscapeIDs() const;
201  const QString& getCurrentLandscapeID() const {return currentLandscapeID;}
207  bool setCurrentLandscapeID(const QString& id, const double changeLocationDuration = 1.0);
210  QString getCurrentLandscapeName() const;
215  bool setCurrentLandscapeName(const QString& name, const double changeLocationDuration = 1.0);
218  Landscape* getCurrentLandscape() const { return landscape; }
221  const QString& getDefaultLandscapeID() const {return defaultLandscapeID;}
225  bool setDefaultLandscapeID(const QString& id);
228  QString getCurrentLandscapeHtmlDescription() const;
231  QString getDescription() const;
234  bool getFlagLandscape() const;
236  void setFlagLandscape(const bool displayed);
239  bool getIsLandscapeFullyVisible() const;
241  float getLandscapeSinMinAltitudeLimit() const;
244  bool getFlagFog() const;
246  void setFlagFog(const bool displayed);
248  bool getFlagIllumination() const;
250  void setFlagIllumination(const bool on);
252  bool getFlagLabels() const;
254  void setFlagLabels(const bool on);
257  bool getFlagLandscapeSetsLocation() const {return flagLandscapeSetsLocation;}
259  void setFlagLandscapeSetsLocation(bool b) {if(b!=flagLandscapeSetsLocation){ flagLandscapeSetsLocation=b; emit flagLandscapeSetsLocationChanged(b);}}
262  bool getFlagLandscapeUseMinimalBrightness() const {return flagLandscapeUseMinimalBrightness; }
264  void setFlagLandscapeUseMinimalBrightness(bool b) {if(b!=flagLandscapeUseMinimalBrightness){ flagLandscapeUseMinimalBrightness=b; emit flagLandscapeUseMinimalBrightnessChanged(b);}}
266  bool getFlagLandscapeSetsMinimalBrightness() const {return flagLandscapeSetsMinimalBrightness;}
268  void setFlagLandscapeSetsMinimalBrightness(bool b) {if(b!=flagLandscapeSetsMinimalBrightness){ flagLandscapeSetsMinimalBrightness=b; emit flagLandscapeSetsMinimalBrightnessChanged(b);}}
270  double getDefaultMinimalBrightness() const {return defaultMinimalBrightness;}
272  void setDefaultMinimalBrightness(const double b) {if(b!=defaultMinimalBrightness){ defaultMinimalBrightness=b; emit defaultMinimalBrightnessChanged(b);}}
274  void setFlagUseLightPollutionFromDatabase(const bool usage);
279  bool getFlagCardinalsPoints() const;
281  void setFlagCardinalsPoints(const bool displayed);
286  void setColorCardinalPoints(const Vec3f& v);
289  bool getFlagAtmosphere() const;
291  void setFlagAtmosphere(const bool displayed);
294  float getAtmosphereFadeDuration() const;
296  void setAtmosphereFadeDuration(const float f);
298  /*
299  //This method has been removed, use StelSkyDrawer::getBortleScaleIndex instead, or StelMainScriptAPI::getBortleScaleIndex in scripts
300  //Also, if required, please use StelSkyDrawer::setBortleScaleIndex or StelMainScriptAPI::setBortleScaleIndex instead of LandscapeMgr::setAtmosphereBortleLightPollution
301  int getAtmosphereBortleLightPollution() const;
302  */
308  void setZRotation(const float d);
340  QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display = false, const bool forAllUsers = false);
342  /* GZ: leaving doc without the method confuses Doxygen. Commenting out completely.
360  //QString installLandscapeFromDirectory(QString pathToSourceLandscapeIni, bool display = false, bool forAllUsers = false);
361  */
372  bool removeLandscape(const QString landscapeID);
378  QString loadLandscapeName(const QString landscapeID);
384  quint64 loadLandscapeSize(const QString landscapeID) const;
387  bool getFlagLandscapeAutoSelection() const;
389  void setFlagLandscapeAutoSelection(bool enableAutoSelect);
392  bool getFlagAtmosphereAutoEnable() const;
394  void setFlagAtmosphereAutoEnable(bool b);
398  float getLandscapeOpacity(Vec3d azalt) const {return landscape->getOpacity(azalt);}
399  // This variant is required for scripting!
400  float getLandscapeOpacity(Vec3f azalt) const {return landscape->getOpacity(Vec3d(azalt[0], azalt[1], azalt[2]));}
404  float getLandscapeOpacity(float azimuth, float altitude) const {
405  Vec3d azalt;
406  StelUtils::spheToRect((180.0f-azimuth)*M_PI/180.0, altitude*M_PI/180.0, azalt);
407  return landscape->getOpacity(azalt);
408  }
410 signals:
411  void atmosphereDisplayedChanged(const bool displayed);
412  void cardinalsPointsDisplayedChanged(const bool displayed);
413  void fogDisplayedChanged(const bool displayed);
414  void landscapeDisplayedChanged(const bool displayed);
415  void illuminationDisplayedChanged(const bool displayed);
416  void labelsDisplayedChanged(const bool displayed);
417  void lightPollutionUsageChanged(const bool usage);
418  void flagLandscapeAutoSelectionChanged(const bool value);
419  void flagLandscapeSetsLocationChanged(const bool value);
420  void flagLandscapeUseMinimalBrightnessChanged(const bool value);
421  void flagLandscapeSetsMinimalBrightnessChanged(const bool value);
422  void defaultMinimalBrightnessChanged(const double value);
423  void setFlagAtmosphereAutoEnableChanged(const bool enabled);
427  void defaultLandscapeChanged(const QString& id);
432  void landscapesChanged();
438  void errorUnableToOpen(QString path);
442  void errorNotArchive();
447  void errorNotUnique(QString nameOrID);
452  void errorRemoveManually(QString path);
457  void currentLandscapeChanged(QString currentLandscapeID,QString currentLandscapeName);
459 private slots:
462  void setAtmosphereBortleLightPollution(const int bIndex);
465  void updateLocationBasedPollution(StelLocation loc);
468  void updateI18n();
470 private:
472  float getAtmosphereLightPollutionLuminance() const;
474  void setAtmosphereLightPollutionLuminance(const float f);
480  QString nameToID(const QString& name) const;
486  QString getLandscapePath(const QString landscapeID) const;
488  Atmosphere* atmosphere; // Atmosphere
489  Cardinals* cardinalsPoints; // Cardinals points
490  Landscape* landscape; // The landscape i.e. the fog, the ground and "decor"
491  Landscape* oldLandscape; // Used only during transitions to newly loaded landscape.
493  // Define whether the observer location is to be updated when the landscape is updated.
494  bool flagLandscapeSetsLocation;
496  bool flagLandscapeAutoSelection;
498  bool flagLightPollutionFromDatabase;
501  bool flagLandscapeUseMinimalBrightness;
503  double defaultMinimalBrightness;
505  bool flagLandscapeSetsMinimalBrightness;
507  bool flagAtmosphereAutoEnabling;
509  // The ID of the currently loaded landscape
510  QString currentLandscapeID;
512  // The ID of the default landscape
513  QString defaultLandscapeID;
517  QStringList packagedLandscapeIDs;
519 };
521 #endif // _LANDSCAPEMGR_HPP_
void setFlagUseLightPollutionFromDatabase(const bool usage)
Sets the value of the flag usage light pollution (and bortle index) from locations database...
void setZRotation(const float d)
Set the rotation of the landscape about the z-axis.
void setFlagLandscape(const bool displayed)
Set flag for displaying Landscape.
float getAtmosphereFadeDuration() const
Get atmosphere fade duration in s.
bool loadLandscape(QMap< QString, QString > &param)
Load a landscape based on a hash of parameters mirroring the landscape.ini file and make it the curre...
QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display=false, const bool forAllUsers=false)
Install a landscape from a ZIP archive.
void currentLandscapeChanged(QString currentLandscapeID, QString currentLandscapeName)
Emitted when the current landscape was changed.
QStringList getUserLandscapeIDs() const
Retrieve a list of the identifiers of all user-installed landscapes.
Store the informations for a location on a planet.
bool removeLandscape(const QString landscapeID)
This function removes a landscape from the user data directory.
Store and manages the displaying of the Landscape.
Definition: Landscape.hpp:62
void spheToRect(const double lng, const double lat, Vec3d &v)
Convert from spherical coordinates to Rectangular direction.
void errorNotArchive()
Emitted when the file passed to installLandscapeFromArchive() is not a ZIP archive or does not contai...
virtual void update(double deltaTime)
Update time-dependent state.
QString getCurrentLandscapeName() const
Get the current landscape name.
Compute and display the daylight sky color using openGL.
Definition: Atmosphere.hpp:39
QMap< QString, QString > getNameToDirMap() const
Return a map of landscape name to landscape ID (directory name).
A templatized 3d vector compatible with openGL.
Definition: VecMath.hpp:33
void landscapesChanged()
Emitted when a landscape has been installed or un-installed.
float getLandscapeOpacity(Vec3d azalt) const
Forward opacity query to current landscape.
bool getFlagIllumination() const
Get flag for displaying illumination layer.
Vec3f getColorCardinalPoints() const
Get Cardinals Points color.
bool setCurrentLandscapeName(const QString &name, const double changeLocationDuration=1.0)
Change the current landscape to the landscape with the name specified.
Manages all the rendering at the level of the observer's surroundings.
bool getFlagUseLightPollutionFromDatabase() const
Return the value of flag usage light pollution (and bortle index) from locations database.
void setFlagFog(const bool displayed)
Set flag for displaying Fog.
Landscape * getCurrentLandscape() const
Get the current landscape object.
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
void setFlagLandscapeUseMinimalBrightness(bool b)
Set the value of the flag determining if a minimal brightness should be used to keep landscape visibl...
bool getFlagAtmosphereAutoEnable() const
Get flag for auto-enable of atmospheres for planets.
bool getFlagFog() const
Get flag for displaying Fog.
QStringList getAllLandscapeNames() const
Retrieve a list of the names of all the available landscapes in the file search path sub-directories ...
void setDefaultMinimalBrightness(const double b)
Set the minimal brightness value of the landscape.
bool getFlagLandscapeUseMinimalBrightness() const
Return the value of the flag determining if a minimal brightness should be used to keep landscape vis...
QStringList getAllLandscapeIDs() const
Retrieve a list of the identifiers of all the available landscapes in the file search path sub-direct...
bool getFlagLandscape() const
Get flag for displaying Landscape.
bool getFlagLabels() const
Get flag for displaying landscape labels.
void setFlagCardinalsPoints(const bool displayed)
Set flag for displaying Cardinals Points.
QString getDescription() const
Return a pseudo HTML formatted string with information from description or ini file.
float getLandscapeSinMinAltitudeLimit() const
Get the sine of current landscape's minimal altitude. Useful to construct bounding caps...
float getAtmosphereAverageLuminance() const
return average luminance [cd/m^2] of atmosphere. Expect 10 at sunset, 6400 in daylight, >0 in dark night.
bool setCurrentLandscapeID(const QString &id, const double changeLocationDuration=1.0)
Change the current landscape to the landscape with the ID specified.
float getLandscapeOpacity(float azimuth, float altitude) const
Forward opacity query to current landscape.
bool getFlagLandscapeAutoSelection() const
Get flag for autoselect of landscapes for planets.
void setFlagLandscapeSetsMinimalBrightness(bool b)
Sets the value of the flag determining if the minimal brightness should be taken from landscape...
quint64 loadLandscapeSize(const QString landscapeID) const
This function calculates and returns a landscape's disc size in bytes.
void setAtmosphereAverageLuminance(const float overrideLuminance)
Override autocomputed value and set average luminance [cd/m^2] of atmosphere.
void setFlagLandscapeSetsLocation(bool b)
Set the value of the flag determining if a change of landscape will update the observer location...
const QString & getDefaultLandscapeID() const
Get the default landscape ID.
double getDefaultMinimalBrightness() const
Return the minimal brightness value of the landscape.
const QString & getCurrentLandscapeID() const
Get the current landscape ID.
Landscape * createFromFile(const QString &landscapeFile, const QString &landscapeId)
Create a new landscape from the files which describe it.
bool getFlagLandscapeSetsLocation() const
Return the value of the flag determining if a change of landscape will update the observer location...
virtual double getCallOrder(StelModuleActionName actionName) const
Get the order in which this module will draw its objects relative to other modules.
void setFlagIllumination(const bool on)
Set flag for displaying illumination layer.
Define the possible action for which an order is defined.
Definition: StelModule.hpp:117
void setFlagLabels(const bool on)
Set flag for displaying landscape labels.
QString loadLandscapeName(const QString landscapeID)
This function reads a landscape's name from its configuration file.
bool getFlagCardinalsPoints() const
Get flag for displaying Cardinals Points.
virtual void init()
Initialize the LandscapeManager class.
void errorNotUnique(QString nameOrID)
Emitted when installLandscapeFromArchive() tries to install a landscape with the same name or identif...
void setColorCardinalPoints(const Vec3f &v)
Set Cardinals Points color.
virtual float getOpacity(Vec3d azalt) const
Find opacity in a certain direction.
Definition: Landscape.hpp:164
bool getFlagAtmosphere() const
Get flag for displaying Atmosphere.
void setFlagAtmosphereAutoEnable(bool b)
Set flag for auto-enable atmosphere for planets with atmospheres in location window.
void defaultLandscapeChanged(const QString &id)
Emitted whenever the default landscape is changed.
void setFlagAtmosphere(const bool displayed)
Set flag for displaying Atmosphere.
void errorRemoveManually(QString path)
Emitted when removeLandscape() is unable to remove all the files of a landscape.
void setAtmosphereFadeDuration(const float f)
Set atmosphere fade duration in s.
void errorUnableToOpen(QString path)
Emitted when installLandscapeFromArchive() can't read from, write to or create a file or a directory...
bool getFlagLandscapeSetsMinimalBrightness() const
Return the value of the flag determining if the minimal brightness should be taken from landscape...
bool getIsLandscapeFullyVisible() const
Get whether the landscape is currently visible. If true, objects below landscape's limiting altitude ...
float getLuminance() const
Return the global landscape luminance [0..1], for being used e.g for setting eye adaptation.
virtual void draw(StelCore *core)
Draw the landscape graphics, cardinal points and atmosphere.
QString getCurrentLandscapeHtmlDescription() const
Return a pseudo HTML formatted string with all informations on the current landscape.
bool setDefaultLandscapeID(const QString &id)
Change the default landscape to the landscape with the ID specified.
This is the common base class for all the main components of stellarium.
Definition: StelModule.hpp:49
void setFlagLandscapeAutoSelection(bool enableAutoSelect)
Set flag for autoselect of landscapes for planets.