50 #ifdef CHECK_MEMORY_LEAKS
52 #endif // CHECK_MEMORY_LEAKS
101 std::vector<int> ret;
104 ret.push_back((*i)->getID());
105 (*i)->setNodeCluster(
id);
126 const std::vector<int>& connections,
int nodeCluster,
int edgeid)
136 for (std::vector<int>::const_iterator i = connections.begin(); i != connections.end(); i++) {
149 const std::vector<int>& connections,
const Boundary& boundary,
150 int nodeCluster,
const std::vector<int>& edges)
151 : myConnections(connections), myBoundary(boundary),
152 myNodeCluster(nodeCluster), myEdges(edges) {
157 for (std::vector<int>::const_iterator i = connections.begin(); i != connections.end(); i++) {
162 assert(find(edges.begin(), edges.end(), c->
getFromEdgeID()) != edges.end()
164 find(edges.begin(), edges.end(), c->
getToEdgeID()) != edges.end());
205 for (std::vector<int>::iterator j = c->
myEdges.begin(); j != c->
myEdges.end(); j++) {
226 std::vector<NIVissimConnectionCluster*> joinAble;
232 ContType::iterator j = i + 1;
237 if ((*i)->joinable(*j, offset)) {
238 joinAble.push_back(*j);
242 for (std::vector<NIVissimConnectionCluster*>::iterator k = joinAble.begin();
243 k != joinAble.end(); k++) {
251 if (joinAble.size() > 0) {
264 ContType::iterator j = i + 1;
268 if ((*i)->joinable(*j, offset)) {
269 joinAble.push_back(*j);
273 for (std::vector<NIVissimConnectionCluster*>::iterator k = joinAble.begin();
274 k != joinAble.end(); k++) {
282 if (joinAble.size() > 0) {
298 ContType::iterator j = i + 1;
302 if ((*i)->isWeakDistrictConnRealisation(*j)) {
303 joinAble.push_back(*j);
307 for (std::vector<NIVissimConnectionCluster*>::iterator k = joinAble.begin();
308 k != joinAble.end(); k++) {
316 if (joinAble.size() > 0) {
356 std::vector<int> extendedOutgoing1;
357 std::vector<int> extendedIncoming1;
358 std::vector<int> extendedOutgoing2;
359 std::vector<int> extendedIncoming2;
400 bool crosses =
false;
422 if (oe == 0 || ie == 0) {
427 SUMOReal a1 = l1.atan2DegreeAngle();
428 SUMOReal a2 = l2.atan2DegreeAngle();
429 return fabs(a1 - a2) < 5;
447 if (pos1 <= 5.0 && pos2 <= 5.0) {
458 if (pos1 >= g.length() - 5.0 && pos2 >= g.length() - 5.0) {
470 const std::vector<int>& iv2)
const {
471 std::vector<int> ret(iv1);
472 for (std::vector<int>::const_iterator i = iv1.begin(); i != iv1.end(); i++) {
475 for (std::vector<NIVissimEdge*>::const_iterator j = treatAsSame.begin(); j != treatAsSame.end(); j++) {
476 if (find(iv2.begin(), iv2.end(), (*j)->getID()) == iv2.end()) {
477 ret.push_back((*j)->getID());
486 std::vector<int> ret;
490 for (std::vector<int>::const_iterator j = disturbances.begin(); j != disturbances.end(); j++) {
503 std::vector<int> disturbances;
504 std::vector<int> tls;
505 std::vector<int> nodes;
508 if ((*i)->myConnections.size() > 0) {
509 (*i)->recomputeBoundary();
512 nodes = (*i)->myNodes;
513 if (nodes.size() > 1) {
514 WRITE_WARNING(
"NIVissimConnectionCluster:More than a single node");
517 if (nodes.size() > 0) {
523 nodeid, tlsid, (*i)->myConnections,
524 disturbances, (*i)->myIncomingEdges.size() < 2);
525 assert((*i)->myNodeCluster ==
id || (*i)->myNodeCluster < 0);
526 (*i)->myNodeCluster = id;
535 std::vector<int> connections = (*i)->myConnections;
536 if (find(connections.begin(), connections.end(), id) != connections.end()) {
537 for (std::vector<int>::iterator j = connections.begin(); j != connections.end(); j++) {
549 std::vector<int> connections = (*i)->myConnections;
550 for (std::vector<int>::iterator j = connections.begin(); j != connections.end(); j++) {
551 if (j != connections.begin()) {
556 into <<
"(" << (*i)->myBoundary <<
")" << std::endl;
558 into <<
"---------------------------" << std::endl;
579 int connid = conn->
getID();
624 std::vector<int>::iterator i;
657 std::vector<int>::const_iterator i;
701 WRITE_WARNING(
"NIVissimConnectionCluster: how to get an edge's position?");
705 std::vector<int>::const_iterator i = find(
myEdges.begin(),
myEdges.end(), edgeid);
731 std::vector<NIVissimConnection*> edgeIsIncoming;
735 edgeIsIncoming.push_back(c);
739 if (edgeIsIncoming.size() == 0) {
743 sort(edgeIsIncoming.begin(), edgeIsIncoming.end(),
754 std::vector<NIVissimConnection*> edgeIsIncoming;
758 edgeIsIncoming.push_back(c);
762 if (edgeIsIncoming.size() == 0) {
766 sort(edgeIsIncoming.begin(), edgeIsIncoming.end(),
768 return *(edgeIsIncoming.begin());
776 std::vector<NIVissimConnection*> edgeIsOutgoing;
780 edgeIsOutgoing.push_back(c);
784 if (edgeIsOutgoing.size() == 0) {
788 sort(edgeIsOutgoing.begin(), edgeIsOutgoing.end(),
798 std::vector<NIVissimConnection*> edgeIsOutgoing;
802 edgeIsOutgoing.push_back(c);
806 if (edgeIsOutgoing.size() == 0) {
810 sort(edgeIsOutgoing.begin(), edgeIsOutgoing.end(),
812 return *(edgeIsOutgoing.begin());