// 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_PLUTO_HH
#define _CASTOR_PLUTO_HH

#include "planet.hh"

namespace Castor
{
	
class Pluto : public Planet
{
	public:
		Pluto();
		~Pluto();
	
		/*! \fn void get_posn(double& ra, double& dec);
		* \brief Get object Right Ascension and Declination
		*/
		void get_equ_posn(double JD, double& ra, double& dec);
		
		/*! \fn void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn);
		* \brief Get object horizontal position
		*/
		void get_hrz_posn (double JD, ln_lnlat_posn* observer, ln_hrz_posn* posn);
		
		/*! \fn void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time);
		* \brief Get object rise, transit and set time.
		*/
		void get_rst_time (double JD, ln_lnlat_posn* observer, ln_rst_time* time);
		
		/*! \fn double get_mag (double JD);
		* \brief Calculate the visible magnitude of object
		*/ 
		double get_mag(double JD);
				
		/*! \fn void get_id(std::string& id);
		* \brief Get object identification number.
		*/
		void get_id(std::string& id);
		
		/*! \fn void get_name(std::string& name);
		* \brief Get object name.
		*/
		void get_name(std::string& name);
		
		/*! \fn virtual void get_info (std::list<Glib::ustring>& value);
		* \brief Get object information
		*/
		void get_info (std::list<Glib::ustring>& value);
		
		/*! \fn void render(double x, double y, double mag_max, Gnome::Canvas::Group& group);
		* \brief Render object
		*/
		void render(double x, double y, double mag_max, Gnome::Canvas::Group& group, bool bright, double ppd = 0);
	
		/*! \fn double get_equ_sdiam (double JD);
		* \brief Calcaluate the equatorial semidiameter of object in arc seconds.
		*/
		double get_equ_sdiam (double JD);
		
		/*! \fn double get_pol_sdiam (double JD)
		* \brief Calcaluate the polar semidiameter of Jupiter in arc seconds.
		*/
		double get_pol_sdiam (double JD);
		
		/*! \fn double get_rst (double JD, struct ln_lnlat_posn * observer, struct ln_rst_time * rst);
		* \brief Calculate the time of rise, set and transit for object.
		*/
		int get_rst (double JD, struct ln_lnlat_posn * observer, struct ln_rst_time * rst);
		
		/*! \fn void get_helio_coords (double JD, struct ln_helio_posn * position);
		* \brief Calculate object's heliocentric coordinates
		*/ 
		void get_helio_coords (double JD, struct ln_helio_posn * position);
		
		/*! \fn double get_earth_dist (double JD);
		* \brief Calculate the distance between object and the Earth.
		*/ 
		double get_earth_dist (double JD);
			
		/*! \fn double get_sun_dist (double JD);
		* \brief Calculate the distance between object and the Sun.
		*/ 
		double get_sun_dist (double JD);
		
		/*! \fn double get_disk (double JD);
		* \brief Calculate the illuminated fraction of object's disk
		*/ 
		double get_disk (double JD);
		
		/*! \fn double get_phase (double JD);
		* \brief Calculate the phase angle of object.
		*/ 
		double get_phase (double JD);
		
		/*! \fn void get_rect_helio (double JD, struct ln_rect_posn * position);
		* \brief Calculate object rectangular heliocentric coordinates.
		*/
		void get_rect_helio (double JD, struct ln_rect_posn * position);

		/*! \fn set_render_jd (double JD);
		* \brief Set the cached JD for rendering
		*/
		void set_render_jd (double JD);
};

}

#endif


syntax highlighted by Code2HTML, v. 0.9.1