// This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Copyright 2003 Liam Girdwood #ifndef _CASTOR_ASTRO_OBJECT_HH #define _CASTOR_ASTRO_OBJECT_HH #include #include #include #include #include /*! \namespace Castor * \brief Astronomical Objects * * All astronmical objects in Nova are contained in the namespace Castor. * */ namespace Castor { /*! \class AstroObject * \brief Abstract base class of all Astronomical Objects * * All astronomical objects in Nova are derived from this * abstract base class. */ class AstroObject { public: /*! \enum element_type * \brief Type of element */ enum element_type { INT = 0, /*!< Object is an Int */ DOUBLE, /*!< Object is a double */ STRING /*!< Object is a std::string */ }; /*! \fn AstroObject() * \brief Constructor */ AstroObject(); /*! \fn ~AstroObject() * \brief Destructor */ ~AstroObject(); /*! \fn virtual bool add_element (std::string& name, element_type type, std::string& value); * \brief Add a data element. */ virtual bool add_element (std::string& name, element_type type, std::string& value); /*! \fn virtual bool check_element (std::string& name); * \brief Is object type known ? */ virtual bool check_element (std::string& name); /*! \fn virtual void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn) = 0; * \brief Get object horizontal position */ virtual void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn) = 0; /*! \fn virtual void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time) = 0; * \brief Get object rise, transit and set time. */ virtual void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time) = 0; /*! \fn void get_posn(double& ra, double& dec) = 0; * \brief Get object Right Ascension and Declination */ virtual void get_equ_posn(double JD, double& ra, double& dec) = 0; /*! \fn double get_mag(double JD = 0) = 0; * \brief Get object Magnitude */ virtual double get_mag(double JD = 0) = 0; /*! \fn void get_id(std::string& id); * \brief Get object identification number. */ void get_id(std::string& id); /*! \fn virtual void get_name(std::string& name); * \brief Get object name. */ virtual void get_name(std::string& name); /*! \fn virtual int save (std::ofstream* file); * \brief Save object to file. */ virtual int save (std::ofstream* file); /*! \fn virtual int load (std::ifstream* file); * \brief Load object from file. */ virtual int load (std::ifstream* file); /*! \fn virtual int init(); * \brief Initialise object. */ virtual int init(); /*! \fn virtual void get_info (std::list& value); * \brief Get object information */ virtual void get_info (std::list& value); /*! \fn virtual void render(double x, double y, double mag_max, Gnome::Canvas::Group& group); * \brief Render object */ virtual void render(double x, double y, double mag_max, Gnome::Canvas::Group& group, bool bright, double ppd = 0) = 0; protected: std::string m_cat_no; /*!< object id */ std::vector m_unknown_elements; /*!< object unknown elements */ /*! \fn void save_item (std::ofstream* file, int value); * \brief Save item to file of type int. */ void save_item (std::ofstream* file, int value); /*! \fn void save_item (std::ofstream* file, double value); * \brief Save item to file of type double. */ void save_item (std::ofstream* file, double value); /*! \fn void save_item (std::ofstream* file, std::string& value); * \brief Save item to file of type std::string. */ void save_item (std::ofstream* file, std::string& value); /*! \fn void load_item (std::ifstream* file, int& value); * \brief Load item from file of type int. */ void load_item (std::ifstream* file, int& value); /*! \fn void load_item (std::ifstream* file, double& value); * \brief Load item from file of type double. */ void load_item (std::ifstream* file, double& value); /*! \fn void load_item (std::ifstream* file, std::string& value); * \brief Load item from file of type std:string. */ void load_item (std::ifstream* file, std::string& value); private: /*! \fn add_unknown_element (std::string& name, element_type type, std::string& value); * \brief add an unknown element type to the object. */ bool add_unknown_element (std::string& name, element_type type, std::string& value); }; }; #endif