|
SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00011 // Realises dumping the complete network state 00012 /****************************************************************************/ 00013 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00014 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors 00015 /****************************************************************************/ 00016 // 00017 // This file is part of SUMO. 00018 // SUMO is free software: you can redistribute it and/or modify 00019 // it under the terms of the GNU General Public License as published by 00020 // the Free Software Foundation, either version 3 of the License, or 00021 // (at your option) any later version. 00022 // 00023 /****************************************************************************/ 00024 00025 00026 // =========================================================================== 00027 // included modules 00028 // =========================================================================== 00029 #ifdef _MSC_VER 00030 #include <windows_config.h> 00031 #else 00032 #include <config.h> 00033 #endif 00034 00035 #include <cassert> 00036 #include <microsim/MSEdgeControl.h> 00037 #include <microsim/MSEdge.h> 00038 #include <microsim/MSLane.h> 00039 #include <microsim/MSGlobals.h> 00040 #include <utils/iodevices/OutputDevice.h> 00041 #include "MSXMLRawOut.h" 00042 00043 #ifdef HAVE_MESOSIM 00044 #include <mesosim/MELoop.h> 00045 #include <mesosim/MESegment.h> 00046 #endif 00047 00048 #ifdef CHECK_MEMORY_LEAKS 00049 #include <foreign/nvwa/debug_new.h> 00050 #endif // CHECK_MEMORY_LEAKS 00051 00052 00053 // =========================================================================== 00054 // method definitions 00055 // =========================================================================== 00056 void 00057 MSXMLRawOut::write(OutputDevice& of, const MSEdgeControl& ec, 00058 SUMOTime timestep) { 00059 of.openTag("timestep") << " time=\"" << time2string(timestep) << "\">\n"; 00060 const std::vector<MSEdge*> &edges = ec.getEdges(); 00061 for (std::vector<MSEdge*>::const_iterator e = edges.begin(); e != edges.end(); ++e) { 00062 writeEdge(of, **e); 00063 } 00064 of.closeTag(); 00065 } 00066 00067 00068 void 00069 MSXMLRawOut::writeEdge(OutputDevice& of, const MSEdge& edge) { 00070 //en 00071 bool dump = !MSGlobals::gOmitEmptyEdgesOnDump; 00072 if (!dump) { 00073 #ifdef HAVE_MESOSIM 00074 if (MSGlobals::gUseMesoSim) { 00075 MESegment* seg = MSGlobals::gMesoNet->getSegmentForEdge(edge); 00076 while (seg != 0) { 00077 if (seg->getCarNumber() != 0) { 00078 dump = true; 00079 break; 00080 } 00081 seg = seg->getNextSegment(); 00082 } 00083 } else { 00084 #endif 00085 const std::vector<MSLane*> &lanes = edge.getLanes(); 00086 for (std::vector<MSLane*>::const_iterator lane = lanes.begin(); lane != lanes.end(); ++lane) { 00087 if (((**lane).getVehicleNumber() != 0)) { 00088 dump = true; 00089 break; 00090 } 00091 } 00092 #ifdef HAVE_MESOSIM 00093 } 00094 #endif 00095 } 00096 //en 00097 if (dump) { 00098 of.openTag("edge") << " id=\"" << edge.getID() << "\">\n"; 00099 #ifdef HAVE_MESOSIM 00100 if (MSGlobals::gUseMesoSim) { 00101 MESegment* seg = MSGlobals::gMesoNet->getSegmentForEdge(edge); 00102 while (seg != 0) { 00103 seg->writeVehicles(of); 00104 seg = seg->getNextSegment(); 00105 } 00106 } else { 00107 #endif 00108 const std::vector<MSLane*> &lanes = edge.getLanes(); 00109 for (std::vector<MSLane*>::const_iterator lane = lanes.begin(); lane != lanes.end(); ++lane) { 00110 writeLane(of, **lane); 00111 } 00112 #ifdef HAVE_MESOSIM 00113 } 00114 #endif 00115 of.closeTag(); 00116 } 00117 } 00118 00119 00120 void 00121 MSXMLRawOut::writeLane(OutputDevice& of, const MSLane& lane) { 00122 of.openTag("lane") << " id=\"" << lane.myID << "\""; 00123 if (lane.getVehicleNumber() != 0) { 00124 of << ">\n"; 00125 for (std::vector<MSVehicle*>::const_iterator veh = lane.myVehBuffer.begin(); 00126 veh != lane.myVehBuffer.end(); ++veh) { 00127 writeVehicle(of, **veh); 00128 } 00129 for (MSLane::VehCont::const_iterator veh = lane.myVehicles.begin(); 00130 veh != lane.myVehicles.end(); ++veh) { 00131 writeVehicle(of, **veh); 00132 } 00133 } 00134 of.closeTag(lane.getVehicleNumber() == 0); 00135 } 00136 00137 00138 void 00139 MSXMLRawOut::writeVehicle(OutputDevice& of, const MSBaseVehicle& veh) { 00140 if (veh.isOnRoad()) { 00141 of.openTag("vehicle") << " id=\"" << veh.getID() << "\" pos=\"" 00142 << veh.getPositionOnLane() << "\" speed=\"" << veh.getSpeed() << "\""; 00143 of.closeTag(true); 00144 } 00145 } 00146 00147 00148 00149 /****************************************************************************/ 00150