LCOV - code coverage report
Current view: top level - src/netimport/vissim/tempstructs - NIVissimAbstractEdge.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 72.1 % 61 44
Test Date: 2024-11-22 15:46:21 Functions: 72.2 % 18 13

            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    NIVissimAbstractEdge.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Michael Behrisch
      18              : /// @date    Sept 2002
      19              : ///
      20              : // -------------------
      21              : /****************************************************************************/
      22              : #include <config.h>
      23              : 
      24              : 
      25              : #include <map>
      26              : #include <cassert>
      27              : #include <utils/common/MsgHandler.h>
      28              : #include <utils/common/ToString.h>
      29              : #include <utils/geom/GeomHelper.h>
      30              : #include <utils/geom/GeoConvHelper.h>
      31              : #include <netbuild/NBNetBuilder.h>
      32              : #include "NIVissimAbstractEdge.h"
      33              : 
      34              : 
      35              : NIVissimAbstractEdge::DictType NIVissimAbstractEdge::myDict;
      36              : 
      37         1610 : NIVissimAbstractEdge::NIVissimAbstractEdge(int id,
      38         1610 :         const PositionVector& geom)
      39         1610 :     : myID(id), myNode(-1) {
      40              :     // convert/publicate geometry
      41         8043 :     for (PositionVector::const_iterator i = geom.begin(); i != geom.end(); ++i) {
      42         6433 :         Position p = *i;
      43         6433 :         if (!NBNetBuilder::transformCoordinate(p)) {
      44            0 :             WRITE_WARNINGF(TL("Unable to project coordinates for edge '%'."), toString(id));
      45              :         }
      46         6433 :         myGeom.push_back_noDoublePos(p);
      47              :     }
      48              :     //
      49         1610 :     dictionary(id, this);
      50         1610 : }
      51              : 
      52              : 
      53         1610 : NIVissimAbstractEdge::~NIVissimAbstractEdge() {}
      54              : 
      55              : 
      56              : bool
      57         1610 : NIVissimAbstractEdge::dictionary(int id, NIVissimAbstractEdge* e) {
      58              :     DictType::iterator i = myDict.find(id);
      59         1610 :     if (i == myDict.end()) {
      60         1610 :         myDict[id] = e;
      61         1610 :         return true;
      62              :     }
      63              :     return false;
      64              : }
      65              : 
      66              : 
      67              : NIVissimAbstractEdge*
      68        13148 : NIVissimAbstractEdge::dictionary(int id) {
      69              :     DictType::iterator i = myDict.find(id);
      70        13148 :     if (i == myDict.end()) {
      71              :         return nullptr;
      72              :     }
      73        13148 :     return (*i).second;
      74              : }
      75              : 
      76              : 
      77              : 
      78              : Position
      79         9042 : NIVissimAbstractEdge::getGeomPosition(double pos) const {
      80         9042 :     if (myGeom.length() > pos) {
      81         8993 :         return myGeom.positionAtOffset(pos);
      82           49 :     } else if (myGeom.length() == pos) {
      83            0 :         return myGeom[-1];
      84              :     } else {
      85              :         PositionVector g(myGeom);
      86           49 :         const double amount = pos - myGeom.length();
      87           49 :         g.extrapolate(amount * 2);
      88           49 :         return g.positionAtOffset(pos + amount * 2);
      89           49 :     }
      90              : }
      91              : 
      92              : 
      93              : void
      94            0 : NIVissimAbstractEdge::splitAndAssignToNodes() {
      95            0 :     for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
      96            0 :         NIVissimAbstractEdge* e = (*i).second;
      97            0 :         e->splitAssigning();
      98              :     }
      99            0 : }
     100              : 
     101              : void
     102            0 : NIVissimAbstractEdge::splitAssigning() {}
     103              : 
     104              : 
     105              : 
     106              : 
     107              : 
     108              : bool
     109         1805 : NIVissimAbstractEdge::crossesEdge(NIVissimAbstractEdge* c) const {
     110         1805 :     return myGeom.intersects(c->myGeom);
     111              : }
     112              : 
     113              : 
     114              : Position
     115          806 : NIVissimAbstractEdge::crossesEdgeAtPoint(NIVissimAbstractEdge* c) const {
     116          806 :     return myGeom.intersectionPosition2D(c->myGeom);
     117              : }
     118              : 
     119              : 
     120              : std::vector<int>
     121            0 : NIVissimAbstractEdge::getWithin(const AbstractPoly& p, double offset) {
     122              :     std::vector<int> ret;
     123            0 :     for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
     124            0 :         NIVissimAbstractEdge* e = (*i).second;
     125            0 :         if (e->overlapsWith(p, offset)) {
     126            0 :             ret.push_back(e->myID);
     127              :         }
     128              :     }
     129            0 :     return ret;
     130            0 : }
     131              : 
     132              : 
     133              : bool
     134            0 : NIVissimAbstractEdge::overlapsWith(const AbstractPoly& p, double offset) const {
     135            0 :     return myGeom.overlapsWith(p, offset);
     136              : }
     137              : 
     138              : 
     139              : bool
     140         1854 : NIVissimAbstractEdge::hasNodeCluster() const {
     141         1854 :     return myNode != -1;
     142              : }
     143              : 
     144              : 
     145              : int
     146       196523 : NIVissimAbstractEdge::getID() const {
     147       196523 :     return myID;
     148              : }
     149              : 
     150              : void
     151           36 : NIVissimAbstractEdge::clearDict() {
     152         1646 :     for (DictType::iterator i = myDict.begin(); i != myDict.end(); i++) {
     153         1610 :         delete (*i).second;
     154              :     }
     155              :     myDict.clear();
     156           36 : }
     157              : 
     158              : 
     159              : const PositionVector&
     160       125991 : NIVissimAbstractEdge::getGeometry() const {
     161       125991 :     return myGeom;
     162              : }
     163              : 
     164              : 
     165              : void
     166          830 : NIVissimAbstractEdge::addDisturbance(int disturbance) {
     167          830 :     myDisturbances.push_back(disturbance);
     168          830 : }
     169              : 
     170              : 
     171              : const std::vector<int>&
     172         4977 : NIVissimAbstractEdge::getDisturbances() const {
     173         4977 :     return myDisturbances;
     174              : }
     175              : 
     176              : 
     177              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1