• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

kstars

  • sources
  • kde-4.12
  • kdeedu
  • kstars
  • kstars
  • skycomponents
planetmoonscomponent.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  planetmoonscomponent.cpp - K Desktop Planetarium
3  -------------------
4  begin : Sat Mar 13 2009
5  copyright : (C) 2009 by Vipul Kumar Singh, Médéric Boquien
6  email : vipulkrsingh@gmail.com, mboquien@free.fr
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
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. *
15  * *
16  ***************************************************************************/
17 
18 #include "planetmoonscomponent.h"
19 
20 #include <QList>
21 #include <QPoint>
22 
23 #include "skyobjects/jupitermoons.h"
24 #include "skyobjects/ksplanetbase.h"
25 #include "kstarsdata.h"
26 #include "skymap.h"
27 #include "skyobjects/skypoint.h"
28 #include "skyobjects/trailobject.h"
29 #include "dms.h"
30 #include "Options.h"
31 #include "solarsystemsinglecomponent.h"
32 #include "solarsystemcomposite.h"
33 #include "skylabeler.h"
34 #include "skypainter.h"
35 
36 #include "projections/projector.h"
37 
38 PlanetMoonsComponent::PlanetMoonsComponent( SkyComposite *p,
39  SolarSystemSingleComponent *planetComponent,
40  KSPlanetBase::Planets _planet ) :
41  SkyComponent( p ),
42  planet( _planet ),
43  pmoons( 0 ),
44  m_Planet( planetComponent )
45 {
46  /*
47  if (planet == KSPlanetBase::JUPITER)
48  pmoons = new JupiterMoons();
49  else
50  pmoons = new SaturnMoons();
51  */
52  Q_ASSERT( planet == KSPlanetBase::JUPITER );
53  delete pmoons;
54  pmoons = new JupiterMoons();
55  int nmoons = pmoons->nMoons();
56  for ( int i=0; i<nmoons; ++i )
57  objectNames(SkyObject::MOON).append( pmoons->name(i) );
58 }
59 
60 PlanetMoonsComponent::~PlanetMoonsComponent()
61 {
62  delete pmoons;
63 }
64 
65 bool PlanetMoonsComponent::selected() {
66  return m_Planet->selected();
67 }
68 
69 void PlanetMoonsComponent::update( KSNumbers * )
70 {
71  KStarsData *data = KStarsData::Instance();
72  if ( selected() )
73  pmoons->EquatorialToHorizontal( data->lst(), data->geo()->lat() );
74 }
75 
76 void PlanetMoonsComponent::updateMoons( KSNumbers *num )
77 {
78  //FIXME: evil cast
79  if ( selected() )
80  pmoons->findPosition( num, m_Planet->planet(), (KSSun*)(parent()->findByName( "Sun" )) );
81 }
82 
83 SkyObject* PlanetMoonsComponent::findByName( const QString &name ) {
84  int nmoons = pmoons->nMoons();
85 
86  for ( int i=0; i<nmoons; ++i ) {
87  TrailObject *moon = pmoons->moon(i);
88  if ( QString::compare( moon->name(), name, Qt::CaseInsensitive ) == 0 ||
89  QString::compare( moon->longname(), name, Qt::CaseInsensitive ) == 0 ||
90  QString::compare( moon->name2(), name, Qt::CaseInsensitive ) == 0 )
91  return moon;
92  }
93 
94  return 0;
95 }
96 
97 SkyObject* PlanetMoonsComponent::objectNearest( SkyPoint *p, double &maxrad ) {
98  SkyObject *oBest = 0;
99  int nmoons = pmoons->nMoons();
100 
101  for ( int i=0; i<nmoons; ++i ) {
102  SkyObject *moon = pmoons->moon(i);
103  double r = moon->angularDistanceTo( p ).Degrees();
104  if ( r < maxrad ) {
105  maxrad = r;
106  oBest = moon;
107  }
108  }
109  return oBest;
110 }
111 
112 void PlanetMoonsComponent::draw( SkyPainter *skyp )
113 {
114  if( !(planet == KSPlanetBase::JUPITER && Options::showJupiter() ) )
115  return;
116 
117  //In order to get the z-order right for the moons and the planet,
118  //we need to first draw the moons that are further away than the planet,
119  //then re-draw the planet, then draw the moons nearer than the planet.
120  QList<TrailObject*> frontMoons;
121  int nmoons = pmoons->nMoons();
122 
123  for ( int i=0; i<nmoons; ++i ) {
124  if ( pmoons->z(i) < 0.0 ) { //Moon is nearer than the planet
125  frontMoons.append( pmoons->moon(i) );
126  } else {
127  //Draw Moons that are further than the planet
128  skyp->drawPointSource( pmoons->moon(i), pmoons->moon(i)->mag() );
129  }
130  }
131 
132  //Now redraw the planet
133  m_Planet->draw( skyp );
134 
135  //Now draw the remaining moons, as stored in frontMoons
136  foreach ( TrailObject *moon, frontMoons ) {
137  skyp->drawPointSource( moon, moon->mag() );
138  }
139 
140  //Draw Moon name labels if at high zoom
141  if ( ! (Options::showPlanetNames() && Options::zoomFactor() > 50.*MINZOOM) ) return;
142  for ( int i=0; i<nmoons; ++i ) {
143  /*
144  if (planet ==KSPlanetBase::SATURN)
145  SkyLabeler::AddLabel( pmoons->moon(i), SkyLabeler::SATURN_MOON_LABEL );
146  else
147  */
148  SkyLabeler::AddLabel( pmoons->moon(i), SkyLabeler::JUPITER_MOON_LABEL );
149  }
150 }
151 
152 void PlanetMoonsComponent::drawTrails( SkyPainter *skyp ) {
153  if( ! selected() )
154  return;
155  int nmoons = pmoons->nMoons();
156  for( int i=0; i<nmoons; ++i )
157  pmoons->moon(i)->drawTrail(skyp);
158 }
PlanetMoons::EquatorialToHorizontal
void EquatorialToHorizontal(const dms *LSTh, const dms *lat)
Convert the RA,Dec coordinates of each moon to Az,Alt.
Definition: planetmoons.cpp:38
ksplanetbase.h
SkyPainter::drawPointSource
virtual bool drawPointSource(SkyPoint *loc, float mag, char sp= 'A')=0
Draw a point source (e.g., a star).
PlanetMoonsComponent::~PlanetMoonsComponent
~PlanetMoonsComponent()
Destructor.
Definition: planetmoonscomponent.cpp:60
KStarsData
KStarsData is the backbone of KStars.
Definition: kstarsdata.h:66
SkyComponent::parent
SkyComposite * parent()
Definition: skycomponent.h:82
solarsystemsinglecomponent.h
KSSun
Child class of KSPlanetBase; encapsulates information about the Sun.
Definition: kssun.h:31
KSPlanetBase::JUPITER
Definition: ksplanetbase.h:82
SolarSystemSingleComponent::draw
virtual void draw(SkyPainter *skyp)
Draw the object on the SkyMap skyp a pointer to the SkyPainter to use.
Definition: solarsystemsinglecomponent.cpp:92
SkyObject::longname
virtual QString longname(void) const
Definition: skyobject.h:140
KStarsData::lst
dms * lst()
Definition: kstarsdata.h:161
KStarsData::Instance
static KStarsData * Instance()
Definition: kstarsdata.h:92
dms::Degrees
const double & Degrees() const
Definition: dms.h:98
PlanetMoonsComponent::objectNearest
SkyObject * objectNearest(SkyPoint *p, double &maxrad)
Find the SkyObject nearest the given SkyPoint.
Definition: planetmoonscomponent.cpp:97
SkyComponent
SkyComponent represents an object on the sky map.
Definition: skycomponent.h:44
skypainter.h
KStarsData::geo
GeoLocation * geo()
Definition: kstarsdata.h:164
PlanetMoonsComponent::findByName
SkyObject * findByName(const QString &name)
Definition: planetmoonscomponent.cpp:83
PlanetMoonsComponent::updateMoons
virtual void updateMoons(KSNumbers *num)
Definition: planetmoonscomponent.cpp:76
PlanetMoonsComponent::selected
virtual bool selected()
Definition: planetmoonscomponent.cpp:65
solarsystemcomposite.h
PlanetMoonsComponent::drawTrails
virtual void drawTrails(SkyPainter *skyp)
Draw trails for objects.
Definition: planetmoonscomponent.cpp:152
SkyLabeler::JUPITER_MOON_LABEL
Definition: skylabeler.h:124
dms.h
SkyPoint
The sky coordinates of a point in the sky.
Definition: skypoint.h:50
PlanetMoons::z
double z(int i) const
Definition: planetmoons.h:113
MINZOOM
#define MINZOOM
Definition: kstarsdata.h:38
jupitermoons.h
PlanetMoonsComponent::update
virtual void update(KSNumbers *num)
Update the sky position(s) of this component.
Definition: planetmoonscomponent.cpp:69
PlanetMoons::moon
TrailObject * moon(int id)
Definition: planetmoons.h:56
skymap.h
PlanetMoons::findPosition
virtual void findPosition(const KSNumbers *num, const KSPlanetBase *pla, const KSSun *sunptr)=0
Find the positions of each Moon, relative to the planet.
Options::showJupiter
static bool showJupiter()
Get Draw Jupiter in the sky map?
Definition: Options.h:2082
SkyObject::MOON
Definition: skyobject.h:110
trailobject.h
SkyComposite
SkyComposite is a kind of container class for SkyComponent objects.
Definition: skycomposite.h:43
planetmoonscomponent.h
skypoint.h
PlanetMoonsComponent::PlanetMoonsComponent
PlanetMoonsComponent(SkyComposite *parent, SolarSystemSingleComponent *pla, KSPlanetBase::Planets planet)
Constructor parent pointer to the parent SkyComposite.
Definition: planetmoonscomponent.cpp:38
Options.h
SkyObject::name2
QString name2(void) const
Definition: skyobject.h:132
SkyObject::mag
float mag(void) const
Definition: skyobject.h:182
KSNumbers
There are several time-dependent values used in position calculations, that are not specific to an ob...
Definition: ksnumbers.h:43
KSPlanetBase::Planets
Planets
Definition: ksplanetbase.h:82
GeoLocation::lat
const dms * lat() const
Definition: geolocation.h:79
Options::showPlanetNames
static bool showPlanetNames()
Get Label planet names in the sky map?
Definition: Options.h:1968
PlanetMoons::name
QString name(int id) const
Definition: planetmoons.cpp:34
Options::zoomFactor
static double zoomFactor()
Get Zoom Factor, in pixels per radian.
Definition: Options.h:2531
TrailObject
provides a SkyObject with an attachable Trail
Definition: trailobject.h:33
SolarSystemSingleComponent
This class encapsulates some methods which are shared between all single-object solar system componen...
Definition: solarsystemsinglecomponent.h:40
JupiterMoons
Implements the four largest moons of Jupiter.
Definition: jupitermoons.h:41
TrailObject::drawTrail
void drawTrail(SkyPainter *skyp) const
Definition: trailobject.cpp:85
projector.h
SolarSystemSingleComponent::planet
KSPlanetBase * planet()
Return pointer to stored planet object.
Definition: solarsystemsinglecomponent.h:49
kstarsdata.h
skylabeler.h
SkyObject::name
virtual QString name(void) const
Definition: skyobject.h:124
SkyComponent::objectNames
QHash< int, QStringList > & objectNames()
Definition: skycomponent.h:127
SkyObject
Provides all necessary information about an object in the sky: its coordinates, name(s), type, magnitude, and QStringLists of URLs for images and webpages regarding the object.
Definition: skyobject.h:46
SolarSystemSingleComponent::selected
virtual bool selected()
Definition: solarsystemsinglecomponent.cpp:54
SkyPainter
Draws things on the sky, without regard to backend.
Definition: skypainter.h:47
SkyPoint::angularDistanceTo
dms angularDistanceTo(const SkyPoint *sp, double *const positionAngle=0) const
Computes the angular distance between two SkyObjects.
Definition: skypoint.cpp:608
SkyLabeler::AddLabel
static void AddLabel(SkyObject *obj, label_t type)
static version of addLabel() below.
Definition: skylabeler.h:149
SkyComposite::findByName
virtual SkyObject * findByName(const QString &name)
Search the children of this SkyComposite for a SkyObject whose name matches the argument.
Definition: skycomposite.cpp:56
QList
PlanetMoons::nMoons
int nMoons() const
Definition: planetmoons.h:118
PlanetMoonsComponent::draw
virtual void draw(SkyPainter *skyp)
Draw the object on the SkyMap skyp a pointer to the SkyPainter to use.
Definition: planetmoonscomponent.cpp:112
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:36:20 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kstars

Skip menu "kstars"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • kstars
  • libkdeedu
  •   keduvocdocument
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal