Stellarium 0.15.0
StelObject.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 _STELOBJECT_HPP_
21 #define _STELOBJECT_HPP_
22 
23 #include "VecMath.hpp"
24 #include "StelObjectType.hpp"
25 #include "StelRegionObject.hpp"
26 
27 #include <QFlags>
28 #include <QString>
29 
30 class StelCore;
31 
37 {
38  //Required for Q_FLAGS macro, this requires this header to be MOC'ed
39  Q_GADGET
40  Q_FLAGS(InfoStringGroupFlags InfoStringGroup)
41 public:
48  {
49  Name = 0x00000001,
50  CatalogNumber = 0x00000002,
51  Magnitude = 0x00000004,
52  RaDecJ2000 = 0x00000008,
53  RaDecOfDate = 0x00000010,
54  AltAzi = 0x00000020,
55  Distance = 0x00000040,
56  Size = 0x00000080,
57  Extra = 0x00000100,
58  HourAngle = 0x00000200,
59  AbsoluteMagnitude = 0x00000400,
60  GalacticCoord = 0x00000800,
61  ObjectType = 0x00001000,
62  EclipticCoord = 0x00002000,
63  EclipticCoordXYZ = 0x00004000,
64  NoFont = 0x00008000,
65  PlainText = 0x00010000,
66 // TODO GZ
67 // RaDecJ2000Planetocentric = 0x00020000, //!< The planetocentric equatorial position (J2000 ref) [Mostly to compare with almanacs]
68 // RaDecOfDatePlanetocentric = 0x00040000 //!< The planetocentric equatorial position (of date)
69 // // and split Ecliptical into
70 // EclipticCoordJ2000 = 0x00002000, //!< The ecliptic position w.r.t. ecliptic of eq.J2000.0
71 // EclipticCoordOfDate = 0x00002000, //!< The ecliptic position w.r.t. ecliptic of eq. of date
72 
73 
74  };
75  Q_DECLARE_FLAGS(InfoStringGroup, InfoStringGroupFlags)
76 
77 
82 
83  virtual ~StelObject() {}
84 
88 
91  virtual Vec3d getPointInRegion() const {return getJ2000EquatorialPos(NULL);}
92 
99  virtual QString getInfoString(const StelCore *core, const InfoStringGroup& flags=StelObject::AllInfo) const = 0;
100 
102  virtual QString getType() const = 0;
103 
105  virtual QString getEnglishName() const = 0;
106 
108  virtual QString getNameI18n() const = 0;
109 
111  virtual Vec3d getJ2000EquatorialPos(const StelCore* core) const = 0;
112 
116  Vec3d getEquinoxEquatorialPos(const StelCore* core) const;
117 
119  Vec3d getGalacticPos(const StelCore* core) const;
120 
124  Vec3d getSiderealPosGeometric(const StelCore* core) const;
125 
129  Vec3d getSiderealPosApparent(const StelCore* core) const;
130 
134  Vec3d getAltAzPosGeometric(const StelCore* core) const;
135 
139  Vec3d getAltAzPosApparent(const StelCore* core) const;
140 
144  Vec3d getAltAzPosAuto(const StelCore* core) const;
145 
147  virtual float getVMagnitude(const StelCore* core) const;
148 
151  float getVMagnitudeWithExtinction(const StelCore* core) const;
152 
155  virtual float getSelectPriority(const StelCore*) const;
156 
158  virtual Vec3f getInfoColor() const {return Vec3f(1,1,1);}
159 
161  virtual double getCloseViewFov(const StelCore*) const {return 10.;}
162 
164  virtual double getSatellitesFov(const StelCore*) const {return -1.;}
165  virtual double getParentSatellitesFov(const StelCore*) const {return -1.;}
166 
170  virtual double getAngularSize(const StelCore* core) const = 0;
171 
172 protected:
173 
175  QString getPositionInfoString(const StelCore *core, const InfoStringGroup& flags) const;
176 
178  void postProcessInfoString(QString& str, const InfoStringGroup& flags) const;
179 private:
180  static int stelObjectPMetaTypeID;
181 };
182 
183 Q_DECLARE_OPERATORS_FOR_FLAGS(StelObject::InfoStringGroup)
184 
185 #endif // _STELOBJECT_HPP_
Vec3d getAltAzPosAuto(const StelCore *core) const
Get observer-centered alt/az position It is the automatic position, i.e.
static const InfoStringGroupFlags AllInfo
A pre-defined set of specifiers for the getInfoString flags argument to getInfoString.
Definition: StelObject.hpp:78
The type of the object (star, planet, etc.)
Definition: StelObject.hpp:61
virtual double getAngularSize(const StelCore *core) const =0
Return the angular radius of a circle containing the object as seen from the observer with the circle...
virtual QString getInfoString(const StelCore *core, const InfoStringGroup &flags=StelObject::AllInfo) const =0
Write I18n information about the object in QString.
Magnitude related data.
Definition: StelObject.hpp:51
virtual QString getType() const =0
Return object's type. It should be the name of the class.
QString getPositionInfoString(const StelCore *core, const InfoStringGroup &flags) const
Format the positional info string contain J2000/of date/altaz/hour angle positions for the object...
Vec3d getAltAzPosGeometric(const StelCore *core) const
Get observer-centered alt/az position It is the geometric position, i.e.
The base abstract class for sky objects used in Stellarium like Stars, Planets, Constellations etc...
Definition: StelObject.hpp:36
The galactic position.
Definition: StelObject.hpp:60
A shared pointer on a SphericalRegion.
virtual float getSelectPriority(const StelCore *) const
Return a priority value which is used to discriminate objects by priority As for magnitudes, the lower is the higher priority.
The position (Altitude/Azimuth)
Definition: StelObject.hpp:54
virtual double getCloseViewFov(const StelCore *) const
Return the best FOV in degree to use for a close view of the object.
Definition: StelObject.hpp:161
The ecliptic position, XYZ of VSOP87A (used mainly for debugging, not public)
Definition: StelObject.hpp:63
Main class for Stellarium core processing.
Definition: StelCore.hpp:48
The hour angle + DE (of date)
Definition: StelObject.hpp:58
The ecliptic position.
Definition: StelObject.hpp:62
virtual Vec3d getJ2000EquatorialPos(const StelCore *core) const =0
Get observer-centered equatorial coordinates at equinox J2000.
Info about an object's distance.
Definition: StelObject.hpp:55
Special SphericalRegion for a point on the sphere.
Vec3d getEquinoxEquatorialPos(const StelCore *core) const
Get observer-centered equatorial coordinate at the current equinox The frame has it's Z axis at the p...
Strip HTML tags from output.
Definition: StelObject.hpp:65
virtual Vec3f getInfoColor() const
Get a color used to display info about the object.
Definition: StelObject.hpp:158
InfoStringGroupFlags
Used as named bitfield flags as specifiers to filter results of getInfoString.
Definition: StelObject.hpp:47
virtual QString getEnglishName() const =0
Return object's name in english.
void postProcessInfoString(QString &str, const InfoStringGroup &flags) const
Apply post processing on the info string.
The equatorial position (J2000 ref)
Definition: StelObject.hpp:52
Define the StelObjectP type.
virtual SphericalRegionP getRegion() const
Default implementation of the getRegion method.
Definition: StelObject.hpp:87
The equatorial position (of date)
Definition: StelObject.hpp:53
An object's name.
Definition: StelObject.hpp:49
Catalog numbers.
Definition: StelObject.hpp:50
virtual float getVMagnitude(const StelCore *core) const
Return object's apparent V magnitude as seen from observer, without including extinction.
virtual Vec3d getPointInRegion() const
Default implementation of the getPointInRegion method.
Definition: StelObject.hpp:91
virtual QString getNameI18n() const =0
Return translated object's name.
Vec3d getSiderealPosApparent(const StelCore *core) const
Get observer-centered hour angle + declination (at current equinox) It is the apparent position...
The absolute magnitude.
Definition: StelObject.hpp:59
Simple abstract class defining basic methods implemented by all objects that need to be stored in a S...
Vec3d getAltAzPosApparent(const StelCore *core) const
Get observer-centered alt/az position It is the apparent position, i.e.
float getVMagnitudeWithExtinction(const StelCore *core) const
Return object's apparent V magnitude as seen from observer including extinction.
static const InfoStringGroupFlags ShortInfo
A pre-defined set of specifiers for the getInfoString flags argument to getInfoString.
Definition: StelObject.hpp:81
Info about an object's size.
Definition: StelObject.hpp:56
Vec3d getSiderealPosGeometric(const StelCore *core) const
Get observer-centered hour angle + declination (at current equinox) It is the geometric position...
Derived class-specific extra fields.
Definition: StelObject.hpp:57
Vec3d getGalacticPos(const StelCore *core) const
Get observer-centered galactic coordinates.
virtual double getSatellitesFov(const StelCore *) const
Return the best FOV in degree to use for a global view of the object satellite system (if there are s...
Definition: StelObject.hpp:164