Stellarium 0.15.2
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 
57 typedef struct
58 {
59  QString designation;
61  float positionAngle;
62  float separation;
63 } wds;
64 
88 class StarMgr : public StelObjectModule
89 {
90  Q_OBJECT
91  Q_PROPERTY(bool flagStarsDisplayed
92  READ getFlagStars
93  WRITE setFlagStars
94  NOTIFY starsDisplayedChanged)
95  Q_PROPERTY(bool flagLabelsDisplayed
96  READ getFlagLabels
97  WRITE setFlagLabels
98  NOTIFY starLabelsDisplayedChanged)
99  Q_PROPERTY(double labelsAmount
100  READ getLabelsAmount
101  WRITE setLabelsAmount
102  NOTIFY labelsAmountChanged)
103 
104 public:
105  StarMgr(void);
106  ~StarMgr(void);
107 
109  // Methods defined in the StelModule class
117  virtual void init();
118 
120  virtual void draw(StelCore* core);
121 
124  virtual void update(double deltaTime) {labelsFader.update((int)(deltaTime*1000)); starsFader.update((int)(deltaTime*1000));}
125 
127  virtual double getCallOrder(StelModuleActionName actionName) const;
128 
130  // Methods defined in StelObjectManager class
132  virtual QList<StelObjectP > searchAround(const Vec3d& v, double limitFov, const StelCore* core) const;
133 
137  virtual StelObjectP searchByNameI18n(const QString& nameI18n) const;
138 
141  virtual StelObjectP searchByName(const QString& name) const;
142 
148  virtual QStringList listMatchingObjects(const QString& objPrefix, int maxNbItem=5, bool useStartOfWords=false, bool inEnglish=false) const;
150  virtual QStringList listAllObjects(bool inEnglish) const;
151  virtual QStringList listAllObjectsByType(const QString& objType, bool inEnglish) const;
152  virtual QString getName() const { return "Stars"; }
153 
154 public slots:
156  // Methods callable from script and GUI
163  void setLabelColor(const Vec3f& c) {labelColor = c;}
165  Vec3f getLabelColor(void) const {return labelColor;}
166 
168  void setFlagStars(bool b) {starsFader=b; emit starsDisplayedChanged(b);}
170  bool getFlagStars(void) const {return starsFader==true;}
171 
173  void setFlagLabels(bool b) {labelsFader=b; emit starLabelsDisplayedChanged(b);}
175  bool getFlagLabels(void) const {return labelsFader==true;}
176 
180  void setLabelsAmount(double a) {if(a!=labelsAmount){ labelsAmount=a; emit labelsAmountChanged(a);}}
183  double getLabelsAmount(void) const {return labelsAmount;}
184 
186  void setFontSize(float newFontSize);
187 
189  static void setFlagSciNames(bool f) {flagSciNames = f;}
190  static bool getFlagSciNames(void) {return flagSciNames;}
191 
192 public:
194  // Other methods
199  StelObjectP searchHP(int hip) const;
200 
205  static QString getCommonName(int hip);
206 
211  static QString getSciName(int hip);
212 
217  static QString getSciAdditionalName(int hip);
218 
223  static QString getGcvsName(int hip);
224 
229  static QString getWdsName(int hip);
230 
235  static QString getCommonEnglishName(int hip);
236 
241  static QString getAdditionalNames(int hip);
242 
247  static QString getAdditionalEnglishNames(int hip);
248 
253  static QString getCrossIdentificationDesignations(int hip);
254 
259  static QString getGcvsVariabilityType(int hip);
260 
265  static float getGcvsMaxMagnitude(int hip);
266 
271  static int getGcvsMagnitudeFlag(int hip);
272 
278  static float getGcvsMinMagnitude(int hip, bool firstMinimumFlag=true);
279 
284  static QString getGcvsPhotometricSystem(int hip);
285 
290  static double getGcvsEpoch(int hip);
291 
296  static double getGcvsPeriod(int hip);
297 
302  static int getGcvsMM(int hip);
303 
308  static int getWdsLastObservation(int hip);
309 
314  static int getWdsLastPositionAngle(int hip);
315 
320  static float getWdsLastSeparation(int hip);
321 
322  static QString convertToSpectralType(int index);
323  static QString convertToComponentIds(int index);
324 
325  QVariantList getCatalogsDescription() const {return catalogsDescription;}
326 
330  bool checkAndLoadCatalog(const QVariantMap& m);
331 
333  const QList<StelObjectP>& getHipparcosStars() const { return hipparcosStars; }
334 
335 private slots:
337  void updateI18n();
338 
342  void updateSkyCulture(const QString& skyCultureDir);
343 
344 signals:
345  void starLabelsDisplayedChanged(const bool displayed);
346  void starsDisplayedChanged(const bool displayed);
347  void labelsAmountChanged(float a);
348 
349 private:
350 
351  void setCheckFlag(const QString& catalogId, bool b);
352 
353  void copyDefaultConfigFile();
354 
359  int loadCommonNames(const QString& commonNameFile);
360 
364  void loadSciNames(const QString& sciNameFile);
365 
368  void loadGcvs(const QString& GcvsFile);
369 
372  void loadWds(const QString& WdsFile);
373 
376  void loadCrossIdentificationData(const QString& crossIdFile);
377 
379  // TODO: add a non-lame description - what is the purpose of the max search level?
380  int getMaxSearchLevel() const;
381 
383  void loadData(QVariantMap starsConfigFile);
384 
386  void drawPointer(StelPainter& sPainter, const StelCore* core);
387 
389  QList<StelObjectP> hipparcosStars;
390 
391  LinearFader labelsFader;
392  LinearFader starsFader;
393 
394  bool flagStarName;
395  double labelsAmount;
396  bool gravityLabel;
397 
398  int maxGeodesicGridLevel;
399  int lastMaxSearchLevel;
400 
401  // A ZoneArray per grid level
402  QVector<ZoneArray*> gridLevels;
403  static void initTriangleFunc(int lev, int index,
404  const Vec3f &c0,
405  const Vec3f &c1,
406  const Vec3f &c2,
407  void *context)
408  {
409  reinterpret_cast<StarMgr*>(context)->initTriangle(lev, index, c0, c1, c2);
410  }
411 
412  void initTriangle(int lev, int index,
413  const Vec3f &c0,
414  const Vec3f &c1,
415  const Vec3f &c2);
416 
417  HipIndexStruct *hipIndex; // array of Hipparcos stars
418 
419  static QHash<int, QString> commonNamesMap; // the original names from skyculture (star_names.fab)
420  static QHash<int, QString> commonNamesMapI18n; // translated names
421  static QMap<QString, int> commonNamesIndexI18n;
422  static QMap<QString, int> commonNamesIndex;
423 
424  static QHash<int, QString> additionalNamesMap; // additional names
425  static QHash<int, QString> additionalNamesMapI18n;
426  static QMap<QString, int> additionalNamesIndex;
427  static QMap<QString, int> additionalNamesIndexI18n;
428 
429  static QHash<int, QString> sciNamesMapI18n;
430  static QMap<QString, int> sciNamesIndexI18n;
431 
432  static QHash<int, QString> sciAdditionalNamesMapI18n;
433  static QMap<QString, int> sciAdditionalNamesIndexI18n;
434 
435  static QHash<int, varstar> varStarsMapI18n;
436  static QMap<QString, int> varStarsIndexI18n;
437 
438  static QHash<int, wds> wdsStarsMapI18n;
439  static QMap<QString, int> wdsStarsIndexI18n;
440 
441  static QHash<int, int> saoStarsMap;
442  static QMap<int, int> saoStarsIndex;
443  static QHash<int, int> hdStarsMap;
444  static QMap<int, int> hdStarsIndex;
445  static QHash<int, int> hrStarsMap;
446  static QMap<int, int> hrStarsIndex;
447 
448  static QHash<int, QString> referenceMap;
449 
450  QFont starFont;
451  static bool flagSciNames;
452  Vec3f labelColor;
453 
454  StelTextureSP texPointer; // The selection pointer texture
455 
456  class StelObjectMgr* objectMgr;
457 
458  QString starConfigFileFullPath;
459  QVariantMap starSettings;
460  QVariantList catalogsDescription;
461 };
462 
463 
464 #endif // _STARMGR_HPP_
465 
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:170
float separation
Position Angle at date of last satisfactory observation, deg.
Definition: StarMgr.hpp:62
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.
double getLabelsAmount(void) const
Get the amount of star labels.
Definition: StarMgr.hpp:183
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.
int observation
WDS designation.
Definition: StarMgr.hpp:60
void setLabelsAmount(double a)
Set the amount of star labels.
Definition: StarMgr.hpp:180
Implementation of StelFader which implements a linear transition.
Definition: StelFader.hpp:77
float maxmag
Type of variability.
Definition: StarMgr.hpp:46
const QList< StelObjectP > & getHipparcosStars() const
Get the list of all Hipparcos stars.
Definition: StarMgr.hpp:333
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...
Define the StelTextureSP type.
virtual QStringList listAllObjectsByType(const QString &objType, bool inEnglish) const
List all StelObjects by type.
Vec3f getLabelColor(void) const
Get the current color used to label bright stars.
Definition: StarMgr.hpp:165
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...
Special version of QSharedPointer which by default doesn&#39;t delete the referenced pointer when the ref...
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:163
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:175
void setFlagStars(bool b)
Set display flag for Stars.
Definition: StarMgr.hpp:168
float positionAngle
Date of last satisfactory observation, yr.
Definition: StarMgr.hpp:61
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.
Definition: StarMgr.hpp:57
Converts tones in function of the eye adaptation to luminance.
static QString getAdditionalEnglishNames(int hip)
Get the English additional names for a star with a specified Hipparcos catalogue number.
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...
static QString getAdditionalNames(int hip)
Get the (translated) additional names for a star with a specified Hipparcos catalogue number...
virtual void update(double deltaTime)
Update any time-dependent features.
Definition: StarMgr.hpp:124
Stores the star catalogue data.
Definition: StarMgr.hpp:88
static QString getGcvsVariabilityType(int hip)
Get the type of variability for a variable star with a specified Hipparcos catalogue number...
static int getWdsLastPositionAngle(int hip)
Get position angle at date of last satisfactory observation of double star with a Hipparcos catalogue...
Manage the selection and queries on one or more StelObjects.
StelModuleActionName
Define the possible action for which an order is defined.
Definition: StelModule.hpp:121
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 float getWdsLastSeparation(int hip)
Get separation angle at date of last satisfactory observation of double star with a Hipparcos catalog...
static int getWdsLastObservation(int hip)
Get year of last satisfactory observation of double star with a Hipparcos catalogue number...
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.
static QString getWdsName(int hip)
Get the (translated) scientific name for a double star with a specified Hipparcos catalogue number...
QSharedPointer< StelTexture > StelTextureSP
Use shared pointer to simplify memory managment.
void setFlagLabels(bool b)
Set display flag for Star names (labels).
Definition: StarMgr.hpp:173
virtual QStringList listMatchingObjects(const QString &objPrefix, int maxNbItem=5, bool useStartOfWords=false, bool inEnglish=false) const
Find and return the list of at most maxNbItem objects auto-completing the passed object English name...
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:189
virtual StelObjectP searchByNameI18n(const QString &nameI18n) const
Return the matching Stars object&#39;s pointer if exists or NULL.
static QString getCrossIdentificationDesignations(int hip)
Get the cross-identification designations for a star with a specified Hipparcos catalogue number...
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...