Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
SUMOVehicleClass.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
22// Definitions of SUMO vehicle classes and helper functions
23/****************************************************************************/
24#include <config.h>
25
26#include <string>
27#include <map>
28#include "SUMOVehicleClass.h"
35
36
37// ===========================================================================
38// static members
39// ===========================================================================
40
42 {"ignoring", SVC_IGNORING},
43 {"private", SVC_PRIVATE},
44 {"public_emergency", SVC_EMERGENCY}, // !!! deprecated
45 {"emergency", SVC_EMERGENCY},
46 {"public_authority", SVC_AUTHORITY}, // !!! deprecated
47 {"authority", SVC_AUTHORITY},
48 {"public_army", SVC_ARMY}, // !!! deprecated
49 {"army", SVC_ARMY},
50 {"vip", SVC_VIP},
51 {"pedestrian", SVC_PEDESTRIAN},
52 {"passenger", SVC_PASSENGER},
53 {"hov", SVC_HOV},
54 {"taxi", SVC_TAXI},
55 {"public_transport", SVC_BUS}, // !!! deprecated
56 {"bus", SVC_BUS},
57 {"coach", SVC_COACH},
58 {"delivery", SVC_DELIVERY},
59 {"transport", SVC_TRUCK}, // !!! deprecated
60 {"truck", SVC_TRUCK},
61 {"trailer", SVC_TRAILER},
62 {"motorcycle", SVC_MOTORCYCLE},
63 {"moped", SVC_MOPED},
64 {"bicycle", SVC_BICYCLE},
65 {"evehicle", SVC_E_VEHICLE},
66 {"lightrail", SVC_TRAM}, // !!! deprecated
67 {"tram", SVC_TRAM},
68 {"cityrail", SVC_RAIL_URBAN}, // !!! deprecated
69 {"rail_urban", SVC_RAIL_URBAN},
70 {"rail_slow", SVC_RAIL}, // !!! deprecated
71 {"rail", SVC_RAIL},
72 {"rail_electric", SVC_RAIL_ELECTRIC},
73 {"rail_fast", SVC_RAIL_FAST},
74 {"ship", SVC_SHIP},
75 {"container", SVC_CONTAINER},
76 {"cable_car", SVC_CABLE_CAR},
77 {"subway", SVC_SUBWAY},
78 {"aircraft", SVC_AIRCRAFT},
79 {"wheelchair", SVC_WHEELCHAIR},
80 {"scooter", SVC_SCOOTER},
81 {"drone", SVC_DRONE},
82 {"custom1", SVC_CUSTOM1},
83 {"custom2", SVC_CUSTOM2}
84};
85
86
89
90// count only non-deprecated classes
92
93std::set<std::string> deprecatedVehicleClassesSeen;
94
95
97 {"pedestrian", SUMOVehicleShape::PEDESTRIAN},
98 {"bicycle", SUMOVehicleShape::BICYCLE},
99 {"moped", SUMOVehicleShape::MOPED},
100 {"motorcycle", SUMOVehicleShape::MOTORCYCLE},
101 {"passenger", SUMOVehicleShape::PASSENGER},
102 {"passenger/sedan", SUMOVehicleShape::PASSENGER_SEDAN},
103 {"passenger/hatchback", SUMOVehicleShape::PASSENGER_HATCHBACK},
104 {"passenger/wagon", SUMOVehicleShape::PASSENGER_WAGON},
105 {"passenger/van", SUMOVehicleShape::PASSENGER_VAN},
106 {"taxi", SUMOVehicleShape::TAXI},
107 {"delivery", SUMOVehicleShape::DELIVERY},
108 {"transport", SUMOVehicleShape::TRUCK}, // !!! deprecated
109 {"truck", SUMOVehicleShape::TRUCK},
110 {"transport/semitrailer", SUMOVehicleShape::TRUCK_SEMITRAILER}, // !!! deprecated
111 {"truck/semitrailer", SUMOVehicleShape::TRUCK_SEMITRAILER},
112 {"transport/trailer", SUMOVehicleShape::TRUCK_1TRAILER}, // !!! deprecated
113 {"truck/trailer", SUMOVehicleShape::TRUCK_1TRAILER},
114 {"bus/city", SUMOVehicleShape::BUS}, // !!! deprecated
115 {"bus", SUMOVehicleShape::BUS},
116 {"bus/overland", SUMOVehicleShape::BUS_COACH}, // !!! deprecated
117 {"bus/coach", SUMOVehicleShape::BUS_COACH},
118 {"bus/flexible", SUMOVehicleShape::BUS_FLEXIBLE},
119 {"bus/trolley", SUMOVehicleShape::BUS_TROLLEY},
120 {"rail/slow", SUMOVehicleShape::RAIL}, // !!! deprecated
121 {"rail/fast", SUMOVehicleShape::RAIL}, // !!! deprecated
122 {"rail", SUMOVehicleShape::RAIL},
123 {"rail/light", SUMOVehicleShape::RAIL_CAR}, // !!! deprecated
124 {"rail/city", SUMOVehicleShape::RAIL_CAR}, // !!! deprecated
125 {"rail/railcar", SUMOVehicleShape::RAIL_CAR},
126 {"rail/cargo", SUMOVehicleShape::RAIL_CARGO},
127 {"evehicle", SUMOVehicleShape::E_VEHICLE},
128 {"ant", SUMOVehicleShape::ANT},
129 {"ship", SUMOVehicleShape::SHIP},
130 {"emergency", SUMOVehicleShape::EMERGENCY},
131 {"firebrigade", SUMOVehicleShape::FIREBRIGADE},
132 {"police", SUMOVehicleShape::POLICE},
133 {"rickshaw", SUMOVehicleShape::RICKSHAW },
134 {"scooter", SUMOVehicleShape::SCOOTER},
135 {"aircraft", SUMOVehicleShape::AIRCRAFT},
137};
138
139
142
143// ===========================================================================
144// static values used for cached
145// ===========================================================================
146
147static std::map<SVCPermissions, std::vector<std::string> > vehicleClassNamesListCached;
148static std::map<std::string, SVCPermissions> parseVehicleClassesCached;
149static std::map<SVCPermissions, std::string> getVehicleClassNamesCached;
150static std::string VehicleClassNameAll = "all";
151
152// ===========================================================================
153// additional constants
154// ===========================================================================
155
157
158const SVCPermissions SVCAll = 2 * (long long int)SUMOVehicleClass_MAX - 1; // all relevant bits set to 1
159
161
163
164const std::string DEFAULT_VTYPE_ID("DEFAULT_VEHTYPE");
165const std::string DEFAULT_PEDTYPE_ID("DEFAULT_PEDTYPE");
166const std::string DEFAULT_BIKETYPE_ID("DEFAULT_BIKETYPE");
167const std::string DEFAULT_CONTAINERTYPE_ID("DEFAULT_CONTAINERTYPE");
168const std::string DEFAULT_TAXITYPE_ID("DEFAULT_TAXITYPE");
169const std::string DEFAULT_RAILTYPE_ID("DEFAULT_RAILTYPE");
170
172
173const double DEFAULT_VEH_PROB(1.);
174const double DEFAULT_VEH_MASS(1500.);
175const double DEFAULT_VEH_WIDTH(1.8);
176const double DEFAULT_VEH_HEIGHT(1.5);
177const double DEFAULT_VEH_SHUT_OFF_STOP(300.);
178
179const double DEFAULT_PEDESTRIAN_SPEED(5. / 3.6);
180
181const double DEFAULT_BICYCLE_SPEED(20. / 3.6);
182
183const double DEFAULT_CONTAINER_TRANSHIP_SPEED(5. / 3.6);
184
185
186// ===========================================================================
187// method definitions
188// ===========================================================================
189
190// Stop Offset
191
193 myPermissions(SVCAll),
194 myOffset(0) {
195}
196
197
199 myPermissions(SVC_IGNORING),
200 myOffset(0) {
201 // first check conditions
203 WRITE_ERROR(TL("Simultaneous specification of vClasses and exceptions is not allowed"));
204 ok = false;
205 }
206 if (!attrs.hasAttribute(SUMO_ATTR_VALUE)) {
207 WRITE_ERROR(TL("StopOffset requires an offset value"));
208 ok = false;
209 }
210 // parse elements
211 const std::string vClasses = attrs.getOpt<std::string>(SUMO_ATTR_VCLASSES, nullptr, ok, "");
212 const std::string exceptions = attrs.getOpt<std::string>(SUMO_ATTR_EXCEPTIONS, nullptr, ok, "");
213 // parse permissions
214 if (attrs.hasAttribute(SUMO_ATTR_VCLASSES)) {
216 } else if (attrs.hasAttribute(SUMO_ATTR_EXCEPTIONS)) {
217 myPermissions = ~parseVehicleClasses(exceptions);
218 } else {
219 // no vClasses specified, thus apply to all
221 }
222 // parse offset
223 myOffset = attrs.getOpt<double>(SUMO_ATTR_VALUE, nullptr, ok, 0);
224}
225
226
227bool
229 return myOffset != 0;
230}
231
232
233void
238
239
242 return myPermissions;
243}
244
245
246std::string
250
251
252double
254 return myOffset;
255}
256
257
258void
260 myPermissions = permissions;
261}
262
263
264void
265StopOffset::setExceptions(const std::string permissions) {
266 myPermissions = ~parseVehicleClasses(permissions);
267}
268
269
270void
271StopOffset::setOffset(const double offset) {
272 myOffset = offset;
273}
274
275
276bool
278 return ((myPermissions == other.myPermissions) &&
279 (myOffset == other.myOffset));
280}
281
282
283bool
285 return ((myPermissions != other.myPermissions) ||
286 (myOffset != other.myOffset));
287}
288
289// Conversion of SUMOVehicleClass
290
291const std::string&
292getVehicleClassNames(SVCPermissions permissions, bool expand) {
293 if ((permissions & SVCAll) == SVCAll && !expand) {
294 return VehicleClassNameAll;
295 }
296 // check if previously was cached
297 if (getVehicleClassNamesCached.count(permissions) == 0) {
298 getVehicleClassNamesCached[permissions] = joinToString(getVehicleClassNamesList(permissions), ' ');
299 }
300 return getVehicleClassNamesCached.at(permissions);
301}
302
303
304const std::vector<std::string>&
306 // first check if it's cached
307 if (vehicleClassNamesListCached.count(permissions) == 0) {
308 const std::vector<std::string> classNames = SumoVehicleClassStrings.getStrings();
309 std::vector<std::string> result;
310 for (std::vector<std::string>::const_iterator it = classNames.begin(); it != classNames.end(); it++) {
312 if ((svc & permissions) == svc && svc != SVC_IGNORING) {
313 result.push_back(*it);
314 }
315 }
316 // add it into vehicleClassNamesListCached
317 vehicleClassNamesListCached[permissions] = result;
318 }
319 return vehicleClassNamesListCached.at(permissions);
320}
321
322
324getVehicleClassID(const std::string& name) {
325 if (SumoVehicleClassStrings.hasString(name)) {
326 return SumoVehicleClassStrings.get(name);
327 }
328 throw InvalidArgument("Unknown vehicle class '" + name + "'.");
329}
330
331
333getVehicleClassCompoundID(const std::string& name) {
335 const std::vector<std::string> names = SumoVehicleClassStrings.getStrings();
336 for (std::vector<std::string>::const_iterator it = names.begin(); it != names.end(); it++) {
337 if (name.find(*it) != std::string::npos) {
338 ret = ret | (SVCPermissions) SumoVehicleClassStrings.get(*it);
339 }
340 }
341 return ret;
342}
343
344
346parseVehicleClasses(const std::string& allowedS) {
347 if (allowedS == VehicleClassNameAll) {
348 return SVCAll;
349 }
350 // check if allowedS was previously cached
351 if (parseVehicleClassesCached.count(allowedS) == 0) {
352 SVCPermissions result = 0;
353 StringTokenizer sta(allowedS, " ");
354 while (sta.hasNext()) {
355 const std::string s = sta.next();
356 if (!SumoVehicleClassStrings.hasString(s)) {
358 WRITE_ERRORF(TL("Invalid character in vehicle class '%' encountered."), s);
359 } else if (gIgnoreUnknownVClass) {
360 WRITE_WARNINGF(TL("Unknown vehicle class '%' ignored."), s);
361 } else {
362 WRITE_ERRORF(TL("Unknown vehicle class '%' encountered."), s);
363 }
364 } else {
366 const std::string& realName = SumoVehicleClassStrings.getString(vc);
367 if (realName != s) {
369 }
370 result |= vc;
371 }
372 }
373 // save parsed vehicle class cached
374 parseVehicleClassesCached[allowedS] = result;
375 }
376 return parseVehicleClassesCached.at(allowedS);
377}
378
379
380bool
381canParseVehicleClasses(const std::string& classes) {
382 if (classes == VehicleClassNameAll) {
383 return true;
384 }
385 // check if was previously cached
386 if (parseVehicleClassesCached.count(classes) != 0) {
387 return true;
388 }
389 StringTokenizer sta(classes, " ");
390 while (sta.hasNext()) {
391 if (!SumoVehicleClassStrings.hasString(sta.next())) {
392 return false;
393 }
394 }
395 return true;
396}
397
398
400parseVehicleClasses(const std::string& allowedS, const std::string& disallowedS, const MMVersion& networkVersion) {
401 if (allowedS.size() == 0 && disallowedS.size() == 0) {
402 return SVCAll;
403 } else if (allowedS.size() > 0 && disallowedS.size() > 0) {
404 WRITE_WARNING(TL("SVCPermissions must be specified either via 'allow' or 'disallow'. Ignoring 'disallow'"));
405 return parseVehicleClasses(allowedS);
406 } else if (allowedS.size() > 0) {
407 return parseVehicleClasses(allowedS);
408 } else {
409 return invertPermissions(extraDisallowed(parseVehicleClasses(disallowedS), networkVersion));
410 }
411}
412
414extraDisallowed(SVCPermissions disallowed, const MMVersion& networkVersion) {
415 if (networkVersion < MMVersion(1, 3)) {
416 disallowed |= SVC_RAIL_FAST;
417 }
418 if (networkVersion < MMVersion(1, 20)) {
419 if ((disallowed & SVC_RAIL_URBAN) != 0) {
420 disallowed |= SVC_SUBWAY;
421 disallowed |= SVC_CABLE_CAR;
422 }
423 }
424 return disallowed;
425}
426
427
430 return SVCAll & ~permissions;
431}
432
433
435parseVehicleClasses(const std::vector<std::string>& allowedS) {
436 SVCPermissions result = 0;
437 if (std::find(allowedS.begin(), allowedS.end(), VehicleClassNameAll) != allowedS.end()) {
438 return SVCAll;
439 }
440 for (std::vector<std::string>::const_iterator i = allowedS.begin(); i != allowedS.end(); ++i) {
441 const SUMOVehicleClass vc = getVehicleClassID(*i);
442 const std::string& realName = SumoVehicleClassStrings.getString(vc);
443 if (realName != *i) {
444 WRITE_WARNINGF(TL("The vehicle class '%' is deprecated, use '%' instead."), (*i), realName);
445 }
446 result |= getVehicleClassID(*i);
447 }
448 return result;
449}
450
451
452void
454 if (permissions == SVCAll || permissions == SVC_UNSPECIFIED) {
455 into.writeOptionalAttr(SUMO_ATTR_ALLOW, "", true);
457 return;
458 }
459 if (permissions == 0) {
460 into.writeOptionalAttr(SUMO_ATTR_ALLOW, "", true);
462 return;
463 }
464 int num_allowed = 0;
465 for (SVCPermissions mask = 1; mask <= SUMOVehicleClass_MAX; mask = mask << 1) {
466 if ((mask & permissions) == mask) {
467 ++num_allowed;
468 }
469 }
470 if (num_allowed <= (NUM_VCLASSES - num_allowed) && num_allowed > 0) {
473 } else {
474 into.writeOptionalAttr(SUMO_ATTR_ALLOW, "", true);
476 }
477}
478
479
480void
482 into.writeOptionalAttr(SUMO_ATTR_PREFER, getVehicleClassNames(preferred), preferred == SVCAll || preferred == 0);
483}
484
485
487getVehicleShapeID(const std::string& name) {
488 if (SumoVehicleShapeStrings.hasString(name)) {
489 return SumoVehicleShapeStrings.get(name);
490 } else {
491 throw InvalidArgument("Unknown vehicle shape '" + name + "'.");
492 }
493}
494
495
496bool
497canParseVehicleShape(const std::string& shape) {
498 return SumoVehicleShapeStrings.hasString(shape);
499}
500
501
502std::string
506
507
508bool isRailway(SVCPermissions permissions) {
509 return (permissions & SVC_RAIL_CLASSES) != 0 && (permissions & ~(SVC_RAIL_CLASSES | SVC_TAXI)) == 0;
510}
511
513 // basically check that it isn't SVC_ALL
514 return (permissions & SVC_RAIL_CLASSES) != 0 && (permissions & SVC_NON_ROAD_RAIL) == 0;
515}
516
517bool isTram(SVCPermissions permissions) {
518 return (permissions & SVC_RAIL_CLASSES) == SVC_TRAM && (permissions & SVC_PASSENGER) == 0;
519}
520
521bool isBikepath(SVCPermissions permissions) {
522 return (permissions & SVC_BICYCLE) == SVC_BICYCLE && (permissions & SVC_ROAD_MOTOR_CLASSES) == 0;
523}
524
525
526bool
528 return permissions == SVC_SHIP;
529}
530
531bool
533 return permissions == SVC_AIRCRAFT || permissions == SVC_DRONE;
534}
535
536bool
538 return (permissions & SVCAll) == 0;
539}
540
541
542bool
544 return (permissions & SVCAll) == SVC_PEDESTRIAN;
545}
546
547
548bool
550 return ((permissions & SVC_VULNERABLE) != 0 && (permissions & ~SVC_VULNERABLE) == 0);
551}
552
553
554bool
556 return isForbidden(permissions) || isSidewalk(permissions);
557}
558
559
560double
562 switch (vc) {
563 case SVC_PEDESTRIAN:
564 return 0.215;
565 case SVC_WHEELCHAIR:
566 return 1.2;
567 case SVC_BICYCLE:
568 return 1.6;
569 case SVC_SCOOTER:
570 return 1.2;
571 case SVC_MOPED:
572 return 2.1;
573 case SVC_MOTORCYCLE:
574 return 2.2;
575 case SVC_TRUCK:
576 return 7.1;
577 case SVC_TRAILER:
578 return 16.5;
579 case SVC_BUS:
580 return 12.;
581 case SVC_COACH:
582 return 14.;
583 case SVC_TRAM:
584 return 22.;
585 case SVC_RAIL_URBAN:
586 case SVC_SUBWAY:
587 return 36.5 * 3;
588 case SVC_RAIL:
589 return 67.5 * 2;
591 case SVC_RAIL_FAST:
592 return 25. * 8;
593 case SVC_DELIVERY:
594 case SVC_EMERGENCY:
595 return 6.5;
596 case SVC_SHIP:
597 return 17;
598 case SVC_CONTAINER:
599 return 6.096;
600 case SVC_DRONE:
601 return 0.5;
602 case SVC_AIRCRAFT:
603 return 72.7;
604 default:
605 return 5; /*4.3*/
606 }
607}
608
609
610
611/****************************************************************************/
#define WRITE_WARNINGF(...)
Definition MsgHandler.h:287
#define WRITE_ERRORF(...)
Definition MsgHandler.h:296
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define WRITE_WARNING(msg)
Definition MsgHandler.h:286
#define TL(string)
Definition MsgHandler.h:304
SVCPermissions extraDisallowed(SVCPermissions disallowed, const MMVersion &networkVersion)
Interprets disallowed vehicles depending on network version.
bool canParseVehicleShape(const std::string &shape)
Checks whether the given string contains only known vehicle shape.
static std::map< SVCPermissions, std::vector< std::string > > vehicleClassNamesListCached
StringBijection< SUMOVehicleShape > SumoVehicleShapeStrings(sumoVehicleShapeStringInitializer, SUMOVehicleShape::UNKNOWN, false)
SUMOVehicleClass getVehicleClassID(const std::string &name)
Returns the class id of the abstract class given by its name.
double getDefaultVehicleLength(const SUMOVehicleClass vc)
Returns the default vehicle length This put into a function so it can be used by NBVehicle.
const SVCPermissions SVCAll
all VClasses are allowed
bool isForVulnerableModes(SVCPermissions permissions)
Returns whether an edge with the given permissions allows only vulnerable road users.
std::set< std::string > deprecatedVehicleClassesSeen
SVCPermissions invertPermissions(SVCPermissions permissions)
negate the given permissions and ensure that only relevant bits are set
static std::map< std::string, SVCPermissions > parseVehicleClassesCached
bool isRailway(SVCPermissions permissions)
Returns whether an edge with the given permissions is a (exclusive) railway edge.
static StringBijection< SUMOVehicleShape >::Entry sumoVehicleShapeStringInitializer[]
const SVCPermissions SVC_UNSPECIFIED
permissions not specified
static StringBijection< SUMOVehicleClass >::Entry sumoVehicleClassStringInitializer[]
bool isWaterway(SVCPermissions permissions)
Returns whether an edge with the given permissions is a waterway edge.
bool isAirway(SVCPermissions permissions)
Returns whether an edge with the given permissions is an airway edge.
bool isTram(SVCPermissions permissions)
Returns whether an edge with the given permissions is a tram edge.
const SUMOEmissionClass EMISSION_CLASS_UNSPECIFIED
emission class not specified
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand)
Returns the ids of the given classes, divided using a ' '.
const std::vector< std::string > & getVehicleClassNamesList(SVCPermissions permissions)
Returns the ids of the given classes, divided using a ' '.
bool isRailwayOrShared(SVCPermissions permissions)
Returns whether an edge with the given permissions is a railway edge or a shared road/rail edge.
void writePermissions(OutputDevice &into, SVCPermissions permissions)
writes allowed disallowed attributes if needed;
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
bool isForbidden(SVCPermissions permissions)
Returns whether an edge with the given permissions is a forbidden edge.
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
bool isSidewalk(SVCPermissions permissions)
Returns whether an edge with the given permissions is a sidewalk.
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
std::string getVehicleShapeName(SUMOVehicleShape id)
Returns the class name of the shape class given by its id.
void writePreferences(OutputDevice &into, SVCPermissions preferred)
writes allowed disallowed attributes if needed;
bool noVehicles(SVCPermissions permissions)
Returns whether an edge with the given permissions forbids vehicles.
bool isBikepath(SVCPermissions permissions)
Returns whether an edge with the given permissions is a bicycle edge.
static std::map< SVCPermissions, std::string > getVehicleClassNamesCached
SVCPermissions getVehicleClassCompoundID(const std::string &name)
Returns the OR'ed id of the compound class given by its name.
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2, false)
const SUMOVehicleClass SUMOVehicleClass_MAX
static std::string VehicleClassNameAll
const int NUM_VCLASSES
const double DEFAULT_VEH_HEIGHT
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
const double DEFAULT_VEH_SHUT_OFF_STOP
int SUMOEmissionClass
const std::string DEFAULT_TAXITYPE_ID
const double DEFAULT_VEH_PROB
const std::string DEFAULT_RAILTYPE_ID
const std::string DEFAULT_PEDTYPE_ID
const double DEFAULT_VEH_MASS
const std::set< std::string > DEFAULT_VTYPES
SVCPermissions parseVehicleClasses(const std::string &allowedS)
Parses the given definition of allowed vehicle classes into the given containers Deprecated classes g...
SUMOVehicleShape
Definition of vehicle classes to differ between different appearances.
@ RICKSHAW
render as a rickshaw
@ BUS
render as a bus
@ RAIL_CARGO
render as a cargo train
@ EMERGENCY
render as an emergency vehicle
@ RAIL
render as a rail
@ PASSENGER_VAN
render as a van
@ PASSENGER
render as a passenger vehicle
@ SCOOTER
render as a scooter
@ RAIL_CAR
render as a (city) rail without locomotive
@ SHIP
render as a arbitrary ship
@ DELIVERY
render as a delivery vehicle
@ BICYCLE
render as a bicycle
@ MOTORCYCLE
render as a motorcycle
@ UNKNOWN
not defined
@ BUS_TROLLEY
render as a trolley bus
@ TAXI
automated car (with cruise controllers)
@ E_VEHICLE
render as a (futuristic) e-vehicle
@ ANT
render as a giant ant
@ TRUCK
render as a transport vehicle
@ AIRCRAFT
render as aircraft
@ FIREBRIGADE
render as a fire brigade
@ PASSENGER_HATCHBACK
render as a hatchback passenger vehicle ("Fliessheck")
@ MOPED
render as a moped
@ BUS_FLEXIBLE
render as a flexible city bus
@ TRUCK_1TRAILER
render as a transport vehicle with one trailer
@ PASSENGER_SEDAN
render as a sedan passenger vehicle ("Stufenheck")
@ BUS_COACH
render as a coach
@ POLICE
render as a police car
@ PASSENGER_WAGON
render as a wagon passenger vehicle ("Combi")
@ TRUCK_SEMITRAILER
render as a semi-trailer transport vehicle ("Sattelschlepper")
@ PEDESTRIAN
render as a pedestrian
const double DEFAULT_PEDESTRIAN_SPEED
const double DEFAULT_BICYCLE_SPEED
const double DEFAULT_VEH_WIDTH
const std::string DEFAULT_VTYPE_ID
const std::string DEFAULT_CONTAINERTYPE_ID
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_SHIP
is an arbitrary ship
@ SVC_PRIVATE
private vehicles
@ SVC_VIP
vip vehicles
@ SVC_HOV
vehicle is a HOV
@ SVC_TRUCK
vehicle is a large transport vehicle
@ SVC_IGNORING
vehicles ignoring classes
@ SVC_CUSTOM2
is a user-defined type
@ SVC_WHEELCHAIR
@ SVC_RAIL
vehicle is a not electrified rail
@ SVC_RAIL_CLASSES
classes which drive on tracks
@ SVC_COACH
vehicle is a coach
@ SVC_CABLE_CAR
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_CONTAINER
@ SVC_SCOOTER
@ SVC_RAIL_FAST
vehicle that is allowed to drive on high-speed rail tracks
@ SVC_TRAILER
vehicle is a large transport vehicle
@ SVC_CUSTOM1
is a user-defined type
@ SVC_ARMY
army vehicles
@ SVC_DRONE
@ SVC_RAIL_ELECTRIC
rail vehicle that requires electrified tracks
@ SVC_DELIVERY
vehicle is a small delivery vehicle
@ SVC_NON_ROAD_RAIL
classes which (normally) do not drive on normal roads
@ SVC_RAIL_URBAN
vehicle is a city rail
@ SVC_MOTORCYCLE
vehicle is a motorcycle
@ SVC_EMERGENCY
public emergency vehicles
@ SVC_MOPED
vehicle is a moped
@ SVC_AUTHORITY
authorities vehicles
@ SVC_VULNERABLE
@ SVC_ROAD_MOTOR_CLASSES
classes which drive on roads
@ SVC_TRAM
vehicle is a light rail
@ SVC_TAXI
vehicle is a taxi
@ SVC_BUS
vehicle is a bus
@ SVC_E_VEHICLE
is an electric vehicle
@ SVC_AIRCRAFT
@ SVC_SUBWAY
@ SVC_PEDESTRIAN
pedestrian
const double DEFAULT_CONTAINER_TRANSHIP_SPEED
const std::string & getVehicleClassNames(SVCPermissions permissions, bool expand=false)
Returns the ids of the given classes, divided using a ' '.
const std::string DEFAULT_BIKETYPE_ID
@ SUMO_ATTR_PREFER
@ SUMO_ATTR_DISALLOW
@ SUMO_ATTR_ALLOW
@ SUMO_ATTR_VALUE
@ SUMO_ATTR_VCLASSES
@ SUMO_ATTR_EXCEPTIONS
bool gIgnoreUnknownVClass
Definition StdDefs.cpp:33
std::pair< int, double > MMVersion
(M)ajor/(M)inor version for written networks and default version for loading
Definition StdDefs.h:71
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition ToString.h:314
Static storage of an output device and its base (abstract) implementation.
OutputDevice & writeAttr(const ATTR_TYPE &attr, const T &val, const bool isNull=false, const bool escape=false)
writes a named attribute
OutputDevice & writeOptionalAttr(const SumoXMLAttr attr, const T &val, const bool isNull=false, const bool escape=false)
writes a named attribute unless null
Encapsulated SAX-Attributes.
T getOpt(int attr, const char *objectid, bool &ok, T defaultValue=T(), bool report=true) const
Tries to read given attribute assuming it is an int.
virtual bool hasAttribute(int id) const =0
Returns the information whether the named (by its enum-value) attribute is within the current list.
static bool isValidNetID(const std::string &value)
whether the given string is a valid id for a network element
stop offset
void setOffset(const double offset)
set offset
StopOffset()
constructor
bool isDefined() const
check if stopOffset was defined
void reset()
reset stopOffset
SVCPermissions getPermissions() const
get permissions
void setExceptions(const std::string permissions)
set exceptions (used in netedit)
SVCPermissions myPermissions
permissions (allowed)
double myOffset
offset
std::string getExceptions() const
get exceptions (used in netedit)
void setPermissions(const SVCPermissions permissions)
update permissions
bool operator==(StopOffset const &other) const
comparator
bool operator!=(StopOffset const &other) const
comparator
double getOffset() const
get offset
bool hasNext()
returns the information whether further substrings exist
std::string next()
returns the next substring when it exists. Otherwise the behaviour is undefined
bijection entry