From 1029270c6cfba198b73b2b5a47a38cab4f6506fd Mon Sep 17 00:00:00 2001 From: Pablo Alvarez Lopez Date: Tue, 10 Sep 2024 15:26:03 +0200 Subject: [PATCH] Added new attributes in transports. Refs #15368 --- src/netedit/elements/demand/GNERouteHandler.cpp | 11 ++++++----- src/netedit/elements/demand/GNERouteHandler.h | 2 +- src/netedit/elements/demand/GNETransport.cpp | 16 ++++++++++++++-- src/netedit/elements/demand/GNETransport.h | 8 ++++++-- src/utils/handlers/RouteHandler.cpp | 5 ++++- src/utils/handlers/RouteHandler.h | 2 +- 6 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/netedit/elements/demand/GNERouteHandler.cpp b/src/netedit/elements/demand/GNERouteHandler.cpp index 3ac59e17a033..8069f7b87b55 100644 --- a/src/netedit/elements/demand/GNERouteHandler.cpp +++ b/src/netedit/elements/demand/GNERouteHandler.cpp @@ -760,7 +760,7 @@ GNERouteHandler::buildContainerFlow(const CommonXMLStructure::SumoBaseObject* /* void GNERouteHandler::buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters, - const double arrivalPos, const std::vector& lines) { + const double arrivalPos, const std::vector& lines, const std::string& group) { // get values GNEDemandElement* containerParent = getContainerParent(sumoBaseObject); const auto tagIcon = GNEDemandElementPlan::getTransportTagIcon(planParameters); @@ -772,7 +772,7 @@ GNERouteHandler::buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBa WRITE_WARNING(TL("invalid combination for personTrip")); } else if (planParents.checkIntegrity(tagIcon.first, containerParent, planParameters)) { // build transport - GNEDemandElement* transport = new GNETransport(myNet, tagIcon.first, tagIcon.second, containerParent, planParents, arrivalPos, lines); + GNEDemandElement* transport = new GNETransport(myNet, tagIcon.first, tagIcon.second, containerParent, planParents, arrivalPos, lines, group); // continue depending of undo-redo if (myAllowUndoRedo) { myNet->getViewNet()->getUndoList()->begin(transport, TLF("add % in '%'", transport->getTagStr(), containerParent->getID())); @@ -1098,7 +1098,6 @@ GNERouteHandler::buildPersonPlan(const GNEDemandElement* planTemplate, GNEDemand false; const double walkFactor = personPlanObject->hasDoubleAttribute(SUMO_ATTR_WALKFACTOR) ? personPlanObject->getDoubleAttribute(SUMO_ATTR_WALKFACTOR) : 0; const std::string group = personPlanObject->hasStringAttribute(SUMO_ATTR_GROUP) ? personPlanObject->getStringAttribute(SUMO_ATTR_GROUP) : ""; - const double speed = personPlanObject->hasDoubleAttribute(SUMO_ATTR_SPEED) ? personPlanObject->getDoubleAttribute(SUMO_ATTR_SPEED) : 0; // build depending of plan type if (planTemplate->getTagProperty().isPlanWalk()) { @@ -1174,11 +1173,12 @@ GNERouteHandler::buildContainerPlan(const GNEDemandElement* planTemplate, GNEDem const bool friendlyPos = containerPlanObject->hasBoolAttribute(SUMO_ATTR_FRIENDLY_POS) ? containerPlanObject->getBoolAttribute(SUMO_ATTR_FRIENDLY_POS) : containerPlanObject->hasStringAttribute(SUMO_ATTR_FRIENDLY_POS) ? GNEAttributeCarrier::parse(containerPlanObject->getStringAttribute(SUMO_ATTR_FRIENDLY_POS)) : false; + const std::string group = containerPlanObject->hasStringAttribute(SUMO_ATTR_GROUP) ? containerPlanObject->getStringAttribute(SUMO_ATTR_GROUP) : ""; // build depending of plan type if (planTemplate->getTagProperty().isPlanTranship()) { buildTranship(containerPlanObject, planCreator->getPlanParameteres(), arrivalPos, departPos, speed, duration); } else if (planTemplate->getTagProperty().isPlanTransport()) { - buildTransport(containerPlanObject, planCreator->getPlanParameteres(), arrivalPos, lines); + buildTransport(containerPlanObject, planCreator->getPlanParameteres(), arrivalPos, lines, group); } else if (planTemplate->getTagProperty().isPlanStopContainer()) { // set stops specific parameters int parameterSet = 0; @@ -1340,7 +1340,8 @@ GNERouteHandler::duplicatePlan(const GNEDemandElement* originalPlan, GNEDemandEl } else if (tagProperty.isPlanTransport()) { buildTransport(planObject, planParameters, planObject->getDoubleAttribute(SUMO_ATTR_ARRIVALPOS), - planObject->getStringListAttribute(SUMO_ATTR_LINES)); + planObject->getStringListAttribute(SUMO_ATTR_LINES), + planObject->getStringAttribute(SUMO_ATTR_GROUP)); } else if (tagProperty.isPlanTranship()) { buildTranship(planObject, planParameters, planObject->getDoubleAttribute(SUMO_ATTR_ARRIVALPOS), diff --git a/src/netedit/elements/demand/GNERouteHandler.h b/src/netedit/elements/demand/GNERouteHandler.h index 922c23a5e8d9..f55effd882af 100644 --- a/src/netedit/elements/demand/GNERouteHandler.h +++ b/src/netedit/elements/demand/GNERouteHandler.h @@ -142,7 +142,7 @@ class GNERouteHandler : public RouteHandler { /// @brief build transport void buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters, - const double arrivalPos, const std::vector& lines); + const double arrivalPos, const std::vector& lines, const std::string& group); /// @brief build tranship void buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters, diff --git a/src/netedit/elements/demand/GNETransport.cpp b/src/netedit/elements/demand/GNETransport.cpp index a56c22bf998f..ebe6b136b7d5 100644 --- a/src/netedit/elements/demand/GNETransport.cpp +++ b/src/netedit/elements/demand/GNETransport.cpp @@ -41,13 +41,14 @@ GNEDemandElementPlan(this, -1, -1) { GNETransport::GNETransport(GNENet* net, SumoXMLTag tag, GUIIcon icon, GNEDemandElement* containerParent, const GNEPlanParents& planParameters, - const double arrivalPosition, const std::vector& lines) : + const double arrivalPosition, const std::vector& lines, const std::string& group) : GNEDemandElement(containerParent, net, GLO_TRANSPORT, tag, GUIIconSubSys::getIcon(icon), GNEPathManager::PathElement::Options::DEMAND_ELEMENT, planParameters.getJunctions(), planParameters.getEdges(), {}, planParameters.getAdditionalElements(), planParameters.getDemandElements(containerParent), {}), GNEDemandElementPlan(this, -1, arrivalPosition), -myLines(lines) { +myLines(lines), +myGroup(group) { } @@ -76,6 +77,9 @@ GNETransport::writeDemandElement(OutputDevice& device) const { if (myLines.size() > 0) { device.writeAttr(SUMO_ATTR_LINES, myLines); } + if (myGroup.size() > 0) { + device.writeAttr(SUMO_ATTR_GROUP, myGroup); + } device.closeTag(); } @@ -182,6 +186,8 @@ GNETransport::getAttribute(SumoXMLAttr key) const { // specific person plan attributes case SUMO_ATTR_LINES: return joinToString(myLines, " "); + case SUMO_ATTR_GROUP: + return myGroup; default: return getPlanAttribute(key); } @@ -204,6 +210,7 @@ void GNETransport::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* undoList) { switch (key) { case SUMO_ATTR_LINES: + case SUMO_ATTR_GROUP: GNEChange_Attribute::changeAttribute(this, key, value, undoList); break; default: @@ -219,6 +226,8 @@ GNETransport::isValid(SumoXMLAttr key, const std::string& value) { // specific person plan attributes case SUMO_ATTR_LINES: return canParse >(value); + case SUMO_ATTR_GROUP: + return true; default: return isPlanValid(key, value); } @@ -259,6 +268,9 @@ GNETransport::setAttribute(SumoXMLAttr key, const std::string& value) { case SUMO_ATTR_LINES: myLines = GNEAttributeCarrier::parse >(value); break; + case SUMO_ATTR_GROUP: + myGroup = value; + break; default: setPlanAttribute(key, value); break; diff --git a/src/netedit/elements/demand/GNETransport.h b/src/netedit/elements/demand/GNETransport.h index 7f8f67b6377e..0c0b480e9bb6 100644 --- a/src/netedit/elements/demand/GNETransport.h +++ b/src/netedit/elements/demand/GNETransport.h @@ -49,10 +49,11 @@ class GNETransport : public GNEDemandElement, public Parameterised, public GNEDe * @param[in] containerParent container parent * @param[in] planParameters plan parameters * @param[in] arrivalPosition arrival position - * @param[in] lines lines + * @param[in] lines transport lines + * @param[in] group transport group */ GNETransport(GNENet* net, SumoXMLTag tag, GUIIcon icon, GNEDemandElement* containerParent, const GNEPlanParents& planParameters, - const double arrivalPosition, const std::vector& lines); + const double arrivalPosition, const std::vector& lines, const std::string& group); /// @brief destructor ~GNETransport(); @@ -209,6 +210,9 @@ class GNETransport : public GNEDemandElement, public Parameterised, public GNEDe /// @brief The list of lines that are assigned to this stop std::vector myLines; + /// @brief group + std::string myGroup; + private: /// @brief method for setting the attribute and nothing else void setAttribute(SumoXMLAttr key, const std::string& value); diff --git a/src/utils/handlers/RouteHandler.cpp b/src/utils/handlers/RouteHandler.cpp index 6d875800a64d..c1b2061dfec5 100644 --- a/src/utils/handlers/RouteHandler.cpp +++ b/src/utils/handlers/RouteHandler.cpp @@ -340,7 +340,8 @@ RouteHandler::parseSumoBaseObject(CommonXMLStructure::SumoBaseObject* obj) { buildTransport(obj, obj->getPlanParameters(), obj->getDoubleAttribute(SUMO_ATTR_ARRIVALPOS), - obj->getStringListAttribute(SUMO_ATTR_LINES)); + obj->getStringListAttribute(SUMO_ATTR_LINES), + obj->getStringAttribute(SUMO_ATTR_GROUP)); break; case SUMO_TAG_TRANSHIP: buildTranship(obj, @@ -836,6 +837,7 @@ RouteHandler::parseTransport(const SUMOSAXAttributes& attrs) { // optional attributes const std::vector lines = attrs.getOpt >(SUMO_ATTR_LINES, "", parsedOk); const double arrivalPos = attrs.getOpt(SUMO_ATTR_ARRIVALPOS, "", parsedOk, -1); + const std::string group = attrs.getOpt(SUMO_ATTR_GROUP, "", parsedOk, ""); if (parsedOk) { // set tag myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_TRANSPORT); @@ -843,6 +845,7 @@ RouteHandler::parseTransport(const SUMOSAXAttributes& attrs) { myCommonXMLStructure.getCurrentSumoBaseObject()->setPlanParameters(planParameters); myCommonXMLStructure.getCurrentSumoBaseObject()->addStringListAttribute(SUMO_ATTR_LINES, lines); myCommonXMLStructure.getCurrentSumoBaseObject()->addDoubleAttribute(SUMO_ATTR_ARRIVALPOS, arrivalPos); + myCommonXMLStructure.getCurrentSumoBaseObject()->addStringAttribute(SUMO_ATTR_GROUP, group); } } diff --git a/src/utils/handlers/RouteHandler.h b/src/utils/handlers/RouteHandler.h index 504e88c99c4f..5950c525109d 100644 --- a/src/utils/handlers/RouteHandler.h +++ b/src/utils/handlers/RouteHandler.h @@ -129,7 +129,7 @@ class RouteHandler { /// @brief build transport virtual void buildTransport(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters, - const double arrivalPos, const std::vector& lines) = 0; + const double arrivalPos, const std::vector& lines, const std::string& group) = 0; /// @brief build tranship virtual void buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,