Eclipse SUMO - Simulation of Urban MObility
NIVissimConnectionCluster.h
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // -------------------
16 /****************************************************************************/
17 #ifndef NIVissimConnectionCluster_h
18 #define NIVissimConnectionCluster_h
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 
27 #include <iostream>
28 #include <vector>
29 #include <utils/geom/Boundary.h>
30 #include <utils/geom/GeomHelper.h>
31 #include "NIVissimConnection.h"
32 
33 
34 // ===========================================================================
35 // class declarations
36 // ===========================================================================
37 class NBNode;
38 class NIVissimEdge;
39 
40 
41 // ===========================================================================
42 // class definitions
43 // ===========================================================================
53 public:
56  NIVissimConnectionCluster(const std::vector<int>& connections, int nodeCluster,
57  int edgeid);
58 
59  NIVissimConnectionCluster(const std::vector<int>& connections,
60  const Boundary& boundary, int nodeCluster, const std::vector<int>& edges);
61 
64 
66  bool overlapsWith(NIVissimConnectionCluster* c, double offset = 0) const;
67 
68  bool hasNodeCluster() const;
69 
70  NBNode* getNBNode() const;
71 
72  bool around(const Position& p, double offset = 0) const;
73 
74  double getPositionForEdge(int edgeid) const;
75 
76  friend class NIVissimEdge; // !!! debug
77 
78  const std::vector<int>& getConnections() const {
79  return myConnections;
80  }
81 
86 
87 
88 public:
91  static void joinBySameEdges(double offset);
92 
93  static void joinByDisturbances(double offset);
94 
95  static void buildNodeClusters();
96 
97  static void _debugOut(std::ostream& into);
98 
99  static int dictSize();
100 
101 
102  static int getNextFreeNodeID();
103 
104  static void clearDict();
105 
106 private:
108  public:
110  ~NodeSubCluster();
111  void add(NIVissimConnection* c);
112  void add(const NodeSubCluster& c);
113  int size() const;
114  bool overlapsWith(const NodeSubCluster& c, double offset = 0);
115  std::vector<int> getConnectionIDs() const;
117  public:
119  typedef std::vector<NIVissimConnection*> ConnectionCont;
121  };
122 
124  private:
125  double myAngle;
126 
127  public:
129  explicit same_direction_sorter(double angle)
130  : myAngle(angle) { }
131 
132  public:
136  <
138  }
139  };
140 
141 
142 
143 private:
146 
147  void removeConnections(const NodeSubCluster& c);
148 
149  void recomputeBoundary();
150 
151  void recheckEdges();
152 
153  bool joinable(NIVissimConnectionCluster* c2, double offset);
154 
155 
156  std::vector<int> getDisturbanceParticipators();
157 
158  std::vector<int> extendByToTreatAsSame(const std::vector<int>& iv1,
159  const std::vector<int>& iv2) const;
160 
162 
164 
165 
166 
167 private:
169  std::vector<int> myConnections;
170 
173 
176 
177  // The edge which holds the cluster
178  std::vector<int> myEdges;
179 
180  std::vector<int> myNodes;
181 
182  std::vector<int> myTLs;
183 
184  std::vector<int> myOutgoingEdges, myIncomingEdges;
185 
186 private:
187  typedef std::vector<NIVissimConnectionCluster*> ContType;
189  static int myFirstFreeID;
190  static int myStaticBlaID;
191  int myBlaID;
192 };
193 
194 
195 #endif
196 
197 /****************************************************************************/
198 
NIVissimConnectionCluster::myFirstFreeID
static int myFirstFreeID
Definition: NIVissimConnectionCluster.h:189
NIVissimConnectionCluster::myNodes
std::vector< int > myNodes
Definition: NIVissimConnectionCluster.h:180
Boundary.h
PositionVector::beginEndAngle
double beginEndAngle() const
returns the angle in radians of the line connecting the first and the last position
Definition: PositionVector.cpp:808
NIVissimConnectionCluster::getNBNode
NBNode * getNBNode() const
Definition: NIVissimConnectionCluster.cpp:576
NIVissimEdge
A temporary storage for edges imported from Vissim.
Definition: NIVissimEdge.h:53
GeomHelper::angleDiff
static double angleDiff(const double angle1, const double angle2)
Returns the difference of the second angle to the first angle in radiants.
Definition: GeomHelper.cpp:180
NIVissimConnectionCluster::add
void add(NIVissimConnectionCluster *c)
Adds the second cluster.
Definition: NIVissimConnectionCluster.cpp:179
NIVissimConnectionCluster::NodeSubCluster
Definition: NIVissimConnectionCluster.h:107
NIVissimConnectionCluster::dictSize
static int dictSize()
Definition: NIVissimConnectionCluster.cpp:539
NIVissimConnectionCluster::myOutgoingEdges
std::vector< int > myOutgoingEdges
Definition: NIVissimConnectionCluster.h:184
NIVissimConnectionCluster::~NIVissimConnectionCluster
~NIVissimConnectionCluster()
Destructor.
Definition: NIVissimConnectionCluster.cpp:159
NIVissimConnectionCluster::myConnections
std::vector< int > myConnections
List of connection-ids which participate within this cluster.
Definition: NIVissimConnectionCluster.h:169
NIVissimConnectionCluster::myEdges
std::vector< int > myEdges
Definition: NIVissimConnectionCluster.h:178
NIVissimConnectionCluster::getConnections
const std::vector< int > & getConnections() const
Definition: NIVissimConnectionCluster.h:78
NIVissimConnectionCluster::joinByDisturbances
static void joinByDisturbances(double offset)
NIVissimConnectionCluster::myTLs
std::vector< int > myTLs
Definition: NIVissimConnectionCluster.h:182
NIVissimConnectionCluster::same_direction_sorter
Definition: NIVissimConnectionCluster.h:123
PositionVector
A list of positions.
Definition: PositionVector.h:45
NIVissimConnectionCluster::getPositionForEdge
double getPositionForEdge(int edgeid) const
Definition: NIVissimConnectionCluster.cpp:621
NIVissimConnectionCluster::_debugOut
static void _debugOut(std::ostream &into)
Definition: NIVissimConnectionCluster.cpp:516
NIVissimConnectionCluster::getIncomingContinuationGeometry
PositionVector getIncomingContinuationGeometry(NIVissimEdge *e) const
Definition: NIVissimConnectionCluster.cpp:698
NIVissimConnectionCluster::getNextFreeNodeID
static int getNextFreeNodeID()
Definition: NIVissimConnectionCluster.cpp:164
NIVissimConnectionCluster::hasNodeCluster
bool hasNodeCluster() const
Definition: NIVissimConnectionCluster.cpp:533
NIVissimConnectionCluster::joinable
bool joinable(NIVissimConnectionCluster *c2, double offset)
Definition: NIVissimConnectionCluster.cpp:318
NIVissimConnectionCluster::around
bool around(const Position &p, double offset=0) const
Definition: NIVissimConnectionCluster.cpp:582
NIVissimConnectionCluster::myBlaID
int myBlaID
Definition: NIVissimConnectionCluster.h:191
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
NIVissimConnection
Definition: NIVissimConnection.h:47
Position
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:38
NIVissimConnectionCluster::NodeSubCluster::~NodeSubCluster
~NodeSubCluster()
Definition: NIVissimConnectionCluster.cpp:63
NIVissimConnectionCluster::same_direction_sorter::operator()
int operator()(NIVissimConnection *c1, NIVissimConnection *c2) const
comparing operation
Definition: NIVissimConnectionCluster.h:134
NIVissimAbstractEdge::getGeometry
const PositionVector & getGeometry() const
Definition: NIVissimAbstractEdge.cpp:161
NIVissimConnectionCluster::liesOnSameEdgesEnd
bool liesOnSameEdgesEnd(NIVissimConnectionCluster *cc2)
Definition: NIVissimConnectionCluster.cpp:418
NIVissimConnectionCluster::getOutgoingContinuation
NIVissimConnection * getOutgoingContinuation(NIVissimEdge *e) const
Definition: NIVissimConnectionCluster.cpp:765
NIVissimConnectionCluster::isWeakDistrictConnRealisation
bool isWeakDistrictConnRealisation(NIVissimConnectionCluster *c2)
Definition: NIVissimConnectionCluster.cpp:375
NIVissimConnectionCluster::getDisturbanceParticipators
std::vector< int > getDisturbanceParticipators()
Definition: NIVissimConnectionCluster.cpp:469
NIVissimConnectionCluster::NodeSubCluster::ConnectionCont
std::vector< NIVissimConnection * > ConnectionCont
Definition: NIVissimConnectionCluster.h:119
NIVissimConnectionCluster::NodeSubCluster::overlapsWith
bool overlapsWith(const NodeSubCluster &c, double offset=0)
Definition: NIVissimConnectionCluster.cpp:100
NIVissimConnectionCluster::myIncomingEdges
std::vector< int > myIncomingEdges
Definition: NIVissimConnectionCluster.h:184
NIVissimConnectionCluster::getOutgoingContinuationGeometry
PositionVector getOutgoingContinuationGeometry(NIVissimEdge *e) const
Definition: NIVissimConnectionCluster.cpp:743
NIVissimConnectionCluster::NodeSubCluster::add
void add(NIVissimConnection *c)
Definition: NIVissimConnectionCluster.cpp:67
NIVissimConnection.h
NIVissimConnectionCluster::myClusters
static ContType myClusters
Definition: NIVissimConnectionCluster.h:188
NIVissimConnectionCluster::recheckEdges
void recheckEdges()
Definition: NIVissimConnectionCluster.cpp:590
NIVissimConnectionCluster::NodeSubCluster::getConnectionIDs
std::vector< int > getConnectionIDs() const
Definition: NIVissimConnectionCluster.cpp:88
NIVissimConnectionCluster::NodeSubCluster::myConnections
ConnectionCont myConnections
Definition: NIVissimConnectionCluster.h:120
NIVissimConnectionCluster::ContType
std::vector< NIVissimConnectionCluster * > ContType
Definition: NIVissimConnectionCluster.h:187
NIVissimConnectionCluster::removeConnections
void removeConnections(const NodeSubCluster &c)
Definition: NIVissimConnectionCluster.cpp:545
NIVissimConnectionCluster::extendByToTreatAsSame
std::vector< int > extendByToTreatAsSame(const std::vector< int > &iv1, const std::vector< int > &iv2) const
Definition: NIVissimConnectionCluster.cpp:453
NIVissimConnectionCluster::overlapsWith
bool overlapsWith(NIVissimConnectionCluster *c, double offset=0) const
Returns the information whether the given cluster overlaps the current.
Definition: NIVissimConnectionCluster.cpp:170
NIVissimConnectionCluster::NodeSubCluster::myBoundary
Boundary myBoundary
Definition: NIVissimConnectionCluster.h:118
NIVissimConnectionCluster::buildNodeClusters
static void buildNodeClusters()
Definition: NIVissimConnectionCluster.cpp:485
config.h
NIVissimConnectionCluster::getIncomingContinuation
NIVissimConnection * getIncomingContinuation(NIVissimEdge *e) const
Definition: NIVissimConnectionCluster.cpp:721
GeomHelper.h
NIVissimConnectionCluster::NodeSubCluster::NodeSubCluster
NodeSubCluster(NIVissimConnection *c)
Definition: NIVissimConnectionCluster.cpp:58
NIVissimConnectionCluster::myBoundary
Boundary myBoundary
The boundary of the cluster.
Definition: NIVissimConnectionCluster.h:172
NBNode
Represents a single node (junction) during network building.
Definition: NBNode.h:67
NIVissimConnectionCluster::NodeSubCluster::size
int size() const
Definition: NIVissimConnectionCluster.cpp:82
NIVissimConnectionCluster::recomputeBoundary
void recomputeBoundary()
Definition: NIVissimConnectionCluster.cpp:559
NIVissimConnectionCluster::NIVissimConnectionCluster
NIVissimConnectionCluster(const std::vector< int > &connections, int nodeCluster, int edgeid)
Constructor Build the boundary; The boundary includes both incoming and outgoing nodes.
Definition: NIVissimConnectionCluster.cpp:113
NIVissimConnectionCluster::same_direction_sorter::myAngle
double myAngle
Definition: NIVissimConnectionCluster.h:125
NIVissimConnectionCluster::clearDict
static void clearDict()
Definition: NIVissimConnectionCluster.cpp:688
NIVissimConnectionCluster::same_direction_sorter::same_direction_sorter
same_direction_sorter(double angle)
constructor
Definition: NIVissimConnectionCluster.h:129
NIVissimConnectionCluster::myStaticBlaID
static int myStaticBlaID
Definition: NIVissimConnectionCluster.h:190
NIVissimConnectionCluster::myNodeCluster
int myNodeCluster
The node the cluster is assigned to.
Definition: NIVissimConnectionCluster.h:175
NIVissimConnectionCluster::joinBySameEdges
static void joinBySameEdges(double offset)
Tries to joind clusters participating within a node This is done by joining clusters which overlap.
Definition: NIVissimConnectionCluster.cpp:209
NIVissimConnectionCluster
Definition: NIVissimConnectionCluster.h:52