X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Froute%2Fwaypoint.hxx;h=275d648e6811b822ed4941dd92d74eb1e3ebbe32;hb=f3c131ffaf04d8e04595c1271f8a70c8a9d89f5f;hp=f9835977c9b15d20a6c4cd0122708f31beee4473;hpb=2b12425a622d39784a57015e3e72829a12762826;p=simgear.git diff --git a/simgear/route/waypoint.hxx b/simgear/route/waypoint.hxx index f9835977..275d648e 100644 --- a/simgear/route/waypoint.hxx +++ b/simgear/route/waypoint.hxx @@ -19,7 +19,7 @@ // // 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., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -27,17 +27,12 @@ #ifndef _WAYPOINT_HXX #define _WAYPOINT_HXX - -#ifndef __cplusplus -# error This library requires C++ -#endif - - #include -#include STL_STRING +#include +#include -SG_USING_STD(string); +#include /** @@ -57,26 +52,21 @@ public: * the world is a perfect sphere. This is less compuntationally * expensive than using wgs84 math and still a fairly good * approximation of the real world, especially over shorter distances. - *
  • CARTESIAN requests all math be done assuming the coordinates specify - * position in a Z = up world. */ enum modetype { WGS84 = 0, - SPHERICAL = 1, - CARTESIAN = 2 }; private: - - modetype mode; - - double target_lon; - double target_lat; - double target_alt; - double distance; - - string id; - + SGGeod pos; + std::string id; + std::string name; + + // route data associated with the waypoint + double _distance; + double _track; + double _speed; + public: /** @@ -86,10 +76,16 @@ public: * @param alt target altitude * @param mode type of coordinates/math to use * @param s waypoint identifier + * @param n waypoint name */ SGWayPoint( const double lon = 0.0, const double lat = 0.0, const double alt = 0.0, const modetype m = WGS84, - const string s = "" ); + const std::string& s = "", const std::string& n = "" ); + + /** + * Construct from a geodetic position, in WGS84 coordinates + */ + SGWayPoint(const SGGeod& pos, const std::string& s, const std::string& n); /** Destructor */ ~SGWayPoint(); @@ -104,33 +100,41 @@ public: * @param cur_lat (in) current latitude * @param cur_alt (in) current altitude * @param course (out) heading from current location to this waypoint - * @param distance (out) distance from current location to this waypoint + * @param dist (out) distance from current location to this waypoint */ void CourseAndDistance( const double cur_lon, const double cur_lat, const double cur_alt, - double *course, double *distance ) const; + double *course, double *dist ) const; + + void CourseAndDistance(const SGGeod& current, + double& course, double& dist ) const; /** * Calculate course and distances between a specified starting waypoint * and this waypoint. * @param wp (in) original waypoint * @param course (out) heading from current location to this waypoint - * @param distance (out) distance from current location to this waypoint + * @param dist (out) distance from current location to this waypoint */ void CourseAndDistance( const SGWayPoint &wp, - double *course, double *distance ) const; - - /** @return waypoint mode */ - inline modetype get_mode() const { return mode; } + double *course, double *dist ) const; /** @return waypoint longitude */ - inline double get_target_lon() const { return target_lon; } + inline double get_target_lon() const { return pos.getLongitudeDeg(); } /** @return waypoint latitude */ - inline double get_target_lat() const { return target_lat; } + inline double get_target_lat() const { return pos.getLatitudeDeg(); } /** @return waypoint altitude */ - inline double get_target_alt() const { return target_alt; } + inline double get_target_alt() const { return pos.getElevationM(); } + + inline const SGGeod& get_target() const { return pos; } + + /** + * + */ + inline void setTargetAltFt(double elev) + { pos.setElevationFt(elev); } /** * This value is not calculated by this class. It is simply a @@ -142,16 +146,25 @@ public: * is for your convenience only. * @return waypoint distance holder (what ever the user has stashed here) */ - inline double get_distance() const { return distance; } + inline double get_distance() const { return _distance; } /** * Set the waypoint distance value to a value of our choice. * @param d distance */ - inline void set_distance( double d ) { distance = d; } + inline void set_distance( double d ) { _distance = d; } + inline double get_track() const { return _track; } + inline void set_track(double t) { _track = t; } + + inline double get_speed() const { return _speed; } + inline void set_speed(double v) { _speed = v; } + /** @return waypoint id */ - inline string get_id() const { return id; } + inline const std::string& get_id() const { return id; } + + /** @return waypoint name */ + inline const std::string& get_name() const { return name; } };