From e1583cb28cea0ae3abd11e70f69ddba86b226787 Mon Sep 17 00:00:00 2001 From: jmt Date: Tue, 9 Jun 2009 12:16:21 +0000 Subject: [PATCH] Update FGViewer position clients to work with SGGeod directly --- src/AIModel/AIAircraft.cxx | 25 +++++-------------------- src/ATCDCL/AILocalTraffic.cxx | 22 +++++++++++----------- src/Main/main.cxx | 3 +-- src/Main/viewer.hxx | 4 ---- src/Sound/fg_fx.cxx | 5 ++--- 5 files changed, 19 insertions(+), 40 deletions(-) diff --git a/src/AIModel/AIAircraft.cxx b/src/AIModel/AIAircraft.cxx index 6559bbcbd..a9e22a723 100644 --- a/src/AIModel/AIAircraft.cxx +++ b/src/AIModel/AIAircraft.cxx @@ -167,19 +167,9 @@ void FGAIAircraft::setPerformance(const std::string& acclass) { void FGAIAircraft::checkVisibility() { - double visibility_meters = fgGetDouble("/environment/visibility-m"); - - FGViewer* vw = globals->get_current_view(); - double course, distance; - - SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0); - SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0); - view.CourseAndDistance(current, &course, &distance); - if (distance > visibility_meters) { - invisible = true; - } else { - invisible = false; - } + double visibility_meters = fgGetDouble("/environment/visibility-m"); + FGViewer* vw = globals->get_current_view(); + invisible = (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters); } @@ -409,14 +399,9 @@ void FGAIAircraft::getGroundElev(double dt) { // Only do the proper hitlist stuff if we are within visible range of the viewer. if (!invisible) { double visibility_meters = fgGetDouble("/environment/visibility-m"); - FGViewer* vw = globals->get_current_view(); - double course, distance; - - SGWayPoint current(pos.getLongitudeDeg(), pos.getLatitudeDeg(), 0); - SGWayPoint view (vw->getLongitude_deg(), vw->getLatitude_deg(), 0); - view.CourseAndDistance(current, &course, &distance); - if (distance > visibility_meters) { + + if (SGGeodesy::distanceM(vw->getPosition(), pos) > visibility_meters) { return; } diff --git a/src/ATCDCL/AILocalTraffic.cxx b/src/ATCDCL/AILocalTraffic.cxx index 0e81570ae..4a5dfaa3b 100644 --- a/src/ATCDCL/AILocalTraffic.cxx +++ b/src/ATCDCL/AILocalTraffic.cxx @@ -1539,21 +1539,21 @@ void FGAILocalTraffic::DoGroundElev() { // Only do the proper hitlist stuff if we are within visible range of the viewer. double visibility_meters = fgGetDouble("/environment/visibility-m"); FGViewer* vw = globals->get_current_view(); - if(dclGetHorizontalSeparation(_pos, SGGeod::fromDegM(vw->getLongitude_deg(), vw->getLatitude_deg(), 0.0)) > visibility_meters) { + if(dclGetHorizontalSeparation(_pos, SGGeod::fromGeodM(vw->getPosition(), 0.0)) > visibility_meters) { _ground_elevation_m = aptElev; return; } - // FIXME: make shure the pos.lat/pos.lon values are in degrees ... - double range = 500.0; - if (!globals->get_tile_mgr()->scenery_available(_aip.getPosition(), range)) { - // Try to shedule tiles for that position. - globals->get_tile_mgr()->update( _aip.getPosition(), range ); - } + // FIXME: make shure the pos.lat/pos.lon values are in degrees ... + double range = 500.0; + if (!globals->get_tile_mgr()->scenery_available(_aip.getPosition(), range)) { + // Try to shedule tiles for that position. + globals->get_tile_mgr()->update( _aip.getPosition(), range ); + } - // FIXME: make shure the pos.lat/pos.lon values are in degrees ... - double alt; - if (globals->get_scenery()->get_elevation_m(SGGeod::fromGeodM(_aip.getPosition(), 20000), alt, 0)) - _ground_elevation_m = alt; + // FIXME: make shure the pos.lat/pos.lon values are in degrees ... + double alt; + if (globals->get_scenery()->get_elevation_m(SGGeod::fromGeodM(_aip.getPosition(), 20000), alt, 0)) + _ground_elevation_m = alt; } diff --git a/src/Main/main.cxx b/src/Main/main.cxx index c73123966..b864563ea 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -496,8 +496,7 @@ static void fgMainLoop( void ) { // get the orientation const SGQuatd view_or = current_view->getViewOrientation(); - SGQuatd surf_or = SGQuatd::fromLonLatDeg( - current_view->getLongitude_deg(), current_view->getLatitude_deg()); + SGQuatd surf_or = SGQuatd::fromLonLat(current_view->getPosition()); SGQuatd model_or = SGQuatd::fromYawPitchRollDeg( globals->get_aircraft_model()->get3DModel()->getHeadingDeg(), globals->get_aircraft_model()->get3DModel()->getPitchDeg(), diff --git a/src/Main/viewer.hxx b/src/Main/viewer.hxx index 455f8f1fd..50d567439 100644 --- a/src/Main/viewer.hxx +++ b/src/Main/viewer.hxx @@ -103,13 +103,9 @@ public: // pilot view, model in model view). // FIXME: the model view position (ie target positions) // should be in the model class. - virtual double getLongitude_deg () const { return _position.getLongitudeDeg(); } - virtual double getLatitude_deg () const { return _position.getLatitudeDeg(); } - virtual void setPosition (double lon_deg, double lat_deg, double alt_ft); const SGGeod& getPosition() const { return _position; } - // Reference geodetic target position... virtual void setTargetPosition (double lon_deg, double lat_deg, double alt_ft); const SGGeod& getTargetPosition() const { return _target; } diff --git a/src/Sound/fg_fx.cxx b/src/Sound/fg_fx.cxx index eb7abd1eb..1774b3a63 100644 --- a/src/Sound/fg_fx.cxx +++ b/src/Sound/fg_fx.cxx @@ -226,9 +226,8 @@ FGFX::update_pos_and_orientation(SGSoundMgr *smgr, double dt) // get the orientation const SGQuatd view_or = observer->getViewOrientation(); - SGQuatd surf_or = SGQuatd::fromLonLatDeg( - observer->getLongitude_deg(), - observer->getLatitude_deg()); + SGQuatd surf_or = SGQuatd::fromLonLat(observer->getPosition()); + SGQuatd model_or = SGQuatd::fromYawPitchRollDeg( model->getHeadingDeg(), model->getPitchDeg(),