LCOV - code coverage report
Current view: top level - src/microsim/output - MSVTKExport.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 0.0 % 80 0
Test Date: 2024-11-20 15:55:46 Functions: 0.0 % 7 0

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2012-2024 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              : /****************************************************************************/
      14              : /// @file    MSVTKExport.cpp
      15              : /// @author  Mario Krumnow
      16              : /// @author  Daniel Krajzewicz
      17              : /// @author  Jakob Erdmann
      18              : /// @author  Michael Behrisch
      19              : /// @date    2012-04-26
      20              : ///
      21              : // Realises VTK Export
      22              : /****************************************************************************/
      23              : #include <config.h>
      24              : 
      25              : #include <utils/iodevices/OutputDevice.h>
      26              : #include <microsim/MSEdgeControl.h>
      27              : #include <microsim/MSJunctionControl.h>
      28              : #include <microsim/MSVehicle.h>
      29              : #include <microsim/MSVehicleControl.h>
      30              : #include <microsim/MSEdge.h>
      31              : #include <microsim/MSLane.h>
      32              : #include <microsim/MSGlobals.h>
      33              : #include <microsim/traffic_lights/MSTLLogicControl.h>
      34              : #include "MSVTKExport.h"
      35              : 
      36              : 
      37              : // ===========================================================================
      38              : // method definitions
      39              : // ===========================================================================
      40              : void
      41            0 : MSVTKExport::write(OutputDevice& of, SUMOTime /* timestep */) {
      42              : 
      43            0 :     std::vector<double> speed = getSpeed();
      44            0 :     std::vector<double> points = getPositions();
      45              : 
      46            0 :     of << "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
      47            0 :     of << "<VTKFile type=\"PolyData\" version=\"0.1\" order=\"LittleEndian\">\n";
      48            0 :     of << "<PolyData>\n";
      49            0 :     of << " <Piece NumberOfPoints=\"" << speed.size() << "\" NumberOfVerts=\"1\" NumberOfLines=\"0\" NumberOfStrips=\"0\" NumberOfPolys=\"0\">\n";
      50            0 :     of << "<PointData>\n";
      51            0 :     of << " <DataArray type=\"Float64\" Name=\"speed\" format=\"ascii\">" << List2String(getSpeed()) << "</DataArray>\n";
      52            0 :     of << "</PointData>\n";
      53            0 :     of << "<CellData/>\n";
      54            0 :     of << "<Points>\n";
      55            0 :     of << " <DataArray type=\"Float64\" Name=\"Points\" NumberOfComponents=\"3\" format=\"ascii\">" << List2String(getPositions()) << "</DataArray>\n";
      56            0 :     of << "</Points>\n";
      57            0 :     of << "<Verts>\n";
      58            0 :     of << " <DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\">" <<  getOffset((int) speed.size()) << "</DataArray>\n";
      59            0 :     of << " <DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\">" << speed.size() << "</DataArray>\n";
      60            0 :     of << "</Verts>\n";
      61            0 :     of << "<Lines>\n";
      62            0 :     of << " <DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\"/>\n";
      63            0 :     of << " <DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\"/>\n";
      64            0 :     of << "</Lines>\n";
      65            0 :     of << "<Stripes>\n";
      66            0 :     of << " <DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\"/>\n";
      67            0 :     of << " <DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\"/>\n";
      68            0 :     of << "</Stripes>\n";
      69            0 :     of << "<Polys>\n";
      70            0 :     of << " <DataArray type=\"Int64\" Name=\"connectivity\" format=\"ascii\"/>\n";
      71            0 :     of << " <DataArray type=\"Int64\" Name=\"offsets\" format=\"ascii\"/>\n";
      72            0 :     of << "</Polys>\n";
      73            0 :     of << "</Piece>\n";
      74            0 :     of << "</PolyData>\n";
      75            0 :     of << "</VTKFile>";
      76              : 
      77            0 : }
      78              : 
      79              : std::vector<double>
      80            0 : MSVTKExport::getSpeed() {
      81              : 
      82              :     std::vector<double> output;
      83              : 
      84            0 :     MSVehicleControl& vc = MSNet::getInstance()->getVehicleControl();
      85              :     MSVehicleControl::constVehIt it = vc.loadedVehBegin();
      86              :     MSVehicleControl::constVehIt end = vc.loadedVehEnd();
      87              : 
      88              : 
      89            0 :     for (; it != end; ++it) {
      90            0 :         const MSVehicle* veh = static_cast<const MSVehicle*>((*it).second);
      91              : 
      92            0 :         if (veh->isOnRoad()) {
      93              : 
      94            0 :             Position pos = veh->getLane()->getShape().positionAtOffset(veh->getPositionOnLane());
      95            0 :             output.push_back(veh->getSpeed());
      96              :         }
      97              : 
      98              :     }
      99              : 
     100            0 :     return output;
     101            0 : }
     102              : 
     103              : std::vector<double>
     104            0 : MSVTKExport::getPositions() {
     105              : 
     106              :     std::vector<double> output;
     107              : 
     108            0 :     MSVehicleControl& vc = MSNet::getInstance()->getVehicleControl();
     109              :     MSVehicleControl::constVehIt it = vc.loadedVehBegin();
     110              :     MSVehicleControl::constVehIt end = vc.loadedVehEnd();
     111              : 
     112              : 
     113            0 :     for (; it != end; ++it) {
     114            0 :         const MSVehicle* veh = static_cast<const MSVehicle*>((*it).second);
     115              : 
     116            0 :         if (veh->isOnRoad()) {
     117              : 
     118            0 :             output.push_back(veh->getPosition().x());
     119            0 :             output.push_back(veh->getPosition().y());
     120            0 :             output.push_back(veh->getPosition().z());
     121              : 
     122              :         }
     123              : 
     124              :     }
     125              : 
     126            0 :     return output;
     127            0 : }
     128              : 
     129              : std::string
     130            0 : MSVTKExport::List2String(std::vector<double> input) {
     131              : 
     132            0 :     std::string output = "";
     133            0 :     for (int i = 0; i < (int)input.size(); i++) {
     134              : 
     135            0 :         std::stringstream ss;
     136              : 
     137              :         //for a high precision
     138              :         //ss.precision(::std::numeric_limits<double>::digits10);
     139              :         //ss.unsetf(::std::ios::dec);
     140              :         //ss.setf(::std::ios::scientific);
     141              : 
     142            0 :         ss << input[i] << " ";
     143            0 :         output += ss.str();
     144            0 :     }
     145              : 
     146            0 :     return trim(output);
     147              : }
     148              : 
     149              : std::string
     150            0 : MSVTKExport::getOffset(int nr) {
     151              : 
     152            0 :     std::string output = "";
     153            0 :     for (int i = 0; i < nr; i++) {
     154              : 
     155            0 :         std::stringstream ss;
     156            0 :         ss << i << " ";
     157            0 :         output += ss.str();
     158            0 :     }
     159              : 
     160            0 :     return trim(output);
     161              : }
     162              : 
     163              : bool
     164            0 : MSVTKExport::ctype_space(const char c) {
     165            0 :     if (c == ' ' || c == '\t' || c == '\r' || c == '\n' || c == 11) {
     166            0 :         return true;
     167              :     }
     168              :     return false;
     169              : }
     170              : 
     171              : std::string
     172            0 : MSVTKExport::trim(std::string istring) {
     173              :     bool trimmed = false;
     174              : 
     175            0 :     if (ctype_space(istring[istring.length() - 1])) {
     176            0 :         istring.erase(istring.length() - 1);
     177              :         trimmed = true;
     178              :     }
     179              : 
     180            0 :     if (ctype_space(istring[0])) {
     181            0 :         istring.erase(0, 1);
     182              :         trimmed = true;
     183              :     }
     184              : 
     185            0 :     if (!trimmed) {
     186            0 :         return istring;
     187              :     } else {
     188            0 :         return trim(istring);
     189              :     }
     190              : 
     191              : }
     192              : 
     193              : 
     194              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1