00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 #ifndef _SolarEquatorial_h
00077 #define _SolarEquatorial_h
00078
00079 #include "BaseSRF.h"
00080 #include "Coord.h"
00081 #include "Exception.h"
00082
00083 namespace srm
00084 {
00091 class EXPORT_SRM_CPP_DLL SRF_SolarEquatorial: public BaseSRF_3D
00092 {
00093 public:
00097 static SRF_SolarEquatorial* create( SRM_ORM_Code orm,
00098 SRM_RT_Code rt );
00099
00103 static SRF_SolarEquatorial* create( SRM_SRF_Parameters_Info srf_params )
00104 {
00105 return create( srf_params.value.srf_template.orm_code, srf_params.rt_code );
00106 }
00107
00110 Coord3D* createCoordinate3D(SRM_Long_Float coord_comp1,
00111 SRM_Long_Float coord_comp2,
00112 SRM_Long_Float coord_comp3 );
00113
00116 virtual bool isA( SRF_ClassType type ) const;
00117
00120 virtual SRF_ClassType getClassType() const
00121 {
00122 return BaseSRF::SRF_TYP_SEQ;
00123 }
00124
00128 bool isEqual( const SRF_SolarEquatorial &srf ) const;
00129
00133 bool operator==( const SRF_SolarEquatorial &rhs ) const;
00134
00138 SRF_SolarEquatorial* makeCopy() const;
00139
00143 const char* toString();
00144
00145 protected:
00146 SRF_SolarEquatorial( void *impl ) : BaseSRF_3D(impl) {}
00147 SRF_SolarEquatorial &operator =( const SRF_SolarEquatorial & ) { return *this; }
00148 virtual ~SRF_SolarEquatorial() {}
00149 };
00150
00151
00152 inline bool SRF_SolarEquatorial::isA( SRF_ClassType type ) const
00153 {
00154 if (type == BaseSRF::SRF_TYP_SEQ)
00155 return true;
00156 else
00157 return BaseSRF_3D::isA(type);
00158 };
00159
00160
00162 typedef SRF_SolarEquatorial SRF_SEQ;
00163
00164
00169 class EXPORT_SRM_CPP_DLL Coord3D_SolarEquatorial: public Coord3D
00170 {
00171 public:
00174 Coord3D_SolarEquatorial( SRF_SolarEquatorial *srf,
00175 SRM_Long_Float longitude = 0.0,
00176 SRM_Long_Float latitude = 0.0,
00177 SRM_Long_Float radius = 0.0 )
00178 : Coord3D(srf)
00179 {
00180 setComponentValues(longitude, latitude, radius);
00181 }
00182
00185 Coord3D_SolarEquatorial( const Coord3D_SolarEquatorial &coord )
00186 : Coord3D(coord._srf)
00187 {
00188 setComponentValues( coord._values[0], coord._values[1], coord._values[2] );
00189 }
00190
00196 void copyTo( Coord3D_SolarEquatorial &coord ) const
00197 {
00198 if (coord._srf != _srf)
00199 throw Exception( SRM_STATCOD_INVALID_SOURCE_COORDINATE, "copyTo: Coordinate associated with a difference SRF" );
00200
00201 coord._values[0] = _values[0];
00202 coord._values[1] = _values[1];
00203 coord._values[2] = _values[2];
00204 }
00205
00209 bool isEqual( const Coord3D_SolarEquatorial &coord ) const
00210 {
00211 return (_srf == coord._srf &&
00212 _values[0] == coord._values[0] &&
00213 _values[1] == coord._values[1] &&
00214 _values[2] == coord._values[2] );
00215 }
00216
00219 void setComponentValues( SRM_Long_Float longitude, SRM_Long_Float latitude, SRM_Long_Float radius )
00220 {
00221 _values[0] = longitude;
00222 _values[1] = latitude;
00223 _values[2] = radius;
00224 }
00225
00228 SRM_Long_Float get_longitude() const
00229 {
00230 return _values[0];
00231 }
00232
00235 SRM_Long_Float get_latitude() const
00236 {
00237 return _values[1];
00238 }
00239
00242 SRM_Long_Float get_radius() const
00243 {
00244 return _values[2];
00245 }
00246
00249 void set_longitude( SRM_Long_Float value )
00250 {
00251 _values[0] = value;
00252 }
00253
00256 void set_latitude( SRM_Long_Float value )
00257 {
00258 _values[1] = value;
00259 }
00260
00263 void set_radius( SRM_Long_Float value )
00264 {
00265 _values[2] = value;
00266 }
00267
00270 virtual bool isA( Coord_ClassType type ) const;
00271
00274 virtual Coord_ClassType getClassType() const
00275 {
00276 return Coord::COORD_TYP_SEQ;
00277 }
00278
00281 bool operator==( const Coord3D_SolarEquatorial &rhs ) const;
00282
00288 bool isCompatibleWith( const Coord3D_SolarEquatorial &rhs ) const
00289 {
00290 return ((*(SRF_SolarEquatorial*)(this->_srf)) == (*(SRF_SolarEquatorial*)(rhs._srf)));
00291 }
00292
00297 Coord3D_SolarEquatorial &operator= ( const Coord3D_SolarEquatorial &rhs )
00298 {
00299 if((*(SRF_SolarEquatorial*)(this->_srf)) == (*(SRF_SolarEquatorial*)(rhs._srf)))
00300 {
00301 _values[0] = rhs._values[0];
00302 _values[1] = rhs._values[1];
00303 _values[2] = rhs._values[2];
00304 }
00305 else
00306 throw Exception(SRM_STATCOD_INVALID_TARGET_COORDINATE,
00307 "Coord3D_SolarEquatorial op=: incompatible rhs coordinate");
00308
00309 return *this;
00310 }
00311 };
00312
00313
00314 inline bool Coord3D_SolarEquatorial::isA( Coord_ClassType type ) const
00315 {
00316 if (type == Coord::COORD_TYP_SEQ)
00317 return true;
00318 else
00319 return Coord3D::isA(type);
00320 };
00321
00322
00324 typedef Coord3D_SolarEquatorial Coord3D_SEQ;
00325
00326 }
00327
00328 #endif // _SolarEquatorial_h