Skip to content

Commit

Permalink
Added new attributes in transports. Refs #15368
Browse files Browse the repository at this point in the history
  • Loading branch information
palvarezlopez committed Sep 10, 2024
1 parent 860e21c commit 1029270
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 12 deletions.
11 changes: 6 additions & 5 deletions src/netedit/elements/demand/GNERouteHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& lines) {
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) {
// get values
GNEDemandElement* containerParent = getContainerParent(sumoBaseObject);
const auto tagIcon = GNEDemandElementPlan::getTransportTagIcon(planParameters);
Expand All @@ -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()));
Expand Down Expand Up @@ -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()) {
Expand Down Expand Up @@ -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<bool>(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;
Expand Down Expand Up @@ -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),
Expand Down
2 changes: 1 addition & 1 deletion src/netedit/elements/demand/GNERouteHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& lines);
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group);

/// @brief build tranship
void buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
Expand Down
16 changes: 14 additions & 2 deletions src/netedit/elements/demand/GNETransport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& lines) :
const double arrivalPosition, const std::vector<std::string>& 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) {
}


Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -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);
}
Expand All @@ -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:
Expand All @@ -219,6 +226,8 @@ GNETransport::isValid(SumoXMLAttr key, const std::string& value) {
// specific person plan attributes
case SUMO_ATTR_LINES:
return canParse<std::vector<std::string> >(value);
case SUMO_ATTR_GROUP:
return true;
default:
return isPlanValid(key, value);
}
Expand Down Expand Up @@ -259,6 +268,9 @@ GNETransport::setAttribute(SumoXMLAttr key, const std::string& value) {
case SUMO_ATTR_LINES:
myLines = GNEAttributeCarrier::parse<std::vector<std::string> >(value);
break;
case SUMO_ATTR_GROUP:
myGroup = value;
break;
default:
setPlanAttribute(key, value);
break;
Expand Down
8 changes: 6 additions & 2 deletions src/netedit/elements/demand/GNETransport.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& lines);
const double arrivalPosition, const std::vector<std::string>& lines, const std::string& group);

/// @brief destructor
~GNETransport();
Expand Down Expand Up @@ -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<std::string> myLines;

/// @brief group
std::string myGroup;

private:
/// @brief method for setting the attribute and nothing else
void setAttribute(SumoXMLAttr key, const std::string& value);
Expand Down
5 changes: 4 additions & 1 deletion src/utils/handlers/RouteHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -836,13 +837,15 @@ RouteHandler::parseTransport(const SUMOSAXAttributes& attrs) {
// optional attributes
const std::vector<std::string> lines = attrs.getOpt<std::vector<std::string> >(SUMO_ATTR_LINES, "", parsedOk);
const double arrivalPos = attrs.getOpt<double>(SUMO_ATTR_ARRIVALPOS, "", parsedOk, -1);
const std::string group = attrs.getOpt<std::string>(SUMO_ATTR_GROUP, "", parsedOk, "");
if (parsedOk) {
// set tag
myCommonXMLStructure.getCurrentSumoBaseObject()->setTag(SUMO_TAG_TRANSPORT);
// add all attributes
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);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/utils/handlers/RouteHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string>& lines) = 0;
const double arrivalPos, const std::vector<std::string>& lines, const std::string& group) = 0;

/// @brief build tranship
virtual void buildTranship(const CommonXMLStructure::SumoBaseObject* sumoBaseObject, const CommonXMLStructure::PlanParameters& planParameters,
Expand Down

0 comments on commit 1029270

Please sign in to comment.