76 const std::string& streetName,
const std::string& edgeType,
int priority)
77 :
MSEdge(id, numericalID, function, streetName, edgeType, priority),
91 assert(laneNo < (
int)
myLanes->size());
92 return *((*myLanes)[laneNo]);
98 std::vector<GUIGlID> ret;
104 ret.push_back(edge->
getGlID());
115 const MSEdge* edge = i->second;
129 for (std::vector<MSLane*>::const_iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
130 ret.
add((*i)->getShape().getBoxBoundary());
136 const std::vector<MSLane*>& lanes = (*it)->getLanes();
137 for (std::vector<MSLane*>::const_iterator it_lane = lanes.begin(); it_lane != lanes.end(); ++it_lane) {
138 ret.
add((*it_lane)->getShape().front());
142 const std::vector<MSLane*>& lanes = (*it)->getLanes();
143 for (std::vector<MSLane*>::const_iterator it_lane = lanes.begin(); it_lane != lanes.end(); ++it_lane) {
144 ret.
add((*it_lane)->getShape().back());
156 netsWrappers.reserve(size);
157 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); ++i) {
159 netsWrappers.push_back(static_cast<GUIEdge*>((*i).second));
177 new FXMenuCommand(ret, (
"pos: " +
toString(pos)).c_str(), 0, 0, 0);
234 for (std::vector<MSLane*>::const_iterator i =
myLanes->begin(); i !=
myLanes->end(); ++i) {
254 if (drawEdgeName || drawInternalEdgeName || drawCwaEdgeName || drawStreetName) {
257 if (lane1 != 0 && lane2 != 0) {
263 if (angle > 90 && angle < 270) {
268 }
else if (drawInternalEdgeName) {
270 }
else if (drawCwaEdgeName) {
273 if (drawStreetName) {
281 for (std::set<MSTransportable*>::const_iterator i =
myPersons.begin(); i !=
myPersons.end(); ++i) {
292 assert(container != 0);
303 if (vehicleControl != 0) {
309 for (std::vector<MSLane*>::const_iterator msl =
myLanes->begin(); msl !=
myLanes->end(); ++msl, ++laneIndex) {
312 double segmentOffset = 0;
314 segment != 0; segment = segment->getNextSegment()) {
315 const double length = segment->
getLength();
316 if (laneIndex < segment->numQueues()) {
318 queue = segment->getQueue(laneIndex);
319 const int queueSize = (int)queue.size();
320 double vehiclePosition = segmentOffset + length;
323 for (
int i = 0; i < queueSize; ++i) {
326 while (vehiclePosition < segmentOffset) {
330 vehiclePosition += length;
336 vehiclePosition -= vehLength;
339 segmentOffset += length;
353 vehNo += segment->getCarNumber();
361 std::string result =
" ";
362 std::vector<const MEVehicle*> vehs;
364 std::vector<const MEVehicle*> segmentVehs = segment->getVehicles();
365 vehs.insert(vehs.end(), segmentVehs.begin(), segmentVehs.end());
367 for (std::vector<const MEVehicle*>::const_iterator it = vehs.begin(); it != vehs.end(); it++) {
368 result += (*it)->getID() +
" ";
378 flow += (double) segment->getCarNumber() * segment->getMeanSpeed();
380 return 3600 * flow / (*myLanes)[0]->getLength();
388 occ += segment->getBruttoOccupancy();
390 return occ / (*myLanes)[0]->getLength() / (double)(
myLanes->size());
396 return (*
myLanes)[0]->getSpeedLimit();
418 switch (activeScheme) {
435 switch (activeScheme) {
438 segment != 0; segment = segment->getNextSegment()) {
445 segment != 0; segment = segment->getNextSegment()) {
451 segment != 0; segment = segment->getNextSegment()) {
457 segment != 0; segment = segment->getNextSegment()) {
463 segment != 0; segment = segment->getNextSegment()) {
469 segment != 0; segment = segment->getNextSegment()) {
481 switch (activeScheme) {
507 switch (activeScheme) {
538 const std::vector<MSLane*>& lanes =
getLanes();
539 const bool isClosed = lane->
isClosed();
540 for (std::vector<MSLane*>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
553 edges.push_back(
this);
564 const std::vector<MSLane*>& lanes =
getLanes();
565 for (std::vector<MSLane*>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
567 for (MSLane::VehCont::const_iterator v = vehicles.begin(); v != vehicles.end(); ++v) {
568 if ((*v)->getLane() == (*i)) {
572 (*i)->releaseVehicles();
double getLength() const
return the length of the edge
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
std::set< MSTransportable * > myContainers
Containers on the edge.
double getRelativeSpeed() const
return meanSpead divided by allowedSpeed
double scale
information about a lane's width (temporary, used for a single view)
std::vector< MEVehicle * > Queue
GUIVisualizationTextSettings streetName
Reroutes vehicles passing an edge One rerouter can be active on multiple edges. To reduce drawing loa...
void drawOnPos(const GUIVisualizationSettings &s, const Position &pos, const double angle) const
Draws the object on the specified position with the specified angle.
MESegment * getSegmentForEdge(const MSEdge &e, double pos=0)
Get the segment for a given edge at a given position.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
void add(const Position &pos)
Adds the given position to this one.
static int dictSize()
Returns the number of edges.
virtual GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
const std::vector< MSLane * > & getLanes() const
Returns this edge's lanes.
static RGBColor fromHSV(double h, double s, double v)
Converts the given hsv-triplet to rgb.
double getEventTimeSeconds() const
Like getEventTime but returns seconds (for visualization)
void releaseVehicles()
unlock access to vehicle removal/additions for thread synchronization
double getAllowedSpeed() const
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
void closeTraffic(bool rebuildAllowed=true)
close this lane for traffic
RandomDistributor< MSEdge * > edgeProbs
The distributions of new destinations to use.
The vehicle arrived at a junction.
void secureVehicles()
lock access to vehicle removal/additions for thread synchronization
std::vector< RGBColor > mySegmentColors
The color of the segments (cached)
Stores the information about how to visualize structures.
const EdgeBasicFunction myFunction
the purpose of the edge
GUIColorer edgeColorer
The mesoscopic edge colorer.
double getSpeedLimit() const
Returns the speed limit of the edge The speed limit of the first lane is retured; should probably be...
double getBruttoOccupancy() const
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
double interpolateLanePosToGeometryPos(double lanePos) const
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
const std::string & getStreetName() const
Returns the street name of the edge.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
GUIMEVehicleControl * getGUIMEVehicleControl()
Returns the vehicle control.
The edge is a macroscopic connector (source/sink)
The class responsible for building and deletion of vehicles (gui-version)
double getLength() const
Returns the lane's length.
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
GUIVisualizationTextSettings cwaEdgeName
double getRoutingSpeed() const
Returns the averaged speed used by the routing device.
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
double getScaleValue(int activeScheme) const
gets the scaling value according to the current scheme index
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
EdgeBasicFunction
Defines possible edge types.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
const MSEdge & getEdge() const
Returns the edge this segment belongs to.
GUIGlID getGlID() const
Returns the numerical id of the object.
A class that stores a 2D geometrical boundary.
Representation of a lane in the micro simulation (gui-version)
MSLane & getLane(int laneNo)
returns the enumerated lane (!!! why not private with a friend?)
double getLengthWithGap() const
Get vehicle's length including the minimum gap [m].
GUIVisualizationTextSettings edgeName
A road/street connecting two junctions (gui-version)
const std::string & getID() const
Returns the id.
A road/street connecting two junctions.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
static double naviDegree(const double angle)
void rebuildAllowedLanes()
bool setMultiColor(const GUIColorer &c) const
sets multiple colors according to the current scheme index and edge function
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
The edge is a district edge.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
double minSize
The minimum size to draw this object.
static GUINet * getGUIInstance()
Returns the pointer to the unique instance of GUINet (singleton).
void closeTraffic(const GUILane *lane)
close this edge for traffic
GUIVisualizationTextSettings internalEdgeName
A point in 2D or 3D with translation and scaling methods.
double rotationDegreeAtOffset(double pos) const
Returns the rotation at the given length.
SUMOTime begin
The begin time these definitions are valid.
MSEdgeVector mySuccessors
The succeeding edges.
double getFlow() const
returns flow based on headway
virtual GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
double getLength() const
Returns the length of the segment in meters.
const T getColor(const double value) const
double length() const
Returns the length.
double getRelativeJamThreshold() const
Returns the relative occupany of the segment (percentage of road used)) at which the segment is consi...
static MSEdge mySpecialDest_keepDestination
special destination values
double getMeanSpeed() const
wrapper to satisfy the FunctionBinding signature
Boundary & grow(double by)
extends the boundary by the given amount
const std::vector< MSLane * > * myLanes
Container for the edge's lane; should be sorted: (right-hand-traffic) the more left the lane...
void addRerouter()
add a rerouter
std::vector< MSVehicle * > VehCont
Container for vehicles.
bool notifyEnter(SUMOVehicle &veh, MSMoveReminder::Notification reason, const MSLane *enteredLane=0)
Tries to reroute the vehicle.
bool setFunctionalColor(int activeScheme) const
sets the color according to the current scheme index and some edge function
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void setColor(const GUIVisualizationSettings &s) const
sets the color according to the currente settings
void drawMesoVehicles(const GUIVisualizationSettings &s) const
double getLastHeadwaySeconds() const
get the last headway time in seconds
void unlock()
release mutex lock
GUIEdge(const std::string &id, int numericalID, const EdgeBasicFunction function, const std::string &streetName, const std::string &edgeType, int priority)
Constructor.
The edge is a pedestrian walking area (a special type of internal edge)
static std::vector< GUIGlID > getIDs(bool includeInternal)
MESegment * getSegmentAtPosition(const Position &pos)
returns the segment closest to the given position
int numQueues() const
return the number of queues
double rotationAtOffset(double pos) const
Returns the rotation at the given length.
EdgeBasicFunction getPurpose() const
Returns the edge type (EdgeBasicFunction)
SUMOTime end
The end time these definitions are valid.
double getColorValue(int activeScheme) const
gets the color value according to the current scheme index
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
A MSVehicle extended by some values for usage within the gui.
MSInsertionControl & getInsertionControl()
Returns the insertion control.
GUIVisualizationSizeSettings containerSize
MFXMutex myLock
The mutex used to avoid concurrent updates of myPersons/ myContainers.
The edge is a normal street.
A mutex encapsulator which locks/unlocks the given mutex on construction/destruction, respectively.
A single mesoscopic segment (cell)
double getFlow() const
return flow based on meanSpead
The edge is a pedestrian crossing (a special type of internal edge)
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
std::vector< RerouteInterval > myIntervals
List of rerouting definition intervals.
double getRelativeOccupancy() const
Returns the relative occupany of the segment (percentage of road used))
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
std::string myStreetName
the real-world name of this edge (need not be unique)
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
static MELoop * gMesoNet
mesoscopic simulation infrastructure
GUIVisualizationSizeSettings personSize
int getCarNumber() const
Returns the total number of cars on the segment.
int getIndex() const
Returns the running index of the segment in the edge (0 is the most upstream).
std::string getVehicleIDs() const
static DictType myDict
Static dictionary to associate string-ids with objects.
GUIVisualizationSizeSettings vehicleSize
Boundary getBoundary() const
Returns the street's geometry.
void mul(double val)
Multiplies both positions with the given value.
std::vector< MSEdge * > MSEdgeVector
static void drawText(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &col=RGBColor::BLACK, const double angle=0)
draw Text with given parameters
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Position getPositionInformation() const
Returns the cursor's x/y position within the network.
double getMeanSpeed() const
get the mean speed
The edge is an internal edge.
static double getTotalLength(bool includeInternal, bool eachLane)
bool add(T val, double prob, bool checkDuplicates=true)
Adds a value with an assigned probability to the distribution.
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
MSEdgeVector myPredecessors
The preceeding edges.
GUISelectedStorage gSelected
A global holder of selected objects.
void closeBuilding()
Closes the building of the table.
Representation of a lane in the micro simulation.
A window containing a gl-object's parameter.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
static void fill(std::vector< GUIEdge * > &netsWrappers)
int getPendingEmits(const MSLane *lane)
return the number of pending emits for the given lane
double beginEndAngle() const
returns the angle in radians of the line connecting the first and the last position ...
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
const PositionVector & getShape() const
std::set< MSTransportable * > myPersons
Persons on the edge for drawing and pushbutton.