FlightGear next
terrain.hxx
Go to the documentation of this file.
1// scenery.hxx -- data structures and routines for managing scenery.
2//
3// Written by Curtis Olson, started May 1997.
4//
5// Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt
6//
7// This program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public License as
9// published by the Free Software Foundation; either version 2 of the
10// License, or (at your option) any later version.
11//
12// This program is distributed in the hope that it will be useful, but
13// WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15// General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with this program; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20//
21// $Id$
22
23
24#ifndef _TERRAIN_HXX
25#define _TERRAIN_HXX
26
27
28#ifndef __cplusplus
29# error This library requires C++
30#endif
31
32#include <osg/ref_ptr>
33#include <osg/Switch>
34
35#include <simgear/compiler.h>
36#include <simgear/math/SGMath.hxx>
37#include <simgear/scene/model/particles.hxx>
38#include <simgear/structure/subsystem_mgr.hxx>
39
40#include "scenery.hxx"
41#include "SceneryPager.hxx"
42#include "tilemgr.hxx"
43
44namespace simgear {
45class BVHMaterial;
46}
47
48// Define a structure containing global scenery parameters
50{
51public:
52 FGTerrain() = default;
53 virtual ~FGTerrain() = default;
54
55 // Implementation of SGSubsystem. - called from Scenery
56 virtual void init ( osg::Group* terrain ) = 0;
57 virtual void reinit() = 0;
58 virtual void shutdown () = 0;
59 virtual void bind () = 0;
60 virtual void unbind () = 0;
61 virtual void update (double dt) = 0;
62
73 virtual bool get_elevation_m(const SGGeod& geod, double& alt,
74 const simgear::BVHMaterial** material,
75 const osg::Node* butNotFrom = 0) = 0;
76
88 virtual bool get_cart_elevation_m(const SGVec3d& pos, double max_altoff,
89 double& elevation,
90 const simgear::BVHMaterial** material,
91 const osg::Node* butNotFrom = 0) = 0;
92
98 virtual bool get_cart_ground_intersection(const SGVec3d& start, const SGVec3d& dir,
99 SGVec3d& nearestHit,
100 const osg::Node* butNotFrom = 0) = 0;
101
105 virtual bool scenery_available(const SGGeod& position, double range_m) = 0;
106
107 // tile mgr api
108 virtual bool schedule_scenery(const SGGeod& position, double range_m, double duration=0.0) = 0;
109 virtual void materialLibChanged() = 0;
110};
111
112#endif // _TERRAIN_HXX
virtual void unbind()=0
virtual void init(osg::Group *terrain)=0
virtual void reinit()=0
virtual ~FGTerrain()=default
virtual void update(double dt)=0
virtual bool get_elevation_m(const SGGeod &geod, double &alt, const simgear::BVHMaterial **material, const osg::Node *butNotFrom=0)=0
Compute the elevation of the scenery at geodetic latitude lat, geodetic longitude lon and not higher ...
virtual bool schedule_scenery(const SGGeod &position, double range_m, double duration=0.0)=0
virtual bool scenery_available(const SGGeod &position, double range_m)=0
Returns true if scenery is available for the given lat, lon position within a range of range_m.
FGTerrain()=default
virtual bool get_cart_elevation_m(const SGVec3d &pos, double max_altoff, double &elevation, const simgear::BVHMaterial **material, const osg::Node *butNotFrom=0)=0
Compute the elevation of the scenery below the cartesian point pos.
virtual void materialLibChanged()=0
virtual bool get_cart_ground_intersection(const SGVec3d &start, const SGVec3d &dir, SGVec3d &nearestHit, const osg::Node *butNotFrom=0)=0
Compute the nearest intersection point of the line starting from start going in direction dir with th...
virtual void shutdown()=0
virtual void bind()=0