Hi,
I have noticed that when enabled, the ground network is displayed above the
airport, at a variable height, depending on the airport's elevation above sea
level. This is mostly due to the fact that the elevation is in feet instead of
meters.
I have attached a patch that corrects this behaviour and takes into account
sloping terrain at airports. Now the network is displayed for both pilot and
AI aicraft at 0.5 meters above ground.
Let me know if this is helpful.
Thanks,
Adrian
diff --git a/src/ATC/trafficcontrol.cxx b/src/ATC/trafficcontrol.cxx
index 8025fe6..e47f65a 100644
--- a/src/ATC/trafficcontrol.cxx
+++ b/src/ATC/trafficcontrol.cxx
@@ -1278,6 +1278,10 @@ void FGStartupController::render(bool visible)
}
if (visible) {
group = new osg::Group;
+
+ FGScenery * local_scenery = globals->get_scenery();
+ double elevation_meters = 0.0;
+ double elevation_feet = 0.0;
//for ( FGTaxiSegmentVectorIterator i = segments.begin(); i != segments.end(); i++) {
double dx = 0;
@@ -1304,8 +1308,18 @@ void FGStartupController::render(bool visible)
osg::Matrix obj_pos;
osg::MatrixTransform *obj_trans = new osg::MatrixTransform;
obj_trans->setDataVariance(osg::Object::STATIC);
-
- WorldCoordinate( obj_pos, center.getLatitudeDeg(), center.getLongitudeDeg(), parent->getElevation()+8+dx, -(heading) );
+
+ //get HAAT from scenery
+ SGGeod center2 = center;
+ center2.setElevationM(SG_MAX_ELEVATION_M);
+ if (local_scenery->get_elevation_m( center2, elevation_meters, NULL )) {
+ elevation_feet = elevation_meters * SG_METER_TO_FEET + 0.5;
+ elevation_meters += 0.5;
+ }
+ else
+ elevation_meters = parent->getElevation()+8+dx;
+
+ WorldCoordinate( obj_pos, center.getLatitudeDeg(), center.getLongitudeDeg(), elevation_meters, -(heading) );
obj_trans->setMatrix( obj_pos );
//osg::Vec3 center(0, 0, 0)
@@ -1339,7 +1353,16 @@ void FGStartupController::render(bool visible)
osg::MatrixTransform *obj_trans = new osg::MatrixTransform;
obj_trans->setDataVariance(osg::Object::STATIC);
FGTaxiSegment *segment = parent->getGroundNetwork()->findSegment(k);
- WorldCoordinate( obj_pos, segment->getLatitude(), segment->getLongitude(), parent->getElevation()+8+dx, -(segment->getHeading()) );
+
+ SGGeod center2=segment->getGeod();
+ center2.setElevationM(SG_MAX_ELEVATION_M);
+ if (local_scenery->get_elevation_m( center2, elevation_meters, NULL )) {
+ elevation_feet = elevation_meters * SG_METER_TO_FEET + 0.5;
+ elevation_meters += 0.5;
+ }
+ else
+ elevation_meters = parent->getElevation()+8+dx;
+ WorldCoordinate( obj_pos, segment->getLatitude(), segment->getLongitude(), elevation_meters, -(segment->getHeading()) );
obj_trans->setMatrix( obj_pos );
//osg::Vec3 center(0, 0, 0)
diff --git a/src/Airports/groundnetwork.cxx b/src/Airports/groundnetwork.cxx
index a642a77..c63c0a3 100644
--- a/src/Airports/groundnetwork.cxx
+++ b/src/Airports/groundnetwork.cxx
@@ -1155,7 +1155,9 @@ void FGGroundNetwork::render(bool visible)
}
if (visible) {
group = new osg::Group;
-
+ FGScenery * local_scenery = globals->get_scenery();
+ double elevation_meters = 0.0;
+ double elevation_feet = 0.0;
//for ( FGTaxiSegmentVectorIterator i = segments.begin(); i != segments.end(); i++) {
double dx = 0;
for (TrafficVectorIterator i = activeTraffic.begin(); i != activeTraffic.end(); i++) {
@@ -1174,6 +1176,16 @@ void FGGroundNetwork::render(bool visible)
double coveredDistance = length * 0.5;
SGGeod center;
SGGeodesy::direct(start, heading, coveredDistance, center, az2);
+
+ //get HAAT from scenery
+ SGGeod center2 = center;
+ center2.setElevationM(SG_MAX_ELEVATION_M);
+ if (local_scenery->get_elevation_m( center2, elevation_meters, NULL )) {
+ elevation_feet = elevation_meters * SG_METER_TO_FEET + 0.5;
+ elevation_meters += 0.5;
+ }
+ else
+ elevation_meters = parent->getElevation()+8+dx;
//cerr << "Active Aircraft : Centerpoint = (" << center.getLatitudeDeg() << ", " << center.getLongitudeDeg() << "). Heading = " << heading << endl;
///////////////////////////////////////////////////////////////////////////////
// Make a helper function out of this
@@ -1181,7 +1193,7 @@ void FGGroundNetwork::render(bool visible)
osg::MatrixTransform *obj_trans = new osg::MatrixTransform;
obj_trans->setDataVariance(osg::Object::STATIC);
- WorldCoordinate( obj_pos, center.getLatitudeDeg(), center.getLongitudeDeg(), parent->elevation()+8+dx, -(heading) );
+ WorldCoordinate( obj_pos, center.getLatitudeDeg(), center.getLongitudeDeg(), elevation_meters, -(heading) );
obj_trans->setMatrix( obj_pos );
//osg::Vec3 center(0, 0, 0)
@@ -1213,8 +1225,17 @@ void FGGroundNetwork::render(bool visible)
if (k >= 0) {
osg::MatrixTransform *obj_trans = new osg::MatrixTransform;
obj_trans->setDataVariance(osg::Object::STATIC);
+ //HAAT in meters
+ SGGeod center2=segments[k]->getGeod();
+ center2.setElevationM(SG_MAX_ELEVATION_M);
+ if (local_scenery->get_elevation_m( center2, elevation_meters, NULL )) {
+ elevation_feet = elevation_meters * SG_METER_TO_FEET + 0.5;
+ elevation_meters += 0.5;
+ }
+ else
+ elevation_meters = parent->getElevation()+8+dx;
- WorldCoordinate( obj_pos, segments[k]->getLatitude(), segments[k]->getLongitude(), parent->elevation()+8+dx, -(segments[k]->getHeading()) );
+ WorldCoordinate( obj_pos, segments[k]->getLatitude(), segments[k]->getLongitude(), elevation_meters, -(segments[k]->getHeading()) );
obj_trans->setMatrix( obj_pos );
//osg::Vec3 center(0, 0, 0)
diff --git a/src/Airports/groundnetwork.hxx b/src/Airports/groundnetwork.hxx
index 3de47c2..b94abd9 100644
--- a/src/Airports/groundnetwork.hxx
+++ b/src/Airports/groundnetwork.hxx
@@ -139,6 +139,7 @@ public:
double getLongitude() { return center.getLongitudeDeg(); };
double getHeading() { return heading; };
bool isPushBack() { return isPushBackRoute; };
+ const SGGeod& getGeod() const { return center; }
int getPenalty(int nGates);
------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel