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),
37 myDefaultVehicleType(true),
38 myDefaultVehicleTypeModified(false) {
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),
47 myDefaultVehicleType(true),
48 myDefaultVehicleTypeModified(false) {
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),
59 myDefaultVehicleType(false),
60 myDefaultVehicleTypeModified(false) {
61 // set default vehicle class
63 // init Rail Visualization Parameters
65}
66
67
68GNEVType::GNEVType(GNENet* net, const std::string& filename, const SUMOVTypeParameter& vTypeParameter) :
69 GNEDemandElement(vTypeParameter.id, net, filename, SUMO_TAG_VTYPE, GNEPathElement::Options::DEMAND_ELEMENT),
70 SUMOVTypeParameter(vTypeParameter),
71 myDefaultVehicleType(false),
72 myDefaultVehicleTypeModified(false) {
73 // init Rail Visualization Parameters
75}
76
77
78GNEVType::GNEVType(const std::string& newVTypeID, GNENet* net, GNEVType* vTypeOriginal) :
79 GNEDemandElement(newVTypeID, net, vTypeOriginal->getFilename(), vTypeOriginal->getTagProperty()->getTag(),
80 GNEPathElement::Options::DEMAND_ELEMENT),
81 SUMOVTypeParameter(*vTypeOriginal),
82 myDefaultVehicleType(false),
83 myDefaultVehicleTypeModified(false) {
84 // change manually the ID (to avoid to use the ID of vTypeOriginal)
85 id = newVTypeID;
86 // init Rail Visualization Parameters
88}
89
90
92
93
96 return nullptr;
97}
98
99
100void
102 // only write default vehicle types if it was modified
105 write(device);
106 }
107 } else {
108 write(device);
109 }
110}
111
112
115 // currently vTypes don't have problems
117}
118
119
120std::string
122 return "";
123}
124
125
126void
128 // nothing to fix
129}
130
131
134 return vehicleClass;
135}
136
137
138const RGBColor&
140 return color;
141}
142
143
144void
146 // update geometry of all childrens
147 for (const auto& i : getChildDemandElements()) {
148 i->updateGeometry();
149 }
150}
151
152
155 return Position();
156}
157
158
159std::string
161 return myNet->getMicrosimID();
162}
163
164
167 // Vehicle Types doesn't have boundaries
168 return Boundary(-0.1, -0.1, 0.1, 0.1);
169}
170
171
172void
173GNEVType::splitEdgeGeometry(const double /*splitPosition*/, const GNENetworkElement* /*originalElement*/, const GNENetworkElement* /*newElement*/, GNEUndoList* /*undoList*/) {
174 // geometry of this element cannot be splitted
175}
176
177
178void
180 // Vehicle Types aren't draw
181}
182
183
184void
186 // nothing to compute
187}
188
189
190void
191GNEVType::drawLanePartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
192 // vehicleTypes don't use drawJunctionPartialGL
193}
194
195
196void
197GNEVType::drawJunctionPartialGL(const GUIVisualizationSettings& /*s*/, const GNESegment* /*segment*/, const double /*offsetFront*/) const {
198 // vehicleTypes don't use drawJunctionPartialGL
199}
200
201
202GNELane*
204 // vehicle types don't use lanes
205 return nullptr;
206}
207
208
209GNELane*
211 // vehicle types don't use lanes
212 return nullptr;
213}
214
215
216std::string
218 // obtain default values depending of vehicle class
219 VClassDefaultValues defaultValues(vehicleClass);
220 switch (key) {
221 case SUMO_ATTR_ID:
222 return getMicrosimID();
223 // CFM Attributes
224 case SUMO_ATTR_ACCEL:
225 case SUMO_ATTR_DECEL:
228 case SUMO_ATTR_SIGMA:
229 case SUMO_ATTR_TAU:
230 // this CFM has default values
232 // JM Attributes
242 // this JM has default values
246 return toString(impatience);
247 } else {
249 }
250 // LCM Attributes
271 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
273 //
300 case SUMO_ATTR_TMP1:
301 case SUMO_ATTR_TMP2:
302 case SUMO_ATTR_TMP3:
303 case SUMO_ATTR_TMP4:
304 case SUMO_ATTR_TMP5:
312 case SUMO_ATTR_K:
316 return getCFParamString(key, "");
317 // Mutable values
318 case SUMO_ATTR_LENGTH:
320 return toString(length);
321 } else {
322 return toString(defaultValues.length);
323 }
324 case SUMO_ATTR_MINGAP:
326 return toString(minGap);
327 } else {
328 return toString(defaultValues.minGap);
329 }
332 return toString(maxSpeed);
333 } else {
334 return toString(defaultValues.maxSpeed);
335 }
338 return toString(speedFactor);
339 } else {
340 return toString(defaultValues.speedFactor);
341 }
345 } else {
346 return toString(defaultValues.desiredMaxSpeed);
347 }
350 return joinToString(parkingBadges, " ");
351 } else {
352 return "";
353 }
356 return toString(personCapacity);
357 } else {
358 return toString(defaultValues.personCapacity);
359 }
363 } else {
364 return toString(defaultValues.containerCapacity);
365 }
368 return osgFile;
369 } else {
370 return defaultValues.osgFile;
371 }
372 case SUMO_ATTR_COLOR:
374 return toString(color);
375 } else {
376 return "";
377 }
378 case SUMO_ATTR_VCLASS:
380 return toString(vehicleClass);
381 } else {
383 }
387 } else {
388 return PollutantsInterface::getName(defaultValues.emissionClass);
389 }
393 } else {
394 return getVehicleShapeName(defaultValues.shape);
395 }
396 case SUMO_ATTR_WIDTH:
398 return toString(width);
399 } else {
400 return toString(defaultValues.width);
401 }
402 case SUMO_ATTR_HEIGHT:
404 return toString(height);
405 } else {
406 return toString(defaultValues.height);
407 }
410 return imgFile;
411 } else {
413 }
417 } else {
419 }
423 } else {
425 }
429 } else {
431 }
435 } else {
437 }
442 } else {
444 }
445 } else {
446 return toString(defaultValues.latAlignmentProcedure);
447 }
450 return toString(minGapLat);
451 } else {
453 }
456 return toString(maxSpeedLat);
457 } else {
459 }
463 } else {
465 }
466 case SUMO_ATTR_PROB:
469 } else {
471 }
474 return toString(carriageLength);
475 } else {
476 return toString(defaultValues.carriageLength);
477 }
481 } else {
482 return toString(defaultValues.locomotiveLength);
483 }
486 return toString(carriageGap);
487 } else {
489 }
490 // other
496 } else {
497 return False;
498 }
499 default:
500 return getCommonAttribute(this, key);
501 }
502}
503
504
505double
507 // obtain default values depending of vehicle class
508 VClassDefaultValues defaultValues(vehicleClass);
509 switch (key) {
510 case SUMO_ATTR_LENGTH:
512 return length;
513 } else {
514 return defaultValues.length;
515 }
516 case SUMO_ATTR_MINGAP:
518 return minGap;
519 } else {
520 return defaultValues.minGap;
521 }
522 case SUMO_ATTR_WIDTH:
524 return width;
525 } else {
526 return defaultValues.width;
527 }
528 case SUMO_ATTR_HEIGHT:
530 return height;
531 } else {
532 return defaultValues.height;
533 }
536 return maxSpeed;
537 } else {
538 return defaultValues.maxSpeed;
539 }
540 case SUMO_ATTR_PROB:
542 return defaultProbability;
543 } else {
544 return parse<double>(myTagProperty->getDefaultStringValue(SUMO_ATTR_PROB));
545 }
546 default:
547 throw InvalidArgument(getTagStr() + " doesn't have a double attribute of type '" + toString(key) + "'");
548 }
549}
550
551
554 throw InvalidArgument(getTagStr() + " doesn't have a Position attribute of type '" + toString(key) + "'");
555}
556
557
558void
559GNEVType::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) {
560 if (value == getAttribute(key)) {
561 return; //avoid needless changes, later logic relies on the fact that attributes have changed
562 }
563 switch (key) {
564 case SUMO_ATTR_ID:
565 GNEChange_Attribute::changeAttribute(this, key, value, undoList);
566 break;
567 // CFM Attributes
568 case SUMO_ATTR_ACCEL:
569 case SUMO_ATTR_DECEL:
572 case SUMO_ATTR_SIGMA:
573 case SUMO_ATTR_TAU:
575 case SUMO_ATTR_TMP1:
576 case SUMO_ATTR_TMP2:
577 case SUMO_ATTR_TMP3:
578 case SUMO_ATTR_TMP4:
579 case SUMO_ATTR_TMP5:
602 case SUMO_ATTR_K:
615 // JM Attributes
626 // LCM Attributes
647 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
648 //
649 case SUMO_ATTR_LENGTH:
650 case SUMO_ATTR_MINGAP:
654 case SUMO_ATTR_COLOR:
655 case SUMO_ATTR_VCLASS:
658 case SUMO_ATTR_WIDTH:
659 case SUMO_ATTR_HEIGHT:
671 case SUMO_ATTR_PROB:
676 // if we change the original value of a default vehicle Type, change also flag "myDefaultVehicleType"
679 }
680 GNEChange_Attribute::changeAttribute(this, key, value, undoList, true);
681 break;
684 break;
685 default:
686 setCommonAttribute(key, value, undoList);
687 break;
688 }
689}
690
691
692bool
693GNEVType::isValid(SumoXMLAttr key, const std::string& value) {
694 // a empty value is always valid except for IDs
695 if ((key != SUMO_ATTR_ID) && value.empty()) {
696 return true;
697 }
698 switch (key) {
699 case SUMO_ATTR_ID:
701 // CFM Attributes
702 case SUMO_ATTR_SIGMA:
703 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
704 case SUMO_ATTR_ACCEL:
705 case SUMO_ATTR_DECEL:
708 case SUMO_ATTR_TAU:
710 case SUMO_ATTR_TMP1:
711 case SUMO_ATTR_TMP2:
712 case SUMO_ATTR_TMP3:
713 case SUMO_ATTR_TMP4:
714 case SUMO_ATTR_TMP5:
721 case SUMO_ATTR_K:
734 return canParse<double>(value);
736 return canParse<bool>(value);
738 return canParse<int>(value) && (parse<int>(value) >= 0);
740 return canParse<double>(value) && (parse<double>(value) >= 1);
742 return canParse<double>(value) && (parse<double>(value) >= 1);
744 return canParse<double>(value) && (parse<double>(value) >= 0);
746 return canParse<double>(value) && (parse<double>(value) >= 1);
748 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
750 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
752 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
754 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
756 return canParse<double>(value) && (parse<double>(value) >= 1);
758 return canParse<double>(value) && (parse<double>(value) >= 0);
760 return canParse<double>(value) && (parse<double>(value) >= 0);
762 return canParse<double>(value) && (parse<double>(value) >= 1) && (parse<double>(value) <= 5);
764 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1.5);
766 // rail string
768 // JM Attributes
770 return canParse<double>(value) && (parse<double>(value) >= 0);
772 return canParse<double>(value) && (parse<double>(value) >= -1);
774 return canParse<double>(value) && (parse<double>(value) >= -1);
776 return canParse<double>(value) && (parse<double>(value) >= -1);
778 return canParse<double>(value) && (parse<double>(value) >= 0);
780 return canParse<double>(value) && (parse<double>(value) >= 0);
782 return canParse<double>(value) && (parse<double>(value) >= 0);
784 return canParse<double>(value) && (parse<double>(value) >= 0) && (parse<double>(value) <= 1);
786 return canParse<double>(value) && (parse<double>(value) >= 0);
788 return canParse<double>(value) && (parse<double>(value) >= 0);
789 // LCM Attributes
797 return canParse<double>(value);
801 case SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE: // 0 mean disabled
802 case SUMO_ATTR_LCA_TIME_TO_IMPATIENCE: // 0 mean disabled
803 case SUMO_ATTR_LCA_OVERTAKE_RIGHT: // 0 mean disabled
804 return canParse<double>(value) && (parse<double>(value) >= 0);
810 return canParse<double>(value) && (parse<double>(value) > 0);
812 return canParse<double>(value) && (parse<double>(value) >= 0 || parse<double>(value) == -1);
814 return canParse<double>(value) && (parse<double>(value) >= -1) && (parse<double>(value) <= 1);
815 /* case SUMO_ATTR_LCA_EXPERIMENTAL1:
816 return true;
817 */
818 //
819 case SUMO_ATTR_LENGTH:
820 return canParse<double>(value) && (parse<double>(value) > 0);
821 case SUMO_ATTR_MINGAP:
822 return canParse<double>(value) && (parse<double>(value) >= 0);
824 return canParse<double>(value) && (parse<double>(value) >= 0);
828 return canParse<double>(value) && (parse<double>(value) >= 0);
829 case SUMO_ATTR_COLOR:
830 if (value.empty()) {
831 return true;
832 } else {
833 return canParse<RGBColor>(value);
834 }
835 case SUMO_ATTR_VCLASS:
836 return canParseVehicleClasses(value);
838 // check if given value correspond to a string of PollutantsInterface::getAllClassesStr()
839 for (const auto& eClass : PollutantsInterface::getAllClassesStr()) {
840 if (value == eClass) {
841 return true;
842 }
843 }
844 return false;
846 if (value.empty() || (value == "default")) {
847 return true;
848 } else {
849 return canParseVehicleShape(value);
850 }
851 case SUMO_ATTR_WIDTH:
852 return canParse<double>(value);
853 case SUMO_ATTR_HEIGHT:
854 return canParse<double>(value);
862 return canParse<int>(value);
864 return canParse<int>(value);
866 return canParse<SUMOTime>(value) && (parse<SUMOTime>(value) >= 0);
868 return canParse<SUMOTime>(value) && (parse<SUMOTime>(value) >= 0);
872 return canParse<double>(value);
874 return canParse<double>(value);
876 return canParse<SUMOTime>(value) && (parse<SUMOTime>(value) >= 0);
877 case SUMO_ATTR_PROB:
878 return canParse<double>(value) && (parse<double>(value) >= 0);
882 return canParse<double>(value) && (parse<double>(value) >= -1);
884 return canParse<double>(value) && (parse<double>(value) >= -1);
886 return canParse<double>(value) && (parse<double>(value) >= 0);
889 return canParse<bool>(value);
890 } else {
891 return false;
892 }
893 default:
894 return isCommonValid(key, value);
895 }
896}
897
898
899bool
901 switch (key) {
902 case SUMO_ATTR_ID:
903 if (id == DEFAULT_VTYPE_ID
904 || id == DEFAULT_PEDTYPE_ID
905 || id == DEFAULT_BIKETYPE_ID
906 || id == DEFAULT_TAXITYPE_ID
907 || id == DEFAULT_RAILTYPE_ID) {
908 return false;
909 } else {
910 return true;
911 }
912 case SUMO_ATTR_LENGTH:
914 case SUMO_ATTR_MINGAP:
934 default:
935 return true;
936 }
937}
938
939
940std::string
942 return getTagStr();
943}
944
945
946std::string
948 return getTagStr() + ": " + getAttribute(SUMO_ATTR_ID) ;
949}
950
951
956
957
958bool
959GNEVType::overwriteVType(GNEDemandElement* vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList* undoList) {
960 // open undo list and overwrite all values of default VType
961 undoList->begin(vType, "update default " + vType->getTagStr() + " '" + DEFAULT_VTYPE_ID + "'");
962 // CFM values
963 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_ACCEL, "").empty()) {
964 vType->setAttribute(SUMO_ATTR_ACCEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_ACCEL, 0)), undoList);
965 }
966 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_DECEL, "").empty()) {
967 vType->setAttribute(SUMO_ATTR_DECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_DECEL, 0)), undoList);
968 }
969 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_APPARENTDECEL, "").empty()) {
970 vType->setAttribute(SUMO_ATTR_APPARENTDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_APPARENTDECEL, 0)), undoList);
971 }
972 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_EMERGENCYDECEL, "").empty()) {
973 vType->setAttribute(SUMO_ATTR_EMERGENCYDECEL, toString(newVTypeParameter.getCFParam(SUMO_ATTR_EMERGENCYDECEL, 0)), undoList);
974 }
975 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_SIGMA, "").empty()) {
976 vType->setAttribute(SUMO_ATTR_SIGMA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_SIGMA, 0)), undoList);
977 }
978 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TAU, "").empty()) {
979 vType->setAttribute(SUMO_ATTR_TAU, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TAU, 0)), undoList);
980 }
981 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_COLLISION_MINGAP_FACTOR, "").empty()) {
983 }
984 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP1, "").empty()) {
985 vType->setAttribute(SUMO_ATTR_TMP1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP1, 0)), undoList);
986 }
987 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP2, "").empty()) {
988 vType->setAttribute(SUMO_ATTR_TMP2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP2, 0)), undoList);
989 }
990 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP3, "").empty()) {
991 vType->setAttribute(SUMO_ATTR_TMP3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP3, 0)), undoList);
992 }
993 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP4, "").empty()) {
994 vType->setAttribute(SUMO_ATTR_TMP4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP4, 0)), undoList);
995 }
996 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TMP5, "").empty()) {
997 vType->setAttribute(SUMO_ATTR_TMP5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TMP5, 0)), undoList);
998 }
999 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_USEVEHDYNAMICS, "").empty()) {
1001 }
1002 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_MAX_VEH_PREVIEW, "").empty()) {
1004 }
1005 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_LOOK_AHEAD, "").empty()) {
1007 }
1008 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_DRIVE, "").empty()) {
1010 }
1011 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_REACTION, "").empty()) {
1013 }
1014 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_PERSISTENCE_ESTIMATE, "").empty()) {
1016 }
1017 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_C_COOLNESS, "").empty()) {
1019 }
1020 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_LEADER, "").empty()) {
1022 }
1023 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_GAP, "").empty()) {
1025 }
1026 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_SIG_ERROR, "").empty()) {
1028 }
1029 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_JERK_MAX, "").empty()) {
1031 }
1032 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_EPSILON_ACC, "").empty()) {
1034 }
1035 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_T_ACC_MAX, "").empty()) {
1037 }
1038 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_FLATNESS, "").empty()) {
1040 }
1041 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_EIDM_M_BEGIN, "").empty()) {
1043 }
1044 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC1, "").empty()) {
1045 vType->setAttribute(SUMO_ATTR_CF_W99_CC1, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC1, 0)), undoList);
1046 }
1047 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC2, "").empty()) {
1048 vType->setAttribute(SUMO_ATTR_CF_W99_CC2, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC2, 0)), undoList);
1049 }
1050 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC3, "").empty()) {
1051 vType->setAttribute(SUMO_ATTR_CF_W99_CC3, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC3, 0)), undoList);
1052 }
1053 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC4, "").empty()) {
1054 vType->setAttribute(SUMO_ATTR_CF_W99_CC4, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC4, 0)), undoList);
1055 }
1056 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC5, "").empty()) {
1057 vType->setAttribute(SUMO_ATTR_CF_W99_CC5, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC5, 0)), undoList);
1058 }
1059 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC6, "").empty()) {
1060 vType->setAttribute(SUMO_ATTR_CF_W99_CC6, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC6, 0)), undoList);
1061 }
1062 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC7, "").empty()) {
1063 vType->setAttribute(SUMO_ATTR_CF_W99_CC7, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC7, 0)), undoList);
1064 }
1065 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC8, "").empty()) {
1066 vType->setAttribute(SUMO_ATTR_CF_W99_CC8, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC8, 0)), undoList);
1067 }
1068 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_W99_CC9, "").empty()) {
1069 vType->setAttribute(SUMO_ATTR_CF_W99_CC9, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_W99_CC9, 0)), undoList);
1070 }
1071 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_TAULAST, "").empty()) {
1073 }
1074 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_PWAGNER2009_APPROB, "").empty()) {
1076 }
1077 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_FACTOR, "").empty()) {
1079 }
1080 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDMM_ADAPT_TIME, "").empty()) {
1082 }
1083 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_SECURITY, "").empty()) {
1085 }
1086 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_WIEDEMANN_ESTIMATION, "").empty()) {
1088 }
1089 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_TRAIN_TYPE, "").empty()) {
1090 vType->setAttribute(SUMO_ATTR_TRAIN_TYPE, toString(newVTypeParameter.getCFParam(SUMO_ATTR_TRAIN_TYPE, 0)), undoList);
1091 }
1092 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_K, "").empty()) {
1093 vType->setAttribute(SUMO_ATTR_K, toString(newVTypeParameter.getCFParam(SUMO_ATTR_K, 0)), undoList);
1094 }
1095 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_KERNER_PHI, "").empty()) {
1096 vType->setAttribute(SUMO_ATTR_CF_KERNER_PHI, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_KERNER_PHI, 0)), undoList);
1097 }
1098 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_DELTA, "").empty()) {
1099 vType->setAttribute(SUMO_ATTR_CF_IDM_DELTA, toString(newVTypeParameter.getCFParam(SUMO_ATTR_CF_IDM_DELTA, 0)), undoList);
1100 }
1101 if (!newVTypeParameter.getCFParamString(SUMO_ATTR_CF_IDM_STEPPING, "").empty()) {
1103 }
1104 // JM values
1105 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_CROSSING_GAP, "").empty()) {
1107 }
1108 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_KEEPCLEAR_TIME, "").empty()) {
1110 }
1111 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_YELLOW_TIME, "").empty()) {
1113 }
1114 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_AFTER_RED_TIME, "").empty()) {
1116 }
1117 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_DRIVE_RED_SPEED, "").empty()) {
1119 }
1120 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_PROB, "").empty()) {
1122 }
1123 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_IGNORE_FOE_SPEED, "").empty()) {
1125 }
1126 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_SIGMA_MINOR, "").empty()) {
1127 vType->setAttribute(SUMO_ATTR_JM_SIGMA_MINOR, toString(newVTypeParameter.getJMParam(SUMO_ATTR_JM_SIGMA_MINOR, 0)), undoList);
1128 }
1129 if (!newVTypeParameter.getJMParamString(SUMO_ATTR_JM_TIMEGAP_MINOR, "").empty()) {
1131 }
1132 if (newVTypeParameter.wasSet(VTYPEPARS_IMPATIENCE_SET)) {
1133 vType->setAttribute(SUMO_ATTR_IMPATIENCE, toString(newVTypeParameter.impatience), undoList);
1134 }
1135 // LCM values
1136 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_STRATEGIC_PARAM, "").empty()) {
1138 }
1139 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_COOPERATIVE_PARAM, "").empty()) {
1141 }
1142 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAIN_PARAM, "").empty()) {
1144 }
1145 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_PARAM, "").empty()) {
1147 }
1148 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SUBLANE_PARAM, "").empty()) {
1150 }
1151 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OPPOSITE_PARAM, "").empty()) {
1153 }
1154 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHY, "").empty()) {
1155 vType->setAttribute(SUMO_ATTR_LCA_PUSHY, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHY, 0)), undoList);
1156 }
1157 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_PUSHYGAP, "").empty()) {
1158 vType->setAttribute(SUMO_ATTR_LCA_PUSHYGAP, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_PUSHYGAP, 0)), undoList);
1159 }
1160 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ASSERTIVE, "").empty()) {
1161 vType->setAttribute(SUMO_ATTR_LCA_ASSERTIVE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ASSERTIVE, 0)), undoList);
1162 }
1163 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_IMPATIENCE, "").empty()) {
1164 vType->setAttribute(SUMO_ATTR_LCA_IMPATIENCE, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_IMPATIENCE, 0)), undoList);
1165 }
1166 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TIME_TO_IMPATIENCE, "").empty()) {
1168 }
1169 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_ACCEL_LAT, "").empty()) {
1170 vType->setAttribute(SUMO_ATTR_LCA_ACCEL_LAT, toString(newVTypeParameter.getLCParam(SUMO_ATTR_LCA_ACCEL_LAT, 0)), undoList);
1171 }
1172 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_LOOKAHEADLEFT, "").empty()) {
1174 }
1175 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_SPEEDGAINRIGHT, "").empty()) {
1177 }
1178 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATSTANDING, "").empty()) {
1180 }
1181 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_MAXSPEEDLATFACTOR, "").empty()) {
1183 }
1184 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_TURN_ALIGNMENT_DISTANCE, "").empty()) {
1186 }
1187 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_RIGHT, "").empty()) {
1189 }
1190 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_KEEPRIGHT_ACCEPTANCE_TIME, "").empty()) {
1192 }
1193 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_OVERTAKE_DELTASPEED_FACTOR, "").empty()) {
1195 }
1196 if (!newVTypeParameter.getLCParamString(SUMO_ATTR_LCA_EXPERIMENTAL1, "").empty()) {
1198 }
1199 // vType parameters
1200 if (newVTypeParameter.wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
1201 vType->setAttribute(SUMO_ATTR_VCLASS, toString(newVTypeParameter.vehicleClass), undoList);
1202 }
1203 if (newVTypeParameter.wasSet(VTYPEPARS_LENGTH_SET)) {
1204 vType->setAttribute(SUMO_ATTR_LENGTH, toString(newVTypeParameter.length), undoList);
1205 }
1206 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_SET)) {
1207 vType->setAttribute(SUMO_ATTR_MINGAP, toString(newVTypeParameter.minGap), undoList);
1208 }
1209 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_SET)) {
1210 vType->setAttribute(SUMO_ATTR_MAXSPEED, toString(newVTypeParameter.maxSpeed), undoList);
1211 }
1212 if (newVTypeParameter.wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
1213 vType->setAttribute(SUMO_ATTR_SPEEDFACTOR, toString(newVTypeParameter.speedFactor), undoList);
1214 }
1215 if (newVTypeParameter.wasSet(VTYPEPARS_DESIRED_MAXSPEED_SET)) {
1216 vType->setAttribute(SUMO_ATTR_DESIRED_MAXSPEED, toString(newVTypeParameter.desiredMaxSpeed), undoList);
1217 }
1218 if (newVTypeParameter.wasSet(VTYPEPARS_COLOR_SET)) {
1219 vType->setAttribute(SUMO_ATTR_COLOR, toString(newVTypeParameter.color), undoList);
1220 }
1221 if (newVTypeParameter.wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
1223 }
1224 if (newVTypeParameter.wasSet(VTYPEPARS_SHAPE_SET)) {
1225 vType->setAttribute(SUMO_ATTR_GUISHAPE, getVehicleShapeName(newVTypeParameter.shape), undoList);
1226 }
1227 if (newVTypeParameter.wasSet(VTYPEPARS_WIDTH_SET)) {
1228 vType->setAttribute(SUMO_ATTR_WIDTH, toString(newVTypeParameter.width), undoList);
1229 }
1230 if (newVTypeParameter.wasSet(VTYPEPARS_HEIGHT_SET)) {
1231 vType->setAttribute(SUMO_ATTR_HEIGHT, toString(newVTypeParameter.height), undoList);
1232 }
1233 if (newVTypeParameter.wasSet(VTYPEPARS_IMGFILE_SET)) {
1234 vType->setAttribute(SUMO_ATTR_IMGFILE, toString(newVTypeParameter.imgFile), undoList);
1235 }
1236 if (newVTypeParameter.wasSet(VTYPEPARS_LANE_CHANGE_MODEL_SET)) {
1237 vType->setAttribute(SUMO_ATTR_LANE_CHANGE_MODEL, SUMOXMLDefinitions::LaneChangeModels.getString(newVTypeParameter.lcModel), undoList);
1238 }
1239 if (newVTypeParameter.wasSet(VTYPEPARS_CAR_FOLLOW_MODEL)) {
1240 vType->setAttribute(SUMO_ATTR_CAR_FOLLOW_MODEL, SUMOXMLDefinitions::CarFollowModels.getString(newVTypeParameter.cfModel), undoList);
1241 }
1242 if (newVTypeParameter.wasSet(VTYPEPARS_PERSON_CAPACITY)) {
1243 vType->setAttribute(SUMO_ATTR_PERSON_CAPACITY, toString(newVTypeParameter.personCapacity), undoList);
1244 }
1245 if (newVTypeParameter.wasSet(VTYPEPARS_CONTAINER_CAPACITY)) {
1246 vType->setAttribute(SUMO_ATTR_CONTAINER_CAPACITY, toString(newVTypeParameter.containerCapacity), undoList);
1247 }
1248 if (newVTypeParameter.wasSet(VTYPEPARS_BOARDING_DURATION)) {
1249 vType->setAttribute(SUMO_ATTR_BOARDING_DURATION, time2string(newVTypeParameter.boardingDuration), undoList);
1250 }
1251 if (newVTypeParameter.wasSet(VTYPEPARS_LOADING_DURATION)) {
1252 vType->setAttribute(SUMO_ATTR_LOADING_DURATION, time2string(newVTypeParameter.loadingDuration), undoList);
1253 }
1254 if (newVTypeParameter.wasSet(VTYPEPARS_LATALIGNMENT_SET)) {
1255 if (newVTypeParameter.latAlignmentProcedure != LatAlignmentDefinition::GIVEN) {
1256 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentProcedure), undoList);
1257 } else {
1258 vType->setAttribute(SUMO_ATTR_LATALIGNMENT, toString(newVTypeParameter.latAlignmentOffset), undoList);
1259 }
1260 }
1261 if (newVTypeParameter.wasSet(VTYPEPARS_MINGAP_LAT_SET)) {
1262 vType->setAttribute(SUMO_ATTR_MINGAP_LAT, toString(newVTypeParameter.minGapLat), undoList);
1263 }
1264 if (newVTypeParameter.wasSet(VTYPEPARS_MAXSPEED_LAT_SET)) {
1265 vType->setAttribute(SUMO_ATTR_MAXSPEED_LAT, toString(newVTypeParameter.maxSpeedLat), undoList);
1266 }
1267 if (newVTypeParameter.wasSet(VTYPEPARS_ACTIONSTEPLENGTH_SET)) {
1268 vType->setAttribute(SUMO_ATTR_ACTIONSTEPLENGTH, time2string(newVTypeParameter.actionStepLength), undoList);
1269 }
1270 if (newVTypeParameter.wasSet(VTYPEPARS_PROBABILITY_SET)) {
1271 vType->setAttribute(SUMO_ATTR_PROB, toString(newVTypeParameter.defaultProbability), undoList);
1272 }
1273 if (newVTypeParameter.wasSet(VTYPEPARS_OSGFILE_SET)) {
1274 vType->setAttribute(SUMO_ATTR_OSGFILE, toString(newVTypeParameter.osgFile), undoList);
1275 }
1276 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_LENGTH))) {
1278 }
1279 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_LOCOMOTIVE_LENGTH))) {
1281 }
1282 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_CARRIAGE_GAP))) {
1283 vType->setAttribute(SUMO_ATTR_CARRIAGE_GAP, newVTypeParameter.getParameter(toString(SUMO_ATTR_CARRIAGE_GAP), ""), undoList);
1284 }
1285 if (newVTypeParameter.hasParameter(toString(SUMO_ATTR_PARKING_BADGES))) {
1286 vType->setAttribute(SUMO_ATTR_PARKING_BADGES, newVTypeParameter.getParameter(toString(SUMO_ATTR_PARKING_BADGES), ""), undoList);
1287 }
1288 // parse parameters
1289 std::string parametersStr;
1290 // Generate an string using the following structure: "key1=value1|key2=value2|...
1291 for (const auto& parameter : newVTypeParameter.getParametersMap()) {
1292 parametersStr += parameter.first + "=" + parameter.second + "|";
1293 }
1294 // remove the last "|"
1295 if (!parametersStr.empty()) {
1296 parametersStr.pop_back();
1297 }
1298 if (parametersStr != vType->getAttribute(GNE_ATTR_PARAMETERS)) {
1299 vType->setAttribute(GNE_ATTR_PARAMETERS, parametersStr, undoList);
1300 }
1301 // close undo list
1302 undoList->end();
1303 return true;
1304}
1305
1306// ===========================================================================
1307// private
1308// ===========================================================================
1309
1310void
1311GNEVType::setAttribute(SumoXMLAttr key, const std::string& value) {
1312 // obtain default values depending of vehicle class
1313 VClassDefaultValues defaultValues(vehicleClass);
1314 switch (key) {
1315 case SUMO_ATTR_ID:
1316 // update microsimID
1317 setDemandElementID(value);
1318 // manually change VType parameters ID
1319 id = value;
1320 break;
1321 // CFM Attributes
1322 case SUMO_ATTR_ACCEL:
1323 case SUMO_ATTR_DECEL:
1326 case SUMO_ATTR_SIGMA:
1327 case SUMO_ATTR_TAU:
1329 case SUMO_ATTR_TMP1:
1330 case SUMO_ATTR_TMP2:
1331 case SUMO_ATTR_TMP3:
1332 case SUMO_ATTR_TMP4:
1333 case SUMO_ATTR_TMP5:
1341 case SUMO_ATTR_K:
1345 // empty values means that value isn't set
1346 if (value.empty()) {
1347 const auto it = cfParameter.find(key);
1348 if (it != cfParameter.end()) {
1349 cfParameter.erase(it);
1350 }
1351 } else {
1352 cfParameter[key] = value;
1353 }
1354 break;
1379 // empty or default values means that value isn't set
1380 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == myTagProperty->getDefaultDoubleValue(key)))) {
1381 const auto it = cfParameter.find(key);
1382 if (it != cfParameter.end()) {
1383 cfParameter.erase(it);
1384 }
1385 } else {
1386 cfParameter[key] = value;
1387 }
1388 break;
1389 // JM Attributes
1399 // empty values means that value isn't set
1400 if (value.empty()) {
1401 const auto it = jmParameter.find(key);
1402 if (it != jmParameter.end()) {
1403 jmParameter.erase(it);
1404 }
1405 } else {
1406 jmParameter[key] = value;
1407 }
1408 break;
1410 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1411 impatience = parse<double>(value);
1412 // mark parameter as set
1414 } else {
1415 // set default value
1416 impatience = parse<double>(myTagProperty->getDefaultStringValue(key));
1417 // unset parameter
1418 parametersSet &= ~VTYPEPARS_IMPATIENCE_SET;
1419 }
1420 break;
1421 // LCM Attributes
1437
1438 /* case SUMO_ATTR_LCA_EXPERIMENTAL1: */
1439 // empty values means that value isn't set
1440 if (value.empty()) {
1441 const auto it = lcParameter.find(key);
1442 if (it != lcParameter.end()) {
1443 lcParameter.erase(it);
1444 }
1445 } else {
1446 lcParameter[key] = value;
1447 }
1448 break;
1450 // empty or -1 value means that value isn't set
1451 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == -1))) {
1452 const auto it = lcParameter.find(key);
1453 if (it != lcParameter.end()) {
1454 lcParameter.erase(it);
1455 }
1456 } else {
1457 lcParameter[key] = value;
1458 }
1459 break;
1464 // empty or null values means that value isn't set
1465 if (value.empty() || (canParse<double>(value) && (parse<double>(value) == 0))) {
1466 const auto it = lcParameter.find(key);
1467 if (it != lcParameter.end()) {
1468 lcParameter.erase(it);
1469 }
1470 } else {
1471 lcParameter[key] = value;
1472 }
1473 break;
1474 //
1475 case SUMO_ATTR_LENGTH:
1476 if (!value.empty() && (value != toString(defaultValues.length))) {
1477 length = parse<double>(value);
1478 // mark parameter as set
1480 } else {
1481 // set default value
1482 length = defaultValues.length;
1483 // unset parameter
1484 parametersSet &= ~VTYPEPARS_LENGTH_SET;
1485 }
1486 break;
1487 case SUMO_ATTR_MINGAP:
1488 if (!value.empty() && (value != toString(defaultValues.minGap))) {
1489 minGap = parse<double>(value);
1490 // mark parameter as set
1492 } else {
1493 // set default value
1494 minGap = defaultValues.minGap;
1495 // unset parameter
1496 parametersSet &= ~VTYPEPARS_MINGAP_SET;
1497 }
1498 break;
1499 case SUMO_ATTR_MAXSPEED:
1500 if (!value.empty() && (value != toString(defaultValues.maxSpeed))) {
1501 maxSpeed = parse<double>(value);
1502 // mark parameter as set
1504 } else {
1505 // set default value
1506 maxSpeed = defaultValues.maxSpeed;
1507 // unset parameter
1508 parametersSet &= ~VTYPEPARS_MAXSPEED_SET;
1509 }
1510 break;
1512 if (!value.empty() && (value != toString(defaultValues.speedFactor))) {
1513 speedFactor.parse(value, false);
1514 // mark parameter as set
1516 } else {
1517 // set default value
1518 speedFactor.parse(toString(defaultValues.speedFactor), false);
1519 // unset parameter
1520 parametersSet &= ~VTYPEPARS_SPEEDFACTOR_SET;
1521 }
1522 break;
1524 if (!value.empty() && (value != toString(defaultValues.desiredMaxSpeed))) {
1525 desiredMaxSpeed = parse<double>(value);
1526 // mark parameter as set
1528 } else {
1529 // set default value
1530 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1531 // unset parameter
1532 parametersSet &= ~VTYPEPARS_DESIRED_MAXSPEED_SET;
1533 }
1534 break;
1535 case SUMO_ATTR_COLOR:
1536 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1537 color = parse<RGBColor>(value);
1538 // mark parameter as set
1540 } else {
1541 // unset parameter
1542 parametersSet &= ~VTYPEPARS_COLOR_SET;
1543 }
1544 break;
1545 case SUMO_ATTR_VCLASS:
1546 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1548 // mark parameter as set
1550 } else {
1551 // set default value
1553 // unset parameter
1554 parametersSet &= ~VTYPEPARS_VEHICLECLASS_SET;
1555 }
1556 // update default values
1557 updateDefaultVClassAttributes(defaultValues);
1558 break;
1560 if (!value.empty()) {
1561 parkingBadges = parse<std::vector<std::string>>(value);
1562 // mark parameter as set
1564 } else {
1565 // set default value
1566 parkingBadges.clear();
1567 // unset parameter
1568 parametersSet &= ~VTYPEPARS_PARKING_BADGES_SET;
1569 }
1570 break;
1572 if (!value.empty() && (value != toString(defaultValues.emissionClass))) {
1574 // mark parameter as set
1576 } else {
1577 // set default value
1578 emissionClass = defaultValues.emissionClass;
1579 // unset parameter
1580 parametersSet &= ~VTYPEPARS_EMISSIONCLASS_SET;
1581 }
1582 break;
1583 case SUMO_ATTR_GUISHAPE:
1584 if (value.empty() || (value == "default")) {
1585 // set default value
1586 shape = defaultValues.shape;
1587 // unset parameter
1588 parametersSet &= ~VTYPEPARS_SHAPE_SET;
1589 } else if (!value.empty() && (value != SumoVehicleShapeStrings.getString(defaultValues.shape))) {
1590 shape = getVehicleShapeID(value);
1591 // mark parameter as set
1593 } else {
1594 // set default value
1595 shape = defaultValues.shape;
1596 // unset parameter
1597 parametersSet &= ~VTYPEPARS_SHAPE_SET;
1598 }
1599 break;
1600 case SUMO_ATTR_WIDTH:
1601 if (!value.empty() && (value != toString(defaultValues.width))) {
1602 width = parse<double>(value);
1603 // mark parameter as set
1605 } else {
1606 // set default value
1607 width = defaultValues.width;
1608 // unset parameter
1609 parametersSet &= ~VTYPEPARS_WIDTH_SET;
1610 }
1611 break;
1612 case SUMO_ATTR_HEIGHT:
1613 if (!value.empty() && (value != toString(defaultValues.height))) {
1614 height = parse<double>(value);
1615 // mark parameter as set
1617 } else {
1618 // set default value
1619 height = defaultValues.height;
1620 // unset parameter
1621 parametersSet &= ~VTYPEPARS_HEIGHT_SET;
1622 }
1623 break;
1624 case SUMO_ATTR_IMGFILE:
1625 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1626 imgFile = value;
1627 // mark parameter as set
1629 } else {
1630 // set default value
1632 // unset parameter
1633 parametersSet &= ~VTYPEPARS_IMGFILE_SET;
1634 }
1635 break;
1637 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1639 // mark parameter as set
1641 } else {
1642 // set default value
1644 // unset parameter
1645 parametersSet &= ~VTYPEPARS_LANE_CHANGE_MODEL_SET;
1646 }
1647 break;
1649 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1651 // mark parameter as set
1653 } else {
1654 // set default value
1656 // unset parameter
1657 parametersSet &= ~VTYPEPARS_CAR_FOLLOW_MODEL;
1658 }
1659 break;
1661 if (!value.empty() && (value != toString(defaultValues.personCapacity))) {
1662 personCapacity = parse<int>(value);
1663 // mark parameter as set
1665 } else {
1666 // set default value
1667 personCapacity = defaultValues.personCapacity;
1668 // unset parameter
1669 parametersSet &= ~VTYPEPARS_PERSON_CAPACITY;
1670 }
1671 break;
1673 if (!value.empty() && (value != toString(defaultValues.containerCapacity))) {
1674 containerCapacity = parse<int>(value);
1675 // mark parameter as set
1677 } else {
1678 // set default value
1679 containerCapacity = defaultValues.containerCapacity;
1680 // unset parameter
1681 parametersSet &= ~VTYPEPARS_CONTAINER_CAPACITY;
1682 }
1683 break;
1685 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1687 // mark parameter as set
1689 } else {
1690 // set default value
1692 // unset parameter
1693 parametersSet &= ~VTYPEPARS_BOARDING_DURATION;
1694 }
1695 break;
1697 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1699 // mark parameter as set
1701 } else {
1702 // set default value
1704 // unset parameter
1705 parametersSet &= ~VTYPEPARS_LOADING_DURATION;
1706 }
1707 break;
1709 if (!value.empty() && (value != toString(defaultValues.latAlignmentProcedure))) {
1711 // mark parameter as set
1713 } else {
1714 // set default value
1716 // unset parameter
1717 parametersSet &= ~VTYPEPARS_LATALIGNMENT_SET;
1718 }
1719 break;
1721 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1722 minGapLat = parse<double>(value);
1723 // mark parameter as set
1725 } else {
1726 // set default value
1728 // unset parameter
1729 parametersSet &= ~VTYPEPARS_MINGAP_LAT_SET;
1730 }
1731 break;
1733 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1734 maxSpeedLat = parse<double>(value);
1735 // mark parameter as set
1737 } else {
1738 // set default value
1740 // unset parameter
1741 parametersSet &= ~VTYPEPARS_MAXSPEED_LAT_SET;
1742 }
1743 break;
1745 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1747 // mark parameter as set
1749 } else {
1750 // set default value
1752 // unset parameter
1753 parametersSet &= ~VTYPEPARS_ACTIONSTEPLENGTH_SET;
1754 }
1755 break;
1756 case SUMO_ATTR_PROB:
1757 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1758 defaultProbability = parse<double>(value);
1759 // mark parameter as set
1761 } else {
1762 // set default value
1764 // unset parameter
1765 parametersSet &= ~VTYPEPARS_PROBABILITY_SET;
1766 }
1767 break;
1768 case SUMO_ATTR_OSGFILE:
1769 if (!value.empty() && (value != defaultValues.osgFile)) {
1770 osgFile = value;
1771 // mark parameter as set
1773 } else {
1774 // set default value
1775 osgFile = defaultValues.osgFile;
1776 // unset parameter
1777 parametersSet &= ~VTYPEPARS_OSGFILE_SET;
1778 }
1779 break;
1781 if (!value.empty() && (value != toString(defaultValues.carriageLength))) {
1782 carriageLength = parse<double>(value);
1783 // mark parameter as set
1785 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1787 } else {
1788 // set default value
1789 carriageLength = defaultValues.carriageLength;
1790 // unset parameter
1791 parametersSet &= ~VTYPEPARS_CARRIAGE_LENGTH_SET;
1792 // remove from params (needed for writting in XML)
1794 }
1795 break;
1797 if (!value.empty() && (value != toString(defaultValues.locomotiveLength))) {
1798 locomotiveLength = parse<double>(value);
1799 // mark parameter as set
1801 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1803 } else {
1804 // set default value
1805 locomotiveLength = defaultValues.locomotiveLength;
1806 // unset parameter
1807 parametersSet &= ~VTYPEPARS_LOCOMOTIVE_LENGTH_SET;
1808 // remove from params (needed for writting in XML)
1810 }
1811 break;
1813 if (!value.empty() && (value != myTagProperty->getDefaultStringValue(key))) {
1814 carriageGap = parse<double>(value);
1815 // mark parameter as set
1817 // set parameter in SUMOVTypeParameter (needed for writting in XML)
1819 } else {
1820 // set default value
1822 // unset parameter
1823 parametersSet &= ~VTYPEPARS_CARRIAGE_GAP_SET;
1824 // remove from params (needed for writting in XML)
1826 }
1827 break;
1829 myDefaultVehicleTypeModified = parse<bool>(value);
1830 break;
1831 default:
1832 setCommonAttribute(this, key, value);
1833 break;
1834 }
1835 // check if geometry must be marked as deprecated
1836 if (myTagProperty->hasAttribute(key) && (myTagProperty->getAttributeProperties(key)->requireUpdateGeometry())) {
1838 }
1839}
1840
1841
1842void
1844 // vehicleTypes cannot be moved
1845}
1846
1847
1848void
1849GNEVType::commitMoveShape(const GNEMoveResult& /*moveResult*/, GNEUndoList* /*undoList*/) {
1850 // vehicleTypes cannot be moved
1851}
1852
1853
1854void
1857 length = defaultValues.length;
1858 }
1860 minGap = defaultValues.minGap;
1861 }
1863 maxSpeed = defaultValues.maxSpeed;
1864 }
1866 width = defaultValues.width;
1867 }
1869 height = defaultValues.height;
1870 }
1872 shape = defaultValues.shape;
1873 }
1875 emissionClass = defaultValues.emissionClass;
1876 }
1878 speedFactor = defaultValues.speedFactor;
1879 }
1881 desiredMaxSpeed = defaultValues.desiredMaxSpeed;
1882 }
1884 personCapacity = defaultValues.personCapacity;
1885 }
1887 containerCapacity = defaultValues.containerCapacity;
1888 }
1890 osgFile = defaultValues.osgFile;
1891 }
1893 carriageLength = defaultValues.carriageLength;
1894 }
1896 locomotiveLength = defaultValues.locomotiveLength;
1897 }
1898}
1899
1900/****************************************************************************/
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:283
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
void parse(const std::string &description, const bool hardFail)
Overwrite by parsable distribution description.
static bool isValidDescription(const std::string &description)
validate input description
std::string getCommonAttribute(const Parameterised *parameterised, SumoXMLAttr key) const
void setCommonAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
const std::string & getTagStr() const
get tag assigned to this object in string format
GNENet * myNet
pointer to net
bool isCommonValid(SumoXMLAttr key, const std::string &value) const
static const std::string False
true value in string format(used for comparing boolean values in getAttribute(...))
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
virtual std::string getAttribute(SumoXMLAttr key) const =0
void setDemandElementID(const std::string &newID)
set demand element id
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform demand element changes
Problem
enum class for demandElement problems
const GNEHierarchicalContainerChildren< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition GNELane.h:46
move operation
move result
A NBNetBuilder extended by visualisation and editing capabilities.
Definition GNENet.h:42
double getDefaultDoubleValue(SumoXMLAttr attr) const
get default double value
SUMOTime getDefaultTimeValue(SumoXMLAttr attr) const
get default time value
const std::vector< const GNEAttributeProperties * > & getAttributeProperties() const
get all attribute properties
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
const std::string & getDefaultStringValue(SumoXMLAttr attr) const
default values
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...
Problem isDemandElementValid() const
check if current demand element is valid to be written into XML
Definition GNEVType.cpp:114
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
Definition GNEVType.cpp:947
void updateGeometry()
update pre-computed geometry information
Definition GNEVType.cpp:145
std::string getParentName() const
Returns the name of the parent object.
Definition GNEVType.cpp:160
~GNEVType()
destructor
Definition GNEVType.cpp:91
bool isValid(SumoXMLAttr key, const std::string &value)
method for checking if the key and their conrrespond attribute are valids
Definition GNEVType.cpp:693
void drawLanePartialGL(const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront) const
Draws partial object over lane.
Definition GNEVType.cpp:191
GNEMoveOperation * getMoveOperation()
get move operation
Definition GNEVType.cpp:95
Position getPositionInView() const
Returns position of additional in view.
Definition GNEVType.cpp:154
static bool overwriteVType(GNEDemandElement *vType, const SUMOVTypeParameter newVTypeParameter, GNEUndoList *undoList)
overwrite all values of GNEVType with a SUMOVTypeParameter
Definition GNEVType.cpp:959
bool isAttributeEnabled(SumoXMLAttr key) const
Definition GNEVType.cpp:900
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
method for setting the attribute and letting the object perform demand element changes
Definition GNEVType.cpp:559
void updateDefaultVClassAttributes(const VClassDefaultValues &defaultValues)
function called after set new VClass
void commitMoveShape(const GNEMoveResult &moveResult, GNEUndoList *undoList)
commit move shape
GNELane * getFirstPathLane() const
get first path lane
Definition GNEVType.cpp:203
GNELane * getLastPathLane() const
get last path lane
Definition GNEVType.cpp:210
void splitEdgeGeometry(const double splitPosition, const GNENetworkElement *originalElement, const GNENetworkElement *newElement, GNEUndoList *undoList)
split geometry
Definition GNEVType.cpp:173
void writeDemandElement(OutputDevice &device) const
write demand element element into a xml file
Definition GNEVType.cpp:101
bool myDefaultVehicleType
flag to check if this GNEVType is a default vehicle Type (For Vehicles, Pedestrians....
Definition GNEVType.h:195
const RGBColor & getColor() const
get color
Definition GNEVType.cpp:139
std::string getDemandElementProblem() const
return a string with the current demand element problem
Definition GNEVType.cpp:121
const Parameterised::Map & getACParametersMap() const
get parameters map
Definition GNEVType.cpp:953
void fixDemandElementProblem()
fix demand element problem
Definition GNEVType.cpp:127
void setMoveShape(const GNEMoveResult &moveResult)
set move shape
GNEVType(SumoXMLTag tag, GNENet *net)
default constructor
Definition GNEVType.cpp:34
Position getAttributePosition(SumoXMLAttr key) const
Definition GNEVType.cpp:553
double getAttributeDouble(SumoXMLAttr key) const
Definition GNEVType.cpp:506
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Definition GNEVType.cpp:179
std::string getAttribute(SumoXMLAttr key) const
inherited from GNEAttributeCarrier
Definition GNEVType.cpp:217
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
Definition GNEVType.cpp:166
void computePathElement()
compute pathElement
Definition GNEVType.cpp:185
std::string getPopUpID() const
get PopPup ID (Used in AC Hierarchy)
Definition GNEVType.cpp:941
SUMOVehicleClass getVClass() const
obtain VClass related with this demand element
Definition GNEVType.cpp:133
void drawJunctionPartialGL(const GUIVisualizationSettings &s, const GNESegment *segment, const double offsetFront) const
Draws partial object over junction.
Definition GNEVType.cpp:197
bool myDefaultVehicleTypeModified
flag to check if this default GNEVType was modified
Definition GNEVType.h:198
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.
void unsetParameter(const std::string &key)
Removes a parameter.
bool hasParameter(const std::string &key) const
Returns whether the parameter is set.
std::map< std::string, std::string > Map
parameters map
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.
static std::string getName(const SUMOEmissionClass c)
Checks whether the string describes a known vehicle class.
static const std::vector< std::string > & getAllClassesStr()
Get all SUMOEmissionClass in string format.
static SUMOEmissionClass getClassByName(const std::string &eClass, const SUMOVehicleClass vc=SVC_IGNORING)
Checks whether the string describes a known vehicle class.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
Structure representing possible vehicle parameter.
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.
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.
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
const std::string & getString(const T key) const
get string
bool hasString(const std::string &str) const
check if the given string exist
T get(const std::string &str) const
get key
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