1
0
Fork 0

Update FGViewer position clients to work with SGGeod directly

This commit is contained in:
jmt 2009-06-09 12:16:21 +00:00 committed by Tim Moore
parent 2fa160d41a
commit e1583cb28c
5 changed files with 19 additions and 40 deletions

View file

@ -168,18 +168,8 @@ 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;
}
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;
}

View file

@ -1539,7 +1539,7 @@ 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;
}

View file

@ -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(),

View file

@ -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; }

View file

@ -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(),