NIVissimSingleTypeParser_Verbindungsdefinition.cpp
Go to the documentation of this file.00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029
00030 #include <iostream>
00031 #include <utils/geom/Position2DVector.h>
00032 #include <utils/common/TplConvert.h>
00033 #include "../NIImporter_Vissim.h"
00034 #include "../tempstructs/NIVissimConnection.h"
00035 #include "NIVissimSingleTypeParser_Verbindungsdefinition.h"
00036
00037 #ifdef CHECK_MEMORY_LEAKS
00038 #include <foreign/nvwa/debug_new.h>
00039 #endif // CHECK_MEMORY_LEAKS
00040
00041
00042
00043
00044
00045 NIVissimSingleTypeParser_Verbindungsdefinition::NIVissimSingleTypeParser_Verbindungsdefinition(NIImporter_Vissim &parent)
00046 : NIImporter_Vissim::VissimSingleTypeParser(parent) {}
00047
00048
00049 NIVissimSingleTypeParser_Verbindungsdefinition::~NIVissimSingleTypeParser_Verbindungsdefinition() {}
00050
00051
00052 bool
00053 NIVissimSingleTypeParser_Verbindungsdefinition::parse(std::istream &from) {
00054 int id;
00055 from >> id;
00056 std::string tag;
00057
00058 std::string name;
00059 while (tag!="von") {
00060 tag = overrideOptionalLabel(from);
00061 if (tag=="name") {
00062 name = readName(from);
00063 }
00064 }
00065
00066 NIVissimExtendedEdgePoint from_def = readExtEdgePointDef(from);
00067 Position2DVector geom;
00068 tag = myRead(from);
00069 while (tag!="nach") {
00070 std::string x = myRead(from);
00071 std::string y = myRead(from);
00072 if (y!="nach") {
00073 geom.push_back_noDoublePos(
00074 Position2D(
00075 TplConvert<char>::_2SUMOReal(x.c_str()),
00076 TplConvert<char>::_2SUMOReal(y.c_str())
00077 ));
00078 tag = myRead(from);
00079 try {
00080 TplConvert<char>::_2SUMOReal(tag.c_str());
00081 tag = myRead(from);
00082 } catch (NumberFormatException &) {}
00083 } else {
00084 tag = y;
00085 }
00086 }
00087 NIVissimExtendedEdgePoint to_def = readExtEdgePointDef(from);
00088
00089 SUMOReal dxnothalt = 0;
00090 SUMOReal dxeinordnen = 0;
00091 SUMOReal zuschlag1, zuschlag2;
00092 zuschlag1 = zuschlag2 = 0;
00093 SUMOReal seglength = 0;
00094 tag = myRead(from);
00095 NIVissimConnection::Direction direction = NIVissimConnection::NIVC_DIR_ALL;
00096 while (tag!="fahrzeugklassen"&&tag!="sperrung"&&tag!="auswertung"&&tag!="DATAEND") {
00097 if (tag=="rechts") {
00098 direction = NIVissimConnection::NIVC_DIR_RIGHT;
00099 } else if (tag=="links") {
00100 direction = NIVissimConnection::NIVC_DIR_LEFT;
00101 } else if (tag=="alle") {
00102 direction = NIVissimConnection::NIVC_DIR_ALL;
00103 } else if (tag=="dxnothalt") {
00104 from >> dxnothalt;
00105 } else if (tag=="dxeinordnen") {
00106 from >> dxeinordnen;
00107 } else if (tag=="segment") {
00108 from >> tag;
00109 from >> seglength;
00110 }
00111 if (tag=="zuschlag") {
00112 from >> zuschlag1;
00113 tag = readEndSecure(from);
00114 if (tag=="zuschlag") {
00115 from >> zuschlag2;
00116 tag = readEndSecure(from, "auswertung");
00117 }
00118 } else {
00119 tag = readEndSecure(from, "auswertung");
00120 }
00121 }
00122
00123 IntVector assignedVehicles;
00124 if (tag=="fahrzeugklassen") {
00125 tag = readEndSecure(from);
00126 while (tag!="DATAEND"&&tag!="sperrung"&&tag!="auswertung") {
00127 int classes = TplConvert<char>::_2int(tag.c_str());
00128 assignedVehicles.push_back(classes);
00129 tag = readEndSecure(from, "auswertung");
00130 }
00131 }
00132
00133 NIVissimClosedLanesVector clv;
00134 if (tag!="DATAEND") {
00135 do {
00136
00137 tag = readEndSecure(from);
00138 if (tag=="spur") {
00139
00140
00141 int laneNo;
00142 from >> laneNo;
00143
00144 IntVector assignedVehicles;
00145 tag = myRead(from);
00146 if (tag=="fahrzeugklassen") {
00147 tag = myRead(from);
00148 }
00149 while (tag!="DATAEND"&&tag!="spur") {
00150 int classes = TplConvert<char>::_2int(tag.c_str());
00151 assignedVehicles.push_back(classes);
00152 tag = readEndSecure(from);
00153 }
00154
00155 NIVissimClosedLaneDef *cld = new NIVissimClosedLaneDef(laneNo, assignedVehicles);
00156 clv.push_back(cld);
00157 }
00158 } while (tag!="DATAEND");
00159 }
00160 NIVissimConnection *c = new NIVissimConnection(id, name, from_def, to_def, geom,
00161 direction, dxnothalt, dxeinordnen, zuschlag1, zuschlag2, seglength,
00162 assignedVehicles, clv);
00163
00164 if (!NIVissimConnection::dictionary(id, c)) {
00165 return false;
00166 }
00167 return true;
00168
00169 }
00170
00171
00172
00173
00174