00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifdef HAVE_CONFIG_H
00024 # include <simgear_config.h>
00025 #endif
00026
00027 #include <simgear/debug/logstream.hxx>
00028 #include <simgear/misc/sg_path.hxx>
00029 #include <simgear/misc/sgstream.hxx>
00030
00031 #include "stardata.hxx"
00032
00033 #if defined (_MSC_VER)
00034 using std::getline;
00035 #endif
00036
00037
00038 SGStarData::SGStarData( const SGPath& path )
00039 {
00040 load(path);
00041 }
00042
00043
00044
00045 SGStarData::~SGStarData() {
00046 }
00047
00048
00049 bool SGStarData::load( const SGPath& path ) {
00050
00051 _stars.clear();
00052
00053
00054 SGPath tmp = path;
00055 tmp.append( "stars" );
00056 SG_LOG( SG_ASTRO, SG_INFO, " Loading stars from " << tmp.str() );
00057
00058 sg_gzifstream in( tmp.str() );
00059 if ( ! in.is_open() ) {
00060 SG_LOG( SG_ASTRO, SG_ALERT, "Cannot open star file: "
00061 << tmp.str() );
00062 return false;
00063 }
00064
00065 double ra, dec, mag;
00066 char c;
00067 string name;
00068
00069
00070 while ( ! in.eof() ) {
00071 in >> skipcomment;
00072
00073 getline( in, name, ',' );
00074
00075
00076
00077 while ( in.get(c) ) {
00078 if ( (c != ' ') && (c != ',') ) {
00079
00080 in.putback(c);
00081 break;
00082 }
00083 }
00084
00085 in >> ra;
00086
00087
00088 while ( in.get(c) ) {
00089 if ( (c != ' ') && (c != ',') ) {
00090
00091 in.putback(c);
00092 break;
00093 }
00094 }
00095
00096 in >> dec;
00097
00098
00099 while ( in.get(c) ) {
00100 if ( (c != ' ') && (c != ',') ) {
00101
00102 in.putback(c);
00103 break;
00104 }
00105 }
00106
00107 in >> mag;
00108
00109
00110 _stars.push_back(SGVec3d(ra, dec, mag));
00111 }
00112
00113 SG_LOG( SG_ASTRO, SG_INFO, " Loaded " << _stars.size() << " stars" );
00114
00115 return true;
00116 }