File indexing completed on 2024-06-02 03:51:00
0001 /* 0002 SPDX-FileCopyrightText: 2008 Patrick Spendrin <ps_ml@gmx.de> 0003 SPDX-FileCopyrightText: 2009 Bastian Holst <bastianholst@gmx.de> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "KmlAltitudeModeTagHandler.h" 0009 0010 #include "MarbleDebug.h" 0011 0012 #include "KmlElementDictionary.h" 0013 0014 #include "GeoDataGeometry.h" 0015 #include "GeoDataLatLonAltBox.h" 0016 #include "GeoDataGroundOverlay.h" 0017 #include "GeoDataPoint.h" 0018 #include "GeoDataPlacemark.h" 0019 #include "GeoDataTrack.h" 0020 #include "GeoDataAbstractView.h" 0021 #include "GeoDataModel.h" 0022 0023 #include "GeoParser.h" 0024 0025 namespace Marble 0026 { 0027 namespace kml 0028 { 0029 KML_DEFINE_TAG_HANDLER( altitudeMode ) 0030 0031 GeoNode* KmlaltitudeModeTagHandler::parse( GeoParser& parser ) const 0032 { 0033 Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(kmlTag_altitudeMode))); 0034 0035 QString content = parser.readElementText().trimmed(); 0036 0037 AltitudeMode mode; 0038 if (content == QLatin1String("relativeToGround")) { 0039 mode = RelativeToGround; 0040 } else if (content == QLatin1String("absolute")) { 0041 mode = Absolute; 0042 } else { // clampToGround is Standard 0043 mode = ClampToGround; 0044 } 0045 0046 GeoStackItem parentItem = parser.parentElement(); 0047 0048 if ( parentItem.is<GeoDataPlacemark>() ) { 0049 parentItem.nodeAs<GeoDataPlacemark>()->geometry()->setAltitudeMode( mode ); 0050 } else if ( parentItem.is<GeoDataPoint>() ) { 0051 parentItem.nodeAs<GeoDataPoint>()->setAltitudeMode( mode ); 0052 } else if ( parentItem.is<GeoDataLatLonAltBox>() ) { 0053 parentItem.nodeAs<GeoDataLatLonAltBox>()->setAltitudeMode( mode ); 0054 } else if ( parentItem.is<GeoDataTrack>() ) { 0055 parentItem.nodeAs<GeoDataTrack>()->setAltitudeMode( mode ); 0056 } else if ( parentItem.is<GeoDataGroundOverlay>() ) { 0057 parentItem.nodeAs<GeoDataGroundOverlay>()->setAltitudeMode( mode ); 0058 } else if ( parentItem.is<GeoDataAbstractView>() ) { 0059 parentItem.nodeAs<GeoDataAbstractView>()->setAltitudeMode( mode ); 0060 } else if ( parentItem.is<GeoDataModel>() ) { 0061 parentItem.nodeAs<GeoDataModel>()->setAltitudeMode( mode ); 0062 } 0063 0064 return nullptr; 0065 } 0066 0067 } 0068 }