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-2025 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, GNEPathElement::Options::DEMAND_ELEMENT),
39 // init Rail Visualization Parameters
41}
42
43
44GNEVType::GNEVType(const std::string& vTypeID, GNENet* net, const SUMOVehicleClass& defaultVClass) :
45 GNEDemandElement(vTypeID, net, "", SUMO_TAG_VTYPE, GNEPathElement::Options::DEMAND_ELEMENT),
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, const std::string& filename) :
57 GNEDemandElement(vTypeID, net, filename, SUMO_TAG_VTYPE, GNEPathElement::Options::DEMAND_ELEMENT),
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 calibrator->getFilename(), SUMO_TAG_VTYPE, GNEPathElement::Options::DEMAND_ELEMENT),
74 // init Rail Visualization Parameters
76 id = getID();
77}
78
79
80GNEVType::GNEVType(GNENet* net, const std::string& filename, const SUMOVTypeParameter& vTypeParameter) :
81 GNEDemandElement(vTypeParameter.id, net, filename, SUMO_TAG_VTYPE, GNEPathElement::Options::DEMAND_ELEMENT),
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->getFilename(), vTypeOriginal->getTagProperty()->getTag(),
92 GNEPathElement::Options::DEMAND_ELEMENT),
93 SUMOVTypeParameter(*vTypeOriginal),
96 // change manually the ID (to avoid to use the ID of vTypeOriginal)
97 id = newVTypeID;
98 // init Rail Visualization Parameters
100}
101
102
104
105
108 return nullptr;
109}
110
111
114 return this;
115}
116
117
118const Parameterised*
120 return this;
121}
122
123
124void
126 // only write default vehicle types if it was modified
129 write(device);
130 }
131 } else {
132 write(device);
133 }
134}
135
136
139 // currently vTypes don't have problems
141}
142
143
144std::string
146 return "";
147}
148
149
150void
152 // nothing to fix
153}
154
155
158 return vehicleClass;
159}
160
161
162const RGBColor&
164 return color;
165}
166
167
168void
170 // update geometry of all childrens
171 for (const auto& i : getChildDemandElements()) {
172 i->updateGeometry();
173 }
174}
175
176
179 return Position();
180}
181
182
183std::string
185 return myNet->getMicrosimID();
186}
187
188
191 // Vehicle Types doesn't have boundaries
192 return Boundary(-0.1, -0.1, 0.1, 0.1);
193}
194
195
196void
197GNEVType::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
198 // geometry of this element cannot be splitted
199}
200
201
202void
204 // Vehicle Types aren't draw
205}
206
207
208void
210 // nothing to compute
211}
212
213
214void
215GNEVType::drawLanePartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
216 // vehicleTypes don't use drawJunctionPartialGL
217}
218
219
220void
221GNEVType::drawJunctionPartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
222 // vehicleTypes don't use drawJunctionPartialGL
223}
224
225
226GNELane*
228 // vehicle types don't use lanes
229 return nullptr;
230}
231
232
233GNELane*
235 // vehicle types don't use lanes
236 return nullptr;
237}
238
239
240std::string
242 // obtain default values depending of vehicle class
243 VClassDefaultValues defaultValues(vehicleClass);
244 switch (key) {
245 case SUMO_ATTR_ID:
246 return getMicrosimID();
247 // CFM Attributes
248 case SUMO_ATTR_ACCEL:
249 case SUMO_ATTR_DECEL:
252 case SUMO_ATTR_SIGMA:
253 case SUMO_ATTR_TAU:
254 // this CFM has default values
255 return getCFParamString(key, myTagProperty->getDefaultStringValue(key));
256 // JM Attributes
266 // this JM has default values
267 return getJMParamString(key, myTagProperty->getDefaultStringValue(key));
270 return toString(impatience);
271 } else {
272 return myTagProperty->getDefaultStringValue(SUMO_ATTR_IMPATIENCE);
273 }
274 // LCM Attributes
295 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
296 return getLCParamString(key, myTagProperty->getDefaultStringValue(key));
297 //
322 return getCFParamString(key, myTagProperty->getDefaultStringValue(key));
324 case SUMO_ATTR_TMP1:
325 case SUMO_ATTR_TMP2:
326 case SUMO_ATTR_TMP3:
327 case SUMO_ATTR_TMP4:
328 case SUMO_ATTR_TMP5:
336 case SUMO_ATTR_K:
340 return getCFParamString(key, "");
341 // Mutable values
342 case SUMO_ATTR_LENGTH:
344 return toString(length);
345 } else {
346 return toString(defaultValues.length);
347 }
348 case SUMO_ATTR_MINGAP:
350 return toString(minGap);
351 } else {
352 return toString(defaultValues.minGap);
353 }
356 return toString(maxSpeed);
357 } else {
358 return toString(defaultValues.maxSpeed);
359 }
362 return toString(speedFactor);
363 } else {
364 return toString(defaultValues.speedFactor);
365 }
369 } else {
370 return toString(defaultValues.desiredMaxSpeed);
371 }
374 return joinToString(parkingBadges, " ");
375 } else {
376 return "";
377 }
380 return toString(personCapacity);
381 } else {
382 return toString(defaultValues.personCapacity);
383 }
387 } else {
388 return toString(defaultValues.containerCapacity);
389 }
392 return osgFile;
393 } else {
394 return defaultValues.osgFile;
395 }
396 case SUMO_ATTR_COLOR:
398 return toString(color);
399 } else {
400 return "";
401 }
402 case SUMO_ATTR_VCLASS:
404 return toString(vehicleClass);
405 } else {
406 return myTagProperty->getDefaultStringValue(SUMO_ATTR_VCLASS);
407 }
410 return PollutantsInterface::getName(emissionClass);
411 } else {
412 return PollutantsInterface::getName(defaultValues.emissionClass);
413 }
417 } else {
418 return getVehicleShapeName(defaultValues.shape);
419 }
420 case SUMO_ATTR_WIDTH:
422 return toString(width);
423 } else {
424 return toString(defaultValues.width);
425 }
426 case SUMO_ATTR_HEIGHT:
428 return toString(height);
429 } else {
430 return toString(defaultValues.height);
431 }
434 return imgFile;
435 } else {
436 return myTagProperty->getDefaultStringValue(SUMO_ATTR_IMGFILE);
437 }
441 } else {
442 return myTagProperty->getDefaultStringValue(SUMO_ATTR_LANE_CHANGE_MODEL);
443 }
447 } else {
448 return myTagProperty->getDefaultStringValue(SUMO_ATTR_CAR_FOLLOW_MODEL);
449 }
453 } else {
454 return myTagProperty->getDefaultStringValue(SUMO_ATTR_BOARDING_DURATION);
455 }
459 } else {
460 return myTagProperty->getDefaultStringValue(SUMO_ATTR_LOADING_DURATION);
461 }
466 } else {
468 }
469 } else {
470 return toString(defaultValues.latAlignmentProcedure);
471 }
474 return toString(minGapLat);
475 } else {
476 return myTagProperty->getDefaultStringValue(SUMO_ATTR_MINGAP_LAT);
477 }
480 return toString(maxSpeedLat);
481 } else {
482 return myTagProperty->getDefaultStringValue(SUMO_ATTR_MAXSPEED_LAT);
483 }
487 } else {
488 return myTagProperty->getDefaultStringValue(SUMO_ATTR_ACTIONSTEPLENGTH);
489 }
490 case SUMO_ATTR_PROB:
493 } else {
494 return myTagProperty->getDefaultStringValue(SUMO_ATTR_PROB);
495 }
498 return toString(carriageLength);
499 } else {
500 return toString(defaultValues.carriageLength);
501 }
505 } else {
506 return toString(defaultValues.locomotiveLength);
507 }
510 return toString(carriageGap);
511 } else {
512 return myTagProperty->getDefaultStringValue(SUMO_ATTR_CARRIAGE_GAP);
513 }
514 // other
520 } else {
521 return FALSE_STR;
522 }
523 default:
524 return getCommonAttribute(key);
525 }
526}
527
528
529double
531 // obtain default values depending of vehicle class
532 VClassDefaultValues defaultValues(vehicleClass);
533 switch (key) {
534 case SUMO_ATTR_LENGTH:
536 return length;
537 } else {
538 return defaultValues.length;
539 }
540 case SUMO_ATTR_MINGAP:
542 return minGap;
543 } else {
544 return defaultValues.minGap;
545 }
546 case SUMO_ATTR_WIDTH:
548 return width;
549 } else {
550 return defaultValues.width;
551 }
552 case SUMO_ATTR_HEIGHT:
554 return height;
555 } else {
556 return defaultValues.height;
557 }
560 return maxSpeed;
561 } else {
562 return defaultValues.maxSpeed;
563 }
564 case SUMO_ATTR_PROB:
566 return defaultProbability;
567 } else {
568 return parse<double>(myTagProperty->getDefaultStringValue(SUMO_ATTR_PROB));
569 }
570 default:
571 return getCommonAttributeDouble(key);
572 }
573}
574
575
580
581
582void
583GNEVType::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
584 if (value == getAttribute(key)) {
585 return; //avoid needless changes, later logic relies on the fact that attributes have changed
586 }
587 switch (key) {
588 case SUMO_ATTR_ID:
589 GNEChange_Attribute::changeAttribute(this, key, value, undoList);
590 break;
591 // CFM Attributes
592 case SUMO_ATTR_ACCEL:
593 case SUMO_ATTR_DECEL:
596 case SUMO_ATTR_SIGMA:
597 case SUMO_ATTR_TAU:
599 case SUMO_ATTR_TMP1:
600 case SUMO_ATTR_TMP2:
601 case SUMO_ATTR_TMP3:
602 case SUMO_ATTR_TMP4:
603 case SUMO_ATTR_TMP5:
626 case SUMO_ATTR_K:
639 // JM Attributes
650 // LCM Attributes
671 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
672 //
673 case SUMO_ATTR_LENGTH:
674 case SUMO_ATTR_MINGAP:
678 case SUMO_ATTR_COLOR:
679 case SUMO_ATTR_VCLASS:
682 case SUMO_ATTR_WIDTH:
683 case SUMO_ATTR_HEIGHT:
695 case SUMO_ATTR_PROB:
700 // if we change the original value of a default vehicle Type, change also flag "myDefaultVehicleType"
703 }
704 GNEChange_Attribute::changeAttribute(this, key, value, undoList, true);
705 break;
708 break;
709 default:
710 setCommonAttribute(key, value, undoList);
711 break;
712 }
713}
714
715
716bool
717GNEVType::isValid(SumoXMLAttr key, const std::string& value) {
718 // a empty value is always valid except for IDs
719 if ((key != SUMO_ATTR_ID) && value.empty()) {
720 return true;
721 }
722 switch (key) {
723 case SUMO_ATTR_ID:
725 // CFM Attributes
726 case SUMO_ATTR_SIGMA:
727 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
728 case SUMO_ATTR_ACCEL:
729 case SUMO_ATTR_DECEL:
732 case SUMO_ATTR_TAU:
734 case SUMO_ATTR_TMP1:
735 case SUMO_ATTR_TMP2:
736 case SUMO_ATTR_TMP3:
737 case SUMO_ATTR_TMP4:
738 case SUMO_ATTR_TMP5:
745 case SUMO_ATTR_K:
758 return canParse<double>(value);
760 return canParse<bool>(value);
762 return canParse<int>(value) && (parse<int>(value) >= 0);
764 return canParse<double>(value) && (parse<double>(value) >= 1);
766 return canParse<double>(value) && (parse<double>(value) >= 1);
768 return canParse<double>(value) && (parse<double>(value) >= 0);
770 return canParse<double>(value) && (parse<double>(value) >= 1);
772 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
774 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
776 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
778 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
780 return canParse<double>(value) && (parse<double>(value) >= 1);
782 return canParse<double>(value) && (parse<double>(value) >= 0);
784 return canParse<double>(value) && (parse<double>(value) >= 0);
786 return canParse<double>(value) && (parse<double>(value) >= 1) && (parse<double>(value) <= 5);
788 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1.5);
790 // rail string
791 return SUMOXMLDefinitions::TrainTypes.hasString(value);
792 // JM Attributes
794 return canParse<double>(value) && (parse<double>(value) >= 0);
796 return canParse<double>(value) && (parse<double>(value) >= -1);
798 return canParse<double>(value) && (parse<double>(value) >= -1);
800 return canParse<double>(value) && (parse<double>(value) >= -1);
802 return canParse<double>(value) && (parse<double>(value) >= 0);
804 return canParse<double>(value) && (parse<double>(value) >= 0);
806 return canParse<double>(value) && (parse<double>(value) >= 0);
808 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
810 return canParse<double>(value) && (parse<double>(value) >= 0);
812 return canParse<double>(value) && (parse<double>(value) >= 0);
813 // LCM Attributes
821 return canParse<double>(value);
825 case SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE: // 0 mean disabled
826 case SUMO_ATTR_LCA_TIME_TO_IMPATIENCE: // 0 mean disabled
827 case SUMO_ATTR_LCA_OVERTAKE_RIGHT: // 0 mean disabled
828 return canParse<double>(value) && (parse<double>(value) >= 0);
834 return canParse<double>(value) && (parse<double>(value) > 0);
836 return canParse<double>(value) && (parse<double>(value) >= 0 || parse<double>(value) == -1);
838 return canParse<double>(value) && (parse<double>(value) >= -1) && (parse<double>(value) <= 1);
839 /* case SUMO_ATTR_LCA_EXPERIMENTAL1:
840 return true;
841 */
842 //
843 case SUMO_ATTR_LENGTH:
844 return canParse<double>(value) && (parse<double>(value) > 0);
845 case SUMO_ATTR_MINGAP:
846 return canParse<double>(value) && (parse<double>(value) >= 0);
848 return canParse<double>(value) && (parse<double>(value) >= 0);
852 return canParse<double>(value) && (parse<double>(value) >= 0);
853 case SUMO_ATTR_COLOR:
854 if (value.empty()) {
855 return true;
856 } else {
858 }
859 case SUMO_ATTR_VCLASS:
862 // check if given value correspond to a string of PollutantsInterface::getAllClassesStr()
863 for (const auto& eClass : PollutantsInterface::getAllClassesStr()) {
864 if (value == eClass) {
865 return true;
866 }
867 }
868 return false;
870 if (value.empty() || (value == "default")) {
871 return true;
872 } else {
874 }
875 case SUMO_ATTR_WIDTH:
876 return canParse<double>(value);
877 case SUMO_ATTR_HEIGHT:
878 return canParse<double>(value);
886 return canParse<int>(value);
888 return canParse<int>(value);
896 return canParse<double>(value);
898 return canParse<double>(value);
901 case SUMO_ATTR_PROB:
902 return canParse<double>(value) && (parse<double>(value) >= 0);
906 return canParse<double>(value) && (parse<double>(value) >= -1);
908 return canParse<double>(value) && (parse<double>(value) >= -1);
910 return canParse<double>(value) && (parse<double>(value) >= 0);
913 return canParse<bool>(value);
914 } else {
915 return false;
916 }
917 default:
918 return isCommonAttributeValid(key, value);
919 }
920}
921
922
923bool
925 switch (key) {
926 case SUMO_ATTR_ID:
927 if (id == DEFAULT_VTYPE_ID
928 || id == DEFAULT_PEDTYPE_ID
929 || id == DEFAULT_BIKETYPE_ID
930 || id == DEFAULT_TAXITYPE_ID
931 || id == DEFAULT_RAILTYPE_ID) {
932 return false;
933 } else {
934 return true;
935 }
936 case SUMO_ATTR_LENGTH:
938 case SUMO_ATTR_MINGAP:
958 default:
959 return true;
960 }
961}
962
963
964std::string
966 return getTagStr();
967}
968
969
970std::string
972 return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) ;
973}
974
975
976bool
977GNEVType::overwriteVType(GNEDemandElement* vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList* undoList) {
978 // open undo list and overwrite all values of default VType
979 undoList->begin(vType, "update default " + vType->getTagStr() + " '" + DEFAULT_VTYPE_ID + "'");
980 // CFM values
981 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_ACCEL, "").empty()) {
982 vType->setAttribute(SUMO_ATTR_ACCEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_ACCEL, 0)), undoList);
983 }
984 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_DECEL, "").empty()) {
985 vType->setAttribute(SUMO_ATTR_DECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_DECEL, 0)), undoList);
986 }
987 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_APPARENTDECEL, "").empty()) {
988 vType->setAttribute(SUMO_ATTR_APPARENTDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_APPARENTDECEL, 0)), undoList);
989 }
990 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_EMERGENCYDECEL, "").empty()) {
991 vType->setAttribute(SUMO_ATTR_EMERGENCYDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_EMERGENCYDECEL, 0)), undoList);
992 }
993 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_SIGMA, "").empty()) {
994 vType->setAttribute(SUMO_ATTR_SIGMA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_SIGMA, 0)), undoList);
995 }
996 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TAU, "").empty()) {
997 vType->setAttribute(SUMO_ATTR_TAU, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TAU, 0)), undoList);
998 }
999 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_COLLISION_MINGAP_FACTOR, "").empty()) {
1001 }
1002 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP1, "").empty()) {
1003 vType->setAttribute(SUMO_ATTR_TMP1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP1, 0)), undoList);
1004 }
1005 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP2, "").empty()) {
1006 vType->setAttribute(SUMO_ATTR_TMP2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP2, 0)), undoList);
1007 }
1008 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP3, "").empty()) {
1009 vType->setAttribute(SUMO_ATTR_TMP3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP3, 0)), undoList);
1010 }
1011 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP4, "").empty()) {
1012 vType->setAttribute(SUMO_ATTR_TMP4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP4, 0)), undoList);
1013 }
1014 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP5, "").empty()) {
1015 vType->setAttribute(SUMO_ATTR_TMP5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP5, 0)), undoList);
1016 }
1017 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_USEVEHDYNAMICS, "").empty()) {
1019 }
1020 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_MAX_VEH_PREVIEW, "").empty()) {
1022 }
1023 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_LOOK_AHEAD, "").empty()) {
1025 }
1026 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_DRIVE, "").empty()) {
1028 }
1029 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_REACTION, "").empty()) {
1031 }
1032 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_ESTIMATE, "").empty()) {
1034 }
1035 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_C_COOLNESS, "").empty()) {
1037 }
1038 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_LEADER, "").empty()) {
1040 }
1041 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_GAP, "").empty()) {
1043 }
1044 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_ERROR, "").empty()) {
1046 }
1047 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_JERK_MAX, "").empty()) {
1049 }
1050 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_EPSILON_ACC, "").empty()) {
1052 }
1053 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_ACC_MAX, "").empty()) {
1055 }
1056 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_FLATNESS, "").empty()) {
1058 }
1059 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_BEGIN, "").empty()) {
1061 }
1062 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC1, "").empty()) {
1063 vType->setAttribute(SUMO_ATTR_CF_W99_CC1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC1, 0)), undoList);
1064 }
1065 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC2, "").empty()) {
1066 vType->setAttribute(SUMO_ATTR_CF_W99_CC2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC2, 0)), undoList);
1067 }
1068 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC3, "").empty()) {
1069 vType->setAttribute(SUMO_ATTR_CF_W99_CC3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC3, 0)), undoList);
1070 }
1071 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC4, "").empty()) {
1072 vType->setAttribute(SUMO_ATTR_CF_W99_CC4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC4, 0)), undoList);
1073 }
1074 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC5, "").empty()) {
1075 vType->setAttribute(SUMO_ATTR_CF_W99_CC5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC5, 0)), undoList);
1076 }
1077 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC6, "").empty()) {
1078 vType->setAttribute(SUMO_ATTR_CF_W99_CC6, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC6, 0)), undoList);
1079 }
1080 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC7, "").empty()) {
1081 vType->setAttribute(SUMO_ATTR_CF_W99_CC7, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC7, 0)), undoList);
1082 }
1083 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC8, "").empty()) {
1084 vType->setAttribute(SUMO_ATTR_CF_W99_CC8, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC8, 0)), undoList);
1085 }
1086 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC9, "").empty()) {
1087 vType->setAttribute(SUMO_ATTR_CF_W99_CC9, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC9, 0)), undoList);
1088 }
1089 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_TAULAST, "").empty()) {
1091 }
1092 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_APPROB, "").empty()) {
1094 }
1095 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_FACTOR, "").empty()) {
1097 }
1098 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_TIME, "").empty()) {
1100 }
1101 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_SECURITY, "").empty()) {
1103 }
1104 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_ESTIMATION, "").empty()) {
1106 }
1107 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TRAIN_TYPE, "").empty()) {
1108 vType->setAttribute(SUMO_ATTR_TRAIN_TYPE, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TRAIN_TYPE, 0)), undoList);
1109 }
1110 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_K, "").empty()) {
1111 vType->setAttribute(SUMO_ATTR_K, toString(newVTypeParameter.getCFParam(SUMO_ATTR_K, 0)), undoList);
1112 }
1113 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_KERNER_PHI, "").empty()) {
1114 vType->setAttribute(SUMO_ATTR_CF_KERNER_PHI, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_KERNER_PHI, 0)), undoList);
1115 }
1116 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_DELTA, "").empty()) {
1117 vType->setAttribute(SUMO_ATTR_CF_IDM_DELTA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_IDM_DELTA, 0)), undoList);
1118 }
1119 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_STEPPING, "").empty()) {
1121 }
1122 // JM values
1123 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_CROSSING_GAP, "").empty()) {
1125 }
1126 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME, "").empty()) {
1128 }
1129 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_YELLOW_TIME, "").empty()) {
1131 }
1132 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME, "").empty()) {
1134 }
1135 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_RED_SPEED, "").empty()) {
1137 }
1138 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_PROB, "").empty()) {
1140 }
1141 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_SPEED, "").empty()) {
1143 }
1144 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_SIGMA_MINOR, "").empty()) {
1145 vType->setAttribute(SUMO_ATTR_JM_SIGMA_MINOR, toString(newVTypeParameter.getJMParam(SUMO_ATTR_JM_SIGMA_MINOR, 0)), undoList);
1146 }
1147 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_TIMEGAP_MINOR, "").empty()) {
1149 }
1150 if (newVTypeParameter.wasSet(VTYPEPARS_IMPATIENCE_SET)) {
1151 vType->setAttribute(SUMO_ATTR_IMPATIENCE, toString(newVTypeParameter.impatience), undoList);
1152 }
1153 // LCM values
1154 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_STRATEGIC_PARAM, "").empty()) {
1156 }
1157 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_COOPERATIVE_PARAM, "").empty()) {
1159 }
1160 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAIN_PARAM, "").empty()) {
1162 }
1163 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_PARAM, "").empty()) {
1165 }
1166 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SUBLANE_PARAM, "").empty()) {
1168 }
1169 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OPPOSITE_PARAM, "").empty()) {
1171 }
1172 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHY, "").empty()) {
1173 vType->setAttribute(SUMO_ATTR_LCA_PUSHY, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHY, 0)), undoList);
1174 }
1175 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHYGAP, "").empty()) {
1176 vType->setAttribute(SUMO_ATTR_LCA_PUSHYGAP, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHYGAP, 0)), undoList);
1177 }
1178 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ASSERTIVE, "").empty()) {
1179 vType->setAttribute(SUMO_ATTR_LCA_ASSERTIVE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ASSERTIVE, 0)), undoList);
1180 }
1181 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_IMPATIENCE, "").empty()) {
1182 vType->setAttribute(SUMO_ATTR_LCA_IMPATIENCE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_IMPATIENCE, 0)), undoList);
1183 }
1184 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TIME_TO_IMPATIENCE, "").empty()) {
1186 }
1187 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ACCEL_LAT, "").empty()) {
1188 vType->setAttribute(SUMO_ATTR_LCA_ACCEL_LAT, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ACCEL_LAT, 0)), undoList);
1189 }
1190 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_LOOKAHEADLEFT, "").empty()) {
1192 }
1193 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAINRIGHT, "").empty()) {
1195 }
1196 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATSTANDING, "").empty()) {
1198 }
1199 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATFACTOR, "").empty()) {
1201 }
1202 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE, "").empty()) {
1204 }
1205 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_RIGHT, "").empty()) {
1207 }
1208 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_ACCEPTANCE_TIME, "").empty()) {
1210 }
1211 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_DELTASPEED_FACTOR, "").empty()) {
1213 }
1214 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_EXPERIMENTAL1, "").empty()) {
1216 }
1217 // vType parameters
1218 if (newVTypeParameter.wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
1219 vType->setAttribute(SUMO_ATTR_VCLASS, toString(newVTypeParameter.vehicleClass), undoList);
1220 }
1221 if (newVTypeParameter.wasSet(VTYPEPARS_LENGTH_SET)) {
1222 vType->setAttribute(SUMO_ATTR_LENGTH, toString(newVTypeParameter.length), undoList);
1223 }
1224 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_SET)) {
1225 vType->setAttribute(SUMO_ATTR_MINGAP, toString(newVTypeParameter.minGap), undoList);
1226 }
1227 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_SET)) {
1228 vType->setAttribute(SUMO_ATTR_MAXSPEED, toString(newVTypeParameter.maxSpeed), undoList);
1229 }
1230 if (newVTypeParameter.wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
1231 vType->setAttribute(SUMO_ATTR_SPEEDFACTOR, toString(newVTypeParameter.speedFactor), undoList);
1232 }
1233 if (newVTypeParameter.wasSet(VTYPEPARS_DESIRED_MAXSPEED_SET)) {
1234 vType->setAttribute(SUMO_ATTR_DESIRED_MAXSPEED, toString(newVTypeParameter.desiredMaxSpeed), undoList);
1235 }
1236 if (newVTypeParameter.wasSet(VTYPEPARS_COLOR_SET)) {
1237 vType->setAttribute(SUMO_ATTR_COLOR, toString(newVTypeParameter.color), undoList);
1238 }
1239 if (newVTypeParameter.wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
1240 vType->setAttribute(SUMO_ATTR_EMISSIONCLASS, PollutantsInterface::getName(newVTypeParameter.emissionClass), undoList);
1241 }
1242 if (newVTypeParameter.wasSet(VTYPEPARS_SHAPE_SET)) {
1243 vType->setAttribute(SUMO_ATTR_GUISHAPE, getVehicleShapeName(newVTypeParameter.shape), undoList);
1244 }
1245 if (newVTypeParameter.wasSet(VTYPEPARS_WIDTH_SET)) {
1246 vType->setAttribute(SUMO_ATTR_WIDTH, toString(newVTypeParameter.width), undoList);
1247 }
1248 if (newVTypeParameter.wasSet(VTYPEPARS_HEIGHT_SET)) {
1249 vType->setAttribute(SUMO_ATTR_HEIGHT, toString(newVTypeParameter.height), undoList);
1250 }
1251 if (newVTypeParameter.wasSet(VTYPEPARS_IMGFILE_SET)) {
1252 vType->setAttribute(SUMO_ATTR_IMGFILE, toString(newVTypeParameter.imgFile), undoList);
1253 }
1254 if (newVTypeParameter.wasSet(VTYPEPARS_LANE_CHANGE_MODEL_SET)) {
1255 vType->setAttribute(SUMO_ATTR_LANE_CHANGE_MODEL, SUMOXMLDefinitions::LaneChangeModels.getString(newVTypeParameter.lcModel), undoList);
1256 }
1257 if (newVTypeParameter.wasSet(VTYPEPARS_CAR_FOLLOW_MODEL)) {
1258 vType->setAttribute(SUMO_ATTR_CAR_FOLLOW_MODEL, SUMOXMLDefinitions::CarFollowModels.getString(newVTypeParameter.cfModel), undoList);
1259 }
1260 if (newVTypeParameter.wasSet(VTYPEPARS_PERSON_CAPACITY)) {
1261 vType->setAttribute(SUMO_ATTR_PERSON_CAPACITY, toString(newVTypeParameter.personCapacity), undoList);
1262 }
1263 if (newVTypeParameter.wasSet(VTYPEPARS_CONTAINER_CAPACITY)) {
1264 vType->setAttribute(SUMO_ATTR_CONTAINER_CAPACITY, toString(newVTypeParameter.containerCapacity), undoList);
1265 }
1266 if (newVTypeParameter.wasSet(VTYPEPARS_BOARDING_DURATION)) {
1267 vType->setAttribute(SUMO_ATTR_BOARDING_DURATION, time2string(newVTypeParameter.boardingDuration), undoList);
1268 }
1269 if (newVTypeParameter.wasSet(VTYPEPARS_LOADING_DURATION)) {
1270 vType->setAttribute(SUMO_ATTR_LOADING_DURATION, time2string(newVTypeParameter.loadingDuration), undoList);
1271 }
1272 if (newVTypeParameter.wasSet(VTYPEPARS_LATALIGNMENT_SET)) {
1273 if (newVTypeParameter.latAlignmentProcedure != LatAlignmentDefinition::GIVEN) {
1274 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentProcedure), undoList);
1275 } else {
1276 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentOffset), undoList);
1277 }
1278 }
1279 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_LAT_SET)) {
1280 vType->setAttribute(SUMO_ATTR_MINGAP_LAT, toString(newVTypeParameter.minGapLat), undoList);
1281 }
1282 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_LAT_SET)) {
1283 vType->setAttribute(SUMO_ATTR_MAXSPEED_LAT, toString(newVTypeParameter.maxSpeedLat), undoList);
1284 }
1285 if (newVTypeParameter.wasSet(VTYPEPARS_ACTIONSTEPLENGTH_SET)) {
1286 vType->setAttribute(SUMO_ATTR_ACTIONSTEPLENGTH, time2string(newVTypeParameter.actionStepLength), undoList);
1287 }
1288 if (newVTypeParameter.wasSet(VTYPEPARS_PROBABILITY_SET)) {
1289 vType->setAttribute(SUMO_ATTR_PROB, toString(newVTypeParameter.defaultProbability), undoList);
1290 }
1291 if (newVTypeParameter.wasSet(VTYPEPARS_OSGFILE_SET)) {
1292 vType->setAttribute(SUMO_ATTR_OSGFILE, toString(newVTypeParameter.osgFile), undoList);
1293 }
1294 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_LENGTH))) {
1296 }
1297 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_LOCOMOTIVE_LENGTH))) {
1299 }
1300 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_GAP))) {
1301 vType->setAttribute(SUMO_ATTR_CARRIAGE_GAP, newVTypeParameter.getParameter(toString(SUMO_ATTR_CARRIAGE_GAP), ""), undoList);
1302 }
1303 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_PARKING_BADGES))) {
1304 vType->setAttribute(SUMO_ATTR_PARKING_BADGES, newVTypeParameter.getParameter(toString(SUMO_ATTR_PARKING_BADGES), ""), undoList);
1305 }
1306 // parse parameters
1307 std::string parametersStr;
1308 // Generate an string using the following structure: "key1=value1|key2=value2|...
1309 for (const auto& parameter : newVTypeParameter.getParametersMap()) {
1310 parametersStr += parameter.first + "=" + parameter.second + "|";
1311 }
1312 // remove the last "|"
1313 if (!parametersStr.empty()) {
1314 parametersStr.pop_back();
1315 }
1316 if (parametersStr != vType->getAttribute(GNE_ATTR_PARAMETERS)) {
1317 vType->setAttribute(GNE_ATTR_PARAMETERS, parametersStr, undoList);
1318 }
1319 // close undo list
1320 undoList->end();
1321 return true;
1322}
1323
1324// ===========================================================================
1325// private
1326// ===========================================================================
1327
1328void
1329GNEVType::setAttribute(SumoXMLAttr key, const std::string& value) {
1330 // obtain default values depending of vehicle class
1331 VClassDefaultValues defaultValues(vehicleClass);
1332 switch (key) {
1333 case SUMO_ATTR_ID:
1334 // update microsimID
1336 // manually change VType parameters ID
1337 id = value;
1338 break;
1339 // CFM Attributes
1340 case SUMO_ATTR_ACCEL:
1341 case SUMO_ATTR_DECEL:
1344 case SUMO_ATTR_SIGMA:
1345 case SUMO_ATTR_TAU:
1347 case SUMO_ATTR_TMP1:
1348 case SUMO_ATTR_TMP2:
1349 case SUMO_ATTR_TMP3:
1350 case SUMO_ATTR_TMP4:
1351 case SUMO_ATTR_TMP5:
1359 case SUMO_ATTR_K:
1363 // empty values means that value isn't set
1364 if (value.empty()) {
1365 const auto it = cfParameter.find(key);
1366 if (it != cfParameter.end()) {
1367 cfParameter.erase(it);
1368 }
1369 } else {
1370 cfParameter[key] = value;
1371 }
1372 break;
1397 // empty or default values means that value isn't set
1398 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == myTagProperty->getDefaultDoubleValue(key)))) {
1399 const auto it = cfParameter.find(key);
1400 if (it != cfParameter.end()) {
1401 cfParameter.erase(it);
1402 }
1403 } else {
1404 cfParameter[key] = value;
1405 }
1406 break;
1407 // JM Attributes
1417 // empty values means that value isn't set
1418 if (value.empty()) {
1419 const auto it = jmParameter.find(key);
1420 if (it != jmParameter.end()) {
1421 jmParameter.erase(it);
1422 }
1423 } else {
1424 jmParameter[key] = value;
1425 }
1426 break;
1428 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1430 // mark parameter as set
1432 } else {
1433 // set default value
1434 impatience = parse<double>(myTagProperty->getDefaultStringValue(key));
1435 // unset parameter
1437 }
1438 break;
1439 // LCM Attributes
1455
1456 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
1457 // empty values means that value isn't set
1458 if (value.empty()) {
1459 const auto it = lcParameter.find(key);
1460 if (it != lcParameter.end()) {
1461 lcParameter.erase(it);
1462 }
1463 } else {
1464 lcParameter[key] = value;
1465 }
1466 break;
1468 // empty or -1 value means that value isn't set
1469 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == -1))) {
1470 const auto it = lcParameter.find(key);
1471 if (it != lcParameter.end()) {
1472 lcParameter.erase(it);
1473 }
1474 } else {
1475 lcParameter[key] = value;
1476 }
1477 break;
1482 // empty or null values means that value isn't set
1483 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == 0))) {
1484 const auto it = lcParameter.find(key);
1485 if (it != lcParameter.end()) {
1486 lcParameter.erase(it);
1487 }
1488 } else {
1489 lcParameter[key] = value;
1490 }
1491 break;
1492 //
1493 case SUMO_ATTR_LENGTH:
1494 if (!value.empty() && (value != toString(defaultValues.length))) {
1496 // mark parameter as set
1498 } else {
1499 // set default value
1500 length = defaultValues.length;
1501 // unset parameter
1503 }
1504 break;
1505 case SUMO_ATTR_MINGAP:
1506 if (!value.empty() && (value != toString(defaultValues.minGap))) {
1508 // mark parameter as set
1510 } else {
1511 // set default value
1512 minGap = defaultValues.minGap;
1513 // unset parameter
1515 }
1516 break;
1517 case SUMO_ATTR_MAXSPEED:
1518 if (!value.empty() && (value != toString(defaultValues.maxSpeed))) {
1520 // mark parameter as set
1522 } else {
1523 // set default value
1524 maxSpeed = defaultValues.maxSpeed;
1525 // unset parameter
1527 }
1528 break;
1530 if (!value.empty() && (value != toString(defaultValues.speedFactor))) {
1531 speedFactor.parse(value, false);
1532 // mark parameter as set
1534 } else {
1535 // set default value
1536 speedFactor.parse(toString(defaultValues.speedFactor), false);
1537 // unset parameter
1539 }
1540 break;
1542 if (!value.empty() && (value != toString(defaultValues.desiredMaxSpeed))) {
1544 // mark parameter as set
1546 } else {
1547 // set default value
1548 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1549 // unset parameter
1551 }
1552 break;
1553 case SUMO_ATTR_COLOR:
1554 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1556 // mark parameter as set
1558 } else {
1559 // unset parameter
1561 }
1562 break;
1563 case SUMO_ATTR_VCLASS:
1564 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1566 // mark parameter as set
1568 } else {
1569 // set default value
1570 vehicleClass = getVehicleClassID(myTagProperty->getDefaultStringValue(key));
1571 // unset parameter
1573 }
1574 // update default values
1575 updateDefaultVClassAttributes(defaultValues);
1576 break;
1578 if (!value.empty()) {
1580 // mark parameter as set
1582 } else {
1583 // set default value
1584 parkingBadges.clear();
1585 // unset parameter
1587 }
1588 break;
1590 if (!value.empty() && (value != toString(defaultValues.emissionClass))) {
1591 emissionClass = PollutantsInterface::getClassByName(value);
1592 // mark parameter as set
1594 } else {
1595 // set default value
1596 emissionClass = defaultValues.emissionClass;
1597 // unset parameter
1599 }
1600 break;
1601 case SUMO_ATTR_GUISHAPE:
1602 if (value.empty() || (value == "default")) {
1603 // set default value
1604 shape = defaultValues.shape;
1605 // unset parameter
1607 } else if (!value.empty() && (value != SumoVehicleShapeStrings.getString(defaultValues.shape))) {
1609 // mark parameter as set
1611 } else {
1612 // set default value
1613 shape = defaultValues.shape;
1614 // unset parameter
1616 }
1617 break;
1618 case SUMO_ATTR_WIDTH:
1619 if (!value.empty() && (value != toString(defaultValues.width))) {
1621 // mark parameter as set
1623 } else {
1624 // set default value
1625 width = defaultValues.width;
1626 // unset parameter
1628 }
1629 break;
1630 case SUMO_ATTR_HEIGHT:
1631 if (!value.empty() && (value != toString(defaultValues.height))) {
1633 // mark parameter as set
1635 } else {
1636 // set default value
1637 height = defaultValues.height;
1638 // unset parameter
1640 }
1641 break;
1642 case SUMO_ATTR_IMGFILE:
1643 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1644 imgFile = value;
1645 // mark parameter as set
1647 } else {
1648 // set default value
1649 imgFile = myTagProperty->getDefaultStringValue(key);
1650 // unset parameter
1652 }
1653 break;
1655 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1657 // mark parameter as set
1659 } else {
1660 // set default value
1661 lcModel = SUMOXMLDefinitions::LaneChangeModels.get(myTagProperty->getDefaultStringValue(key));
1662 // unset parameter
1664 }
1665 break;
1667 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1669 // mark parameter as set
1671 } else {
1672 // set default value
1673 cfModel = SUMOXMLDefinitions::CarFollowModels.get(myTagProperty->getDefaultStringValue(key));
1674 // unset parameter
1676 }
1677 break;
1679 if (!value.empty() && (value != toString(defaultValues.personCapacity))) {
1681 // mark parameter as set
1683 } else {
1684 // set default value
1685 personCapacity = defaultValues.personCapacity;
1686 // unset parameter
1688 }
1689 break;
1691 if (!value.empty() && (value != toString(defaultValues.containerCapacity))) {
1693 // mark parameter as set
1695 } else {
1696 // set default value
1697 containerCapacity = defaultValues.containerCapacity;
1698 // unset parameter
1700 }
1701 break;
1703 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1705 // mark parameter as set
1707 } else {
1708 // set default value
1709 boardingDuration = myTagProperty->getDefaultTimeValue(key);
1710 // unset parameter
1712 }
1713 break;
1715 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1717 // mark parameter as set
1719 } else {
1720 // set default value
1721 loadingDuration = myTagProperty->getDefaultTimeValue(key);
1722 // unset parameter
1724 }
1725 break;
1727 if (!value.empty() && (value != toString(defaultValues.latAlignmentProcedure))) {
1729 // mark parameter as set
1731 } else {
1732 // set default value
1734 // unset parameter
1736 }
1737 break;
1739 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1741 // mark parameter as set
1743 } else {
1744 // set default value
1745 minGapLat = myTagProperty->getDefaultDoubleValue(key);
1746 // unset parameter
1748 }
1749 break;
1751 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1753 // mark parameter as set
1755 } else {
1756 // set default value
1757 maxSpeedLat = myTagProperty->getDefaultDoubleValue(key);
1758 // unset parameter
1760 }
1761 break;
1763 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1765 // mark parameter as set
1767 } else {
1768 // set default value
1769 actionStepLength = myTagProperty->getDefaultTimeValue(key);
1770 // unset parameter
1772 }
1773 break;
1774 case SUMO_ATTR_PROB:
1775 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1777 // mark parameter as set
1779 } else {
1780 // set default value
1781 defaultProbability = myTagProperty->getDefaultDoubleValue(key);
1782 // unset parameter
1784 }
1785 break;
1786 case SUMO_ATTR_OSGFILE:
1787 if (!value.empty() && (value != defaultValues.osgFile)) {
1788 osgFile = value;
1789 // mark parameter as set
1791 } else {
1792 // set default value
1793 osgFile = defaultValues.osgFile;
1794 // unset parameter
1796 }
1797 break;
1799 if (!value.empty() && (value != toString(defaultValues.carriageLength))) {
1801 // mark parameter as set
1803 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1805 } else {
1806 // set default value
1807 carriageLength = defaultValues.carriageLength;
1808 // unset parameter
1810 // remove from params (needed for writting in XML)
1812 }
1813 break;
1815 if (!value.empty() && (value != toString(defaultValues.locomotiveLength))) {
1817 // mark parameter as set
1819 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1821 } else {
1822 // set default value
1823 locomotiveLength = defaultValues.locomotiveLength;
1824 // unset parameter
1826 // remove from params (needed for writting in XML)
1828 }
1829 break;
1831 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1833 // mark parameter as set
1835 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1837 } else {
1838 // set default value
1839 carriageGap = myTagProperty->getDefaultDoubleValue(key);
1840 // unset parameter
1842 // remove from params (needed for writting in XML)
1844 }
1845 break;
1848 break;
1849 default:
1851 break;
1852 }
1853 // check if geometry must be marked as deprecated
1854 if (myTagProperty->hasAttribute(key) && (myTagProperty->getAttributeProperties(key)->requireUpdateGeometry())) {
1856 }
1857}
1858
1859
1860void
1863 length = defaultValues.length;
1864 }
1866 minGap = defaultValues.minGap;
1867 }
1869 maxSpeed = defaultValues.maxSpeed;
1870 }
1872 width = defaultValues.width;
1873 }
1875 height = defaultValues.height;
1876 }
1878 shape = defaultValues.shape;
1879 }
1881 emissionClass = defaultValues.emissionClass;
1882 }
1884 speedFactor = defaultValues.speedFactor;
1885 }
1887 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1888 }
1890 personCapacity = defaultValues.personCapacity;
1891 }
1893 containerCapacity = defaultValues.containerCapacity;
1894 }
1896 osgFile = defaultValues.osgFile;
1897 }
1899 carriageLength = defaultValues.carriageLength;
1900 }
1902 locomotiveLength = defaultValues.locomotiveLength;
1903 }
1904}
1905
1906/****************************************************************************/
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:289
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
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
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 std::string & getFilename() const
get filename in which save this AC
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
GNEDemandElement(const std::string &id, GNENet *net, const std::string &filename, SumoXMLTag tag, const GNEPathElement::Options pathOptions)
Constructor.
void setDemandElementID(const std::string &newID)
set demand element id
Problem
enum class for demandElement problems
const GNEHierarchicalContainerChildren< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
A NBNetBuilder extended by visualisation and editing capabilities.
Definition GNENet.h:42
GNEPathElement(const GNEPathElement::Options options)
constructor
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:163
GNEMoveElement * getMoveElement() const override
methods to retrieve the elements linked to this vType
Definition GNEVType.cpp:107
Position getPositionInView() const override
Returns position of additional in view.
Definition GNEVType.cpp:178
~GNEVType()
destructor
Definition GNEVType.cpp:103
bool isAttributeEnabled(SumoXMLAttr key) const override
Definition GNEVType.cpp:924
GNELane * getFirstPathLane() const override
get first path lane
Definition GNEVType.cpp:227
SUMOVehicleClass getVClass() const override
obtain VClass related with this demand element
Definition GNEVType.cpp:157
void splitEdgeGeometry(const double splitPosition, const GNENetworkElement *originalElement, const GNENetworkElement *newElement, GNEUndoList *undoList) override
split geometry
Definition GNEVType.cpp:197
std::string getAttribute(SumoXMLAttr key) const override
inherited from GNEAttributeCarrier
Definition GNEVType.cpp:241
Parameterised * getParameters() override
get parameters associated with this vType
Definition GNEVType.cpp:113
static bool overwriteVType(GNEDemandElement *vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList *undoList)
overwrite all values of GNEVType with a SUMOVTypeParameter
Definition GNEVType.cpp:977
void fixDemandElementProblem() override
fix demand element problem
Definition GNEVType.cpp:151
double getAttributeDouble(SumoXMLAttr key) const override
Definition GNEVType.cpp:530
void writeDemandElement(OutputDevice &device) const override
write demand element element into a xml file
Definition GNEVType.cpp:125
std::string getDemandElementProblem() const override
return a string with the current demand element problem
Definition GNEVType.cpp:145
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:215
bool isValid(SumoXMLAttr key, const std::string &value) override
Definition GNEVType.cpp:717
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:234
Boundary getCenteringBoundary() const override
Returns the boundary to which the view shall be centered in order to show the object.
Definition GNEVType.cpp:190
void updateGeometry() override
update pre-computed geometry information
Definition GNEVType.cpp:169
GNEVType(SumoXMLTag tag, GNENet *net)
default constructor
Definition GNEVType.cpp:34
void drawGL(const GUIVisualizationSettings &s) const override
Draws the object.
Definition GNEVType.cpp:203
Problem isDemandElementValid() const override
check if current demand element is valid to be written into XML
Definition GNEVType.cpp:138
std::string getPopUpID() const override
get PopPup ID (Used in AC Hierarchy)
Definition GNEVType.cpp:965
Position getAttributePosition(SumoXMLAttr key) const override
Definition GNEVType.cpp:577
std::string getParentName() const override
Returns the name of the parent object.
Definition GNEVType.cpp:184
std::string getHierarchyName() const override
get Hierarchy Name (Used in AC Hierarchy)
Definition GNEVType.cpp:971
void drawJunctionPartialGL(const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront) const override
Draws partial object over junction.
Definition GNEVType.cpp:221
void computePathElement() override
compute pathElement
Definition GNEVType.cpp:209
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList) override
Definition GNEVType.cpp:583
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