LCOV - code coverage report
Current view: top level - src/traci-server - TraCIServerAPI_Polygon.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 91.2 % 57 52
Test Date: 2025-12-06 15:35:27 Functions: 100.0 % 1 1

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2002-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              : /****************************************************************************/
      14              : /// @file    TraCIServerAPI_Polygon.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Laura Bieker
      17              : /// @author  Michael Behrisch
      18              : /// @author  Jakob Erdmann
      19              : /// @author  Christoph Sommer
      20              : /// @author  Gregor Laemmel
      21              : /// @date    Sept 2002
      22              : ///
      23              : // APIs for getting/setting polygon values via TraCI
      24              : /****************************************************************************/
      25              : #include <config.h>
      26              : 
      27              : #include <utils/common/StdDefs.h>
      28              : #include <microsim/MSNet.h>
      29              : #include <utils/shapes/ShapeContainer.h>
      30              : #include <libsumo/Polygon.h>
      31              : #include <libsumo/Helper.h>
      32              : #include <libsumo/StorageHelper.h>
      33              : #include <libsumo/TraCIConstants.h>
      34              : #include "TraCIServerAPI_Polygon.h"
      35              : 
      36              : 
      37              : // ===========================================================================
      38              : // method definitions
      39              : // ===========================================================================
      40              : bool
      41          263 : TraCIServerAPI_Polygon::processSet(TraCIServer& server, tcpip::Storage& inputStorage,
      42              :                                    tcpip::Storage& outputStorage) {
      43          263 :     std::string warning = ""; // additional description for response
      44              :     // variable
      45          263 :     int variable = inputStorage.readUnsignedByte();
      46          263 :     if (variable != libsumo::VAR_TYPE && variable != libsumo::VAR_COLOR && variable != libsumo::VAR_SHAPE && variable != libsumo::VAR_FILL
      47          235 :             && variable != libsumo::VAR_WIDTH && variable != libsumo::VAR_MOVE_TO
      48          126 :             && variable != libsumo::ADD && variable != libsumo::REMOVE && variable != libsumo::VAR_PARAMETER) {
      49            0 :         return server.writeErrorStatusCmd(libsumo::CMD_SET_POLYGON_VARIABLE,
      50            0 :                                           "Change Polygon State: unsupported variable " + toHex(variable, 2) + " specified", outputStorage);
      51              :     }
      52              :     // id
      53          263 :     std::string id = inputStorage.readString();
      54              :     try {
      55              :         // process
      56          263 :         switch (variable) {
      57              :             case libsumo::VAR_TYPE:
      58            6 :                 libsumo::Polygon::setType(id, StoHelp::readTypedString(inputStorage, "The type must be given as a string."));
      59            4 :                 break;
      60              :             case libsumo::VAR_COLOR:
      61            9 :                 libsumo::Polygon::setColor(id, StoHelp::readTypedColor(inputStorage, "The color must be given using an according type."));
      62            7 :                 break;
      63              :             case libsumo::VAR_SHAPE:
      64            7 :                 libsumo::Polygon::setShape(id, StoHelp::readTypedPolygon(inputStorage, "The shape must be given using an according type."));
      65            5 :                 break;
      66              :             case libsumo::VAR_FILL:
      67           16 :                 libsumo::Polygon::setFilled(id, StoHelp::readTypedInt(inputStorage, "'fill' must be defined using an integer.") != 0);
      68            4 :                 break;
      69              :             case libsumo::VAR_WIDTH:
      70           12 :                 libsumo::Polygon::setLineWidth(id, StoHelp::readTypedDouble(inputStorage, "'lineWidth' must be defined using a double."));
      71            4 :                 break;
      72              :             case libsumo::ADD: {
      73           98 :                 const int parameterCount = StoHelp::readCompound(inputStorage, -1, "A compound object is needed for adding a new polygon.");
      74           98 :                 if (parameterCount != 5 && parameterCount != 6) {
      75            0 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_VEHICLE_VARIABLE, "Adding a polygon needs five to six parameters.", outputStorage);
      76              :                 }
      77           98 :                 const std::string type = StoHelp::readTypedString(inputStorage, "The type must be given as a string.");
      78           98 :                 const libsumo::TraCIColor col = StoHelp::readTypedColor(inputStorage, "The second polygon parameter must be the color.");
      79           98 :                 const bool fill = StoHelp::readBool(inputStorage, "The third polygon parameter must be 'fill' encoded as ubyte.");
      80           98 :                 const int layer = StoHelp::readTypedInt(inputStorage, "The fourth polygon parameter must be the layer encoded as int.");
      81          101 :                 const libsumo::TraCIPositionVector tp = StoHelp::readTypedPolygon(inputStorage, "The fifth polygon parameter must be the shape.");
      82              :                 double lineWidth = 1.;
      83           98 :                 if (parameterCount == 6) {
      84          197 :                     lineWidth = StoHelp::readTypedDouble(inputStorage, "The sixth polygon parameter must be the lineWidth encoded as double.");
      85              :                 }
      86           98 :                 libsumo::Polygon::add(id, tp, col, fill, type, layer, lineWidth);
      87              :             }
      88           95 :             break;
      89          105 :             case libsumo::VAR_ADD_DYNAMICS: {
      90          105 :                 if (inputStorage.readUnsignedByte() != libsumo::TYPE_COMPOUND) {
      91            0 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_POLYGON_VARIABLE, "A compound object is needed for adding dynamics to a polygon.", outputStorage);
      92              :                 }
      93          105 :                 int itemNo = inputStorage.readInt();
      94          105 :                 if (itemNo != 5) {
      95            0 :                     return server.writeErrorStatusCmd(libsumo::CMD_SET_VEHICLE_VARIABLE, "Adding polygon dynamics needs four parameters.", outputStorage);
      96              :                 }
      97          105 :                 const std::string trackedID = StoHelp::readTypedString(inputStorage, "The first parameter for adding polygon dynamics must be ID of the tracked object as a string ('' to disregard tracking).");
      98          141 :                 const std::vector<double> timeSpan = StoHelp::readTypedDoubleList(inputStorage, "The second parameter for adding polygon dynamics must be the timespan of the animation (length=0 to disregard animation).");
      99          105 :                 const std::vector<double> alphaSpan = StoHelp::readTypedDoubleList(inputStorage, "The third parameter for adding polygon dynamics must be the alphaSpanStr of the animation (length=0 to disregard alpha animation).");
     100          105 :                 const bool looped = StoHelp::readBool(inputStorage, "The fourth parameter for adding polygon dynamics must be boolean indicating whether the animation should be looped.");
     101          105 :                 const bool rotate = StoHelp::readBool(inputStorage, "The fifth parameter for adding polygon dynamics must be boolean indicating whether the tracking polygon should be rotated.");
     102          105 :                 libsumo::Polygon::addDynamics(id, trackedID, timeSpan, alphaSpan, looped, rotate);
     103          141 :             }
     104           69 :             break;
     105              :             case libsumo::REMOVE: {
     106           24 :                 libsumo::Polygon::remove(id, StoHelp::readTypedInt(inputStorage, "The layer must be given using an int."));
     107              :             }
     108           22 :             break;
     109              :             case libsumo::VAR_PARAMETER: {
     110            4 :                 StoHelp::readCompound(inputStorage, 2, "A compound object of size 2 is needed for setting a parameter.");
     111            4 :                 const std::string name = StoHelp::readTypedString(inputStorage, "The name of the parameter must be given as a string.");
     112            4 :                 const std::string value = StoHelp::readTypedString(inputStorage, "The value of the parameter must be given as a string.");
     113            4 :                 libsumo::Polygon::setParameter(id, name, value);
     114              :             }
     115            4 :             break;
     116              :             default:
     117              :                 break;
     118              :         }
     119           49 :     } catch (libsumo::TraCIException& e) {
     120           49 :         return server.writeErrorStatusCmd(libsumo::CMD_SET_POLYGON_VARIABLE, e.what(), outputStorage);
     121           49 :     }
     122          214 :     server.writeStatusCmd(libsumo::CMD_SET_POLYGON_VARIABLE, libsumo::RTYPE_OK, warning, outputStorage);
     123              :     return true;
     124              : }
     125              : 
     126              : 
     127              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1