Eclipse SUMO - Simulation of Urban MObility
Junction.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2017-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 /****************************************************************************/
18 // C++ TraCI client API implementation
19 /****************************************************************************/
20 
21 
22 // ===========================================================================
23 // included modules
24 // ===========================================================================
25 #include <config.h>
26 
29 #include <microsim/MSNet.h>
31 #include <libsumo/TraCIConstants.h>
32 #include "Helper.h"
33 #include "Junction.h"
34 
35 
36 namespace libsumo {
37 // ===========================================================================
38 // static member initializations
39 // ===========================================================================
42 
43 
44 // ===========================================================================
45 // member definitions
46 // ===========================================================================
47 std::vector<std::string>
49  std::vector<std::string> ids;
51  return ids;
52 }
53 
54 
55 int
57  return (int)getIDList().size();
58 }
59 
60 
62 Junction::getPosition(const std::string& junctionID, const bool includeZ) {
63  return Helper::makeTraCIPosition(getJunction(junctionID)->getPosition(), includeZ);
64 }
65 
66 
68 Junction::getShape(const std::string& junctionID) {
70 }
71 
72 
74 Junction::getJunction(const std::string& id) {
76  if (j == nullptr) {
77  throw TraCIException("Junction '" + id + "' is not known");
78  }
79  return j;
80 }
81 
82 
84 
85 
88  NamedRTree* t = new NamedRTree();
89  for (const auto& i : MSNet::getInstance()->getJunctionControl()) {
90  Boundary b = i.second->getShape().getBoxBoundary();
91  const float cmin[2] = {(float) b.xmin(), (float) b.ymin()};
92  const float cmax[2] = {(float) b.xmax(), (float) b.ymax()};
93  t->Insert(cmin, cmax, i.second);
94  }
95  return t;
96 }
97 
98 
99 void
100 Junction::storeShape(const std::string& id, PositionVector& shape) {
101  shape.push_back(getJunction(id)->getPosition());
102 }
103 
104 
105 std::shared_ptr<VariableWrapper>
107  return std::make_shared<Helper::SubscriptionWrapper>(handleVariable, mySubscriptionResults, myContextSubscriptionResults);
108 }
109 
110 
111 bool
112 Junction::handleVariable(const std::string& objID, const int variable, VariableWrapper* wrapper) {
113  switch (variable) {
114  case TRACI_ID_LIST:
115  return wrapper->wrapStringList(objID, variable, getIDList());
116  case ID_COUNT:
117  return wrapper->wrapInt(objID, variable, getIDCount());
118  case VAR_POSITION:
119  return wrapper->wrapPosition(objID, variable, getPosition(objID));
120  default:
121  return false;
122  }
123 }
124 
125 
126 }
127 
128 
129 /****************************************************************************/
TraCIPositionVector
A list of positions.
libsumo::Junction::getPosition
static TraCIPosition getPosition(const std::string &junctionID, const bool includeZ=false)
Definition: Junction.cpp:62
MSNet.h
Junction.h
libsumo::VAR_POSITION
TRACI_CONST int VAR_POSITION
Definition: TraCIConstants.h:618
Boundary::ymin
double ymin() const
Returns minimum y-coordinate.
Definition: Boundary.cpp:130
MSJunction
The base class for an intersection.
Definition: MSJunction.h:60
NamedObjectCont::insertIDs
void insertIDs(std::vector< std::string > &into) const
Definition: NamedObjectCont.h:123
libsumo::TraCIPosition
A 3D-position.
Definition: TraCIDefs.h:109
libsumo::VariableWrapper
Definition: Subscription.h:132
libsumo::Junction
Definition: Junction.h:51
Boundary::xmax
double xmax() const
Returns maximum x-coordinate.
Definition: Boundary.cpp:124
libsumo::ContextSubscriptionResults
std::map< std::string, SubscriptionResults > ContextSubscriptionResults
Definition: TraCIDefs.h:204
libsumo::Junction::handleVariable
static bool handleVariable(const std::string &objID, const int variable, VariableWrapper *wrapper)
Definition: Junction.cpp:112
MSJunctionControl.h
libsumo::Junction::getIDList
static std::vector< std::string > getIDList()
Definition: Junction.cpp:48
libsumo::Helper::makeTraCIPosition
static TraCIPosition makeTraCIPosition(const Position &position, const bool includeZ=false)
Definition: Helper.cpp:309
libsumo::Junction::storeShape
static void storeShape(const std::string &id, PositionVector &shape)
Saves the shape of the requested object in the given container.
Definition: Junction.cpp:100
PositionVector
A list of positions.
Definition: PositionVector.h:45
libsumo
Definition: Edge.cpp:29
TraCIConstants.h
Boundary::xmin
double xmin() const
Returns minimum x-coordinate.
Definition: Boundary.cpp:118
NamedRTree::Insert
void Insert(const float a_min[2], const float a_max[2], Named *const &a_data)
Insert entry.
Definition: NamedRTree.h:81
libsumo::VariableWrapper::wrapStringList
virtual bool wrapStringList(const std::string &objID, const int variable, const std::vector< std::string > &value)=0
libsumo::Junction::makeWrapper
static std::shared_ptr< VariableWrapper > makeWrapper()
Definition: Junction.cpp:106
Boundary
A class that stores a 2D geometrical boundary.
Definition: Boundary.h:41
Helper.h
libsumo::Helper::makeTraCIPositionVector
static TraCIPositionVector makeTraCIPositionVector(const PositionVector &positionVector)
helper functions
Definition: Helper.cpp:269
libsumo::TRACI_ID_LIST
TRACI_CONST int TRACI_ID_LIST
Definition: TraCIConstants.h:498
LIBSUMO_SUBSCRIPTION_IMPLEMENTATION
#define LIBSUMO_SUBSCRIPTION_IMPLEMENTATION(CLASS, DOMAIN)
Definition: TraCIDefs.h:50
libsumo::ID_COUNT
TRACI_CONST int ID_COUNT
Definition: TraCIConstants.h:501
libsumo::TraCIException
Definition: TraCIDefs.h:89
libsumo::Junction::getTree
static LIBSUMO_SUBSCRIPTION_API NamedRTree * getTree()
Returns a tree filled with junction instances.
Definition: Junction.cpp:87
PointOfInterest.h
MSNet::getInstance
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
Definition: MSNet.cpp:167
libsumo::Junction::myContextSubscriptionResults
static ContextSubscriptionResults myContextSubscriptionResults
Definition: Junction.h:80
libsumo::Junction::mySubscriptionResults
static SubscriptionResults mySubscriptionResults
Definition: Junction.h:79
libsumo::VariableWrapper::wrapInt
virtual bool wrapInt(const std::string &objID, const int variable, const int value)=0
NamedObjectCont::get
T get(const std::string &id) const
Retrieves an item.
Definition: NamedObjectCont.h:98
NamedRTree
A RT-tree for efficient storing of SUMO's Named objects.
Definition: NamedRTree.h:63
config.h
ShapeContainer.h
libsumo::Junction::getJunction
static MSJunction * getJunction(const std::string &id)
Definition: Junction.cpp:74
libsumo::Junction::getIDCount
static int getIDCount()
Definition: Junction.cpp:56
libsumo::VariableWrapper::wrapPosition
virtual bool wrapPosition(const std::string &objID, const int variable, const TraCIPosition &value)=0
MSNet::getJunctionControl
MSJunctionControl & getJunctionControl()
Returns the junctions control.
Definition: MSNet.h:419
libsumo::Junction::getShape
static TraCIPositionVector getShape(const std::string &junctionID)
Definition: Junction.cpp:68
libsumo::SubscriptionResults
std::map< std::string, TraCIResults > SubscriptionResults
{object->{variable->value}}
Definition: TraCIDefs.h:203
Boundary::ymax
double ymax() const
Returns maximum y-coordinate.
Definition: Boundary.cpp:136