LCOV - code coverage report
Current view: top level - src/utils/shapes - PointOfInterest.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 72.4 % 76 55
Test Date: 2025-12-06 15:35:27 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-2025 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        12326 : 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, double width,
      35        12326 :                                  double height, const std::string& name, const Parameterised::Map& parameters) :
      36              :     Shape(id, type, color, layer, angle, imgFile, name),
      37              :     Position(pos),
      38              :     Parameterised(parameters),
      39        12326 :     myGeo(geo),
      40        12326 :     myLane(lane),
      41        12326 :     myPosOverLane(posOverLane),
      42        12326 :     myFriendlyPos(friendlyPos),
      43        12326 :     myPosLat(posLat),
      44        12326 :     myIcon(SUMOXMLDefinitions::POIIcons.get(icon)),
      45        12326 :     myHalfImgWidth(width / 2.0),
      46        12326 :     myHalfImgHeight(height / 2.0) {
      47        12326 : }
      48              : 
      49              : 
      50        22929 : PointOfInterest::~PointOfInterest() {}
      51              : 
      52              : 
      53              : POIIcon
      54        76877 : PointOfInterest::getIcon() const {
      55        76877 :     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       114465 : PointOfInterest::getWidth() const {
      67       114465 :     return myHalfImgWidth * 2.0;
      68              : }
      69              : 
      70              : 
      71              : double
      72       114465 : PointOfInterest::getHeight() const {
      73       114465 :     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         2792 :     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         2792 :     out.writeAttr(SUMO_ATTR_COLOR, getShapeColor());
     125         2792 :     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            1 :         out.writeAttr(SUMO_ATTR_LANE, laneID);
     131            1 :         out.writeAttr(SUMO_ATTR_POSITION, pos);
     132            1 :         if (posLat != 0) {
     133            0 :             out.writeAttr(SUMO_ATTR_POSITION_LAT, posLat);
     134              :         }
     135            1 :         if (friendlyPos) {
     136            0 :             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           43 :             out.writeAttr(SUMO_ATTR_LON, POICartesianPos.x());
     144           43 :             out.writeAttr(SUMO_ATTR_LAT, POICartesianPos.y());
     145           43 :             out.setPrecision();
     146              :         } else {
     147         2748 :             out.writeAttr(SUMO_ATTR_X, x());
     148         2748 :             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 :         out.writeAttr(SUMO_ATTR_IMGFILE, getShapeImgFile());
     159              :     }
     160         2792 :     if (getWidth() != Shape::DEFAULT_IMG_WIDTH) {
     161            0 :         out.writeAttr(SUMO_ATTR_WIDTH, getWidth());
     162              :     }
     163         2792 :     if (getHeight() != Shape::DEFAULT_IMG_HEIGHT) {
     164            0 :         out.writeAttr(SUMO_ATTR_HEIGHT, getHeight());
     165              :     }
     166         2792 :     writeParams(out);
     167         2792 :     out.closeTag();
     168         2792 : }
     169              : 
     170              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1