//
// 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$
#include <simgear/compiler.h>
#include <simgear/structure/subsystem_mgr.hxx>
#include <simgear/math/point3d.hxx>
+#include <simgear/scene/model/placementtrans.hxx>
+#include <simgear/structure/ssgSharedPtr.hxx>
SG_USING_STD(list);
class ssgRoot;
class ssgBranch;
-class ssgPlacementTransform;
// Define a structure containing global scenery parameters
double sun_angle;
// SSG scene graph
- ssgRoot *scene_graph;
- ssgBranch *terrain_branch;
- ssgRoot *gnd_lights_root;
- ssgRoot *vasi_lights_root;
- ssgRoot *rwy_lights_root;
- ssgRoot *taxi_lights_root;
- ssgBranch *models_branch;
- ssgBranch *aircraft_branch;
+ ssgSharedPtr<ssgRoot> scene_graph;
+ ssgSharedPtr<ssgBranch> terrain_branch;
+ ssgSharedPtr<ssgRoot> gnd_lights_root;
+ ssgSharedPtr<ssgRoot> vasi_lights_root;
+ ssgSharedPtr<ssgRoot> rwy_lights_root;
+ ssgSharedPtr<ssgRoot> taxi_lights_root;
+ ssgSharedPtr<ssgBranch> models_branch;
+ ssgSharedPtr<ssgBranch> aircraft_branch;
// list of all placement transform, used to move the scenery center on the fly.
- typedef list<ssgPlacementTransform*> placement_list_type;
+ typedef list<ssgSharedPtr<ssgPlacementTransform> > placement_list_type;
placement_list_type _placement_list;
public:
/// lat/lon pair. If there is no scenery for that point, the altitude
/// value is undefined.
/// All values are meant to be in meters.
- bool get_cart_elevation_m(const sgdVec3 pos, double max_altoff,
+ bool get_cart_elevation_m(const sgdVec3& pos, double max_altoff,
double& radius, bool exact = false);
- inline Point3D get_center() const { return center; }
- void set_center( Point3D p );
+ /// Compute the nearest intersection point of the line starting from
+ /// start going in direction dir with the terrain.
+ /// The input and output values should be in cartesian coordinates in the
+ /// usual earth centered wgs84 coordiante system. Units are meters.
+ /// On success, true is returned.
+ bool get_cart_ground_intersection(const sgdVec3& start, const sgdVec3& dir,
+ sgdVec3& nearestHit, bool exact = false);
- inline Point3D get_next_center() const { return next_center; }
- inline void set_next_center( Point3D p ) { next_center = p; }
+ inline const Point3D& get_center() const { return center; }
+ void set_center( const Point3D& p );
+
+ inline const Point3D& get_next_center() const { return next_center; }
+ inline void set_next_center( const Point3D& p ) { next_center = p; }
inline ssgRoot *get_scene_graph () const { return scene_graph; }
inline void set_scene_graph (ssgRoot * s) { scene_graph = s; }