FlightGear next
terrain_stg.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_STG_HXX
25#define _TERRAIN_STG_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 "terrain.hxx"
41#include "SceneryPager.hxx"
42#include "tilemgr.hxx"
43
44namespace simgear {
45class BVHMaterial;
46}
47
48// Define a structure containing global scenery parameters
49class FGStgTerrain : public FGTerrain
50{
51public:
52
54 virtual ~FGStgTerrain();
55
56 // Implementation of SGSubsystem.
57 void init ( osg::Group* terrain );
58 void reinit();
59 void shutdown ();
60 void bind ();
61 void unbind ();
62 void update (double dt);
63
74 bool get_elevation_m(const SGGeod& geod, double& alt,
75 const simgear::BVHMaterial** material,
76 const osg::Node* butNotFrom = 0);
77
89 bool get_cart_elevation_m(const SGVec3d& pos, double max_altoff,
90 double& elevation,
91 const simgear::BVHMaterial** material,
92 const osg::Node* butNotFrom = 0);
93
99 bool get_cart_ground_intersection(const SGVec3d& start, const SGVec3d& dir,
100 SGVec3d& nearestHit,
101 const osg::Node* butNotFrom = 0);
102
106 bool scenery_available(const SGGeod& position, double range_m);
107
108 // tile mgr api
109 bool schedule_scenery(const SGGeod& position, double range_m, double duration=0.0);
110 void materialLibChanged();
111
112 static const char* staticSubsystemClassId() { return "scenery"; }
113
114private:
115 // tile manager
116 FGTileMgr _tilemgr;
117
118 // terrain branch of scene graph
119 osg::ref_ptr<osg::Group> terrain_branch;
120
121 bool _inited;
122};
123
124#endif // _TERRAIN_STG_HXX
125
126
void update(double dt)
static const char * staticSubsystemClassId()
bool schedule_scenery(const SGGeod &position, double range_m, double duration=0.0)
bool get_elevation_m(const SGGeod &geod, double &alt, const simgear::BVHMaterial **material, const osg::Node *butNotFrom=0)
Compute the elevation of the scenery at geodetic latitude lat, geodetic longitude lon and not higher ...
bool scenery_available(const SGGeod &position, double range_m)
Returns true if scenery is available for the given lat, lon position within a range of range_m.
bool get_cart_elevation_m(const SGVec3d &pos, double max_altoff, double &elevation, const simgear::BVHMaterial **material, const osg::Node *butNotFrom=0)
Compute the elevation of the scenery below the cartesian point pos.
virtual ~FGStgTerrain()
bool get_cart_ground_intersection(const SGVec3d &start, const SGVec3d &dir, SGVec3d &nearestHit, const osg::Node *butNotFrom=0)
Compute the nearest intersection point of the line starting from start going in direction dir with th...
void init(osg::Group *terrain)
void materialLibChanged()
FGTerrain()=default