3 * Provides a class to manage a list of waypoints (i.e. a route).
6 // Written by Curtis Olson, started October 2000.
8 // Copyright (C) 2000 Curtis L. Olson - curt@hfrl.umn.edu
10 // This program is free software; you can redistribute it and/or
11 // modify it under the terms of the GNU General Public License as
12 // published by the Free Software Foundation; either version 2 of the
13 // License, or (at your option) any later version.
15 // This program is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 // General Public License for more details.
20 // You should have received a copy of the GNU General Public License
21 // along with this program; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
32 # error This library requires C++
35 #include <simgear/compiler.h>
41 #include <simgear/route/waypoint.hxx>
44 * A class to manage a list of waypoints (i.e. a route).
51 typedef vector < SGWayPoint > route_list;
55 void update_distance_and_track(int index);
65 /** Clear the entire route */
72 * Add waypoint (default), or insert waypoint at position n.
73 * @param wp a waypoint
75 void add_waypoint( const SGWayPoint &wp, int n = -1 );
77 * Get the number of waypoints (i.e. route length )
78 * @return route length
80 inline int size() const { return route.size(); }
83 * Get the front waypoint.
84 * @return the first waypoint.
86 inline SGWayPoint get_first() const {
90 return SGWayPoint( 0.0, 0.0, 0.0, SGWayPoint::WGS84, "invalid" );
95 * Get the current waypoint
96 * @return the current waypoint
98 inline SGWayPoint get_current() const {
99 if ( current_wp < (int)route.size() ) {
100 return route[current_wp];
102 return SGWayPoint( 0.0, 0.0, 0.0, SGWayPoint::WGS84, "invalid" );
106 inline SGWayPoint get_previous() const {
107 if ( (current_wp > 0) && (current_wp < (int)route.size()) ) {
108 return route[current_wp - 1];
110 return SGWayPoint( 0.0, 0.0, 0.0, SGWayPoint::WGS84, "invalid" );
114 inline SGWayPoint get_next() const {
115 if ( (current_wp + 1) < (int)route.size() ) {
116 return route[current_wp+1];
118 return SGWayPoint( 0.0, 0.0, 0.0, SGWayPoint::WGS84, "invalid" );
123 * Set the current waypoint
124 * @param number of waypoint to make current.
126 inline void set_current( int n ) {
127 if ( n >= 0 && n < (int)route.size() ) {
132 inline int current_index() const {
136 /** Increment the current waypoint pointer. */
137 inline void increment_current() {
138 if ( current_wp < (int)route.size() - 1 ) {
144 * Get the nth waypoint
145 * @param n waypoint number
146 * @return the nth waypoint
148 inline SGWayPoint get_waypoint( const int n ) const {
149 if ( n < (int)route.size() ) {
152 return SGWayPoint( 0.0, 0.0, 0.0, SGWayPoint::WGS84, "invalid" );
156 /** Delete the front waypoint */
157 inline void delete_first() { delete_waypoint(0); }
159 /** Delete waypoint waypoint with index n (last one if n < 0) */
160 void delete_waypoint( int n = 0 );
163 * Helper, sum the distance members of each waypoint
165 double total_distance() const;