From 384dc38eb3eb4fa9c1b7320c735f02dbaadd8c37 Mon Sep 17 00:00:00 2001 From: Zi-Hao WANG Date: Tue, 13 Aug 2024 00:05:48 -0400 Subject: [PATCH] Retrieve segment id and segment index from vehicle in both libsumo and traci. Refs #14681 Signed-off-by: Zi-Hao WANG --- src/libsumo/TraCIConstants.h | 6 ++++++ src/libsumo/Vehicle.cpp | 17 ++++++++++++++++- src/libsumo/Vehicle.h | 2 ++ src/libtraci/Vehicle.cpp | 12 ++++++++++++ .../de/tudresden/sumo/config/Constants.java | 8 +++++++- tools/traci/_vehicle.py | 15 +++++++++++++++ tools/traci/constants.py | 8 +++++++- 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/libsumo/TraCIConstants.h b/src/libsumo/TraCIConstants.h index b653b2d8e19d..29ec950a7ee5 100644 --- a/src/libsumo/TraCIConstants.h +++ b/src/libsumo/TraCIConstants.h @@ -1023,6 +1023,12 @@ TRACI_CONST int VAR_LANE_ID = 0x51; // lane index (get: vehicle, edge) TRACI_CONST int VAR_LANE_INDEX = 0x52; +// segment id (get: vehicle) +TRACI_CONST int VAR_SEGMENT_ID = 0xa1; + +// segment index (get: vehicle) +TRACI_CONST int VAR_SEGMENT_INDEX = 0xa2; + // route id (get & set: vehicles) TRACI_CONST int VAR_ROUTE_ID = 0x53; diff --git a/src/libsumo/Vehicle.cpp b/src/libsumo/Vehicle.cpp index 4b037ec43124..7a43392962cd 100644 --- a/src/libsumo/Vehicle.cpp +++ b/src/libsumo/Vehicle.cpp @@ -54,7 +54,7 @@ #include "Vehicle.h" #define CALL_MICRO_FUN(veh, fun, mesoResult) ((dynamic_cast(veh) == nullptr ? (mesoResult) : dynamic_cast(veh)->fun)) - +#define CALL_MESO_FUN(veh, fun, microResult) ((dynamic_cast(veh) == nullptr ? (microResult) : dynamic_cast(veh)->fun)) // =========================================================================== // debug defines @@ -185,6 +185,17 @@ Vehicle::getLaneIndex(const std::string& vehID) { return veh->isOnRoad() ? CALL_MICRO_FUN(veh, getLane()->getIndex(), INVALID_INT_VALUE) : INVALID_INT_VALUE; } +std::string +Vehicle::getSegmentID(const std::string& vehID) { + MSBaseVehicle* veh = Helper::getVehicle(vehID); + return veh->isOnRoad() ? CALL_MESO_FUN(veh, getSegment()->getID(), "") : ""; +} + +int +Vehicle::getSegmentIndex(const std::string& vehID) { + MSBaseVehicle* veh = Helper::getVehicle(vehID); + return veh->isOnRoad()? CALL_MESO_FUN(veh, getSegment()->getIndex(), INVALID_INT_VALUE): INVALID_INT_VALUE; +} std::string Vehicle::getTypeID(const std::string& vehID) { @@ -2808,6 +2819,10 @@ Vehicle::handleVariable(const std::string& objID, const int variable, VariableWr return wrapper->wrapString(objID, variable, getLaneID(objID)); case VAR_LANE_INDEX: return wrapper->wrapInt(objID, variable, getLaneIndex(objID)); + case VAR_SEGMENT_ID: + return wrapper->wrapString(objID, variable, getSegmentID(objID)); + case VAR_SEGMENT_INDEX: + return wrapper->wrapInt(objID, variable, getSegmentIndex(objID)); case VAR_TYPE: return wrapper->wrapString(objID, variable, getTypeID(objID)); case VAR_ROUTE_ID: diff --git a/src/libsumo/Vehicle.h b/src/libsumo/Vehicle.h index f084bbba304c..7a9a7b419445 100644 --- a/src/libsumo/Vehicle.h +++ b/src/libsumo/Vehicle.h @@ -58,6 +58,8 @@ class Vehicle { static std::string getRoadID(const std::string& vehID); static std::string getLaneID(const std::string& vehID); static int getLaneIndex(const std::string& vehID); + static std::string getSegmentID(const std::string& vehID); + static int getSegmentIndex(const std::string& vehID); static std::string getTypeID(const std::string& vehID); static std::string getRouteID(const std::string& vehID); static double getDeparture(const std::string& vehID); diff --git a/src/libtraci/Vehicle.cpp b/src/libtraci/Vehicle.cpp index a8cae500a443..18dee2974005 100644 --- a/src/libtraci/Vehicle.cpp +++ b/src/libtraci/Vehicle.cpp @@ -126,6 +126,18 @@ Vehicle::getLaneIndex(const std::string& vehID) { } +std::string +Vehicle::getSegmentID(const std::string& vehID) { + return Dom::getString(libsumo::VAR_SEGMENT_ID, vehID); +} + + +int +Vehicle::getSegmentIndex(const std::string& vehID) { + return Dom::getInt(libsumo::VAR_SEGMENT_INDEX, vehID); +} + + std::string Vehicle::getTypeID(const std::string& vehID) { return Dom::getString(libsumo::VAR_TYPE, vehID); diff --git a/tools/contributed/traas/src/main/java/de/tudresden/sumo/config/Constants.java b/tools/contributed/traas/src/main/java/de/tudresden/sumo/config/Constants.java index 7579bf1caa2b..174e8557ef97 100644 --- a/tools/contributed/traas/src/main/java/de/tudresden/sumo/config/Constants.java +++ b/tools/contributed/traas/src/main/java/de/tudresden/sumo/config/Constants.java @@ -13,7 +13,7 @@ /****************************************************************************/ /// @file Constants.java /// @author generated by "rebuildConstants.py" -/// @date 2024-07-24 13:13:31.122594 +/// @date 2024-08-12 23:32:52.197804 /// // This script contains TraCI constant definitions from /src/libsumo/TraCIConstants.h. /****************************************************************************/ @@ -1004,6 +1004,12 @@ public class Constants { // lane index (get: vehicle, edge) public static final int VAR_LANE_INDEX = 0x52; + // segment id (get: vehicle) + public static final int VAR_SEGMENT_ID = 0xa1; + + // segment index (get: vehicle) + public static final int VAR_SEGMENT_INDEX = 0xa2; + // route id (get & set: vehicles) public static final int VAR_ROUTE_ID = 0x53; diff --git a/tools/traci/_vehicle.py b/tools/traci/_vehicle.py index 5d85722bd40c..c6e0822553e0 100644 --- a/tools/traci/_vehicle.py +++ b/tools/traci/_vehicle.py @@ -383,6 +383,21 @@ def getLaneIndex(self, vehID): """ return self._getUniversal(tc.VAR_LANE_INDEX, vehID) + def getSegmentID(self, vehID): + """getSegmentID(string) -> string + + Returns the id of the segment the named vehicle was at within the last step. + """ + return self._getUniversal(tc.VAR_SEGMENT_ID, vehID) + + def getSegmentIndex(self, vehID): + """getSegmentIndex(string) -> integer + + Returns the index of the segment the named vehicle was at within the last step. + """ + return self._getUniversal(tc.VAR_SEGMENT_INDEX, vehID) + + def getTypeID(self, vehID): """getTypeID(string) -> string diff --git a/tools/traci/constants.py b/tools/traci/constants.py index 305a64d8e70a..72e2ee36452e 100644 --- a/tools/traci/constants.py +++ b/tools/traci/constants.py @@ -12,7 +12,7 @@ # @file constants.py # @author generated by "rebuildConstants.py" -# @date 2024-07-24 13:13:31.122594 +# @date 2024-08-12 23:32:52.197804 """ This script contains TraCI constant definitions from /src/libsumo/TraCIConstants.h. @@ -1004,6 +1004,12 @@ # lane index (get: vehicle, edge) VAR_LANE_INDEX = 0x52 +# segment id (get: vehicle) +VAR_SEGMENT_ID = 0xa1 + +# segment index (get: vehicle) +VAR_SEGMENT_INDEX = 0xa2 + # route id (get & set: vehicles) VAR_ROUTE_ID = 0x53