Path: blob/main/src/netedit/elements/demand/GNERouteHandler.h
185790 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNERouteHandler.h14/// @author Pablo Alvarez Lopez15/// @date Jan 201916///17// Builds demand objects for netedit18/****************************************************************************/19#pragma once20#include <config.h>2122#include <utils/handlers/RouteHandler.h>2324// ===========================================================================25// class declarations26// ===========================================================================2728class GNEAttributesEditor;29class GNEContainer;30class GNEDemandElement;31class GNEEdge;32class GNEJunction;33class GNENet;34class GNEPerson;35class GNEPlanCreator;36class GNETAZ;37class GNEUndoList;38class GNEVehicle;39class GNEViewNet;4041// ===========================================================================42// class definitions43// ===========================================================================4445class GNERouteHandler : public RouteHandler {4647public:48/// @brief Constructor49GNERouteHandler(GNENet* net, FileBucket* bucket, const bool allowUndoRedo, const bool removeEmptyPersons);5051/// @brief Destructor52virtual ~GNERouteHandler();5354/// @name build functions55/// @{5657/// @brief build vType58bool buildVType(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVTypeParameter& vTypeParameter);5960/// @brief build vType ref61bool buildVTypeRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& vTypeID, const double probability);6263/// @brief build vType distribution64bool buildVTypeDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, const int deterministic);6566/// @brief build route67bool buildRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id, SUMOVehicleClass vClass,68const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,69const double probability, const Parameterised::Map& routeParameters);7071/// @brief build route ref72bool buildRouteRef(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& routeID, const double probability);7374/// @brief build route distribution75bool buildRouteDistribution(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const std::string& id);7677/// @brief build a vehicle over an existent route78bool buildVehicleOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);7980/// @brief build a vehicle with an embedded route81bool buildVehicleEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,82const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,83const Parameterised::Map& routeParameters);8485/// @brief build a flow over an existent route86bool buildFlowOverRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters);8788/// @brief build a flow with an embedded route89bool buildFlowEmbeddedRoute(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,90const std::vector<std::string>& edgeIDs, const RGBColor& color, const int repeat, const SUMOTime cycleTime,91const Parameterised::Map& routeParameters);9293/// @brief build trip94bool buildTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,95const std::string& fromEdgeID, const std::string& toEdgeID);9697/// @brief build trip over junctions98bool buildTripJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,99const std::string& fromJunctionID, const std::string& toJunctionID);100101/// @brief build trip over TAZs102bool buildTripTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,103const std::string& fromTAZID, const std::string& toTAZID);104105/// @brief build flow106bool buildFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,107const std::string& fromEdgeID, const std::string& toEdgeIDs);108109/// @brief build flow over junctions110bool buildFlowJunctions(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,111const std::string& fromJunctionID, const std::string& toJunctionID);112113/// @brief build flow over junctions114bool buildFlowTAZs(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& vehicleParameters,115const std::string& fromTAZID, const std::string& toTAZID);116117/// @brief build person118bool buildPerson(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personParameters);119120/// @brief build person flow121bool buildPersonFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& personFlowParameters);122123/// @brief build person trip124bool buildPersonTrip(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,125const double arrivalPos, const std::vector<std::string>& types, const std::vector<std::string>& modes,126const std::vector<std::string>& lines, const double walkFactor, const std::string& group);127128/// @brief build walk129bool buildWalk(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,130const double arrivalPos, const double speed, const SUMOTime duration);131132/// @brief build ride133bool buildRide(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,134const double arrivalPos, const std::vector<std::string>& lines, const std::string& group);135136/// @brief build container137bool buildContainer(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerParameters);138139/// @brief build container flow140bool buildContainerFlow(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const SUMOVehicleParameter& containerFlowParameters);141142/// @brief build transport143bool buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,144const double arrivalPos, const std::vector<std::string>& lines, const std::string& group);145146/// @brief build tranship147bool buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,148const double arrivalPosition, const double departPosition, const double speed, const SUMOTime duration);149150/// @brief build person stop151bool buildPersonStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,152const double endPos, const SUMOTime duration, const SUMOTime until,153const std::string& actType, const bool friendlyPos, const int parameterSet);154155/// @brief build container stop156bool buildContainerStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,157const double endPos, const SUMOTime duration, const SUMOTime until, const std::string& actType, const bool friendlyPos,158const int parameterSet);159160/// @brief build stop161bool buildStop(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,162const SUMOVehicleParameter::Stop& stopParameters);163164/// @brief build person plan165bool buildPersonPlan(const GNEDemandElement* planTemplate, GNEDemandElement* personParent, GNEAttributesEditor* personPlanAttributesEditor,166GNEPlanCreator* planCreator, const bool centerAfterCreation);167168/// @brief build container plan169bool buildContainerPlan(const GNEDemandElement* planTemplate, GNEDemandElement* containerParent, GNEAttributesEditor* containerPlanAttributesEditor,170GNEPlanCreator* planCreator, const bool centerAfterCreation);171172/// @}173174/// @brief duplicate given plan in new parent175void duplicatePlan(const GNEDemandElement* originalPlan, GNEDemandElement* newParent);176177/// @brief check if via attribute is valid178bool checkViaAttribute(const SumoXMLTag tag, const std::string& id, const std::vector<std::string>& via);179180/// @brief transform vehicle functions181/// @{182183/// @brief transform to vehicle over an existent route184static void transformToVehicle(GNEVehicle* originalVehicle, bool createEmbeddedRoute);185186/// @brief transform routeFlow over an existent route187static void transformToRouteFlow(GNEVehicle* originalVehicle, bool createEmbeddedRoute);188189/// @brief transform to trip190static void transformToTrip(GNEVehicle* originalVehicle);191192/// @brief transform to flow193static void transformToFlow(GNEVehicle* originalVehicle);194195/// @brief transform to trip over junctions196static void transformToTripJunctions(GNEVehicle* originalVehicle);197198/// @brief transform to flow over junctions199static void transformToFlowJunctions(GNEVehicle* originalVehicle);200201/// @brief transform to trip over TAZs202static void transformToTripTAZs(GNEVehicle* originalVehicle);203204/// @brief transform to flow over TAZs205static void transformToFlowTAZs(GNEVehicle* originalVehicle);206207/// @}208209/// @brief transform person functions210/// @{211212/// @brief transform to vehicle over an existent route213static void transformToPerson(GNEPerson* originalPerson);214215/// @brief transform routeFlow over an existent route216static void transformToPersonFlow(GNEPerson* originalPerson);217218/// @}219220/// @brief transform container functions221/// @{222223/// @brief transform to vehicle over an existent route224static void transformToContainer(GNEContainer* originalContainer);225226/// @brief transform routeFlow over an existent route227static void transformToContainerFlow(GNEContainer* originalContainer);228229/// @}230231/// @brief reverse functions232/// @{233234/// @brief check if the given vehicle can be reversed235static bool canReverse(const GNEDemandElement* element);236237/// @brief check if the given list of edges can be reversed238static bool canReverse(GNENet* net, SUMOVehicleClass vClass, const std::vector<GNEEdge*>& edges);239240/// @brief reverse given demand element241static void reverse(GNEDemandElement* element);242243/// @brief add reverse for given demand element244static void addReverse(GNEDemandElement* element);245246/// @}247248protected:249/// @brief parse junction250GNEJunction* parseJunction(const SumoXMLTag tag, const std::string& id, const std::string& junctionID);251252/// @brief parse TAZ253GNEAdditional* parseTAZ(const SumoXMLTag tag, const std::string& id, const std::string& TAZID);254255/// @brief parse edge256GNEEdge* parseEdge(const SumoXMLTag tag, const std::string& id, const std::string& edgeID,257const CommonXMLStructure::SumoBaseObject* sumoBaseObject,258const bool firstEdge);259260/// @brief parse stop edge261GNEEdge* parseStopEdge(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;262263/// @brief parse edge from lane ID264GNEEdge* parseEdgeFromLaneID(const std::string& laneID) const;265266/// @brief parse edges267std::vector<GNEEdge*> parseEdges(const SumoXMLTag tag, const std::string& id, const std::vector<std::string>& edgeIDs);268269/// @brief get type (Either type o typeDistribution)270GNEDemandElement* getType(const std::string& id) const;271272/// @brief get route (Either route o routeDistribution)273GNEDemandElement* getRoute(const std::string& id) const;274275/// @brief get person parent276GNEDemandElement* getPersonParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;277278/// @brief get container parent279GNEDemandElement* getContainerParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;280281/// @brief get route distribution parent282GNEDemandElement* getRouteDistributionParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;283284/// @brief get vType distribution parent285GNEDemandElement* getVTypeDistributionParent(const CommonXMLStructure::SumoBaseObject* sumoBaseObject) const;286287/// @brief get distribution elements288bool getDistributionElements(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, SumoXMLTag distributionElementTag,289const std::vector<std::string>& distributionElementIDs, const std::vector<double>& probabilities,290std::vector<const GNEDemandElement*>& elements);291292/// @brief get element by ID293GNEDemandElement* retrieveDemandElement(const std::vector<SumoXMLTag> tags, const std::string& id);294295/// @brief check if element exist, and if overwrite296bool checkElement(const SumoXMLTag tag, GNEDemandElement* demandElement);297298private:299/// @brief pointer to GNENet300GNENet* myNet;301302/// @brief pointer for person and container plans303CommonXMLStructure::SumoBaseObject* myPlanObject;304305/// @brief demand element parentplans (person and containers, used in postParserTasks)306std::set<GNEDemandElement*> myParentPlanElements;307308/// @brief allow undo/redo309const bool myAllowUndoRedo = false;310311/// @brief check if remove empty persons312const bool myRemoveEmptyPersons = false;313314/// @brief invalidate default onstructor315GNERouteHandler() = delete;316317/// @brief invalidate copy constructor318GNERouteHandler(const GNERouteHandler& s) = delete;319320/// @brief invalidate assignment operator321GNERouteHandler& operator=(const GNERouteHandler& s) = delete;322};323324325