File indexing completed on 2024-06-02 03:51:02

0001 /*
0002     SPDX-FileCopyrightText: 2008 Patrick Spendrin <ps_ml@gmx.de>
0003     SPDX-FileCopyrightText: 2014 Marek Hakala <hakala.marek@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "KmlExtrudeTagHandler.h"
0009 #include "MarbleDebug.h"
0010 #include "KmlElementDictionary.h"
0011 
0012 #include "GeoDataGeometry.h"
0013 #include "GeoDataPoint.h"
0014 #include "GeoDataPolygon.h"
0015 #include "GeoDataLineString.h"
0016 #include "GeoDataLinearRing.h"
0017 #include "GeoDataPlacemark.h"
0018 
0019 #include "GeoParser.h"
0020 
0021 namespace Marble
0022 {
0023 namespace kml
0024 {
0025 KML_DEFINE_TAG_HANDLER( extrude )
0026 
0027 GeoNode* KmlextrudeTagHandler::parse( GeoParser& parser ) const
0028 {
0029     Q_ASSERT(parser.isStartElement() && parser.isValidElement(QLatin1String(kmlTag_extrude)));
0030 
0031     GeoStackItem parentItem = parser.parentElement();
0032 
0033     GeoDataGeometry* geometry;
0034     bool validParents = false;
0035 
0036     if( parentItem.is<GeoDataPoint>() ) {
0037         geometry = parentItem.nodeAs<GeoDataPoint>();
0038         validParents = true;
0039     } else if( parentItem.is<GeoDataPlacemark>() ) {
0040         geometry = parentItem.nodeAs<GeoDataPlacemark>()->geometry();
0041         validParents = true;
0042     } else if( parentItem.is<GeoDataPolygon>() ) {
0043         geometry = parentItem.nodeAs<GeoDataPolygon>();
0044         validParents = true;
0045     } else if( parentItem.is<GeoDataLineString>() ) {
0046         geometry = parentItem.nodeAs<GeoDataLineString>();
0047         validParents = true;
0048     } else if( parentItem.is<GeoDataLinearRing>() ) {
0049         geometry = parentItem.nodeAs<GeoDataLinearRing>();
0050         validParents = true;
0051     }
0052 
0053     if( validParents ) {
0054         QString content = parser.readElementText().trimmed();
0055 
0056         const bool extrude = (content == QLatin1String("1"));
0057         geometry->setExtrude(extrude);
0058     }
0059 
0060     return nullptr;
0061 }
0062 
0063 }
0064 }