X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Froute%2Fwaypoint.hxx;h=275d648e6811b822ed4941dd92d74eb1e3ebbe32;hb=f3c131ffaf04d8e04595c1271f8a70c8a9d89f5f;hp=afa215980d748ad1152918f810fbf691b81c7c78;hpb=828e10773c93a41ad71ef7d24c3c85696c381719;p=simgear.git diff --git a/simgear/route/waypoint.hxx b/simgear/route/waypoint.hxx index afa21598..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(); @@ -110,6 +106,9 @@ public: const double cur_alt, 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. @@ -120,17 +119,22 @@ public: void CourseAndDistance( const SGWayPoint &wp, double *course, double *dist ) const; - /** @return waypoint mode */ - inline modetype get_mode() const { return mode; } - /** @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; } };