1
0
Fork 0

Add a possible node not to visit.

Modified Files:
	scenery.cxx scenery.hxx
This commit is contained in:
frohlich 2009-08-07 05:24:18 +00:00 committed by Tim Moore
parent 0c2db22988
commit aac4bec5c7
2 changed files with 21 additions and 7 deletions

View file

@ -121,16 +121,18 @@ void FGScenery::unbind() {
bool
FGScenery::get_cart_elevation_m(const SGVec3d& pos, double max_altoff,
double& alt, const SGMaterial** material)
double& alt, const SGMaterial** material,
const osg::Node* butNotFrom)
{
SGGeod geod = SGGeod::fromCart(pos);
geod.setElevationM(geod.getElevationM() + max_altoff);
return get_elevation_m(geod, alt, material);
return get_elevation_m(geod, alt, material, butNotFrom);
}
bool
FGScenery::get_elevation_m(const SGGeod& geod, double& alt,
const SGMaterial** material)
const SGMaterial** material,
const osg::Node* butNotFrom)
{
SGVec3d start = SGVec3d::fromGeod(geod);
@ -151,6 +153,10 @@ FGScenery::get_elevation_m(const SGGeod& geod, double& alt,
for (int i = 0; i < nHits; ++i) {
const osgUtil::Hit& hit
= intersectVisitor.getHitList(lineSegment.get())[i];
if (butNotFrom &&
std::find(hit.getNodePath().begin(), hit.getNodePath().end(),
butNotFrom) != hit.getNodePath().end())
continue;
SGVec3d point;
point.osg() = hit.getWorldIntersectPoint();
SGGeod geod = SGGeod::fromCart(point);
@ -173,7 +179,8 @@ FGScenery::get_elevation_m(const SGGeod& geod, double& alt,
bool
FGScenery::get_cart_ground_intersection(const SGVec3d& pos, const SGVec3d& dir,
SGVec3d& nearestHit)
SGVec3d& nearestHit,
const osg::Node* butNotFrom)
{
// We assume that starting positions in the center of the earth are invalid
if ( norm1(pos) < 1 )
@ -197,6 +204,10 @@ FGScenery::get_cart_ground_intersection(const SGVec3d& pos, const SGVec3d& dir,
for (int i = 0; i < nHits; ++i) {
const osgUtil::Hit& hit
= intersectVisitor.getHitList(lineSegment.get())[i];
if (butNotFrom &&
std::find(hit.getNodePath().begin(), hit.getNodePath().end(),
butNotFrom) != hit.getNodePath().end())
continue;
SGVec3d point;
point.osg() = hit.getWorldIntersectPoint();
double newdist = length(start - point);

View file

@ -71,7 +71,8 @@ public:
/// value is undefined.
/// All values are meant to be in meters or degrees.
bool get_elevation_m(const SGGeod& geod, double& alt,
const SGMaterial** material);
const SGMaterial** material,
const osg::Node* butNotFrom = 0);
/// Compute the elevation of the scenery beow the cartesian point pos.
/// you the returned scenery altitude is not higher than the position
@ -85,7 +86,8 @@ public:
/// value is undefined.
/// All values are meant to be in meters.
bool get_cart_elevation_m(const SGVec3d& pos, double max_altoff,
double& elevation, const SGMaterial** material);
double& elevation, const SGMaterial** material,
const osg::Node* butNotFrom = 0);
/// Compute the nearest intersection point of the line starting from
/// start going in direction dir with the terrain.
@ -93,7 +95,8 @@ public:
/// usual earth centered wgs84 coordiante system. Units are meters.
/// On success, true is returned.
bool get_cart_ground_intersection(const SGVec3d& start, const SGVec3d& dir,
SGVec3d& nearestHit);
SGVec3d& nearestHit,
const osg::Node* butNotFrom = 0);
osg::Group *get_scene_graph () const { return scene_graph.get(); }
osg::Group *get_terrain_branch () const { return terrain_branch.get(); }