+SGGeod
+FGGlobals::get_aircraft_position() const
+{
+ return SGGeod::fromDegFt(positionLon->getDoubleValue(),
+ positionLat->getDoubleValue(),
+ positionAlt->getDoubleValue());
+}
+
+SGVec3d
+FGGlobals::get_aircraft_position_cart() const
+{
+ return SGVec3d::fromGeod(get_aircraft_position());
+}
+
+void FGGlobals::get_aircraft_orientation(double& heading, double& pitch, double& roll)
+{
+ heading = orientHeading->getDoubleValue();
+ pitch = orientPitch->getDoubleValue();
+ roll = orientRoll->getDoubleValue();
+}
+
+SGGeod
+FGGlobals::get_view_position() const
+{
+ return SGGeod::fromDegFt(viewLon->getDoubleValue(),
+ viewLat->getDoubleValue(),
+ viewAlt->getDoubleValue());
+}
+
+SGVec3d
+FGGlobals::get_view_position_cart() const
+{
+ return SGVec3d::fromGeod(get_view_position());
+}
+
+static void treeDumpRefCounts(int depth, SGPropertyNode* nd)
+{
+ for (int i=0; i<nd->nChildren(); ++i) {
+ SGPropertyNode* cp = nd->getChild(i);
+ if (SGReferenced::count(cp) > 1) {
+ SG_LOG(SG_GENERAL, SG_INFO, "\t" << cp->getPath() << " refcount:" << SGReferenced::count(cp));
+ }
+
+ treeDumpRefCounts(depth + 1, cp);
+ }
+}
+
+static void treeClearAliases(SGPropertyNode* nd)
+{
+ if (nd->isAlias()) {
+ nd->unalias();
+ }
+
+ for (int i=0; i<nd->nChildren(); ++i) {
+ SGPropertyNode* cp = nd->getChild(i);
+ treeClearAliases(cp);
+ }
+}