Stellarium 0.15.0
LandscapeMgr.hpp
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
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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  */
21 
22 #ifndef _LANDSCAPEMGR_HPP_
23 #define _LANDSCAPEMGR_HPP_
24 
25 #include "StelModule.hpp"
26 #include "StelUtils.hpp"
27 #include "Landscape.hpp"
28 
29 #include <QMap>
30 #include <QStringList>
31 
32 class Atmosphere;
33 class Cardinals;
34 class QSettings;
35 
51 class LandscapeMgr : public StelModule
52 {
53  Q_OBJECT
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();
119 
121  // Methods defined in the StelModule class
126  virtual void init();
127 
129  virtual void draw(StelCore* core);
130 
138  virtual void update(double deltaTime);
139 
141  virtual double getCallOrder(StelModuleActionName actionName) const;
142 
144  // Methods specific to the landscape manager
145 
148  bool loadLandscape(QMap<QString, QString>& param);
149 
158  Landscape* createFromFile(const QString& landscapeFile, const QString& landscapeId);
159 
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*);
163 
164 public slots:
166  // Methods callable from scripts and GUI
170  float getLuminance() const;
172  float getAtmosphereAverageLuminance() const;
173 
180  void setAtmosphereAverageLuminance(const float overrideLuminance);
181 
183  QMap<QString,QString> getNameToDirMap() const;
184 
188  QStringList getAllLandscapeNames() const;
189 
193  QStringList getAllLandscapeIDs() const;
194 
198  QStringList getUserLandscapeIDs() const;
199 
201  const QString& getCurrentLandscapeID() const {return currentLandscapeID;}
207  bool setCurrentLandscapeID(const QString& id, const double changeLocationDuration = 1.0);
208 
210  QString getCurrentLandscapeName() const;
215  bool setCurrentLandscapeName(const QString& name, const double changeLocationDuration = 1.0);
216 
218  Landscape* getCurrentLandscape() const { return landscape; }
219 
221  const QString& getDefaultLandscapeID() const {return defaultLandscapeID;}
225  bool setDefaultLandscapeID(const QString& id);
226 
228  QString getCurrentLandscapeHtmlDescription() const;
229 
231  QString getDescription() const;
232 
234  bool getFlagLandscape() const;
236  void setFlagLandscape(const bool displayed);
237 
239  bool getIsLandscapeFullyVisible() const;
241  float getLandscapeSinMinAltitudeLimit() const;
242 
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);
255 
257  bool getFlagLandscapeSetsLocation() const {return flagLandscapeSetsLocation;}
259  void setFlagLandscapeSetsLocation(bool b) {if(b!=flagLandscapeSetsLocation){ flagLandscapeSetsLocation=b; emit flagLandscapeSetsLocationChanged(b);}}
260 
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);
277 
279  bool getFlagCardinalsPoints() const;
281  void setFlagCardinalsPoints(const bool displayed);
282 
286  void setColorCardinalPoints(const Vec3f& v);
287 
289  bool getFlagAtmosphere() const;
291  void setFlagAtmosphere(const bool displayed);
292 
294  float getAtmosphereFadeDuration() const;
296  void setAtmosphereFadeDuration(const float f);
297 
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  */
303 
308  void setZRotation(const float d);
309 
340  QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display = false, const bool forAllUsers = false);
341 
342  /* GZ: leaving doc without the method confuses Doxygen. Commenting out completely.
360  //QString installLandscapeFromDirectory(QString pathToSourceLandscapeIni, bool display = false, bool forAllUsers = false);
361  */
362 
372  bool removeLandscape(const QString landscapeID);
373 
378  QString loadLandscapeName(const QString landscapeID);
379 
384  quint64 loadLandscapeSize(const QString landscapeID) const;
385 
387  bool getFlagLandscapeAutoSelection() const;
389  void setFlagLandscapeAutoSelection(bool enableAutoSelect);
390 
392  bool getFlagAtmosphereAutoEnable() const;
394  void setFlagAtmosphereAutoEnable(bool b);
395 
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  }
409 
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);
424 
427  void defaultLandscapeChanged(const QString& id);
428 
432  void landscapesChanged();
433 
438  void errorUnableToOpen(QString path);
442  void errorNotArchive();
447  void errorNotUnique(QString nameOrID);
452  void errorRemoveManually(QString path);
453 
457  void currentLandscapeChanged(QString currentLandscapeID,QString currentLandscapeName);
458 
459 private slots:
462  void setAtmosphereBortleLightPollution(const int bIndex);
463 
465  void updateLocationBasedPollution(StelLocation loc);
466 
468  void updateI18n();
469 
470 private:
472  float getAtmosphereLightPollutionLuminance() const;
474  void setAtmosphereLightPollutionLuminance(const float f);
475 
476 
480  QString nameToID(const QString& name) const;
481 
486  QString getLandscapePath(const QString landscapeID) const;
487 
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.
492 
493  // Define whether the observer location is to be updated when the landscape is updated.
494  bool flagLandscapeSetsLocation;
495 
496  bool flagLandscapeAutoSelection;
497 
498  bool flagLightPollutionFromDatabase;
499 
501  bool flagLandscapeUseMinimalBrightness;
503  double defaultMinimalBrightness;
505  bool flagLandscapeSetsMinimalBrightness;
507  bool flagAtmosphereAutoEnabling;
508 
509  // The ID of the currently loaded landscape
510  QString currentLandscapeID;
511 
512  // The ID of the default landscape
513  QString defaultLandscapeID;
514 
517  QStringList packagedLandscapeIDs;
518 
519 };
520 
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.
StelModuleActionName
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.