00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
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
00031
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)
00043 {
00044 QString lname;
00045 if ( hasName() ) {
00046 lname = n;
00047 if ( hasName2() ) lname += " (" + gname() + ")";
00048 } else if ( hasName2() )
00049 lname = gname();
00050
00051
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)
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
00078
00079
00080
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;
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
00116
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 , double ) {
00226
00227
00228
00229
00230
00231
00232
00233
00234
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