Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEVType.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/****************************************************************************/
18// Definition of Vehicle Types in netedit
19/****************************************************************************/
20
21#include <netedit/GNENet.h>
23#include <netedit/GNEUndoList.h>
27
28#include "GNEVType.h"
29
30// ===========================================================================
31// member method definitions
32// ===========================================================================
33
35 GNEDemandElement(net, tag),
39 // init Rail Visualization Parameters
41}
42
43
44GNEVType::GNEVType(const std::string& vTypeID, GNENet* net, FileBucket* fileBucket, const SUMOVehicleClass& defaultVClass) :
45 GNEDemandElement(vTypeID, net, SUMO_TAG_VTYPE, fileBucket),
46 SUMOVTypeParameter(vTypeID),
49 // set default vehicle class
50 vehicleClass = defaultVClass;
51 // init Rail Visualization Parameters
53}
54
55
56GNEVType::GNEVType(const std::string& vTypeID, GNENet* net, FileBucket* fileBucket) :
57 GNEDemandElement(vTypeID, net, SUMO_TAG_VTYPE, fileBucket),
58 SUMOVTypeParameter(vTypeID),
61 // set default vehicle class
63 // init Rail Visualization Parameters
65}
66
67
69 GNEDemandElement(calibrator->getNet()->getAttributeCarriers()->generateDemandElementID(SUMO_TAG_VTYPE), calibrator->getNet(),
70 SUMO_TAG_VTYPE, calibrator->getFileBucket()),
74 // init Rail Visualization Parameters
76 id = getID();
77}
78
79
80GNEVType::GNEVType(GNENet* net, FileBucket* fileBucket, const SUMOVTypeParameter& vTypeParameter) :
81 GNEDemandElement(vTypeParameter.id, net, SUMO_TAG_VTYPE, fileBucket),
82 SUMOVTypeParameter(vTypeParameter),
85 // init Rail Visualization Parameters
87}
88
89
90GNEVType::GNEVType(const std::string& newVTypeID, GNENet* net, GNEVType* vTypeOriginal) :
91 GNEDemandElement(newVTypeID, net, vTypeOriginal->getTagProperty()->getTag(), vTypeOriginal->getFileBucket()),
92 SUMOVTypeParameter(*vTypeOriginal),
95 // change manually the ID (to avoid to use the ID of vTypeOriginal)
96 id = newVTypeID;
97 // init Rail Visualization Parameters
99}
100
101
103
104
107 return nullptr;
108}
109
110
113 return this;
114}
115
116
117const Parameterised*
119 return this;
120}
121
122
123void
125 // only write default vehicle types if it was modified
128 write(device);
129 }
130 } else {
131 write(device);
132 }
133}
134
135
138 // currently vTypes don't have problems
140}
141
142
143std::string
145 return "";
146}
147
148
149void
151 // nothing to fix
152}
153
154
157 return vehicleClass;
158}
159
160
161const RGBColor&
163 return color;
164}
165
166
167void
169 // update geometry of all childrens
170 for (const auto& i : getChildDemandElements()) {
171 i->updateGeometry();
172 }
173}
174
175
178 return Position();
179}
180
181
182std::string
184 return myNet->getMicrosimID();
185}
186
187
190 // Vehicle Types doesn't have boundaries
191 return Boundary(-0.1, -0.1, 0.1, 0.1);
192}
193
194
195void
196GNEVType::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
197 // geometry of this element cannot be splitted
198}
199
200
201void
203 // Vehicle Types aren't draw
204}
205
206
207void
209 // nothing to compute
210}
211
212
213void
214GNEVType::drawLanePartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
215 // vehicleTypes don't use drawJunctionPartialGL
216}
217
218
219void
220GNEVType::drawJunctionPartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
221 // vehicleTypes don't use drawJunctionPartialGL
222}
223
224
225GNELane*
227 // vehicle types don't use lanes
228 return nullptr;
229}
230
231
232GNELane*
234 // vehicle types don't use lanes
235 return nullptr;
236}
237
238
239std::string
241 // obtain default values depending of vehicle class
242 VClassDefaultValues defaultValues(vehicleClass);
243 switch (key) {
244 case SUMO_ATTR_ID:
245 return getMicrosimID();
246 // CFM Attributes
247 case SUMO_ATTR_ACCEL:
248 case SUMO_ATTR_DECEL:
251 case SUMO_ATTR_SIGMA:
252 case SUMO_ATTR_TAU:
253 // this CFM has default values
254 return getCFParamString(key, myTagProperty->getDefaultStringValue(key));
255 // JM Attributes
265 // this JM has default values
266 return getJMParamString(key, myTagProperty->getDefaultStringValue(key));
269 return toString(impatience);
270 } else {
271 return myTagProperty->getDefaultStringValue(SUMO_ATTR_IMPATIENCE);
272 }
273 // LCM Attributes
294 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
295 return getLCParamString(key, myTagProperty->getDefaultStringValue(key));
296 //
321 return getCFParamString(key, myTagProperty->getDefaultStringValue(key));
323 case SUMO_ATTR_TMP1:
324 case SUMO_ATTR_TMP2:
325 case SUMO_ATTR_TMP3:
326 case SUMO_ATTR_TMP4:
327 case SUMO_ATTR_TMP5:
335 case SUMO_ATTR_K:
339 return getCFParamString(key, "");
340 // Mutable values
341 case SUMO_ATTR_LENGTH:
343 return toString(length);
344 } else {
345 return toString(defaultValues.length);
346 }
347 case SUMO_ATTR_MINGAP:
349 return toString(minGap);
350 } else {
351 return toString(defaultValues.minGap);
352 }
355 return toString(maxSpeed);
356 } else {
357 return toString(defaultValues.maxSpeed);
358 }
361 return toString(speedFactor);
362 } else {
363 return toString(defaultValues.speedFactor);
364 }
368 } else {
369 return toString(defaultValues.desiredMaxSpeed);
370 }
373 return joinToString(parkingBadges, " ");
374 } else {
375 return "";
376 }
379 return toString(personCapacity);
380 } else {
381 return toString(defaultValues.personCapacity);
382 }
386 } else {
387 return toString(defaultValues.containerCapacity);
388 }
391 return osgFile;
392 } else {
393 return defaultValues.osgFile;
394 }
395 case SUMO_ATTR_COLOR:
397 return toString(color);
398 } else {
399 return "";
400 }
401 case SUMO_ATTR_VCLASS:
403 return toString(vehicleClass);
404 } else {
405 return myTagProperty->getDefaultStringValue(SUMO_ATTR_VCLASS);
406 }
409 return PollutantsInterface::getName(emissionClass);
410 } else {
411 return PollutantsInterface::getName(defaultValues.emissionClass);
412 }
416 } else {
417 return getVehicleShapeName(defaultValues.shape);
418 }
419 case SUMO_ATTR_WIDTH:
421 return toString(width);
422 } else {
423 return toString(defaultValues.width);
424 }
425 case SUMO_ATTR_HEIGHT:
427 return toString(height);
428 } else {
429 return toString(defaultValues.height);
430 }
433 return imgFile;
434 } else {
435 return myTagProperty->getDefaultStringValue(SUMO_ATTR_IMGFILE);
436 }
440 } else {
441 return myTagProperty->getDefaultStringValue(SUMO_ATTR_LANE_CHANGE_MODEL);
442 }
446 } else {
447 return myTagProperty->getDefaultStringValue(SUMO_ATTR_CAR_FOLLOW_MODEL);
448 }
452 } else {
453 return myTagProperty->getDefaultStringValue(SUMO_ATTR_BOARDING_DURATION);
454 }
458 } else {
459 return myTagProperty->getDefaultStringValue(SUMO_ATTR_LOADING_DURATION);
460 }
465 } else {
467 }
468 } else {
469 return toString(defaultValues.latAlignmentProcedure);
470 }
473 return toString(minGapLat);
474 } else {
475 return myTagProperty->getDefaultStringValue(SUMO_ATTR_MINGAP_LAT);
476 }
479 return toString(maxSpeedLat);
480 } else {
481 return myTagProperty->getDefaultStringValue(SUMO_ATTR_MAXSPEED_LAT);
482 }
486 } else {
487 return myTagProperty->getDefaultStringValue(SUMO_ATTR_ACTIONSTEPLENGTH);
488 }
489 case SUMO_ATTR_PROB:
492 } else {
493 return myTagProperty->getDefaultStringValue(SUMO_ATTR_PROB);
494 }
497 return toString(carriageLength);
498 } else {
499 return toString(defaultValues.carriageLength);
500 }
504 } else {
505 return toString(defaultValues.locomotiveLength);
506 }
509 return toString(carriageGap);
510 } else {
511 return myTagProperty->getDefaultStringValue(SUMO_ATTR_CARRIAGE_GAP);
512 }
513 // other
519 } else {
520 return FALSE_STR;
521 }
522 default:
523 return getCommonAttribute(key);
524 }
525}
526
527
528double
530 // obtain default values depending of vehicle class
531 VClassDefaultValues defaultValues(vehicleClass);
532 switch (key) {
533 case SUMO_ATTR_LENGTH:
535 return length;
536 } else {
537 return defaultValues.length;
538 }
539 case SUMO_ATTR_MINGAP:
541 return minGap;
542 } else {
543 return defaultValues.minGap;
544 }
545 case SUMO_ATTR_WIDTH:
547 return width;
548 } else {
549 return defaultValues.width;
550 }
551 case SUMO_ATTR_HEIGHT:
553 return height;
554 } else {
555 return defaultValues.height;
556 }
559 return maxSpeed;
560 } else {
561 return defaultValues.maxSpeed;
562 }
563 case SUMO_ATTR_PROB:
565 return defaultProbability;
566 } else {
567 return parse<double>(myTagProperty->getDefaultStringValue(SUMO_ATTR_PROB));
568 }
569 default:
570 return getCommonAttributeDouble(key);
571 }
572}
573
574
579
580
581void
582GNEVType::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
583 if (value == getAttribute(key)) {
584 return; //avoid needless changes, later logic relies on the fact that attributes have changed
585 }
586 switch (key) {
587 case SUMO_ATTR_ID:
588 GNEChange_Attribute::changeAttribute(this, key, value, undoList);
589 break;
590 // CFM Attributes
591 case SUMO_ATTR_ACCEL:
592 case SUMO_ATTR_DECEL:
595 case SUMO_ATTR_SIGMA:
596 case SUMO_ATTR_TAU:
598 case SUMO_ATTR_TMP1:
599 case SUMO_ATTR_TMP2:
600 case SUMO_ATTR_TMP3:
601 case SUMO_ATTR_TMP4:
602 case SUMO_ATTR_TMP5:
625 case SUMO_ATTR_K:
638 // JM Attributes
649 // LCM Attributes
670 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
671 //
672 case SUMO_ATTR_LENGTH:
673 case SUMO_ATTR_MINGAP:
677 case SUMO_ATTR_COLOR:
678 case SUMO_ATTR_VCLASS:
681 case SUMO_ATTR_WIDTH:
682 case SUMO_ATTR_HEIGHT:
694 case SUMO_ATTR_PROB:
699 // if we change the original value of a default vehicle Type, change also flag "myDefaultVehicleType"
702 }
703 GNEChange_Attribute::changeAttribute(this, key, value, undoList, true);
704 break;
707 break;
708 default:
709 setCommonAttribute(key, value, undoList);
710 break;
711 }
712}
713
714
715bool
716GNEVType::isValid(SumoXMLAttr key, const std::string& value) {
717 // a empty value is always valid except for IDs
718 if ((key != SUMO_ATTR_ID) && value.empty()) {
719 return true;
720 }
721 switch (key) {
722 case SUMO_ATTR_ID:
724 // CFM Attributes
725 case SUMO_ATTR_SIGMA:
726 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
727 case SUMO_ATTR_ACCEL:
728 case SUMO_ATTR_DECEL:
731 case SUMO_ATTR_TAU:
733 case SUMO_ATTR_TMP1:
734 case SUMO_ATTR_TMP2:
735 case SUMO_ATTR_TMP3:
736 case SUMO_ATTR_TMP4:
737 case SUMO_ATTR_TMP5:
744 case SUMO_ATTR_K:
757 return canParse<double>(value);
759 return canParse<bool>(value);
761 return canParse<int>(value) && (parse<int>(value) >= 0);
763 return canParse<double>(value) && (parse<double>(value) >= 1);
765 return canParse<double>(value) && (parse<double>(value) >= 1);
767 return canParse<double>(value) && (parse<double>(value) >= 0);
769 return canParse<double>(value) && (parse<double>(value) >= 1);
771 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
773 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
775 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
777 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
779 return canParse<double>(value) && (parse<double>(value) >= 1);
781 return canParse<double>(value) && (parse<double>(value) >= 0);
783 return canParse<double>(value) && (parse<double>(value) >= 0);
785 return canParse<double>(value) && (parse<double>(value) >= 1) && (parse<double>(value) <= 5);
787 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1.5);
789 // rail string
790 return SUMOXMLDefinitions::TrainTypes.hasString(value);
791 // JM Attributes
793 return canParse<double>(value) && (parse<double>(value) >= 0);
795 return canParse<double>(value) && (parse<double>(value) >= -1);
797 return canParse<double>(value) && (parse<double>(value) >= -1);
799 return canParse<double>(value) && (parse<double>(value) >= -1);
801 return canParse<double>(value) && (parse<double>(value) >= 0);
803 return canParse<double>(value) && (parse<double>(value) >= 0);
805 return canParse<double>(value) && (parse<double>(value) >= 0);
807 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
809 return canParse<double>(value) && (parse<double>(value) >= 0);
811 return canParse<double>(value) && (parse<double>(value) >= 0);
812 // LCM Attributes
820 return canParse<double>(value);
824 case SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE: // 0 mean disabled
825 case SUMO_ATTR_LCA_TIME_TO_IMPATIENCE: // 0 mean disabled
826 case SUMO_ATTR_LCA_OVERTAKE_RIGHT: // 0 mean disabled
827 return canParse<double>(value) && (parse<double>(value) >= 0);
833 return canParse<double>(value) && (parse<double>(value) > 0);
835 return canParse<double>(value) && (parse<double>(value) >= 0 || parse<double>(value) == -1);
837 return canParse<double>(value) && (parse<double>(value) >= -1) && (parse<double>(value) <= 1);
838 /* case SUMO_ATTR_LCA_EXPERIMENTAL1:
839 return true;
840 */
841 //
842 case SUMO_ATTR_LENGTH:
843 return canParse<double>(value) && (parse<double>(value) > 0);
844 case SUMO_ATTR_MINGAP:
845 return canParse<double>(value) && (parse<double>(value) >= 0);
847 return canParse<double>(value) && (parse<double>(value) >= 0);
851 return canParse<double>(value) && (parse<double>(value) >= 0);
852 case SUMO_ATTR_COLOR:
853 if (value.empty()) {
854 return true;
855 } else {
857 }
858 case SUMO_ATTR_VCLASS:
861 // check if given value correspond to a string of PollutantsInterface::getAllClassesStr()
862 for (const auto& eClass : PollutantsInterface::getAllClassesStr()) {
863 if (value == eClass) {
864 return true;
865 }
866 }
867 return false;
869 if (value.empty() || (value == "default")) {
870 return true;
871 } else {
873 }
874 case SUMO_ATTR_WIDTH:
875 return canParse<double>(value);
876 case SUMO_ATTR_HEIGHT:
877 return canParse<double>(value);
885 return canParse<int>(value);
887 return canParse<int>(value);
895 return canParse<double>(value);
897 return canParse<double>(value);
900 case SUMO_ATTR_PROB:
901 return canParse<double>(value) && (parse<double>(value) >= 0);
905 return canParse<double>(value) && (parse<double>(value) >= -1);
907 return canParse<double>(value) && (parse<double>(value) >= -1);
909 return canParse<double>(value) && (parse<double>(value) >= 0);
912 return canParse<bool>(value);
913 } else {
914 return false;
915 }
916 default:
917 return isCommonAttributeValid(key, value);
918 }
919}
920
921
922bool
924 switch (key) {
925 case SUMO_ATTR_ID:
926 if (id == DEFAULT_VTYPE_ID
927 || id == DEFAULT_PEDTYPE_ID
928 || id == DEFAULT_BIKETYPE_ID
929 || id == DEFAULT_TAXITYPE_ID
930 || id == DEFAULT_RAILTYPE_ID) {
931 return false;
932 } else {
933 return true;
934 }
935 case SUMO_ATTR_LENGTH:
937 case SUMO_ATTR_MINGAP:
957 default:
958 return true;
959 }
960}
961
962
963std::string
965 return getTagStr();
966}
967
968
969std::string
971 return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) ;
972}
973
974
975bool
976GNEVType::overwriteVType(GNEDemandElement* vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList* undoList) {
977 // open undo list and overwrite all values of default VType
978 undoList->begin(vType, "update default " + vType->getTagStr() + " '" + DEFAULT_VTYPE_ID + "'");
979 // CFM values
980 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_ACCEL, "").empty()) {
981 vType->setAttribute(SUMO_ATTR_ACCEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_ACCEL, 0)), undoList);
982 }
983 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_DECEL, "").empty()) {
984 vType->setAttribute(SUMO_ATTR_DECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_DECEL, 0)), undoList);
985 }
986 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_APPARENTDECEL, "").empty()) {
987 vType->setAttribute(SUMO_ATTR_APPARENTDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_APPARENTDECEL, 0)), undoList);
988 }
989 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_EMERGENCYDECEL, "").empty()) {
990 vType->setAttribute(SUMO_ATTR_EMERGENCYDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_EMERGENCYDECEL, 0)), undoList);
991 }
992 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_SIGMA, "").empty()) {
993 vType->setAttribute(SUMO_ATTR_SIGMA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_SIGMA, 0)), undoList);
994 }
995 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TAU, "").empty()) {
996 vType->setAttribute(SUMO_ATTR_TAU, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TAU, 0)), undoList);
997 }
998 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_COLLISION_MINGAP_FACTOR, "").empty()) {
1000 }
1001 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP1, "").empty()) {
1002 vType->setAttribute(SUMO_ATTR_TMP1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP1, 0)), undoList);
1003 }
1004 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP2, "").empty()) {
1005 vType->setAttribute(SUMO_ATTR_TMP2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP2, 0)), undoList);
1006 }
1007 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP3, "").empty()) {
1008 vType->setAttribute(SUMO_ATTR_TMP3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP3, 0)), undoList);
1009 }
1010 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP4, "").empty()) {
1011 vType->setAttribute(SUMO_ATTR_TMP4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP4, 0)), undoList);
1012 }
1013 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP5, "").empty()) {
1014 vType->setAttribute(SUMO_ATTR_TMP5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP5, 0)), undoList);
1015 }
1016 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_USEVEHDYNAMICS, "").empty()) {
1018 }
1019 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_MAX_VEH_PREVIEW, "").empty()) {
1021 }
1022 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_LOOK_AHEAD, "").empty()) {
1024 }
1025 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_DRIVE, "").empty()) {
1027 }
1028 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_REACTION, "").empty()) {
1030 }
1031 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_ESTIMATE, "").empty()) {
1033 }
1034 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_C_COOLNESS, "").empty()) {
1036 }
1037 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_LEADER, "").empty()) {
1039 }
1040 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_GAP, "").empty()) {
1042 }
1043 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_ERROR, "").empty()) {
1045 }
1046 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_JERK_MAX, "").empty()) {
1048 }
1049 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_EPSILON_ACC, "").empty()) {
1051 }
1052 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_ACC_MAX, "").empty()) {
1054 }
1055 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_FLATNESS, "").empty()) {
1057 }
1058 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_BEGIN, "").empty()) {
1060 }
1061 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC1, "").empty()) {
1062 vType->setAttribute(SUMO_ATTR_CF_W99_CC1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC1, 0)), undoList);
1063 }
1064 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC2, "").empty()) {
1065 vType->setAttribute(SUMO_ATTR_CF_W99_CC2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC2, 0)), undoList);
1066 }
1067 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC3, "").empty()) {
1068 vType->setAttribute(SUMO_ATTR_CF_W99_CC3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC3, 0)), undoList);
1069 }
1070 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC4, "").empty()) {
1071 vType->setAttribute(SUMO_ATTR_CF_W99_CC4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC4, 0)), undoList);
1072 }
1073 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC5, "").empty()) {
1074 vType->setAttribute(SUMO_ATTR_CF_W99_CC5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC5, 0)), undoList);
1075 }
1076 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC6, "").empty()) {
1077 vType->setAttribute(SUMO_ATTR_CF_W99_CC6, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC6, 0)), undoList);
1078 }
1079 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC7, "").empty()) {
1080 vType->setAttribute(SUMO_ATTR_CF_W99_CC7, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC7, 0)), undoList);
1081 }
1082 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC8, "").empty()) {
1083 vType->setAttribute(SUMO_ATTR_CF_W99_CC8, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC8, 0)), undoList);
1084 }
1085 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC9, "").empty()) {
1086 vType->setAttribute(SUMO_ATTR_CF_W99_CC9, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC9, 0)), undoList);
1087 }
1088 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_TAULAST, "").empty()) {
1090 }
1091 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_APPROB, "").empty()) {
1093 }
1094 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_FACTOR, "").empty()) {
1096 }
1097 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_TIME, "").empty()) {
1099 }
1100 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_SECURITY, "").empty()) {
1102 }
1103 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_ESTIMATION, "").empty()) {
1105 }
1106 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TRAIN_TYPE, "").empty()) {
1107 vType->setAttribute(SUMO_ATTR_TRAIN_TYPE, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TRAIN_TYPE, 0)), undoList);
1108 }
1109 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_K, "").empty()) {
1110 vType->setAttribute(SUMO_ATTR_K, toString(newVTypeParameter.getCFParam(SUMO_ATTR_K, 0)), undoList);
1111 }
1112 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_KERNER_PHI, "").empty()) {
1113 vType->setAttribute(SUMO_ATTR_CF_KERNER_PHI, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_KERNER_PHI, 0)), undoList);
1114 }
1115 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_DELTA, "").empty()) {
1116 vType->setAttribute(SUMO_ATTR_CF_IDM_DELTA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_IDM_DELTA, 0)), undoList);
1117 }
1118 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_STEPPING, "").empty()) {
1120 }
1121 // JM values
1122 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_CROSSING_GAP, "").empty()) {
1124 }
1125 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME, "").empty()) {
1127 }
1128 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_YELLOW_TIME, "").empty()) {
1130 }
1131 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME, "").empty()) {
1133 }
1134 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_RED_SPEED, "").empty()) {
1136 }
1137 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_PROB, "").empty()) {
1139 }
1140 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_SPEED, "").empty()) {
1142 }
1143 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_SIGMA_MINOR, "").empty()) {
1144 vType->setAttribute(SUMO_ATTR_JM_SIGMA_MINOR, toString(newVTypeParameter.getJMParam(SUMO_ATTR_JM_SIGMA_MINOR, 0)), undoList);
1145 }
1146 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_TIMEGAP_MINOR, "").empty()) {
1148 }
1149 if (newVTypeParameter.wasSet(VTYPEPARS_IMPATIENCE_SET)) {
1150 vType->setAttribute(SUMO_ATTR_IMPATIENCE, toString(newVTypeParameter.impatience), undoList);
1151 }
1152 // LCM values
1153 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_STRATEGIC_PARAM, "").empty()) {
1155 }
1156 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_COOPERATIVE_PARAM, "").empty()) {
1158 }
1159 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAIN_PARAM, "").empty()) {
1161 }
1162 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_PARAM, "").empty()) {
1164 }
1165 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SUBLANE_PARAM, "").empty()) {
1167 }
1168 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OPPOSITE_PARAM, "").empty()) {
1170 }
1171 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHY, "").empty()) {
1172 vType->setAttribute(SUMO_ATTR_LCA_PUSHY, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHY, 0)), undoList);
1173 }
1174 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHYGAP, "").empty()) {
1175 vType->setAttribute(SUMO_ATTR_LCA_PUSHYGAP, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHYGAP, 0)), undoList);
1176 }
1177 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ASSERTIVE, "").empty()) {
1178 vType->setAttribute(SUMO_ATTR_LCA_ASSERTIVE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ASSERTIVE, 0)), undoList);
1179 }
1180 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_IMPATIENCE, "").empty()) {
1181 vType->setAttribute(SUMO_ATTR_LCA_IMPATIENCE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_IMPATIENCE, 0)), undoList);
1182 }
1183 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TIME_TO_IMPATIENCE, "").empty()) {
1185 }
1186 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ACCEL_LAT, "").empty()) {
1187 vType->setAttribute(SUMO_ATTR_LCA_ACCEL_LAT, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ACCEL_LAT, 0)), undoList);
1188 }
1189 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_LOOKAHEADLEFT, "").empty()) {
1191 }
1192 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAINRIGHT, "").empty()) {
1194 }
1195 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATSTANDING, "").empty()) {
1197 }
1198 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATFACTOR, "").empty()) {
1200 }
1201 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE, "").empty()) {
1203 }
1204 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_RIGHT, "").empty()) {
1206 }
1207 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_ACCEPTANCE_TIME, "").empty()) {
1209 }
1210 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_DELTASPEED_FACTOR, "").empty()) {
1212 }
1213 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_EXPERIMENTAL1, "").empty()) {
1215 }
1216 // vType parameters
1217 if (newVTypeParameter.wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
1218 vType->setAttribute(SUMO_ATTR_VCLASS, toString(newVTypeParameter.vehicleClass), undoList);
1219 }
1220 if (newVTypeParameter.wasSet(VTYPEPARS_LENGTH_SET)) {
1221 vType->setAttribute(SUMO_ATTR_LENGTH, toString(newVTypeParameter.length), undoList);
1222 }
1223 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_SET)) {
1224 vType->setAttribute(SUMO_ATTR_MINGAP, toString(newVTypeParameter.minGap), undoList);
1225 }
1226 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_SET)) {
1227 vType->setAttribute(SUMO_ATTR_MAXSPEED, toString(newVTypeParameter.maxSpeed), undoList);
1228 }
1229 if (newVTypeParameter.wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
1230 vType->setAttribute(SUMO_ATTR_SPEEDFACTOR, toString(newVTypeParameter.speedFactor), undoList);
1231 }
1232 if (newVTypeParameter.wasSet(VTYPEPARS_DESIRED_MAXSPEED_SET)) {
1233 vType->setAttribute(SUMO_ATTR_DESIRED_MAXSPEED, toString(newVTypeParameter.desiredMaxSpeed), undoList);
1234 }
1235 if (newVTypeParameter.wasSet(VTYPEPARS_COLOR_SET)) {
1236 vType->setAttribute(SUMO_ATTR_COLOR, toString(newVTypeParameter.color), undoList);
1237 }
1238 if (newVTypeParameter.wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
1239 vType->setAttribute(SUMO_ATTR_EMISSIONCLASS, PollutantsInterface::getName(newVTypeParameter.emissionClass), undoList);
1240 }
1241 if (newVTypeParameter.wasSet(VTYPEPARS_SHAPE_SET)) {
1242 vType->setAttribute(SUMO_ATTR_GUISHAPE, getVehicleShapeName(newVTypeParameter.shape), undoList);
1243 }
1244 if (newVTypeParameter.wasSet(VTYPEPARS_WIDTH_SET)) {
1245 vType->setAttribute(SUMO_ATTR_WIDTH, toString(newVTypeParameter.width), undoList);
1246 }
1247 if (newVTypeParameter.wasSet(VTYPEPARS_HEIGHT_SET)) {
1248 vType->setAttribute(SUMO_ATTR_HEIGHT, toString(newVTypeParameter.height), undoList);
1249 }
1250 if (newVTypeParameter.wasSet(VTYPEPARS_IMGFILE_SET)) {
1251 vType->setAttribute(SUMO_ATTR_IMGFILE, toString(newVTypeParameter.imgFile), undoList);
1252 }
1253 if (newVTypeParameter.wasSet(VTYPEPARS_LANE_CHANGE_MODEL_SET)) {
1254 vType->setAttribute(SUMO_ATTR_LANE_CHANGE_MODEL, SUMOXMLDefinitions::LaneChangeModels.getString(newVTypeParameter.lcModel), undoList);
1255 }
1256 if (newVTypeParameter.wasSet(VTYPEPARS_CAR_FOLLOW_MODEL)) {
1257 vType->setAttribute(SUMO_ATTR_CAR_FOLLOW_MODEL, SUMOXMLDefinitions::CarFollowModels.getString(newVTypeParameter.cfModel), undoList);
1258 }
1259 if (newVTypeParameter.wasSet(VTYPEPARS_PERSON_CAPACITY)) {
1260 vType->setAttribute(SUMO_ATTR_PERSON_CAPACITY, toString(newVTypeParameter.personCapacity), undoList);
1261 }
1262 if (newVTypeParameter.wasSet(VTYPEPARS_CONTAINER_CAPACITY)) {
1263 vType->setAttribute(SUMO_ATTR_CONTAINER_CAPACITY, toString(newVTypeParameter.containerCapacity), undoList);
1264 }
1265 if (newVTypeParameter.wasSet(VTYPEPARS_BOARDING_DURATION)) {
1266 vType->setAttribute(SUMO_ATTR_BOARDING_DURATION, time2string(newVTypeParameter.boardingDuration), undoList);
1267 }
1268 if (newVTypeParameter.wasSet(VTYPEPARS_LOADING_DURATION)) {
1269 vType->setAttribute(SUMO_ATTR_LOADING_DURATION, time2string(newVTypeParameter.loadingDuration), undoList);
1270 }
1271 if (newVTypeParameter.wasSet(VTYPEPARS_LATALIGNMENT_SET)) {
1272 if (newVTypeParameter.latAlignmentProcedure != LatAlignmentDefinition::GIVEN) {
1273 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentProcedure), undoList);
1274 } else {
1275 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentOffset), undoList);
1276 }
1277 }
1278 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_LAT_SET)) {
1279 vType->setAttribute(SUMO_ATTR_MINGAP_LAT, toString(newVTypeParameter.minGapLat), undoList);
1280 }
1281 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_LAT_SET)) {
1282 vType->setAttribute(SUMO_ATTR_MAXSPEED_LAT, toString(newVTypeParameter.maxSpeedLat), undoList);
1283 }
1284 if (newVTypeParameter.wasSet(VTYPEPARS_ACTIONSTEPLENGTH_SET)) {
1285 vType->setAttribute(SUMO_ATTR_ACTIONSTEPLENGTH, time2string(newVTypeParameter.actionStepLength), undoList);
1286 }
1287 if (newVTypeParameter.wasSet(VTYPEPARS_PROBABILITY_SET)) {
1288 vType->setAttribute(SUMO_ATTR_PROB, toString(newVTypeParameter.defaultProbability), undoList);
1289 }
1290 if (newVTypeParameter.wasSet(VTYPEPARS_OSGFILE_SET)) {
1291 vType->setAttribute(SUMO_ATTR_OSGFILE, toString(newVTypeParameter.osgFile), undoList);
1292 }
1293 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_LENGTH))) {
1295 }
1296 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_LOCOMOTIVE_LENGTH))) {
1298 }
1299 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_GAP))) {
1300 vType->setAttribute(SUMO_ATTR_CARRIAGE_GAP, newVTypeParameter.getParameter(toString(SUMO_ATTR_CARRIAGE_GAP), ""), undoList);
1301 }
1302 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_PARKING_BADGES))) {
1303 vType->setAttribute(SUMO_ATTR_PARKING_BADGES, newVTypeParameter.getParameter(toString(SUMO_ATTR_PARKING_BADGES), ""), undoList);
1304 }
1305 // parse parameters
1306 std::string parametersStr;
1307 // Generate an string using the following structure: "key1=value1|key2=value2|...
1308 for (const auto& parameter : newVTypeParameter.getParametersMap()) {
1309 parametersStr += parameter.first + "=" + parameter.second + "|";
1310 }
1311 // remove the last "|"
1312 if (!parametersStr.empty()) {
1313 parametersStr.pop_back();
1314 }
1315 if (parametersStr != vType->getAttribute(GNE_ATTR_PARAMETERS)) {
1316 vType->setAttribute(GNE_ATTR_PARAMETERS, parametersStr, undoList);
1317 }
1318 // close undo list
1319 undoList->end();
1320 return true;
1321}
1322
1323// ===========================================================================
1324// private
1325// ===========================================================================
1326
1327void
1328GNEVType::setAttribute(SumoXMLAttr key, const std::string& value) {
1329 // obtain default values depending of vehicle class
1330 VClassDefaultValues defaultValues(vehicleClass);
1331 switch (key) {
1332 case SUMO_ATTR_ID:
1333 // update microsimID
1335 // manually change VType parameters ID
1336 id = value;
1337 break;
1338 // CFM Attributes
1339 case SUMO_ATTR_ACCEL:
1340 case SUMO_ATTR_DECEL:
1343 case SUMO_ATTR_SIGMA:
1344 case SUMO_ATTR_TAU:
1346 case SUMO_ATTR_TMP1:
1347 case SUMO_ATTR_TMP2:
1348 case SUMO_ATTR_TMP3:
1349 case SUMO_ATTR_TMP4:
1350 case SUMO_ATTR_TMP5:
1358 case SUMO_ATTR_K:
1362 // empty values means that value isn't set
1363 if (value.empty()) {
1364 const auto it = cfParameter.find(key);
1365 if (it != cfParameter.end()) {
1366 cfParameter.erase(it);
1367 }
1368 } else {
1369 cfParameter[key] = value;
1370 }
1371 break;
1396 // empty or default values means that value isn't set
1397 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == myTagProperty->getDefaultDoubleValue(key)))) {
1398 const auto it = cfParameter.find(key);
1399 if (it != cfParameter.end()) {
1400 cfParameter.erase(it);
1401 }
1402 } else {
1403 cfParameter[key] = value;
1404 }
1405 break;
1406 // JM Attributes
1416 // empty values means that value isn't set
1417 if (value.empty()) {
1418 const auto it = jmParameter.find(key);
1419 if (it != jmParameter.end()) {
1420 jmParameter.erase(it);
1421 }
1422 } else {
1423 jmParameter[key] = value;
1424 }
1425 break;
1427 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1429 // mark parameter as set
1431 } else {
1432 // set default value
1433 impatience = parse<double>(myTagProperty->getDefaultStringValue(key));
1434 // unset parameter
1436 }
1437 break;
1438 // LCM Attributes
1454
1455 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
1456 // empty values means that value isn't set
1457 if (value.empty()) {
1458 const auto it = lcParameter.find(key);
1459 if (it != lcParameter.end()) {
1460 lcParameter.erase(it);
1461 }
1462 } else {
1463 lcParameter[key] = value;
1464 }
1465 break;
1467 // empty or -1 value means that value isn't set
1468 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == -1))) {
1469 const auto it = lcParameter.find(key);
1470 if (it != lcParameter.end()) {
1471 lcParameter.erase(it);
1472 }
1473 } else {
1474 lcParameter[key] = value;
1475 }
1476 break;
1481 // empty or null values means that value isn't set
1482 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == 0))) {
1483 const auto it = lcParameter.find(key);
1484 if (it != lcParameter.end()) {
1485 lcParameter.erase(it);
1486 }
1487 } else {
1488 lcParameter[key] = value;
1489 }
1490 break;
1491 //
1492 case SUMO_ATTR_LENGTH:
1493 if (!value.empty() && (value != toString(defaultValues.length))) {
1495 // mark parameter as set
1497 } else {
1498 // set default value
1499 length = defaultValues.length;
1500 // unset parameter
1502 }
1503 break;
1504 case SUMO_ATTR_MINGAP:
1505 if (!value.empty() && (value != toString(defaultValues.minGap))) {
1507 // mark parameter as set
1509 } else {
1510 // set default value
1511 minGap = defaultValues.minGap;
1512 // unset parameter
1514 }
1515 break;
1516 case SUMO_ATTR_MAXSPEED:
1517 if (!value.empty() && (value != toString(defaultValues.maxSpeed))) {
1519 // mark parameter as set
1521 } else {
1522 // set default value
1523 maxSpeed = defaultValues.maxSpeed;
1524 // unset parameter
1526 }
1527 break;
1529 if (!value.empty() && (value != toString(defaultValues.speedFactor))) {
1530 speedFactor.parse(value, false);
1531 // mark parameter as set
1533 } else {
1534 // set default value
1535 speedFactor.parse(toString(defaultValues.speedFactor), false);
1536 // unset parameter
1538 }
1539 break;
1541 if (!value.empty() && (value != toString(defaultValues.desiredMaxSpeed))) {
1543 // mark parameter as set
1545 } else {
1546 // set default value
1547 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1548 // unset parameter
1550 }
1551 break;
1552 case SUMO_ATTR_COLOR:
1553 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1555 // mark parameter as set
1557 } else {
1558 // unset parameter
1560 }
1561 break;
1562 case SUMO_ATTR_VCLASS:
1563 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1565 // mark parameter as set
1567 } else {
1568 // set default value
1569 vehicleClass = getVehicleClassID(myTagProperty->getDefaultStringValue(key));
1570 // unset parameter
1572 }
1573 // update default values
1574 updateDefaultVClassAttributes(defaultValues);
1575 break;
1577 if (!value.empty()) {
1579 // mark parameter as set
1581 } else {
1582 // set default value
1583 parkingBadges.clear();
1584 // unset parameter
1586 }
1587 break;
1589 if (!value.empty() && (value != toString(defaultValues.emissionClass))) {
1590 emissionClass = PollutantsInterface::getClassByName(value);
1591 // mark parameter as set
1593 } else {
1594 // set default value
1595 emissionClass = defaultValues.emissionClass;
1596 // unset parameter
1598 }
1599 break;
1600 case SUMO_ATTR_GUISHAPE:
1601 if (value.empty() || (value == "default")) {
1602 // set default value
1603 shape = defaultValues.shape;
1604 // unset parameter
1606 } else if (!value.empty() && (value != SumoVehicleShapeStrings.getString(defaultValues.shape))) {
1608 // mark parameter as set
1610 } else {
1611 // set default value
1612 shape = defaultValues.shape;
1613 // unset parameter
1615 }
1616 break;
1617 case SUMO_ATTR_WIDTH:
1618 if (!value.empty() && (value != toString(defaultValues.width))) {
1620 // mark parameter as set
1622 } else {
1623 // set default value
1624 width = defaultValues.width;
1625 // unset parameter
1627 }
1628 break;
1629 case SUMO_ATTR_HEIGHT:
1630 if (!value.empty() && (value != toString(defaultValues.height))) {
1632 // mark parameter as set
1634 } else {
1635 // set default value
1636 height = defaultValues.height;
1637 // unset parameter
1639 }
1640 break;
1641 case SUMO_ATTR_IMGFILE:
1642 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1643 imgFile = value;
1644 // mark parameter as set
1646 } else {
1647 // set default value
1648 imgFile = myTagProperty->getDefaultStringValue(key);
1649 // unset parameter
1651 }
1652 break;
1654 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1656 // mark parameter as set
1658 } else {
1659 // set default value
1660 lcModel = SUMOXMLDefinitions::LaneChangeModels.get(myTagProperty->getDefaultStringValue(key));
1661 // unset parameter
1663 }
1664 break;
1666 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1668 // mark parameter as set
1670 } else {
1671 // set default value
1672 cfModel = SUMOXMLDefinitions::CarFollowModels.get(myTagProperty->getDefaultStringValue(key));
1673 // unset parameter
1675 }
1676 break;
1678 if (!value.empty() && (value != toString(defaultValues.personCapacity))) {
1680 // mark parameter as set
1682 } else {
1683 // set default value
1684 personCapacity = defaultValues.personCapacity;
1685 // unset parameter
1687 }
1688 break;
1690 if (!value.empty() && (value != toString(defaultValues.containerCapacity))) {
1692 // mark parameter as set
1694 } else {
1695 // set default value
1696 containerCapacity = defaultValues.containerCapacity;
1697 // unset parameter
1699 }
1700 break;
1702 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1704 // mark parameter as set
1706 } else {
1707 // set default value
1708 boardingDuration = myTagProperty->getDefaultTimeValue(key);
1709 // unset parameter
1711 }
1712 break;
1714 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1716 // mark parameter as set
1718 } else {
1719 // set default value
1720 loadingDuration = myTagProperty->getDefaultTimeValue(key);
1721 // unset parameter
1723 }
1724 break;
1726 if (!value.empty() && (value != toString(defaultValues.latAlignmentProcedure))) {
1728 // mark parameter as set
1730 } else {
1731 // set default value
1733 // unset parameter
1735 }
1736 break;
1738 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1740 // mark parameter as set
1742 } else {
1743 // set default value
1744 minGapLat = myTagProperty->getDefaultDoubleValue(key);
1745 // unset parameter
1747 }
1748 break;
1750 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1752 // mark parameter as set
1754 } else {
1755 // set default value
1756 maxSpeedLat = myTagProperty->getDefaultDoubleValue(key);
1757 // unset parameter
1759 }
1760 break;
1762 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1764 // mark parameter as set
1766 } else {
1767 // set default value
1768 actionStepLength = myTagProperty->getDefaultTimeValue(key);
1769 // unset parameter
1771 }
1772 break;
1773 case SUMO_ATTR_PROB:
1774 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1776 // mark parameter as set
1778 } else {
1779 // set default value
1780 defaultProbability = myTagProperty->getDefaultDoubleValue(key);
1781 // unset parameter
1783 }
1784 break;
1785 case SUMO_ATTR_OSGFILE:
1786 if (!value.empty() && (value != defaultValues.osgFile)) {
1787 osgFile = value;
1788 // mark parameter as set
1790 } else {
1791 // set default value
1792 osgFile = defaultValues.osgFile;
1793 // unset parameter
1795 }
1796 break;
1798 if (!value.empty() && (value != toString(defaultValues.carriageLength))) {
1800 // mark parameter as set
1802 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1804 } else {
1805 // set default value
1806 carriageLength = defaultValues.carriageLength;
1807 // unset parameter
1809 // remove from params (needed for writting in XML)
1811 }
1812 break;
1814 if (!value.empty() && (value != toString(defaultValues.locomotiveLength))) {
1816 // mark parameter as set
1818 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1820 } else {
1821 // set default value
1822 locomotiveLength = defaultValues.locomotiveLength;
1823 // unset parameter
1825 // remove from params (needed for writting in XML)
1827 }
1828 break;
1830 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1832 // mark parameter as set
1834 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1836 } else {
1837 // set default value
1838 carriageGap = myTagProperty->getDefaultDoubleValue(key);
1839 // unset parameter
1841 // remove from params (needed for writting in XML)
1843 }
1844 break;
1848 myFileBucket->removeDefaultVType();
1849 myFileBucket->addElement(false);
1850 } else {
1851 myFileBucket->addDefaultVType();
1852 myFileBucket->removeElement(false);
1853 }
1854 break;
1855 default:
1857 break;
1858 }
1859 // check if geometry must be marked as deprecated
1860 if (myTagProperty->hasAttribute(key) && (myTagProperty->getAttributeProperties(key)->requireUpdateGeometry())) {
1862 }
1863}
1864
1865
1866void
1869 length = defaultValues.length;
1870 }
1872 minGap = defaultValues.minGap;
1873 }
1875 maxSpeed = defaultValues.maxSpeed;
1876 }
1878 width = defaultValues.width;
1879 }
1881 height = defaultValues.height;
1882 }
1884 shape = defaultValues.shape;
1885 }
1887 emissionClass = defaultValues.emissionClass;
1888 }
1890 speedFactor = defaultValues.speedFactor;
1891 }
1893 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1894 }
1896 personCapacity = defaultValues.personCapacity;
1897 }
1899 containerCapacity = defaultValues.containerCapacity;
1900 }
1902 osgFile = defaultValues.osgFile;
1903 }
1905 carriageLength = defaultValues.carriageLength;
1906 }
1908 locomotiveLength = defaultValues.locomotiveLength;
1909 }
1910}
1911
1912/****************************************************************************/
const std::string invalid_return< std::string >::value
SUMOTime string2time(const std::string &r)
convert string to SUMOTime
Definition SUMOTime.cpp:46
std::string time2string(SUMOTime t, bool humanReadable)
convert SUMOTime to string (independently of global format setting)
Definition SUMOTime.cpp:91
const long long int VTYPEPARS_SHAPE_SET
const long long int VTYPEPARS_LOADING_DURATION
const long long int VTYPEPARS_PERSON_CAPACITY
const long long int VTYPEPARS_CAR_FOLLOW_MODEL
const long long int VTYPEPARS_WIDTH_SET
const long long int VTYPEPARS_CARRIAGE_LENGTH_SET
const long long int VTYPEPARS_ACTIONSTEPLENGTH_SET
const long long int VTYPEPARS_MAXSPEED_LAT_SET
const long long int VTYPEPARS_MAXSPEED_SET
const long long int VTYPEPARS_EMISSIONCLASS_SET
const long long int VTYPEPARS_LATALIGNMENT_SET
const long long int VTYPEPARS_COLOR_SET
const long long int VTYPEPARS_LANE_CHANGE_MODEL_SET
const long long int VTYPEPARS_DESIRED_MAXSPEED_SET
const long long int VTYPEPARS_OSGFILE_SET
const long long int VTYPEPARS_SPEEDFACTOR_SET
const long long int VTYPEPARS_CARRIAGE_GAP_SET
const long long int VTYPEPARS_MINGAP_SET
const long long int VTYPEPARS_PROBABILITY_SET
const long long int VTYPEPARS_HEIGHT_SET
const long long int VTYPEPARS_PARKING_BADGES_SET
const long long int VTYPEPARS_BOARDING_DURATION
@ GIVEN
The alignment as offset is given.
const long long int VTYPEPARS_VEHICLECLASS_SET
const long long int VTYPEPARS_IMPATIENCE_SET
const long long int VTYPEPARS_LENGTH_SET
const long long int VTYPEPARS_IMGFILE_SET
const long long int VTYPEPARS_CONTAINER_CAPACITY
const long long int VTYPEPARS_MINGAP_LAT_SET
const long long int VTYPEPARS_LOCOMOTIVE_LENGTH_SET
bool canParseVehicleShape(const std::string &shape)
Checks whether the given string contains only known vehicle shape.
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.
SUMOVehicleShape getVehicleShapeID(const std::string &name)
Returns the class id of the shape class given by its name.
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.
const std::string DEFAULT_TAXITYPE_ID
const std::string DEFAULT_RAILTYPE_ID
const std::string DEFAULT_PEDTYPE_ID
const std::string DEFAULT_VTYPE_ID
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types.
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
const std::string DEFAULT_BIKETYPE_ID
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_VTYPE
description of a vehicle/person/container type
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ SUMO_ATTR_TMP4
@ SUMO_ATTR_CF_W99_CC9
@ SUMO_ATTR_CF_EIDM_T_ACC_MAX
@ SUMO_ATTR_CF_EIDM_EPSILON_ACC
@ SUMO_ATTR_CF_W99_CC5
@ SUMO_ATTR_LCA_PUSHY
@ SUMO_ATTR_EMISSIONCLASS
@ SUMO_ATTR_JM_IGNORE_FOE_SPEED
@ SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME
@ SUMO_ATTR_CF_EIDM_T_LOOK_AHEAD
@ SUMO_ATTR_CF_WIEDEMANN_SECURITY
@ SUMO_ATTR_LCA_ASSERTIVE
@ SUMO_ATTR_TRAIN_TYPE
@ SUMO_ATTR_CF_EIDM_USEVEHDYNAMICS
@ SUMO_ATTR_CF_IDMM_ADAPT_TIME
@ SUMO_ATTR_LANE_CHANGE_MODEL
@ SUMO_ATTR_CF_KERNER_PHI
@ SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE
@ SUMO_ATTR_PARKING_BADGES
@ SUMO_ATTR_CF_EIDM_C_COOLNESS
@ SUMO_ATTR_CF_EIDM_SIG_ERROR
@ SUMO_ATTR_LCA_PUSHYGAP
@ SUMO_ATTR_LCA_LOOKAHEADLEFT
@ SUMO_ATTR_APPARENTDECEL
@ SUMO_ATTR_MAXSPEED_LAT
@ SUMO_ATTR_LCA_SPEEDGAIN_PARAM
@ SUMO_ATTR_TMP3
@ SUMO_ATTR_ACTIONSTEPLENGTH
@ SUMO_ATTR_LCA_IMPATIENCE
@ SUMO_ATTR_MINGAP
@ GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
@ SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME
@ SUMO_ATTR_TMP2
@ SUMO_ATTR_CF_W99_CC8
@ SUMO_ATTR_LOADING_DURATION
@ SUMO_ATTR_CF_IDM_DELTA
@ SUMO_ATTR_CF_EIDM_MAX_VEH_PREVIEW
@ SUMO_ATTR_LCA_MAXSPEEDLATFACTOR
@ GNE_ATTR_DEFAULT_VTYPE
Flag to check if VType is a default VType.
@ SUMO_ATTR_CF_EIDM_T_REACTION
@ SUMO_ATTR_CF_EIDM_T_PERSISTENCE_ESTIMATE
@ SUMO_ATTR_CF_PWAGNER2009_TAULAST
@ SUMO_ATTR_CF_EIDM_SIG_GAP
@ SUMO_ATTR_CAR_FOLLOW_MODEL
@ SUMO_ATTR_CF_EIDM_JERK_MAX
@ SUMO_ATTR_DECEL
@ SUMO_ATTR_LCA_MAXSPEEDLATSTANDING
@ SUMO_ATTR_JM_DRIVE_AFTER_YELLOW_TIME
@ SUMO_ATTR_LCA_KEEPRIGHT_PARAM
@ SUMO_ATTR_GUISHAPE
@ SUMO_ATTR_DESIRED_MAXSPEED
@ SUMO_ATTR_JM_IGNORE_FOE_PROB
@ SUMO_ATTR_CONTAINER_CAPACITY
@ SUMO_ATTR_LCA_COOPERATIVE_PARAM
@ SUMO_ATTR_LCA_OPPOSITE_PARAM
@ SUMO_ATTR_MINGAP_LAT
@ SUMO_ATTR_EMERGENCYDECEL
@ SUMO_ATTR_CF_W99_CC3
@ SUMO_ATTR_LCA_OVERTAKE_DELTASPEED_FACTOR
@ SUMO_ATTR_HEIGHT
@ SUMO_ATTR_LCA_SUBLANE_PARAM
@ SUMO_ATTR_JM_CROSSING_GAP
@ SUMO_ATTR_CARRIAGE_LENGTH
@ SUMO_ATTR_LATALIGNMENT
@ SUMO_ATTR_CF_IDM_STEPPING
@ SUMO_ATTR_CF_IDMM_ADAPT_FACTOR
@ SUMO_ATTR_IMPATIENCE
@ SUMO_ATTR_COLLISION_MINGAP_FACTOR
@ SUMO_ATTR_VCLASS
@ SUMO_ATTR_ACCEL
@ SUMO_ATTR_BOARDING_DURATION
@ SUMO_ATTR_CF_EIDM_M_FLATNESS
@ SUMO_ATTR_CF_W99_CC2
@ SUMO_ATTR_CF_W99_CC4
@ SUMO_ATTR_JM_SIGMA_MINOR
@ SUMO_ATTR_CF_W99_CC6
@ SUMO_ATTR_PROB
@ SUMO_ATTR_CF_EIDM_M_BEGIN
@ SUMO_ATTR_CF_EIDM_T_PERSISTENCE_DRIVE
@ SUMO_ATTR_SPEEDFACTOR
@ SUMO_ATTR_CF_EIDM_SIG_LEADER
@ SUMO_ATTR_LENGTH
@ SUMO_ATTR_COLOR
A color information.
@ SUMO_ATTR_CF_PWAGNER2009_APPROB
@ SUMO_ATTR_MAXSPEED
@ SUMO_ATTR_ID
@ SUMO_ATTR_SIGMA
@ GNE_ATTR_DEFAULT_VTYPE_MODIFIED
Flag to check if a default VType was modified.
@ SUMO_ATTR_K
@ SUMO_ATTR_TMP1
@ SUMO_ATTR_OSGFILE
@ SUMO_ATTR_LCA_OVERTAKE_RIGHT
@ SUMO_ATTR_LCA_ACCEL_LAT
@ SUMO_ATTR_CF_W99_CC7
@ SUMO_ATTR_LCA_STRATEGIC_PARAM
@ SUMO_ATTR_CF_W99_CC1
@ SUMO_ATTR_TAU
@ SUMO_ATTR_IMGFILE
@ SUMO_ATTR_WIDTH
@ SUMO_ATTR_PERSON_CAPACITY
@ SUMO_ATTR_LCA_KEEPRIGHT_ACCEPTANCE_TIME
@ SUMO_ATTR_LCA_EXPERIMENTAL1
@ SUMO_ATTR_LOCOMOTIVE_LENGTH
@ SUMO_ATTR_TMP5
@ SUMO_ATTR_JM_DRIVE_RED_SPEED
@ SUMO_ATTR_LCA_TIME_TO_IMPATIENCE
@ SUMO_ATTR_JM_TIMEGAP_MINOR
@ SUMO_ATTR_CARRIAGE_GAP
@ SUMO_ATTR_CF_WIEDEMANN_ESTIMATION
@ SUMO_ATTR_LCA_SPEEDGAINRIGHT
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition ToString.h:314
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
A class that stores a 2D geometrical boundary.
Definition Boundary.h:39
static bool isValidDescription(const std::string &description)
validate input description
double getCommonAttributeDouble(SumoXMLAttr key) const
FileBucket * myFileBucket
filebucket vinculated whith this AC
static const std::string FALSE_STR
true value in string format(used for comparing boolean values in getAttribute(...))
static const std::string TRUE_STR
true value in string format (used for comparing boolean values in getAttribute(......
const std::string getID() const override
get ID (all Attribute Carriers have one)
static T parse(const std::string &string)
parses a value of type T from string (used for basic types: int, double, bool, etc....
void setCommonAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
const std::string & getTagStr() const
get tag assigned to this object in string format
Position getCommonAttributePosition(SumoXMLAttr key) const
static bool canParse(const std::string &string)
true if a value of type T can be parsed from string
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
GNENet * myNet
pointer to net
GNENet * getNet() const
get pointer to net
bool isCommonAttributeValid(SumoXMLAttr key, const std::string &value) const
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
virtual std::string getAttribute(SumoXMLAttr key) const =0
std::string getCommonAttribute(SumoXMLAttr key) const
const GNETagProperties * myTagProperty
reference to tagProperty associated with this attribute carrier
static void changeAttribute(GNEAttributeCarrier *AC, SumoXMLAttr key, const std::string &value, GNEUndoList *undoList, const bool force=false)
change attribute
bool isValidDemandElementID(const std::string &value) const
check if a new demand element ID is valid
void setDemandElementID(const std::string &newID)
set demand element id
FileBucket * getFileBucket() const override
get reference to fileBucket in which save this AC
GNEDemandElement(GNENet *net, SumoXMLTag tag)
Constructor for templates.
Problem
enum class for demandElement problems
const GNEHierarchicalContainerChildren< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
const RGBColor & getColor() const override
get color
Definition GNEVType.cpp:162
GNEMoveElement * getMoveElement() const override
methods to retrieve the elements linked to this vType
Definition GNEVType.cpp:106
Position getPositionInView() const override
Returns position of additional in view.
Definition GNEVType.cpp:177
~GNEVType()
destructor
Definition GNEVType.cpp:102
bool isAttributeEnabled(SumoXMLAttr key) const override
Definition GNEVType.cpp:923
GNELane * getFirstPathLane() const override
get first path lane
Definition GNEVType.cpp:226
SUMOVehicleClass getVClass() const override
obtain VClass related with this demand element
Definition GNEVType.cpp:156
void splitEdgeGeometry(const double splitPosition, const GNENetworkElement *originalElement, const GNENetworkElement *newElement, GNEUndoList *undoList) override
split geometry
Definition GNEVType.cpp:196
std::string getAttribute(SumoXMLAttr key) const override
inherited from GNEAttributeCarrier
Definition GNEVType.cpp:240
Parameterised * getParameters() override
get parameters associated with this vType
Definition GNEVType.cpp:112
static bool overwriteVType(GNEDemandElement *vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList *undoList)
overwrite all values of GNEVType with a SUMOVTypeParameter
Definition GNEVType.cpp:976
void fixDemandElementProblem() override
fix demand element problem
Definition GNEVType.cpp:150
double getAttributeDouble(SumoXMLAttr key) const override
Definition GNEVType.cpp:529
void writeDemandElement(OutputDevice &device) const override
write demand element element into a xml file
Definition GNEVType.cpp:124
std::string getDemandElementProblem() const override
return a string with the current demand element problem
Definition GNEVType.cpp:144
void updateDefaultVClassAttributes(const VClassDefaultValues &defaultValues)
function called after set new VClass
void drawLanePartialGL(const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront) const override
Draws partial object over lane.
Definition GNEVType.cpp:214
bool isValid(SumoXMLAttr key, const std::string &value) override
Definition GNEVType.cpp:716
bool myDefaultVehicleType
flag to check if this GNEVType is a default vehicle Type (For Vehicles, Pedestrians....
Definition GNEVType.h:205
GNELane * getLastPathLane() const override
get last path lane
Definition GNEVType.cpp:233
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition GNEVType.cpp:189
void updateGeometry() override
update pre-computed geometry information
Definition GNEVType.cpp:168
GNEVType(SumoXMLTag tag, GNENet *net)
default constructor
Definition GNEVType.cpp:34
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition GNEVType.cpp:202
Problem isDemandElementValid() const override
check if current demand element is valid to be written into XML
Definition GNEVType.cpp:137
std::string getPopUpID() const override
get PopPup ID (Used in AC Hierarchy)
Definition GNEVType.cpp:964
Position getAttributePosition(SumoXMLAttr key) const override
Definition GNEVType.cpp:576
std::string getParentName() const override
Returns the name of the parent object.
Definition GNEVType.cpp:183
std::string getHierarchyName() const override
get Hierarchy Name (Used in AC Hierarchy)
Definition GNEVType.cpp:970
void drawJunctionPartialGL(const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront) const override
Draws partial object over junction.
Definition GNEVType.cpp:220
void computePathElement() override
compute pathElement
Definition GNEVType.cpp:208
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
Definition GNEVType.cpp:582
bool myDefaultVehicleTypeModified
flag to check if this default GNEVType was modified
Definition GNEVType.h:208
const std::string & getMicrosimID() const
Returns the id of the object as known to microsim.
Stores the information about how to visualize structures.
static const std::vector< SumoXMLTag > types
type namespace
Static storage of an output device and its base (abstract) implementation.
An upper class for objects with additional parameters.
void unsetParameter(const std::string &key)
Removes a parameter.
bool hasParameter(const std::string &key) const
Returns whether the parameter is set.
virtual const std::string getParameter(const std::string &key, const std::string defaultValue="") const
Returns the value for a given key.
const Parameterised::Map & getParametersMap() const
Returns the inner key/value map.
virtual void setParameter(const std::string &key, const std::string &value)
Sets a parameter.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
double locomotiveLength
the length of the locomotive
static bool isValidLatAlignment(const std::string &val)
double width
This class' width.
SubParams cfParameter
Car-following parameter.
void write(OutputDevice &dev) const
Writes the vtype.
double defaultProbability
The probability when being added to a distribution without an explicit probability.
SUMOTime actionStepLength
The vehicle type's default actionStepLength [ms], i.e. the interval between two control actions....
bool wasSet(long long int what) const
Returns whether the given parameter was set.
double height
This class' height.
double desiredMaxSpeed
The vehicle type's desired maximum speed [m/s].
SUMOEmissionClass emissionClass
The emission class of this vehicle.
double latAlignmentOffset
(optional) The vehicle's desired lateral alignment as offset in m from center line
std::string getJMParamString(const SumoXMLAttr attr, const std::string defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
double carriageLength
the length of train carriages
std::vector< std::string > parkingBadges
the parking access rights
double length
The physical vehicle length.
double maxSpeedLat
The vehicle type's maximum lateral speed [m/s].
void initRailVisualizationParameters(const std::string fileName="")
init Rail Visualization Parameters
RGBColor color
The color.
long long int parametersSet
Information for the router which parameter were set.
double minGap
This class' free space in front of the vehicle itself.
std::string imgFile
Image file for this class.
SUMOVehicleShape shape
This class' shape.
int personCapacity
The person capacity of the vehicle.
Distribution_Parameterized speedFactor
The factor by which the maximum speed may deviate from the allowed max speed on the street.
double getLCParam(const SumoXMLAttr attr, const double defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
std::string osgFile
3D model file for this class
double maxSpeed
The vehicle type's (technical) maximum speed [m/s].
double carriageGap
the length of the gap between carriages
int containerCapacity
The container capacity of the vehicle.
SUMOTime boardingDuration
The time a person needs to board the vehicle.
double getCFParam(const SumoXMLAttr attr, const double defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
double minGapLat
The vehicle type's minimum lateral gap [m].
SUMOVehicleClass vehicleClass
The vehicle's class.
SUMOVTypeParameter(const std::string &vtid, const SUMOVehicleClass vc=SVC_IGNORING)
Constructor.
double getJMParam(const SumoXMLAttr attr, const double defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
SUMOTime loadingDuration
The time a container needs to get loaded on the vehicle.
std::string getCFParamString(const SumoXMLAttr attr, const std::string defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
std::string id
The vehicle type's id.
SumoXMLTag cfModel
The enum-representation of the car-following model to use.
std::string getLCParamString(const SumoXMLAttr attr, const std::string &defaultValue) const
Returns the named value from the map, or the default if it is not contained there.
SubParams lcParameter
Lane-changing parameter.
LatAlignmentDefinition latAlignmentProcedure
Information on how the vehicle shall choose the lateral alignment.
SubParams jmParameter
Junction-model parameter.
double impatience
The vehicle's impatience (willingness to obstruct others).
LaneChangeModel lcModel
The lane-change model to use.
static bool parseLatAlignment(const std::string &val, double &lao, LatAlignmentDefinition &lad)
Parses and validates a given latAlignment value.
static StringBijection< SumoXMLTag > CarFollowModels
car following models
static bool isValidFilename(const std::string &value)
whether the given string is a valid attribute for a filename (for example, a name)
static StringBijection< TrainType > TrainTypes
train types
static StringBijection< LaneChangeModel > LaneChangeModels
lane change models
struct for default values that depend of VClass
int personCapacity
The person capacity of the vehicle.
double carriageLength
the length of train carriages
double desiredMaxSpeed
The vehicle type's desired maximum speed [m/s].
std::string osgFile
3D model file for this class
SUMOEmissionClass emissionClass
The emission class of this vehicle.
double minGap
This class' free space in front of the vehicle itself.
int containerCapacity
The container capacity of the vehicle.
double maxSpeed
The vehicle type's maximum speed [m/s] (technical limit, not subject to speed deviation).
Distribution_Parameterized speedFactor
The factor by which the maximum speed may deviate from the allowed max speed on the street.
double length
The physical vehicle length.
SUMOVehicleShape shape
This class' shape.
LatAlignmentDefinition latAlignmentProcedure
the lateral alignment procedure
double locomotiveLength
the length of train locomotive