From 8ffa65a821d74d915e02bcd90a9b4ddfb987ab18 Mon Sep 17 00:00:00 2001 From: jmt Date: Mon, 12 Apr 2010 23:27:48 +0000 Subject: [PATCH] Route-file saving. --- src/Autopilot/route_mgr.cxx | 38 +++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/Autopilot/route_mgr.cxx b/src/Autopilot/route_mgr.cxx index c9fbe0bfd..967ca992a 100644 --- a/src/Autopilot/route_mgr.cxx +++ b/src/Autopilot/route_mgr.cxx @@ -658,10 +658,44 @@ void FGRouteMgr::saveRoute() SGPath path(_pathNode->getStringValue()); SG_LOG(SG_IO, SG_INFO, "Saving route to " << path.str()); try { - writeProperties(path.str(), mirror, false, SGPropertyNode::ARCHIVE); + SGPropertyNode_ptr d(new SGPropertyNode); + SGPath path(_pathNode->getStringValue()); + d->setIntValue("version", 1); + + if (_departure) { + d->setStringValue("departure/airport", _departure->ident()); + d->setStringValue("departure/sid", departure->getStringValue("sid")); + d->setStringValue("departure/runway", departure->getStringValue("runway")); + } + + if (_destination) { + d->setStringValue("destination/airport", _destination->ident()); + d->setStringValue("destination/star", destination->getStringValue("star")); + d->setStringValue("destination/transition", destination->getStringValue("transition")); + d->setStringValue("destination/runway", destination->getStringValue("runway")); + } + + // route nodes + SGPropertyNode* routeNode = d->getChild("route", 0, true); + for (int i=0; i<_route->size(); ++i) { + SGPropertyNode* wpNode = routeNode->getChild("wp",i, true); + SGWayPoint wp(_route->get_waypoint(i)); + + wpNode->setStringValue("ident", wp.get_id()); + wpNode->setStringValue("name", wp.get_name()); + SGGeod geod(wp.get_target()); + + wpNode->setDoubleValue("longitude-deg", geod.getLongitudeDeg()); + wpNode->setDoubleValue("latitude-deg", geod.getLatitudeDeg()); + + if (geod.getElevationFt() > -9990.0) { + wpNode->setDoubleValue("altitude-ft", geod.getElevationFt()); + } + } // of waypoint iteration + + writeProperties(path.str(), d, true /* write-all */); } catch (const sg_exception &e) { SG_LOG(SG_IO, SG_WARN, "Error saving route:" << e.getMessage()); - //guiErrorMessage("Error writing autosave.xml: ", e); } }