Stellarium 0.15.0
StarMgr.hpp
1 /*
2  * Stellarium
3  * Copyright (C) 2002 Fabien Chereau
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA.
18  */
19 
20 #ifndef _STARMGR_HPP_
21 #define _STARMGR_HPP_
22 
23 #include <QFont>
24 #include <QVariantMap>
25 #include <QVector>
26 #include "StelFader.hpp"
27 #include "StelObjectModule.hpp"
28 #include "StelTextureTypes.hpp"
29 #include "StelProjectorType.hpp"
30 
31 class StelObject;
32 class StelToneReproducer;
33 class StelProjector;
34 class StelPainter;
35 class QSettings;
36 
37 class ZoneArray;
38 struct HipIndexStruct;
39 
40 static const int RCMAG_TABLE_SIZE = 4096;
41 
42 typedef struct
43 {
44  QString designation;
45  QString vtype;
46  float maxmag;
47  int mflag;
48  float min1mag;
49  float min2mag;
50  QString photosys;
51  double epoch;
52  double period;
53  int Mm;
54  QString stype;
55 } varstar;
56 
80 class StarMgr : public StelObjectModule
81 {
82  Q_OBJECT
83  Q_PROPERTY(bool flagStarsDisplayed
84  READ getFlagStars
85  WRITE setFlagStars
86  NOTIFY starsDisplayedChanged)
87  Q_PROPERTY(bool flagLabelsDisplayed
88  READ getFlagLabels
89  WRITE setFlagLabels
90  NOTIFY starLabelsDisplayedChanged)
91 
92 public:
93  StarMgr(void);
94  ~StarMgr(void);
95 
97  // Methods defined in the StelModule class
105  virtual void init();
106 
108  virtual void draw(StelCore* core);
109 
112  virtual void update(double deltaTime) {labelsFader.update((int)(deltaTime*1000)); starsFader.update((int)(deltaTime*1000));}
113 
115  virtual double getCallOrder(StelModuleActionName actionName) const;
116 
118  // Methods defined in StelObjectManager class
120  virtual QList<StelObjectP > searchAround(const Vec3d& v, double limitFov, const StelCore* core) const;
121 
125  virtual StelObjectP searchByNameI18n(const QString& nameI18n) const;
126 
129  virtual StelObjectP searchByName(const QString& name) const;
130 
136  virtual QStringList listMatchingObjectsI18n(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const;
142  virtual QStringList listMatchingObjects(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false) const;
144  virtual QStringList listAllObjects(bool inEnglish) const;
145  virtual QStringList listAllObjectsByType(const QString& objType, bool inEnglish) const;
146  virtual QString getName() const { return "Stars"; }
147 
148 public slots:
150  // Methods callable from script and GUI
157  void setLabelColor(const Vec3f& c) {labelColor = c;}
159  Vec3f getLabelColor(void) const {return labelColor;}
160 
162  void setFlagStars(bool b) {starsFader=b;}
164  bool getFlagStars(void) const {return starsFader==true;}
165 
167  void setFlagLabels(bool b) {labelsFader=b;}
169  bool getFlagLabels(void) const {return labelsFader==true;}
170 
174  void setLabelsAmount(float a) {labelsAmount=a;}
177  float getLabelsAmount(void) const {return labelsAmount;}
178 
180  void setFontSize(float newFontSize);
181 
183  static void setFlagSciNames(bool f) {flagSciNames = f;}
184  static bool getFlagSciNames(void) {return flagSciNames;}
185 
186 public:
188  // Other methods
193  StelObjectP searchHP(int hip) const;
194 
199  static QString getCommonName(int hip);
200 
205  static QString getSciName(int hip);
206 
211  static QString getSciAdditionalName(int hip);
212 
217  static QString getGcvsName(int hip);
218 
223  static QString getCommonEnglishName(int hip);
224 
229  static QString getCrossIndexDesignations(int hip);
230 
235  static QString getGcvsVariabilityType(int hip);
236 
241  static float getGcvsMaxMagnitude(int hip);
242 
247  static int getGcvsMagnitudeFlag(int hip);
248 
254  static float getGcvsMinMagnitude(int hip, bool firstMinimumFlag=true);
255 
260  static QString getGcvsPhotometricSystem(int hip);
261 
266  static double getGcvsEpoch(int hip);
267 
272  static double getGcvsPeriod(int hip);
273 
278  static int getGcvsMM(int hip);
279 
280  static QString convertToSpectralType(int index);
281  static QString convertToComponentIds(int index);
282 
283  QVariantList getCatalogsDescription() const {return catalogsDescription;}
284 
288  bool checkAndLoadCatalog(const QVariantMap& m);
289 
290 private slots:
292  void updateI18n();
293 
297  void updateSkyCulture(const QString& skyCultureDir);
298 
299 signals:
300  void starLabelsDisplayedChanged(const bool displayed);
301  void starsDisplayedChanged(const bool displayed);
302 
303 private:
304 
305  void setCheckFlag(const QString& catalogId, bool b);
306 
307  void copyDefaultConfigFile();
308 
313  int loadCommonNames(const QString& commonNameFile);
314 
318  void loadSciNames(const QString& sciNameFile);
319 
322  void loadGcvs(const QString& GcvsFile);
323 
326  void loadCrossIndex(const QString& crossIndexFile);
327 
329  // TODO: add a non-lame description - what is the purpose of the max search level?
330  int getMaxSearchLevel() const;
331 
333  void loadData(QVariantMap starsConfigFile);
334 
336  void drawPointer(StelPainter& sPainter, const StelCore* core);
337 
338  LinearFader labelsFader;
339  LinearFader starsFader;
340 
341  bool flagStarName;
342  float labelsAmount;
343  bool gravityLabel;
344 
345  int maxGeodesicGridLevel;
346  int lastMaxSearchLevel;
347 
348  // A ZoneArray per grid level
349  QVector<ZoneArray*> gridLevels;
350  static void initTriangleFunc(int lev, int index,
351  const Vec3f &c0,
352  const Vec3f &c1,
353  const Vec3f &c2,
354  void *context)
355  {
356  reinterpret_cast<StarMgr*>(context)->initTriangle(lev, index, c0, c1, c2);
357  }
358 
359  void initTriangle(int lev, int index,
360  const Vec3f &c0,
361  const Vec3f &c1,
362  const Vec3f &c2);
363 
364  HipIndexStruct *hipIndex; // array of Hipparcos stars
365 
366  static QHash<int, QString> commonNamesMap; // the original names from skyculture (star_names.fab)
367  static QHash<int, QString> commonNamesMapI18n; // translated names
368  static QMap<QString, int> commonNamesIndexI18n;
369  static QMap<QString, int> commonNamesIndex;
370 
371  static QHash<int, QString> sciNamesMapI18n;
372  static QMap<QString, int> sciNamesIndexI18n;
373 
374  static QHash<int, QString> sciAdditionalNamesMapI18n;
375  static QMap<QString, int> sciAdditionalNamesIndexI18n;
376 
377  static QHash<int, varstar> varStarsMapI18n;
378  static QMap<QString, int> varStarsIndexI18n;
379 
380  static QHash<int, int> saoStarsMap;
381  static QMap<int, int> saoStarsIndex;
382  static QHash<int, int> hdStarsMap;
383  static QMap<int, int> hdStarsIndex;
384 
385  QFont starFont;
386  static bool flagSciNames;
387  Vec3f labelColor;
388 
389  StelTextureSP texPointer; // The selection pointer texture
390 
391  class StelObjectMgr* objectMgr;
392 
393  QString starConfigFileFullPath;
394  QVariantMap starSettings;
395  QVariantList catalogsDescription;
396 };
397 
398 
399 #endif // _STARMGR_HPP_
400 
static QString getSciName(int hip)
Get the (translated) scientific name for a star with a specified Hipparcos catalogue number...
static double getGcvsEpoch(int hip)
Get Epoch for maximum light for a variable star with a specified Hipparcos catalogue number...
bool getFlagStars(void) const
Get display flag for Stars.
Definition: StarMgr.hpp:164
static int getGcvsMM(int hip)
Get the rising time or duration of eclipse for a variable star with a specified Hipparcos catalogue n...
int Mm
Period of the variable star (days)
Definition: StarMgr.hpp:53
StelObjectP searchHP(int hip) const
Search by Hipparcos catalogue number.
double epoch
The photometric system for magnitudes.
Definition: StarMgr.hpp:51
Container for Hipparcos information.
Definition: ZoneArray.hpp:64
virtual void init()
Initialize the StarMgr.
float min2mag
First minimum magnitude or amplitude.
Definition: StarMgr.hpp:49
float min1mag
Magnitude flag code.
Definition: StarMgr.hpp:48
virtual StelObjectP searchByName(const QString &name) const
Return the matching star if exists or NULL.
Implementation of StelFader which implements a linear transition.
Definition: StelFader.hpp:77
float maxmag
Type of variability.
Definition: StarMgr.hpp:46
static QString getCrossIndexDesignations(int hip)
Get the cross-index designations for a star with a specified Hipparcos catalogue number.
The base abstract class for sky objects used in Stellarium like Stars, Planets, Constellations etc...
Definition: StelObject.hpp:36
static QString getSciAdditionalName(int hip)
Get the (translated) additional scientific name for a star with a specified Hipparcos catalogue numbe...
A templatized 3d vector compatible with openGL.
Definition: VecMath.hpp:33
Define the StelTextureSP type.
Vec3f getLabelColor(void) const
Get the current color used to label bright stars.
Definition: StarMgr.hpp:159
double period
Epoch for maximum light (Julian days)
Definition: StarMgr.hpp:52
QString vtype
GCVS designation.
Definition: StarMgr.hpp:45
Manages all ZoneData structures of a given StelGeodesicGrid level.
Definition: ZoneArray.hpp:76
static float getGcvsMaxMagnitude(int hip)
Get the magnitude at maximum brightness for a variable star with a specified Hipparcos catalogue numb...
virtual QStringList listMatchingObjects(const QString &objPrefix, int maxNbItem=5, bool useStartOfWords=false) const
Find and return the list of at most maxNbItem objects auto-completing the passed object English name...
static double getGcvsPeriod(int hip)
Get the period for a variable star with a specified Hipparcos catalogue number.
void setLabelColor(const Vec3f &c)
Set the color used to label bright stars.
Definition: StarMgr.hpp:157
QString stype
Rising time or duration of eclipse (%)
Definition: StarMgr.hpp:54
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
bool getFlagLabels(void) const
Get display flag for Star names (labels).
Definition: StarMgr.hpp:169
void setFlagStars(bool b)
Set display flag for Stars.
Definition: StarMgr.hpp:162
static int getGcvsMagnitudeFlag(int hip)
Get the magnitude flag code for a variable star with a specified Hipparcos catalogue number...
Specialization of StelModule which manages a collection of StelObject.
virtual void draw(StelCore *core)
Draw the stars and the star selection indicator if necessary.
void setFontSize(float newFontSize)
Define font size to use for star names display.
bool checkAndLoadCatalog(const QVariantMap &m)
Try to load the given catalog, even if it is marched as unchecked.
void setLabelsAmount(float a)
Set the amount of star labels.
Definition: StarMgr.hpp:174
Converts tones in function of the eye adaptation to luminance.
virtual QStringList listMatchingObjectsI18n(const QString &objPrefix, int maxNbItem=5, bool useStartOfWords=false) const
Find and return the list of at most maxNbItem objects auto-completing the passed object I18n name...
float getLabelsAmount(void) const
Get the amount of star labels.
Definition: StarMgr.hpp:177
Provides functions for performing openGL drawing operations.
Definition: StelPainter.hpp:40
Provide the main interface to all operations of projecting coordinates from sky to screen...
virtual QList< StelObjectP > searchAround(const Vec3d &v, double limitFov, const StelCore *core) const
Return a list containing the stars located inside the limFov circle around position v...
virtual void update(double deltaTime)
Update any time-dependent features.
Definition: StarMgr.hpp:112
Stores the star catalogue data.
Definition: StarMgr.hpp:80
static QString getGcvsVariabilityType(int hip)
Get the type of variability for a variable star with a specified Hipparcos catalogue number...
Manage the selection and queries on one or more StelObjects.
StelModuleActionName
Define the possible action for which an order is defined.
Definition: StelModule.hpp:117
static float getGcvsMinMagnitude(int hip, bool firstMinimumFlag=true)
Get the minimum magnitude or amplitude for a variable star with a specified Hipparcos catalogue numbe...
virtual QStringList listAllObjects(bool inEnglish) const
static QString getGcvsName(int hip)
Get the (translated) scientific name for a variable star with a specified Hipparcos catalogue number...
int mflag
Magnitude at maximum brightness.
Definition: StarMgr.hpp:47
static QString getCommonName(int hip)
Get the (translated) common name for a star with a specified Hipparcos catalogue number.
Define the StelProjectorP type.
QSharedPointer< StelTexture > StelTextureSP
Use shared pointer to simplify memory managment.
void setFlagLabels(bool b)
Set display flag for Star names (labels).
Definition: StarMgr.hpp:167
virtual double getCallOrder(StelModuleActionName actionName) const
Used to determine the order in which the various StelModules are drawn.
static void setFlagSciNames(bool f)
Show scientific or catalog names on stars without common names.
Definition: StarMgr.hpp:183
virtual StelObjectP searchByNameI18n(const QString &nameI18n) const
Return the matching Stars object's pointer if exists or NULL.
QString photosys
Second minimum magnitude or amplitude.
Definition: StarMgr.hpp:50
static QString getCommonEnglishName(int hip)
Get the (English) common name for a star with a specified Hipparcos catalogue number.
static QString getGcvsPhotometricSystem(int hip)
Get the photometric system for a variable star with a specified Hipparcos catalogue number...