Stellarium 0.90.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(Vec3f cardinalsPointsColor
65  NOTIFY cardinalsPointsColorChanged)
66  Q_PROPERTY(bool fogDisplayed
67  READ getFlagFog
68  WRITE setFlagFog
69  NOTIFY fogDisplayedChanged)
70  Q_PROPERTY(bool landscapeDisplayed
71  READ getFlagLandscape
72  WRITE setFlagLandscape
73  NOTIFY landscapeDisplayedChanged)
74  Q_PROPERTY(bool illuminationDisplayed
77  NOTIFY illuminationDisplayedChanged)
78  Q_PROPERTY(bool labelsDisplayed
79  READ getFlagLabels
80  WRITE setFlagLabels
81  NOTIFY labelsDisplayedChanged)
82  Q_PROPERTY(bool databaseUsage
85  NOTIFY lightPollutionUsageChanged)
86  Q_PROPERTY(bool flagLandscapeAutoSelection
89  NOTIFY flagLandscapeAutoSelectionChanged)
90  Q_PROPERTY(bool flagLandscapeSetsLocation
93  NOTIFY flagLandscapeSetsLocationChanged)
94  Q_PROPERTY(bool flagLandscapeUseMinimalBrightness
97  NOTIFY flagLandscapeUseMinimalBrightnessChanged)
101  NOTIFY flagLandscapeSetsMinimalBrightnessChanged)
102  Q_PROPERTY(double defaultMinimalBrightness
105  NOTIFY defaultMinimalBrightnessChanged)
106  Q_PROPERTY(bool flagAtmosphereAutoEnabling
109  NOTIFY setFlagAtmosphereAutoEnableChanged)
110  Q_PROPERTY(QString currentLandscapeID
114 public:
115  LandscapeMgr();
116  virtual ~LandscapeMgr();
117 
119  // Methods defined in the StelModule class
124  virtual void init();
125 
127  virtual void draw(StelCore* core);
128 
136  virtual void update(double deltaTime);
137 
139  virtual double getCallOrder(StelModuleActionName actionName) const;
140 
142  // Methods specific to the landscape manager
143 
146  bool loadLandscape(QMap<QString, QString>& param);
147 
156  Landscape* createFromFile(const QString& landscapeFile, const QString& landscapeId);
157 
158  // GZ: implement StelModule's method. For test purposes only, we implement a manual transparency sampler.
159  // TODO: comment this away for final builds. Please leave it in until this feature is finished.
160  // virtual void handleMouseClicks(class QMouseEvent*);
161 
162 public slots:
164  // Methods callable from scripts and GUI
168  float getLuminance() const;
170  float getAtmosphereAverageLuminance() const;
171 
178  void setAtmosphereAverageLuminance(const float overrideLuminance);
179 
181  QMap<QString,QString> getNameToDirMap() const;
182 
186  QStringList getAllLandscapeNames() const;
187 
191  QStringList getAllLandscapeIDs() const;
192 
196  QStringList getUserLandscapeIDs() const;
197 
199  const QString& getCurrentLandscapeID() const {return currentLandscapeID;}
205  bool setCurrentLandscapeID(const QString& id, const double changeLocationDuration = 1.0);
206 
208  QString getCurrentLandscapeName() const;
213  bool setCurrentLandscapeName(const QString& name, const double changeLocationDuration = 1.0);
214 
216  Landscape* getCurrentLandscape() const { return landscape; }
217 
219  const QString& getDefaultLandscapeID() const {return defaultLandscapeID;}
223  bool setDefaultLandscapeID(const QString& id);
224 
226  QString getCurrentLandscapeHtmlDescription() const;
227 
229  QString getDescription() const;
230 
232  bool getFlagLandscape() const;
234  void setFlagLandscape(const bool displayed);
235 
237  bool getIsLandscapeFullyVisible() const;
239  float getLandscapeSinMinAltitudeLimit() const;
240 
242  bool getFlagFog() const;
244  void setFlagFog(const bool displayed);
246  bool getFlagIllumination() const;
248  void setFlagIllumination(const bool on);
250  bool getFlagLabels() const;
252  void setFlagLabels(const bool on);
253 
255  bool getFlagLandscapeSetsLocation() const {return flagLandscapeSetsLocation;}
257  void setFlagLandscapeSetsLocation(bool b) {if(b!=flagLandscapeSetsLocation){ flagLandscapeSetsLocation=b; emit flagLandscapeSetsLocationChanged(b);}}
258 
262  void setFlagLandscapeUseMinimalBrightness(bool b) {if(b!=flagLandscapeUseMinimalBrightness){ flagLandscapeUseMinimalBrightness=b; emit flagLandscapeUseMinimalBrightnessChanged(b);}}
266  void setFlagLandscapeSetsMinimalBrightness(bool b) {if(b!=flagLandscapeSetsMinimalBrightness){ flagLandscapeSetsMinimalBrightness=b; emit flagLandscapeSetsMinimalBrightnessChanged(b);}}
270  void setDefaultMinimalBrightness(const double b) {if(b!=defaultMinimalBrightness){ defaultMinimalBrightness=b; emit defaultMinimalBrightnessChanged(b);}}
272  void setFlagUseLightPollutionFromDatabase(const bool usage);
275 
277  bool getFlagCardinalsPoints() const;
279  void setFlagCardinalsPoints(const bool displayed);
280 
284  void setColorCardinalPoints(const Vec3f& v);
285 
287  bool getFlagAtmosphere() const;
289  void setFlagAtmosphere(const bool displayed);
290 
292  float getAtmosphereFadeDuration() const;
294  void setAtmosphereFadeDuration(const float f);
295 
296  /*
297  //This method has been removed, use StelSkyDrawer::getBortleScaleIndex instead, or StelMainScriptAPI::getBortleScaleIndex in scripts
298  //Also, if required, please use StelSkyDrawer::setBortleScaleIndex or StelMainScriptAPI::setBortleScaleIndex instead of LandscapeMgr::setAtmosphereBortleLightPollution
299  int getAtmosphereBortleLightPollution() const;
300  */
301 
306  void setZRotation(const float d);
307 
338  QString installLandscapeFromArchive(QString pathToSourceArchive, const bool display = false, const bool forAllUsers = false);
339 
340  /* GZ: leaving doc without the method confuses Doxygen. Commenting out completely.
358  //QString installLandscapeFromDirectory(QString pathToSourceLandscapeIni, bool display = false, bool forAllUsers = false);
359  */
360 
370  bool removeLandscape(const QString landscapeID);
371 
376  QString loadLandscapeName(const QString landscapeID);
377 
382  quint64 loadLandscapeSize(const QString landscapeID) const;
383 
385  bool getFlagLandscapeAutoSelection() const;
387  void setFlagLandscapeAutoSelection(bool enableAutoSelect);
388 
390  bool getFlagAtmosphereAutoEnable() const;
392  void setFlagAtmosphereAutoEnable(bool b);
393 
396  float getLandscapeOpacity(Vec3d azalt) const {return landscape->getOpacity(azalt);}
397  // This variant is required for scripting!
398  float getLandscapeOpacity(Vec3f azalt) const {return landscape->getOpacity(Vec3d(azalt[0], azalt[1], azalt[2]));}
402  float getLandscapeOpacity(float azimuth, float altitude) const {
403  Vec3d azalt;
404  StelUtils::spheToRect((180.0f-azimuth)*M_PI/180.0, altitude*M_PI/180.0, azalt);
405  return landscape->getOpacity(azalt);
406  }
407 
408 signals:
409  void atmosphereDisplayedChanged(const bool displayed);
410  void cardinalsPointsDisplayedChanged(const bool displayed);
411  void cardinalsPointsColorChanged(const Vec3f & newColor) const;
412  void fogDisplayedChanged(const bool displayed);
413  void landscapeDisplayedChanged(const bool displayed);
414  void illuminationDisplayedChanged(const bool displayed);
415  void labelsDisplayedChanged(const bool displayed);
416  void lightPollutionUsageChanged(const bool usage);
417  void flagLandscapeAutoSelectionChanged(const bool value);
418  void flagLandscapeSetsLocationChanged(const bool value);
419  void flagLandscapeUseMinimalBrightnessChanged(const bool value);
420  void flagLandscapeSetsMinimalBrightnessChanged(const bool value);
421  void defaultMinimalBrightnessChanged(const double value);
422  void setFlagAtmosphereAutoEnableChanged(const bool enabled);
423 
426  void defaultLandscapeChanged(const QString& id);
427 
431  void landscapesChanged();
432 
437  void errorUnableToOpen(QString path);
441  void errorNotArchive();
446  void errorNotUnique(QString nameOrID);
451  void errorRemoveManually(QString path);
452 
456  void currentLandscapeChanged(QString currentLandscapeID,QString currentLandscapeName);
457 
458 private slots:
461  void setAtmosphereBortleLightPollution(const int bIndex);
462 
464  void updateLocationBasedPollution(StelLocation loc);
465 
467  void updateI18n();
468 
469 private:
471  float getAtmosphereLightPollutionLuminance() const;
473  void setAtmosphereLightPollutionLuminance(const float f);
474 
475 
479  QString nameToID(const QString& name) const;
480 
485  QString getLandscapePath(const QString landscapeID) const;
486 
487  Atmosphere* atmosphere; // Atmosphere
488  Cardinals* cardinalsPoints; // Cardinals points
489  Landscape* landscape; // The landscape i.e. the fog, the ground and "decor"
490  Landscape* oldLandscape; // Used only during transitions to newly loaded landscape.
491 
492  // Define whether the observer location is to be updated when the landscape is updated.
493  bool flagLandscapeSetsLocation;
494 
495  bool flagLandscapeAutoSelection;
496 
497  bool flagLightPollutionFromDatabase;
498 
507 
508  // The ID of the currently loaded landscape
509  QString currentLandscapeID;
510 
511  // The ID of the default landscape
512  QString defaultLandscapeID;
513 
516  QStringList packagedLandscapeIDs;
517 
518 };
519 
520 #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.
double defaultMinimalBrightness
A minimal brightness value to keep landscape visible.
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.
bool flagAtmosphereAutoEnabling
Indicate auto-enable atmosphere for planets with atmospheres in location window.
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).
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&#39;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&#39;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&#39;s disc size in bytes.
void setAtmosphereAverageLuminance(const float overrideLuminance)
Override autocomputed value and set average luminance [cd/m^2] of atmosphere.
bool flagLandscapeUseMinimalBrightness
Indicate use of the default minimal brightness value specified in config.ini.
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.
bool flagLandscapeSetsMinimalBrightness
Indicate use of the minimal brightness value specified in the current landscape.ini, if present.
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:121
void setFlagLabels(const bool on)
Set flag for displaying landscape labels.
QString loadLandscapeName(const QString landscapeID)
This function reads a landscape&#39;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&#39;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&#39;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.