1 /***************************************************************************
2 planetcatalog.cpp - description
4 begin : Mon Feb 18 2002
5 copyright : (C) 2002 by Mark Hollomon
6 email : mhh@mindspring.com
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
20 #include "planetcatalog.h"
22 #include "kstarsdata.h"
23 #include "ksnumbers.h"
24 #include "ksplanetbase.h"
29 #include "skyobject.h"
30 #include "objectnamelist.h"
32 PlanetCatalog::PlanetCatalog(KStarsData
*dat
) : Earth(0), Sun(0), kd(dat
) {
33 planets
.setAutoDelete(true);
36 PlanetCatalog::~PlanetCatalog() {
38 // do NOT delete Sun. It is also in the QList
39 // and will be deleted automatically.
46 bool PlanetCatalog::initialize() {
49 Earth
= new KSPlanet( kd
, I18N_NOOP( "Earth" ), "", 12756.28 /*diameter in km*/ );
50 if (!Earth
->loadData())
53 Sun
= new KSSun( kd
, "sun.png", 1392000. /*diameter in km*/ );
54 if (Sun
->loadData()) {
58 ksp
= new KSPluto( kd
, "pluto.png", 2320. /*diameter in km*/ );
59 if (ksp
->loadData()) {
63 ksp
= new KSPlanet( kd
, I18N_NOOP( "Mercury" ), "mercury.png", 4879.4 /*diameter in km*/ );
64 if (ksp
->loadData()) {
68 ksp
= new KSPlanet( kd
, I18N_NOOP( "Venus" ), "venus.png", 12103.6 /*diameter in km*/ );
69 if (ksp
->loadData()) {
73 ksp
= new KSPlanet( kd
, I18N_NOOP( "Mars" ), "mars.png", 6792.4 /*diameter in km*/ );
74 if (ksp
->loadData()) {
78 ksp
= new KSPlanet( kd
, I18N_NOOP( "Jupiter" ), "jupiter.png", 142984. /*diameter in km*/ );
79 if (ksp
->loadData()) {
83 ksp
= new KSPlanet( kd
, I18N_NOOP( "Saturn" ), "saturn.png", 120536. /*diameter in km*/ );
84 if (ksp
->loadData()) {
88 ksp
= new KSPlanet( kd
, I18N_NOOP( "Uranus" ), "uranus.png", 51118. /*diameter in km*/ );
89 if (ksp
->loadData()) {
93 ksp
= new KSPlanet( kd
, I18N_NOOP( "Neptune" ), "neptune.png", 49572. /*diameter in km*/ );
94 if (ksp
->loadData()) {
101 void PlanetCatalog::addObject( ObjectNameList
&ObjNames
) const {
102 QPtrListIterator
<KSPlanetBase
> it(planets
);
104 for (KSPlanetBase
*ksp
= it
.toFirst(); ksp
!= 0; ksp
= ++it
) {
105 ObjNames
.append( ksp
);
109 void PlanetCatalog::findPosition( const KSNumbers
*num
, const dms
*lat
, const dms
*LST
) {
110 Earth
->findPosition(num
);
111 for (KSPlanetBase
* ksp
= planets
.first(); ksp
!= 0; ksp
= planets
.next()) {
112 ksp
->findPosition(num
, lat
, LST
, Earth
);
116 void PlanetCatalog::EquatorialToHorizontal( dms
*LST
, const dms
*lat
) {
117 for (KSPlanetBase
* ksp
= planets
.first(); ksp
!= 0; ksp
= planets
.next()) {
118 ksp
->EquatorialToHorizontal( LST
, lat
);
119 if ( ksp
->hasTrail() ) ksp
->updateTrail( LST
, lat
);
123 bool PlanetCatalog::isPlanet(SkyObject
*so
) const {
127 QPtrListIterator
<KSPlanetBase
> it(planets
);
129 for (KSPlanetBase
*ksp
= it
.toFirst(); ksp
!= 0; ksp
= ++it
) {
137 KSPlanetBase
*PlanetCatalog::findByName( const QString n
) const {
141 QPtrListIterator
<KSPlanetBase
> it(planets
);
143 for (KSPlanetBase
*ksp
= it
.toFirst(); ksp
!= 0; ksp
= ++it
) {
144 if (ksp
->name() == n
)
148 kdDebug() << k_funcinfo
<< "could not find planet named " << n
<< endl
;
153 static double dist_squared(const SkyPoint
*a
, const SkyPoint
*b
) {
154 double dRA
= a
->ra()->Hours() - b
->ra()->Hours();
155 double dDec
= a
->dec()->Degrees() - b
->dec()->Degrees();
156 double f
= 15.0*cos( a
->dec()->radians() );
158 return f
*f
*dRA
*dRA
+ dDec
*dDec
;
161 SkyObject
*PlanetCatalog::findClosest(const SkyPoint
*p
, double &r
) const {
162 QPtrListIterator
<KSPlanetBase
> it(planets
);
163 SkyObject
*found
= 0;
165 double rmin
= 100000.0;
167 for (KSPlanetBase
*ksp
= it
.toFirst(); ksp
!= 0; ksp
= ++it
) {
168 trialr
= dist_squared(ksp
, p
);
180 #include "planetcatalog.moc"