File indexing completed on 2024-06-02 03:51:02
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2013 Sanjiban Bairagya <sanjiban22393@gmail.com> 0004 // 0005 0006 0007 #include "KmlGxAltitudeModeTagHandler.h" 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 namespace gx 0030 { 0031 KML_DEFINE_TAG_HANDLER_GX22( altitudeMode ) 0032 0033 GeoNode* KmlaltitudeModeTagHandler::parse( GeoParser& parser ) const 0034 { 0035 Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(kmlTag_altitudeMode))); 0036 0037 QString content = parser.readElementText().trimmed(); 0038 0039 AltitudeMode mode; 0040 if (content == QLatin1String("relativeToGround")) { 0041 mode = RelativeToGround; 0042 } else if (content == QLatin1String("absolute")) { 0043 mode = Absolute; 0044 } else if (content == QLatin1String("relativeToSeaFloor")) { 0045 mode = RelativeToSeaFloor; 0046 } else if (content == QLatin1String("clampToSeaFloor")) { 0047 mode = ClampToSeaFloor; 0048 } else if (content == QLatin1String("clampToGround")) { 0049 mode = ClampToGround; 0050 } else { 0051 mDebug() << "Unknown altitude mode " << content << ", falling back to 'clampToGround'"; 0052 mode = ClampToGround; 0053 } 0054 0055 GeoStackItem parentItem = parser.parentElement(); 0056 0057 if ( parentItem.is<GeoDataPlacemark>() ) { 0058 parentItem.nodeAs<GeoDataPlacemark>()->geometry()->setAltitudeMode( mode ); 0059 } else if ( parentItem.is<GeoDataPoint>() ) { 0060 parentItem.nodeAs<GeoDataPoint>()->setAltitudeMode( mode ); 0061 } else if ( parentItem.is<GeoDataLatLonAltBox>() ) { 0062 parentItem.nodeAs<GeoDataLatLonAltBox>()->setAltitudeMode( mode ); 0063 } else if ( parentItem.is<GeoDataTrack>() ) { 0064 parentItem.nodeAs<GeoDataTrack>()->setAltitudeMode( mode ); 0065 } else if ( parentItem.is<GeoDataGroundOverlay>() ) { 0066 parentItem.nodeAs<GeoDataGroundOverlay>()->setAltitudeMode( mode ); 0067 } else if ( parentItem.is<GeoDataAbstractView>() ) { 0068 parentItem.nodeAs<GeoDataAbstractView>()->setAltitudeMode( mode ); 0069 } else if ( parentItem.is<GeoDataModel>() ) { 0070 parentItem.nodeAs<GeoDataModel>()->setAltitudeMode( mode ); 0071 } 0072 0073 return nullptr; 0074 } 0075 0076 } 0077 } 0078 }