84 #pragma warning(disable: 4355) 88 MSVehicle(pars, route, type, speedFactor),
110 ret->
mkItem(
"shadow lane [id]",
false, shadowLane == 0 ?
"" : shadowLane->
getID());
112 ret->
mkItem(
"position [m]",
true,
114 ret->
mkItem(
"lateral offset [m]",
true,
116 ret->
mkItem(
"speed [m/s]",
true,
118 ret->
mkItem(
"lateral speed [m/s]",
true,
120 ret->
mkItem(
"acceleration [m/s^2]",
true,
122 ret->
mkItem(
"angle [degree]",
true,
124 ret->
mkItem(
"slope [degree]",
true,
127 ret->
mkItem(
"time gap on lane [s]",
true,
129 ret->
mkItem(
"waiting time [s]",
true,
133 ret->
mkItem(
"time loss [s]",
true,
135 ret->
mkItem(
"impatience",
true,
137 ret->
mkItem(
"last lane change [s]",
true,
152 ret->
mkItem(
"CO2 [mg/s]",
true,
154 ret->
mkItem(
"CO [mg/s]",
true,
156 ret->
mkItem(
"HC [mg/s]",
true,
158 ret->
mkItem(
"NOx [mg/s]",
true,
160 ret->
mkItem(
"PMx [mg/s]",
true,
162 ret->
mkItem(
"fuel [ml/s]",
true,
164 ret->
mkItem(
"electricity [Wh/s]",
true,
166 ret->
mkItem(
"noise (Harmonoise) [dB]",
true,
168 std::ostringstream str;
169 for (std::vector<MSDevice*>::const_iterator i =
myDevices.begin(); i !=
myDevices.end(); ++i) {
173 str << (*i)->getID().substr(0, (*i)->getID().find(
getID()));
175 ret->
mkItem(
"devices",
false, str.str());
176 ret->
mkItem(
"persons",
true,
178 ret->
mkItem(
"containers",
true,
198 ret->
mkItem(
"Type Information:",
false,
"");
237 for (std::vector<MSTransportable*>::const_iterator i = ps.begin(); i != ps.end(); ++i) {
246 int containerIndex = 0;
247 for (std::vector<MSTransportable*>::const_iterator i = cs.begin(); i != cs.end(); ++i) {
249 assert(container != 0);
254 #ifdef DRAW_BOUNDING_BOX 259 boundingBox.push_back(boundingBox.front());
263 glColor3d(0.5, .8, 0);
275 if ((*i).myLink == 0) {
278 MSLink* link = (*i).myLink;
282 if ((*i).mySetRequest) {
287 const SUMOTime leaveTime = (*i).myLink->getLeaveTime(
324 #define BLINKER_POS_FRONT .5 325 #define BLINKER_POS_BACK .5 329 glColor3d(1.f, .8f, 0);
365 glColor3f(1.f, .2f, 0);
368 glTranslated(0, length, -0.1);
385 glTranslated(0, 2.5, .5);
395 switch (activeScheme) {
447 std::vector<std::vector<MSVehicle::LaneQ> > bestLanes =
myBestLanes;
449 for (std::vector<std::vector<MSVehicle::LaneQ> >::iterator j = bestLanes.begin(); j != bestLanes.end(); ++j) {
450 std::vector<MSVehicle::LaneQ>& lanes = *j;
453 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
454 gmax =
MAX2((*i).length, gmax);
455 rmax =
MAX2((*i).occupation, rmax);
457 for (std::vector<MSVehicle::LaneQ>::const_iterator i = lanes.begin(); i != lanes.end(); ++i) {
459 double g = (*i).
length / gmax;
460 double r = (*i).occupation / rmax;
462 double width = 0.5 / (1 +
abs((*i).bestLaneOffset));
484 int bestLaneIndex = (&r ==
myRoute ? 0 : (int)bestLaneConts.
size());
485 for (; i != r.
end(); ++i) {
487 if (bestLaneIndex < (
int)bestLaneConts.size() && bestLaneConts[bestLaneIndex] != 0 && (*i) == &(bestLaneConts[bestLaneIndex]->getEdge())) {
488 lane =
static_cast<GUILane*
>(bestLaneConts[bestLaneIndex]);
491 const std::vector<MSLane*>* allowed = (*i)->allowedLanes(
getVClass());
492 if (allowed != 0 && allowed->size() != 0) {
493 lane =
static_cast<GUILane*
>((*allowed)[0]);
495 lane =
static_cast<GUILane*
>((*i)->getLanes()[0]);
519 defaultLength *= exaggeration;
520 if (exaggeration == 0) {
523 carriageGap *= exaggeration;
529 const double xCornerCut = 0.3 * exaggeration;
530 const double yCornerCut = 0.4 * exaggeration;
532 const int numCarriages = (int)(length / (defaultLength + carriageGap) + 0.5);
533 assert(numCarriages > 0);
534 const double carriageLengthWithGap = length / numCarriages;
535 const double carriageLength = carriageLengthWithGap - carriageGap;
538 int furtherIndex = 0;
541 int backFurtherIndex = furtherIndex;
544 double carriageBackOffset =
myState.
pos() - carriageLength;
547 if (requiredSeats > 0) {
553 for (
int i = 0; i < numCarriages; ++i) {
554 while (carriageOffset < 0) {
564 while (carriageBackOffset < 0) {
566 if (prev != backLane) {
570 carriageBackOffset = 0;
580 const double drawnCarriageLength = front.
distanceTo2D(back);
581 angle = atan2((front.
x() - back.
x()), (back.
y() - front.
y())) * (double) 180.0 / (
double)
M_PI;
582 if (i >= firstPassengerCarriage) {
586 glTranslated(front.
x(), front.
y(),
getType());
587 glRotated(angle, 0, 0, 1);
589 glBegin(GL_TRIANGLE_FAN);
590 glVertex2d(-halfWidth + xCornerCut, 0);
591 glVertex2d(-halfWidth, yCornerCut);
592 glVertex2d(-halfWidth, drawnCarriageLength - yCornerCut);
593 glVertex2d(-halfWidth + xCornerCut, drawnCarriageLength);
594 glVertex2d(halfWidth - xCornerCut, drawnCarriageLength);
595 glVertex2d(halfWidth, drawnCarriageLength - yCornerCut);
596 glVertex2d(halfWidth, yCornerCut);
597 glVertex2d(halfWidth - xCornerCut, 0);
601 carriageOffset -= carriageLengthWithGap;
602 carriageBackOffset -= carriageLengthWithGap;
607 glTranslated(front.
x(), front.
y(),
getType());
608 glRotated(angle, 0, 0, 1);
624 if (requiredSeats <= 0) {
633 for (
double p = 2; p <= length - 1; p += 1) {
649 std::string result =
"";
657 if (
myStops.front().triggered) {
658 result +=
", triggered";
659 }
else if (
myStops.front().containerTriggered) {
660 result +=
", containerTriggered";
676 std::vector<const SUMOVehicle*> blockingFoes;
677 std::vector<const MSPerson*> blockingPersons;
686 for (std::vector<const SUMOVehicle*>::const_iterator it = blockingFoes.begin(); it != blockingFoes.end(); ++it) {
687 std::cout <<
" " << (*it)->getID() <<
"\n";
693 if (parallelLink != 0) {
697 const bool isShadowOpen =
706 for (std::vector<const SUMOVehicle*>::const_iterator it = blockingFoes.begin(); it != blockingFoes.end(); ++it) {
707 std::cout <<
" " << (*it)->getID() <<
"\n";
713 for (std::vector<const SUMOVehicle*>::const_iterator it = blockingFoes.begin(); it != blockingFoes.end(); ++it) {
717 for (MSLink::LinkLeaders::const_iterator it = linkLeaders.begin(); it != linkLeaders.end(); ++it) {
728 for (std::vector<const MSPerson*>::iterator it_p = blockingPersons.begin(); it_p != blockingPersons.end(); ++it_p) {
768 for (
int i = 0; i < (int)sublaneSides.size(); ++i) {
769 if (sublaneSides[i] > rightSide) {
770 return MAX2(i - 1, 0);
780 for (
int i = (
int)sublaneSides.size() - 1; i >= 0; --i) {
781 if (sublaneSides[i] < leftSide) {
SUMOTime getBoardingDuration() const
Get this vehicle type's boarding duration.
std::map< GUISUMOAbstractView *, int > myAdditionalVisualizations
Enabled visualisations, per view.
bool signalSet(int which) const
Returns whether the given signal is on.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
const std::vector< double > & getShapeRotations() const
double getMinGap() const
Get the free space in front of vehicles of this class.
static double gLateralResolution
void selectBlockingFoes() const
adds the blocking foes to the current selection
static StringBijection< SumoXMLTag > CarFollowModels
car following models
SumoXMLTag
Numbers representing SUMO-XML - element names.
MSEdge & getEdge() const
Returns the lane's edge.
bool drawAction_drawCarriageClass(const GUIVisualizationSettings &s, SUMOVehicleShape guiShape, bool asImage) const
draws the given guiShape if it has distinct carriages/modules and returns true if so ...
double getWidth() const
Returns the lane's width.
Representation of a vehicle in the micro simulation.
double scale
information about a lane's width (temporary, used for a single view)
bool isLeader(const MSVehicle *ego, const MSVehicle *foe) const
SUMOVehicleClass getVehicleClass() const
Get this vehicle type's vehicle class.
bool drawAction_drawVehicleAsImage(const GUIVisualizationSettings &s, double length=-1) const
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
double distanceTo2D(const Position &p2) const
returns the euclidean distance in the x-y-plane
double getMaxSpeed() const
Returns the maximum speed.
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
int getRightSublaneOnEdge() const
return the righmost sublane on the edge occupied by the vehicle
std::vector< std::vector< LaneQ > > myBestLanes
const MSCFModel & getCarFollowModel() const
Returns the vehicle's car following model definition.
std::vector< MSLane * > myFurtherLanes
The information into which lanes the vehicle laps into.
MSLink * getParallelLink(int direction) const
return the link that is parallel to this lane or 0
double getTimeLossSeconds() const
Returns the time loss in seconds.
State myState
This Vehicles driving state (pos and speed)
DriveItemVector myLFLinkLanes
SUMOTime getLoadingDuration() const
Get this vehicle type's loading duration.
MFXMutex myLock
The mutex used to avoid concurrent updates of the vehicle buffer.
SUMOVehicleClass getVClass() const
Returns the vehicle's access class.
double getTimeGapOnLane() const
Returns the time gap in seconds to the leader of the vehicle on the same lane.
void drawBestLanes() const
Draws the vehicle's best lanes.
SUMOTime getWaitingTime() const
Returns the SUMOTime waited (speed was lesser than 0.1m/s)
double x() const
Returns the x-position.
Stores the information about how to visualize structures.
double getChosenSpeedFactor() const
Returns the precomputed factor by which the driver wants to be faster than the speed limit...
double getSpeedLat() const
return the lateral speed of the current lane change maneuver
void select(GUIGlID id, bool update=true)
Adds the object with the given id.
render as a flexible city bus
double getNaviDegree() const
return the current angle in navigational degrees
const Position & getSeatPosition(int personIndex) const
returns the seat position for the person with the given index
void drawAction_drawPersonsAndContainers(const GUIVisualizationSettings &s) const
int getShadowDirection() const
return the direction in which the current shadow lane lies
std::string time2string(SUMOTime t)
GUIVisualizationTextSettings vehicleName
MSDevice_Transportable * myPersonDevice
The passengers this vehicle may have.
const Position geometryPositionAtOffset(double offset, double lateralOffset=0) const
double getCO2Emissions() const
Returns CO2 emission of the current state.
int getNumberReroutes() const
Returns the number of new routes this vehicle got.
double getRightSideOnEdge2() const
return right vehicle side on current edge (without argument)
double getLength() const
Returns the lane's length.
double getAcceleration() const
Returns the vehicle's acceleration in m/s (this is computed as the last step's mean acceleration in c...
void drawOutsideNetwork(bool add)
register vehicle for drawing while outside the network
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
const MSRoute * myRoute
This vehicle's route.
static std::string getIDSecure(const T *obj, const std::string &fallBack="NULL")
get an identifier for Named-like object which may be Null
bool isSelected() const
whether this vehicle is selected in the GUI
double getHCEmissions() const
Returns HC emission of the current state.
double getPositionOnLane() const
Get the vehicle's position along the lane.
bool addAdditionalGLVisualisation(const GUIGlObject *const which)
Adds an object to call its additional visualisation method.
const std::map< std::string, std::string > & getMap() const
Returns the inner key/value map.
static void drawLinkItem(const Position &pos, SUMOTime arrivalTime, SUMOTime leaveTime, double exagerate)
const SUMOVehicleParameter * myParameter
This vehicle's parameter.
LateralAlignment getPreferredLateralAlignment() const
Get vehicle's preferred lateral alignment.
The base class for microscopic and mesoscopic vehicles.
static void drawFilledCircle(double width, int steps=8)
Draws a filled circle around (0,0)
GUIGlID getGlID() const
Returns the numerical id of the object.
#define UNUSED_PARAMETER(x)
bool removeAdditionalGLVisualisation(const GUIGlObject *const which)
Removes an object from the list of objects that show additional things.
The car-following model and parameter.
MSAbstractLaneChangeModel & getLaneChangeModel()
void drawRouteHelper(const MSRoute &r, double exaggeration) const
Draws the route.
int getPersonCapacity() const
Get this vehicle type's person capacity.
std::string getStopInfo() const
retrieve information about the current stop state
Right blinker lights are switched on.
PositionVector mySeatPositions
positions of seats in the vehicle (updated at every drawing step)
double getSlope() const
Returns the slope of the road at vehicle's position.
const std::vector< double > & getShapeLengths() const
Representation of a lane in the micro simulation (gui-version)
const std::vector< double > getSubLaneSides() const
Returns the right side offsets of this edge's sublanes.
double getImpatience() const
Returns this vehicles impatience.
int getContainerNumber() const
Returns the number of containers.
const std::string & getID() const
Returns the id.
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
double getElectricityConsumption() const
Returns electricity consumption of the current state.
double getLeaveSpeed() const
Left blinker lights are switched on.
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
GUISUMOAbstractView * getActiveView() const
get the active view or 0
const SUMOVTypeParameter & getParameter() const
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
bool opened(SUMOTime arrivalTime, double arrivalSpeed, double leaveSpeed, double vehicleLength, double impatience, double decel, SUMOTime waitingTime, double posLat=0, std::vector< const SUMOVehicle * > *collectFoes=0, bool ignoreRed=false, const SUMOVehicle *ego=0) const
Returns the information whether the link may be passed.
PositionVector getBoundingBox() const
get bounding rectangle
double getColorValue(int activeScheme) const
gets the color value according to the current scheme index
double getHeight() const
Get the height which vehicles of this class shall have when being drawn.
double getMaxDecel() const
Get the vehicle type's maximal comfortable deceleration [m/s^2].
const std::vector< MSLane * > & getBestLanesContinuation() const
Returns the best sequence of lanes to continue the route starting at myLane.
static GUIMainWindow * getInstance()
SUMOTime getDepartDelay() const
Returns the depart delay.
A point in 2D or 3D with translation and scaling methods.
GUIVehicle(SUMOVehicleParameter *pars, const MSRoute *route, MSVehicleType *type, const double speedFactor)
Constructor.
int size() const
Returns the number of edges to pass.
std::list< Stop > myStops
The vehicle's list of stops.
ConstMSEdgeVector::const_iterator MSRouteIterator
double y() const
Returns the y-position.
MSLane * getPreviousLane(MSLane *current, int &furtherIndex) const
PositionVector getBoundingPoly() const
get bounding polygon
const std::vector< MSTransportable * > & getTransportables() const
Returns the list of transportables using this vehicle.
bool isStopped() const
Returns whether the vehicle is at a stop.
MSLane * myLane
The lane the vehicle is on.
Blinker lights on both sides are switched on.
void drawAction_drawRailCarriages(const GUIVisualizationSettings &s, double defaultLength, double carriageGap, int firstPassengerCarriage, bool asImage) const
double length() const
Returns the length.
double getPMxEmissions() const
Returns PMx emission of the current state.
void setPositionInVehicle(const Position &pos)
render as a (city) rail without locomotive
double getLastLaneChangeOffset() const
Returns the time since the last lane change in seconds.
RGBColor changedBrightness(int change, int toChange=3) const
Returns a new color with altered brightness.
std::vector< LinkLeader > LinkLeaders
A MSVehicle extended by some values for usage within the gui.
A blue emergency light is on.
Position positionAtOffset2D(double pos, double lateralOffset=0) const
Returns the position at the given length.
int getNumPassengers() const
return the number of passengers
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
MSLane * getShadowLane() const
Returns the lane the vehicles shadow is on during continuous/sublane lane change. ...
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2, false)
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
double getWidth() const
Get the width which vehicles of this class shall have when being drawn.
double getWaitingSeconds() const
Returns the number of seconds waited (speed was lesser than 0.1m/s)
void drawAction_drawVehicleBlinker(double length) const
bool isParking() const
Returns whether the vehicle is parking.
void move2side(double amount)
move position vector to side using certain ammount
int getPersonNumber() const
Returns the number of persons.
GUIParameterTableWindow * getTypeParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own type parameter window.
double getNOxEmissions() const
Returns NOx emission of the current state.
std::string line
The vehicle's line (mainly for public transport)
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void setPositionInVehicle(const Position &pos)
void computeSeats(const Position &front, const Position &back, int &requiredSeats) const
add seats to mySeatPositions and update requiredSeats
void unlock()
release mutex lock
double getMinGapLat() const
Get the minimum lateral gap that vehicles of this type maintain.
double getLength() const
Get vehicle's length [m].
Structure representing possible vehicle parameter.
MSRouteIterator end() const
Returns the end of the list of edges to pass.
draw vehicle outside the road network
SUMOVehicleShape
Definition of vehicle classes to differ between different appearences.
int getLeftSublaneOnEdge() const
MSVehicleType * myType
This vehicle's type.
MSLane * getViaLaneOrLane() const
return the via lane if it exists and the lane otherwise
void drawAction_drawLinkItems(const GUIVisualizationSettings &s) const
const MSVehicleType & getVehicleType() const
Returns the vehicle's type definition.
double getLeftSideOnEdge() const
return left vehicle side on current edge
const std::string & getID() const
Returns the name of the vehicle type.
double getLateralPositionOnLane() const
Get the vehicle's lateral position on the lane.
double getVehicleMaxSpeed(const SUMOVehicle *const veh) const
Returns the lane's maximum speed, given a vehicle's speed limit adaptation.
const SUMOVehicleParameter & getParameter() const
Returns the vehicle's parameter (including departure definition)
double getAccumulatedWaitingSeconds() const
Returns the number of seconds waited (speed was lesser than 0.1m/s) within the last millisecs...
static SUMOTime gWaitingTimeMemory
length of memory for waiting times (in millisecs)
double pos() const
Position of this state.
const PositionVector & getShape() const
Returns this lane's shape.
#define BLINKER_POS_FRONT
double getFuelConsumption() const
Returns fuel consumption of the current state.
double getCOEmissions() const
Returns CO emission of the current state.
double getRightSideOnEdge(const MSLane *lane=0) const
Get the vehicle's lateral position on the edge of the given lane (or its current edge if lane == 0) ...
GUIVisualizationSizeSettings vehicleSize
void drawAction_drawVehicleBrakeLight(double length, bool onlyOne=1) const
void drawAction_drawBlinker(double dir, double length)
int getContainerCapacity() const
Get this vehicle type's container capacity.
double getHarmonoise_NoiseEmissions() const
Returns noise emissions of the current state.
SUMOEmissionClass getEmissionClass() const
Get this vehicle type's emission class.
MSLane * getLane() const
Returns the lane the vehicle is on.
static SUMOTime gLaneChangeDuration
void mkItem(const char *name, bool dynamic, ValueSource< unsigned > *src)
Adds a row which obtains its value from an unsigned-ValueSource.
GUISelectedStorage gSelected
A global holder of selected objects.
Representation of a lane in the micro simulation.
double getMaxSpeedLat() const
Get vehicle's maximum lateral speed [m/s].
std::vector< MSDevice * > myDevices
The devices this vehicle has.
A window containing a gl-object's parameter.
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
void drawAction_drawVehicleBlueLight() const
int getBestLaneOffset() const
MSRouteIterator begin() const
Returns the begin of the list of edges to pass.
MSDevice_Transportable * myContainerDevice
The containers this vehicle may have.
double getWidth() const
Returns the vehicle's width.
const std::string & getID() const
Returns the name of the vehicle.
int size() const
Return the number of passengers / containers.
const PositionVector & getShape() const
double getSpeed() const
Returns the vehicle's current speed.
static RGBColor getColor()
gets the gl-color
A MSVehicle extended by some values for usage within the gui.