LCOV - code coverage report
Current view: top level - src/polyconvert - PCLoaderXML.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 35 39 89.7 %
Date: 2024-04-28 15:39:05 Functions: 4 6 66.7 %

          Line data    Source code
       1             : /****************************************************************************/
       2             : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3             : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4             : // This program and the accompanying materials are made available under the
       5             : // terms of the Eclipse Public License 2.0 which is available at
       6             : // https://www.eclipse.org/legal/epl-2.0/
       7             : // This Source Code may also be made available under the following Secondary
       8             : // Licenses when the conditions for such availability set forth in the Eclipse
       9             : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10             : // or later which is available at
      11             : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12             : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13             : /****************************************************************************/
      14             : /// @file    PCLoaderXML.cpp
      15             : /// @author  Daniel Krajzewicz
      16             : /// @author  Jakob Erdmann
      17             : /// @author  Christoph Sommer
      18             : /// @author  Michael Behrisch
      19             : /// @date    Thu, 02.11.2006
      20             : ///
      21             : // A reader for polygons and pois stored in XML-format
      22             : /****************************************************************************/
      23             : #include <config.h>
      24             : 
      25             : #include <string>
      26             : #include <map>
      27             : #include <fstream>
      28             : #include <utils/options/OptionsCont.h>
      29             : #include <utils/options/Option.h>
      30             : #include <utils/common/MsgHandler.h>
      31             : #include <utils/common/FileHelpers.h>
      32             : #include <utils/common/RGBColor.h>
      33             : #include <utils/common/StdDefs.h>
      34             : #include <utils/common/SysUtils.h>
      35             : #include <polyconvert/PCPolyContainer.h>
      36             : #include <utils/geom/GeomHelper.h>
      37             : #include <utils/geom/Boundary.h>
      38             : #include <utils/geom/Position.h>
      39             : #include <utils/geom/GeoConvHelper.h>
      40             : #include <utils/xml/XMLSubSys.h>
      41             : #include <utils/geom/GeomConvHelper.h>
      42             : #include <utils/xml/SUMOXMLDefinitions.h>
      43             : #include "PCLoaderXML.h"
      44             : 
      45             : 
      46             : // ===========================================================================
      47             : // method definitions
      48             : // ===========================================================================
      49             : // ---------------------------------------------------------------------------
      50             : // static interface
      51             : // ---------------------------------------------------------------------------
      52             : void
      53          45 : PCLoaderXML::loadIfSet(OptionsCont& oc, PCPolyContainer& toFill,
      54             :                        PCTypeMap& tm) {
      55          90 :     if (!oc.isSet("xml-files")) {
      56          34 :         return;
      57             :     }
      58          11 :     PCLoaderXML handler(toFill, tm, oc);
      59             :     // parse file(s)
      60          22 :     std::vector<std::string> files = oc.getStringVector("xml");
      61          21 :     for (std::vector<std::string>::const_iterator file = files.begin(); file != files.end(); ++file) {
      62          22 :         if (!FileHelpers::isReadable(*file)) {
      63           0 :             throw ProcessError(TLF("Could not open xml-file '%'.", *file));
      64             :         }
      65          22 :         const long before = PROGRESS_BEGIN_TIME_MESSAGE("Parsing XML from '" + *file + "'");
      66          11 :         if (!XMLSubSys::runParser(handler, *file)) {
      67           1 :             throw ProcessError();
      68             :         }
      69          10 :         PROGRESS_TIME_MESSAGE(before);
      70             :     }
      71          11 : }
      72             : 
      73             : 
      74             : 
      75             : // ---------------------------------------------------------------------------
      76             : // handler methods
      77             : // ---------------------------------------------------------------------------
      78          11 : PCLoaderXML::PCLoaderXML(PCPolyContainer& toFill,
      79          11 :                          PCTypeMap& tm, OptionsCont& oc)
      80             :     : ShapeHandler("xml-poi-definition", toFill),
      81          22 :       myTypeMap(tm), myOptions(oc) {}
      82             : 
      83             : 
      84          11 : PCLoaderXML::~PCLoaderXML() {}
      85             : 
      86             : 
      87             : void
      88          29 : PCLoaderXML::myStartElement(int element,
      89             :                             const SUMOSAXAttributes& attrs) {
      90          29 :     if (element != SUMO_TAG_POI && element != SUMO_TAG_POLY) {
      91          11 :         return;
      92             :     }
      93          18 :     bool ok = true;
      94             :     // get the id, report an error if not given or empty...
      95          18 :     std::string id = attrs.get<std::string>(SUMO_ATTR_ID, nullptr, ok);
      96          36 :     std::string type = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, id.c_str(), ok, myOptions.getString("type"));
      97          18 :     if (!ok) {
      98             :         return;
      99             :     }
     100             :     // patch the values
     101          18 :     bool discard = myOptions.getBool("discard");
     102          18 :     if (myTypeMap.has(type)) {
     103           0 :         const PCTypeMap::TypeDef& def = myTypeMap.get(type);
     104           0 :         discard = def.discard;
     105           0 :         setDefaults(def.prefix, def.color, def.icon, def.layer, def.allowFill);
     106             :     } else {
     107          72 :         setDefaults(myOptions.getString("prefix"), RGBColor::parseColor(myOptions.getString("color")),
     108          72 :                     myOptions.getString("icon"), myOptions.getFloat("layer"), myOptions.getBool("fill"));
     109             :     }
     110          18 :     if (!discard) {
     111          18 :         if (element == SUMO_TAG_POI) {
     112          18 :             addPOI(attrs, myOptions.isInStringVector("prune.keep-list", id), true);
     113             :         }
     114          18 :         if (element == SUMO_TAG_POLY) {
     115          18 :             addPoly(attrs, myOptions.isInStringVector("prune.keep-list", id), true);
     116             :         }
     117             :     }
     118             : }
     119             : 
     120             : 
     121             : Position
     122           1 : PCLoaderXML::getLanePos(const std::string& poiID, const std::string& laneID, double lanePos, bool friendlyPos, double lanePosLat) {
     123           1 :     static_cast<PCPolyContainer&>(myShapeContainer).addLanePos(poiID, laneID, lanePos, friendlyPos, lanePosLat);
     124           1 :     return Position::INVALID;
     125             : }
     126             : 
     127             : 
     128             : /****************************************************************************/

Generated by: LCOV version 1.14