• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kstars

starobject.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002                           starobject.cpp  -  K Desktop Planetarium
00003                              -------------------
00004     begin                : Tue Sep 18 2001
00005     copyright            : (C) 2001 by Jason Harris
00006     email                : kstars@30doradus.org
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #include "starobject.h"
00019 #include "kspopupmenu.h"
00020 #include "ksnumbers.h"
00021 
00022 #include <qpainter.h>
00023 #include <qstring.h>
00024 #include <kdebug.h>
00025 
00026 StarObject::StarObject( StarObject &o )
00027     : SkyObject (o)
00028 {
00029     SpType = o.SpType;
00030 //SONAME: deprecated (?) JH
00031 //  soName = o.soName;
00032     PM_RA = o.pmRA();
00033     PM_Dec = o.pmDec();
00034     Parallax = o.parallax();
00035     Multiplicity = o.isMultiple();
00036     Variability = o.isVariable();
00037 }
00038 
00039 StarObject::StarObject( dms r, dms d, float m, QString n, QString n2, QString sptype,
00040         double pmra, double pmdec, double par, bool mult, bool var )
00041     : SkyObject (SkyObject::STAR, r, d, m, n, n2, ""), SpType(sptype), PM_RA(pmra), PM_Dec(pmdec),
00042         Parallax(par), Multiplicity(mult), Variability(var) // SONAME deprecated //, soName( 0 )
00043 {
00044     QString lname;
00045     if ( hasName() ) {
00046         lname = n;
00047         if ( hasName2() ) lname += " (" + gname() + ")";
00048     } else if ( hasName2() )
00049         lname = gname();
00050 
00051     //If genetive name exists, but no primary name, set primary name = genetive name.
00052     if ( hasName2() && !hasName() ) {
00053         setName( gname() );
00054     }
00055 
00056     setLongName(lname);
00057 }
00058 
00059 StarObject::StarObject( double r, double d, float m, QString n, QString n2, QString sptype,
00060         double pmra, double pmdec, double par, bool mult, bool var )
00061     : SkyObject (SkyObject::STAR, r, d, m, n, n2, ""), SpType(sptype), PM_RA(pmra), PM_Dec(pmdec),
00062         Parallax(par), Multiplicity(mult), Variability(var) // SONAME deprecated //, soName( 0 )
00063 {
00064     QString lname;
00065     if ( hasName() ) {
00066         lname = n;
00067         if ( hasName2() )lname += n + " (" + gname() + ")";
00068     } else if ( hasName2() )
00069         lname = gname();
00070 
00071     setLongName(lname);
00072 }
00073 
00074 void StarObject::updateCoords( KSNumbers *num, bool , const dms*, const dms* ) {
00075     SkyPoint::updateCoords( num );
00076     
00077     //Correct for proper motion of stars.  Determine RA and Dec offsets.
00078     //Proper motion is given im milliarcsec per year by the pmRA() and pmDec() functions.
00079     //That is numerically identical to the number of arcsec per millenium, so multiply by 
00080     //KSNumbers::julianMillenia() to find the offsets in arcsec.
00081     setRA( ra()->Hours() + pmRA()*num->julianMillenia() / 15. / cos( dec()->radians() )/3600. );
00082     setDec( dec()->Degrees() + pmDec()*num->julianMillenia()/3600. );
00083 }
00084 
00085 QString StarObject::sptype( void ) const {
00086     return SpType;
00087 }
00088 
00089 QString StarObject::gname( bool useGreekChars ) const {
00090     return greekLetter( useGreekChars ) + " " + constell();
00091 }
00092 
00093 QString StarObject::greekLetter( bool gchar ) const {
00094     QString code = name2().left(3);
00095     QString letter = code;  //in case genitive name is *not* a Greek letter
00096     int alpha = 0x03B1;
00097 
00098     if ( code == "alp" ) gchar ? letter = QString( QChar(alpha + 0) ) : letter = i18n("alpha");
00099     if ( code == "bet" ) gchar ? letter = QString( QChar(alpha + 1) ) : letter = i18n("beta");
00100     if ( code == "gam" ) gchar ? letter = QString( QChar(alpha + 2) ) : letter = i18n("gamma");
00101     if ( code == "del" ) gchar ? letter = QString( QChar(alpha + 3) ) : letter = i18n("delta");
00102     if ( code == "eps" ) gchar ? letter = QString( QChar(alpha + 4) ) : letter = i18n("epsilon");
00103     if ( code == "zet" ) gchar ? letter = QString( QChar(alpha + 5) ) : letter = i18n("zeta");
00104     if ( code == "eta" ) gchar ? letter = QString( QChar(alpha + 6) ) : letter = i18n("eta");
00105     if ( code == "the" ) gchar ? letter = QString( QChar(alpha + 7) ) : letter = i18n("theta");
00106     if ( code == "iot" ) gchar ? letter = QString( QChar(alpha + 8) ) : letter = i18n("iota");
00107     if ( code == "kap" ) gchar ? letter = QString( QChar(alpha + 9) ) : letter = i18n("kappa");
00108     if ( code == "lam" ) gchar ? letter = QString( QChar(alpha +10) ) : letter = i18n("lambda");
00109     if ( code == "mu " ) gchar ? letter = QString( QChar(alpha +11) ) : letter = i18n("mu");
00110     if ( code == "nu " ) gchar ? letter = QString( QChar(alpha +12) ) : letter = i18n("nu");
00111     if ( code == "xi " ) gchar ? letter = QString( QChar(alpha +13) ) : letter = i18n("xi");
00112     if ( code == "omi" ) gchar ? letter = QString( QChar(alpha +14) ) : letter = i18n("omicron");
00113     if ( code == "pi " ) gchar ? letter = QString( QChar(alpha +15) ) : letter = i18n("pi");
00114     if ( code == "rho" ) gchar ? letter = QString( QChar(alpha +16) ) : letter = i18n("rho");
00115     //there are two unicode symbols for sigma;
00116     //skip the first one, the second is more widely used
00117     if ( code == "sig" ) gchar ? letter = QString( QChar(alpha +18) ) : letter = i18n("sigma");
00118     if ( code == "tau" ) gchar ? letter = QString( QChar(alpha +19) ) : letter = i18n("tau");
00119     if ( code == "ups" ) gchar ? letter = QString( QChar(alpha +20) ) : letter = i18n("upsilon");
00120     if ( code == "phi" ) gchar ? letter = QString( QChar(alpha +21) ) : letter = i18n("phi");
00121     if ( code == "chi" ) gchar ? letter = QString( QChar(alpha +22) ) : letter = i18n("chi");
00122     if ( code == "psi" ) gchar ? letter = QString( QChar(alpha +23) ) : letter = i18n("psi");
00123     if ( code == "ome" ) gchar ? letter = QString( QChar(alpha +24) ) : letter = i18n("omega");
00124 
00125     if ( name2().length() && name2().mid(3,1) != " " )
00126         letter += "[" + name2().mid(3,1) + "]";
00127 
00128     return letter;
00129 }
00130 
00131 QString StarObject::constell( void ) const {
00132     QString code = name2().mid(4,3);
00133     if ( code == "And" ) return QString("Andromedae");
00134     if ( code == "Ant" ) return QString("Antliae");
00135     if ( code == "Aps" ) return QString("Apodis");
00136     if ( code == "Aqr" ) return QString("Aquarii");
00137     if ( code == "Aql" ) return QString("Aquilae");
00138     if ( code == "Ara" ) return QString("Arae");
00139     if ( code == "Ari" ) return QString("Arietis");
00140     if ( code == "Aur" ) return QString("Aurigae");
00141     if ( code == "Boo" ) return QString("Bootis");
00142     if ( code == "Cae" ) return QString("Caeli");
00143     if ( code == "Cam" ) return QString("Camelopardalis");
00144     if ( code == "Cnc" ) return QString("Cancri");
00145     if ( code == "CVn" ) return QString("Canum Venaticorum");
00146     if ( code == "CMa" ) return QString("Canis Majoris");
00147     if ( code == "CMi" ) return QString("Canis Minoris");
00148     if ( code == "Cap" ) return QString("Capricorni");
00149     if ( code == "Car" ) return QString("Carinae");
00150     if ( code == "Cas" ) return QString("Cassiopeiae");
00151     if ( code == "Cen" ) return QString("Centauri");
00152     if ( code == "Cep" ) return QString("Cephei");
00153     if ( code == "Cet" ) return QString("Ceti");
00154     if ( code == "Cha" ) return QString("Chamaeleontis");
00155     if ( code == "Cir" ) return QString("Circini");
00156     if ( code == "Col" ) return QString("Columbae");
00157     if ( code == "Com" ) return QString("Comae Berenices");
00158     if ( code == "CrA" ) return QString("Coronae Austrinae");
00159     if ( code == "CrB" ) return QString("Coronae Borealis");
00160     if ( code == "Crv" ) return QString("Corvi");
00161     if ( code == "Crt" ) return QString("Crateris");
00162     if ( code == "Cru" ) return QString("Crucis");
00163     if ( code == "Cyg" ) return QString("Cygni");
00164     if ( code == "Del" ) return QString("Delphini");
00165     if ( code == "Dor" ) return QString("Doradus");
00166     if ( code == "Dra" ) return QString("Draconis");
00167     if ( code == "Equ" ) return QString("Equulei");
00168     if ( code == "Eri" ) return QString("Eridani");
00169     if ( code == "For" ) return QString("Fornacis");
00170     if ( code == "Gem" ) return QString("Geminorum");
00171     if ( code == "Gru" ) return QString("Gruis");
00172     if ( code == "Her" ) return QString("Herculis");
00173     if ( code == "Hor" ) return QString("Horologii");
00174     if ( code == "Hya" ) return QString("Hydrae");
00175     if ( code == "Hyi" ) return QString("Hydri");
00176     if ( code == "Ind" ) return QString("Indi");
00177     if ( code == "Lac" ) return QString("Lacertae");
00178     if ( code == "Leo" ) return QString("Leonis");
00179     if ( code == "LMi" ) return QString("Leonis Minoris");
00180     if ( code == "Lep" ) return QString("Leporis");
00181     if ( code == "Lib" ) return QString("Librae");
00182     if ( code == "Lup" ) return QString("Lupi");
00183     if ( code == "Lyn" ) return QString("Lyncis");
00184     if ( code == "Lyr" ) return QString("Lyrae");
00185     if ( code == "Men" ) return QString("Mensae");
00186     if ( code == "Mic" ) return QString("Microscopii");
00187     if ( code == "Mon" ) return QString("Monocerotis");
00188     if ( code == "Mus" ) return QString("Muscae");
00189     if ( code == "Nor" ) return QString("Normae");
00190     if ( code == "Oct" ) return QString("Octantis");
00191     if ( code == "Oph" ) return QString("Ophiuchi");
00192     if ( code == "Ori" ) return QString("Orionis");
00193     if ( code == "Pav" ) return QString("Pavonis");
00194     if ( code == "Peg" ) return QString("Pegasi");
00195     if ( code == "Per" ) return QString("Persei");
00196     if ( code == "Phe" ) return QString("Phoenicis");
00197     if ( code == "Pic" ) return QString("Pictoris");
00198     if ( code == "Psc" ) return QString("Piscium");
00199     if ( code == "PsA" ) return QString("Piscis Austrini");
00200     if ( code == "Pup" ) return QString("Puppis");
00201     if ( code == "Pyx" ) return QString("Pyxidis");
00202     if ( code == "Ret" ) return QString("Reticuli");
00203     if ( code == "Sge" ) return QString("Sagittae");
00204     if ( code == "Sgr" ) return QString("Sagittarii");
00205     if ( code == "Sco" ) return QString("Scorpii");
00206     if ( code == "Scl" ) return QString("Sculptoris");
00207     if ( code == "Sct" ) return QString("Scuti");
00208     if ( code == "Ser" ) return QString("Serpentis");
00209     if ( code == "Sex" ) return QString("Sextantis");
00210     if ( code == "Tau" ) return QString("Tauri");
00211     if ( code == "Tel" ) return QString("Telescopii");
00212     if ( code == "Tri" ) return QString("Trianguli");
00213     if ( code == "TrA" ) return QString("Trianguli Australis");
00214     if ( code == "Tuc" ) return QString("Tucanae");
00215     if ( code == "UMa" ) return QString("Ursae Majoris");
00216     if ( code == "UMi" ) return QString("Ursae Minoris");
00217     if ( code == "Vel" ) return QString("Velorum");
00218     if ( code == "Vir" ) return QString("Virginis");
00219     if ( code == "Vol" ) return QString("Volantis");
00220     if ( code == "Vul" ) return QString("Vulpeculae");
00221 
00222     return QString("");
00223 }
00224 
00225 void StarObject::draw( QPainter &psky, QPixmap *sky, QPixmap *starpix, int x, int y, bool /*showMultiple*/, double /*scale*/ ) {
00226     //Indicate multiple stars with a short horizontal line
00227     //(only draw this for stars larger than 3 pixels)
00228 //Commenting out for now...
00229 //  if ( showMultiple &&  starpix->width() > 3 ) {
00230 //      int lsize = int(3*starpix->width()/4);  //size of half line segment
00231 //      psky.drawLine( x - lsize, y, x + lsize, y );
00232 //  }
00233 
00234     //Only bitBlt() if we are drawing to the sky pixmap
00235     if ( psky.device() == sky )
00236         bitBlt ((QPaintDevice *) sky, x - starpix->width()/2, y - starpix->height()/2, starpix );
00237     else
00238         psky.drawPixmap( x - starpix->width()/2, y - starpix->height()/2, *starpix );
00239 
00240 }
00241 
00242 void StarObject::drawLabel( QPainter &psky, int x, int y, double zoom, bool drawName, bool drawMag, double scale ) {
00243     QString sName( i18n("star") + " " );
00244     if ( drawName ) {
00245         if ( name() != "star" ) sName = translatedName() + " ";
00246         else if ( longname() != "star" ) sName = translatedLongName() + " ";
00247     }
00248     if ( drawMag ) {
00249         if ( drawName )
00250             sName += QString().sprintf("%.1f", mag() );
00251         else 
00252             sName = QString().sprintf("%.1f", mag() );
00253     }
00254 
00255     int offset = int( scale * (6 + int(0.5*(5.0-mag())) + int(0.01*( zoom/500. )) ));
00256 
00257     psky.drawText( x+offset, y+offset, sName );
00258 }
00259 

kstars

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

API Reference

Skip menu "API Reference"
  • keduca
  • kstars
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal