LCOV - code coverage report
Current view: top level - src/utils/shapes - PointOfInterest.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 72.2 % 72 52
Test Date: 2024-11-22 15:46:21 Functions: 64.3 % 14 9

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2005-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    PointOfInterest.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Michael Behrisch
      18              : /// @author  Melanie Knocke
      19              : /// @date    2005-09-15
      20              : ///
      21              : // A point-of-interest (2D)
      22              : /****************************************************************************/
      23              : #include <config.h>
      24              : 
      25              : #include "PointOfInterest.h"
      26              : 
      27              : 
      28              : // ===========================================================================
      29              : // member method definitions
      30              : // ===========================================================================
      31              : 
      32        11360 : PointOfInterest::PointOfInterest(const std::string& id, const std::string& type, const RGBColor& color, const Position& pos,
      33              :                                  bool geo, const std::string& lane, double posOverLane, bool friendlyPos, double posLat,
      34              :                                  const std::string& icon, double layer, double angle, const std::string& imgFile, bool relativePath,
      35        11360 :                                  double width, double height, const std::string& name, const Parameterised::Map& parameters) :
      36              :     Shape(id, type, color, layer, angle, imgFile, name, relativePath),
      37              :     Position(pos),
      38              :     Parameterised(parameters),
      39        11360 :     myGeo(geo),
      40        11360 :     myLane(lane),
      41        11360 :     myPosOverLane(posOverLane),
      42        11360 :     myFriendlyPos(friendlyPos),
      43        11360 :     myPosLat(posLat),
      44        11360 :     myIcon(SUMOXMLDefinitions::POIIcons.get(icon)),
      45        11360 :     myHalfImgWidth(width / 2.0),
      46        11360 :     myHalfImgHeight(height / 2.0) {
      47        11360 : }
      48              : 
      49              : 
      50        21410 : PointOfInterest::~PointOfInterest() {}
      51              : 
      52              : 
      53              : POIIcon
      54        66639 : PointOfInterest::getIcon() const {
      55        66639 :     return myIcon;
      56              : }
      57              : 
      58              : 
      59              : const std::string&
      60            0 : PointOfInterest::getIconStr() const {
      61            0 :     return SUMOXMLDefinitions::POIIcons.getString(myIcon);
      62              : }
      63              : 
      64              : 
      65              : double
      66        58140 : PointOfInterest::getWidth() const {
      67        58140 :     return myHalfImgWidth * 2.0;
      68              : }
      69              : 
      70              : 
      71              : double
      72        58140 : PointOfInterest::getHeight() const {
      73        58140 :     return myHalfImgHeight * 2.0;
      74              : }
      75              : 
      76              : 
      77              : Position
      78            0 : PointOfInterest::getCenter() const {
      79            0 :     return { x() + myHalfImgWidth, y() + myHalfImgHeight };
      80              : }
      81              : 
      82              : 
      83              : bool
      84            0 : PointOfInterest::getFriendlyPos() const {
      85            0 :     return myFriendlyPos;
      86              : }
      87              : 
      88              : 
      89              : void
      90            0 : PointOfInterest::setIcon(const std::string& icon) {
      91            0 :     myIcon = SUMOXMLDefinitions::POIIcons.get(icon);
      92            0 : }
      93              : 
      94              : 
      95              : void
      96            5 : PointOfInterest::setWidth(double width) {
      97            5 :     myHalfImgWidth = width / 2.0;
      98            5 : }
      99              : 
     100              : 
     101              : void
     102            5 : PointOfInterest::setHeight(double height) {
     103            5 :     myHalfImgHeight = height / 2.0;
     104            5 : }
     105              : 
     106              : 
     107              : void
     108            0 : PointOfInterest::setFriendlyPos(const bool friendlyPos) {
     109            0 :     myFriendlyPos = friendlyPos;
     110            0 : }
     111              : 
     112              : 
     113              : void
     114         2792 : PointOfInterest::writeXML(OutputDevice& out, const bool geo, const double zOffset, const std::string laneID,
     115              :                           const double pos, const bool friendlyPos, const double posLat) const {
     116         2792 :     out.openTag(SUMO_TAG_POI);
     117         5584 :     out.writeAttr(SUMO_ATTR_ID, StringUtils::escapeXML(getID()));
     118         2792 :     if (getShapeType().size() > 0) {
     119         5584 :         out.writeAttr(SUMO_ATTR_TYPE, StringUtils::escapeXML(getShapeType()));
     120              :     }
     121         2792 :     if (myIcon != POIIcon::NONE) {
     122            0 :         out.writeAttr(SUMO_ATTR_ICON, SUMOXMLDefinitions::POIIcons.getString(myIcon));
     123              :     }
     124              :     out.writeAttr(SUMO_ATTR_COLOR, getShapeColor());
     125         5584 :     out.writeAttr(SUMO_ATTR_LAYER, getShapeLayer() + zOffset);
     126         2792 :     if (!getShapeName().empty()) {
     127            0 :         out.writeAttr(SUMO_ATTR_NAME, getShapeName());
     128              :     }
     129         2792 :     if (laneID != "") {
     130              :         out.writeAttr(SUMO_ATTR_LANE, laneID);
     131              :         out.writeAttr(SUMO_ATTR_POSITION, pos);
     132            1 :         if (posLat != 0) {
     133              :             out.writeAttr(SUMO_ATTR_POSITION_LAT, posLat);
     134              :         }
     135            1 :         if (friendlyPos) {
     136              :             out.writeAttr(SUMO_ATTR_FRIENDLY_POS, friendlyPos);
     137              :         }
     138              :     } else {
     139         2791 :         if (geo) {
     140           43 :             Position POICartesianPos(*this);
     141           43 :             GeoConvHelper::getFinal().cartesian2geo(POICartesianPos);
     142           43 :             out.setPrecision(gPrecisionGeo);
     143           86 :             out.writeAttr(SUMO_ATTR_LON, POICartesianPos.x());
     144           43 :             out.writeAttr(SUMO_ATTR_LAT, POICartesianPos.y());
     145           43 :             out.setPrecision();
     146              :         } else {
     147         5496 :             out.writeAttr(SUMO_ATTR_X, x());
     148         5496 :             out.writeAttr(SUMO_ATTR_Y, y());
     149              :         }
     150         2791 :         if (z() != 0.) {
     151            0 :             out.writeAttr(SUMO_ATTR_Z, z());
     152              :         }
     153              :     }
     154         2792 :     if (getShapeNaviDegree() != Shape::DEFAULT_ANGLE) {
     155            0 :         out.writeAttr(SUMO_ATTR_ANGLE, getShapeNaviDegree());
     156              :     }
     157         2792 :     if (getShapeImgFile() != Shape::DEFAULT_IMG_FILE) {
     158            0 :         if (getShapeRelativePath()) {
     159              :             // write only the file name, without file path
     160              :             std::string file = getShapeImgFile();
     161            0 :             file.erase(0, FileHelpers::getFilePath(getShapeImgFile()).size());
     162              :             out.writeAttr(SUMO_ATTR_IMGFILE, file);
     163              :         } else {
     164              :             out.writeAttr(SUMO_ATTR_IMGFILE, getShapeImgFile());
     165              :         }
     166              :     }
     167         2792 :     if (getWidth() != Shape::DEFAULT_IMG_WIDTH) {
     168            0 :         out.writeAttr(SUMO_ATTR_WIDTH, getWidth());
     169              :     }
     170         2792 :     if (getHeight() != Shape::DEFAULT_IMG_HEIGHT) {
     171            0 :         out.writeAttr(SUMO_ATTR_HEIGHT, getHeight());
     172              :     }
     173         2792 :     writeParams(out);
     174         2792 :     out.closeTag();
     175         2792 : }
     176              : 
     177              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1