78 myRouteFrameParent(routeFrameParent),
79 myCurrentRouteMode(ROUTEMODE_CONSECUTIVE_EDGES),
83 myRouteModesStrings.push_back(std::make_pair(ROUTEMODE_CONSECUTIVE_EDGES,
"consecutive edges"));
84 myRouteModesStrings.push_back(std::make_pair(ROUTEMODE_NONCONSECUTIVE_EDGES,
"non consecutive edges"));
88 for (
const auto& i : myRouteModesStrings) {
89 myRouteModeMatchBox->appendItem(i.second.c_str());
92 myRouteModeMatchBox->setNumVisible((
int)myRouteModeMatchBox->getNumItems());
97 myVClassMatchBox->appendItem(i.c_str());
100 myVClassMatchBox->setCurrentItem(7);
102 myVClassMatchBox->setNumVisible((
int)myVClassMatchBox->getNumItems());
113 return myCurrentRouteMode;
119 return myCurrentVehicleClass;
125 return myValidVClass;
134 myRouteModeMatchBox->setTextColor(FXRGB(0, 0, 0));
136 myCurrentRouteMode = routemode;
138 for (
int i = 0; i < (int)myRouteModesStrings.size(); i++) {
139 if (myRouteModesStrings.at(i).first == myCurrentRouteMode) {
140 myRouteModeMatchBox->setCurrentItem(i);
147 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
148 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
150 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
151 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
155 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
156 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
157 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
165 myRouteFrameParent->myConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
166 myRouteFrameParent->myNonConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
168 for (
const auto& i : myRouteModesStrings) {
169 if (i.second == myRouteModeMatchBox->getText().text()) {
171 myRouteModeMatchBox->setTextColor(FXRGB(0, 0, 0));
173 myCurrentRouteMode = i.first;
178 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
179 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
181 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
182 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
185 WRITE_DEBUG((
"Selected RouteMode '" + myRouteModeMatchBox->getText() +
"' in RouteModeSelector").text());
192 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
193 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
194 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
196 myRouteModeMatchBox->setTextColor(FXRGB(255, 0, 0));
198 WRITE_DEBUG(
"Selected invalid RouteMode in RouteModeSelector");
206 myRouteFrameParent->myConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
207 myRouteFrameParent->myNonConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
210 if (i == myVClassMatchBox->getText().text()) {
212 myVClassMatchBox->setTextColor(FXRGB(0, 0, 0));
216 myValidVClass =
true;
221 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
222 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
224 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
225 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
228 WRITE_DEBUG((
"Selected VClass '" + myVClassMatchBox->getText() +
"' in RouteModeSelector").text());
235 myValidVClass =
false;
237 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
238 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
239 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
241 myVClassMatchBox->setTextColor(FXRGB(255, 0, 0));
243 WRITE_DEBUG(
"Selected invalid VClass in RouteModeSelector");
253 myRouteFrameParent(routeFrameParent) {
285 onCmdAbortRoute(0, 0, 0);
294 if (myRouteEdges.empty()) {
296 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->disableUndoRedo(
"route creation");
298 myRouteEdges.push_back(edge);
300 refreshEdgeCandidates();
302 myCreateRouteButton->enable();
303 myAbortCreationButton->enable();
308 for (
const auto& i : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
311 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
312 for (
const auto& k : j->getLanes()) {
313 k->setSpecialColor(
nullptr);
317 myRouteEdges.push_back(edge);
319 myRemoveLastInsertedEdge->enable();
321 refreshEdgeCandidates();
335 if (myRouteEdges.size() > 0) {
337 for (
const auto& j : myRouteEdges) {
338 for (
const auto& k : j->getLanes()) {
339 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateColor());
343 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
346 for (
const auto& k : j->getLanes()) {
347 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
352 updateInfoRouteLabel();
354 myRouteFrameParent->getViewNet()->update();
362 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
363 for (
const auto& k : j->getLanes()) {
364 k->setSpecialColor(
nullptr);
368 for (
const auto& j : myRouteEdges) {
369 for (
const auto& k : j->getLanes()) {
370 k->setSpecialColor(
nullptr);
374 myRouteEdges.clear();
378 const std::vector<GNEEdge*>&
387 if (!myRouteFrameParent->myRouteAttributes->areValuesValid()) {
388 myRouteFrameParent->myRouteAttributes->showWarningMessage();
389 }
else if (myRouteEdges.size() > 0) {
391 std::map<SumoXMLAttr, std::string> routeAttributes = myRouteFrameParent->myRouteAttributes->getAttributesAndValues(
true);
395 routeParameters.
routeID = myRouteFrameParent->getViewNet()->getNet()->generateDemandElementID(
"",
SUMO_TAG_ROUTE);
397 routeParameters.
color = GNEAttributeCarrier::parse<RGBColor>(routeAttributes.at(
SUMO_ATTR_COLOR));
398 routeParameters.
edges = myRouteEdges;
399 routeParameters.
VClass = myRouteFrameParent->myRouteModeSelector->getCurrentVehicleClass();
401 GNERoute* route =
new GNERoute(myRouteFrameParent->getViewNet(), routeParameters);
405 myRouteFrameParent->getViewNet()->getUndoList()->p_end();
407 onCmdAbortRoute(0, 0, 0);
416 if (myRouteEdges.size() > 0) {
418 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->enableUndoRedo();
422 myCreateRouteButton->disable();
423 myAbortCreationButton->disable();
424 myRemoveLastInsertedEdge->disable();
426 updateInfoRouteLabel();
428 myRouteFrameParent->getViewNet()->update();
436 if (myRouteEdges.size() > 1) {
438 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
439 for (
const auto& k : j->getLanes()) {
440 k->setSpecialColor(
nullptr);
444 myRouteEdges.pop_back();
446 for (
const auto& j : myRouteEdges) {
447 for (
const auto& k : j->getLanes()) {
448 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateColor());
452 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
453 if (j != myRouteEdges.back()) {
454 for (
const auto& k : j->getLanes()) {
455 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
460 if (myRouteEdges.size() == 1) {
461 myRemoveLastInsertedEdge->disable();
464 updateInfoRouteLabel();
466 myRouteFrameParent->getViewNet()->update();
476 if (myRouteEdges.size() > 0) {
480 for (
const auto& i : myRouteEdges) {
481 lenght += i->getNBEdge()->getLength();
482 speed += i->getNBEdge()->getSpeed();
485 std::ostringstream information;
487 <<
"- Number of Edges: " <<
toString(myRouteEdges.size()) <<
"\n"
488 <<
"- Lenght: " <<
toString(lenght) <<
"\n"
489 <<
"- Average speed: " <<
toString(speed / myRouteEdges.size());
491 myInfoRouteLabel->setText(information.str().c_str());
493 myInfoRouteLabel->setText(
"No edges selected");
503 myRouteFrameParent(routeFrameParent) {
525 myFinishCreationButton->disable();
526 myAbortCreationButton->disable();
527 myRemoveLastInsertedEdge->disable();
541 std::vector<GNEEdge*>
543 return mySelectedEdges;
549 if (mySelectedEdges.empty() || ((mySelectedEdges.size() > 0) && (mySelectedEdges.back() != edge))) {
550 mySelectedEdges.push_back(edge);
552 myAbortCreationButton->enable();
554 myFinishCreationButton->enable();
556 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->disableUndoRedo(
"route creation");
559 i->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
562 if (mySelectedEdges.size() > 1) {
564 myRemoveLastInsertedEdge->enable();
569 myTemporalRoute.clear();
570 myTemporalRoute.push_back(mySelectedEdges.front());
573 updateInfoRouteLabel();
584 for (
const auto& i : mySelectedEdges) {
585 for (
const auto& j : i->getLanes()) {
586 j->setSpecialColor(
nullptr);
590 mySelectedEdges.clear();
591 myTemporalRoute.clear();
595 const std::vector<GNEEdge*>&
597 return myTemporalRoute;
603 return mySelectedEdges.size() > 0;
610 if (!myRouteFrameParent->myRouteAttributes->areValuesValid()) {
611 myRouteFrameParent->myRouteAttributes->showWarningMessage();
612 }
else if (mySelectedEdges.size() > 0) {
615 routeParameters.
edges.reserve(myTemporalRoute.size());
616 for (
const auto& i : myTemporalRoute) {
617 routeParameters.
edges.push_back(myRouteFrameParent->myViewNet->getNet()->retrieveEdge(i->getID()));
620 std::map<SumoXMLAttr, std::string> routeAttributes = myRouteFrameParent->myRouteAttributes->getAttributesAndValues(
true);
622 routeParameters.
routeID = myRouteFrameParent->getViewNet()->getNet()->generateDemandElementID(
"",
SUMO_TAG_ROUTE);
624 routeParameters.
color = GNEAttributeCarrier::parse<RGBColor>(routeAttributes.at(
SUMO_ATTR_COLOR));
625 routeParameters.
VClass = myRouteFrameParent->myRouteModeSelector->getCurrentVehicleClass();
627 GNERoute* route =
new GNERoute(myRouteFrameParent->getViewNet(), routeParameters);
631 myRouteFrameParent->getViewNet()->getUndoList()->p_end();
633 onCmdAbortRoute(0, 0, 0);
642 if (mySelectedEdges.size() > 0) {
644 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->enableUndoRedo();
648 myFinishCreationButton->disable();
649 myAbortCreationButton->disable();
650 myRemoveLastInsertedEdge->disable();
652 updateInfoRouteLabel();
654 myRouteFrameParent->getViewNet()->update();
662 if (mySelectedEdges.size() > 1) {
664 for (
auto i : mySelectedEdges.back()->getLanes()) {
665 i->setSpecialColor(0);
668 mySelectedEdges.pop_back();
670 if (mySelectedEdges.size() == 1) {
672 myRemoveLastInsertedEdge->disable();
674 myTemporalRoute.clear();
675 myTemporalRoute.push_back(mySelectedEdges.front());
681 updateInfoRouteLabel();
683 myRouteFrameParent->myViewNet->update();
692 if (myTemporalRoute.size() > 0) {
696 for (
const auto& i : myTemporalRoute) {
697 lenght += i->getNBEdge()->getLength();
698 speed += i->getNBEdge()->getSpeed();
701 std::ostringstream information;
703 <<
"- Number of Edges: " <<
toString(myTemporalRoute.size()) <<
"\n"
704 <<
"- Lenght: " <<
toString(lenght) <<
"\n"
705 <<
"- Average speed: " <<
toString(speed / myTemporalRoute.size());
707 myInfoRouteLabel->setText(information.str().c_str());
709 myInfoRouteLabel->setText(
"No edges selected");
718 GNEFrame(horizontalFrameParent, viewNet,
"Routes") {
764 WRITE_DEBUG(
"Edge added in ConsecutiveEdges mode");
766 WRITE_DEBUG(
"Edge wasn't added in ConsecutiveEdges mode");
772 WRITE_DEBUG(
"Edge added in NonConsecutiveEdges mode");
774 WRITE_DEBUG(
"Edge wasn't added in NonConsecutiveEdges mode");
852 std::vector<GNEEdge*> temporalRoute;
859 temporalRoute.push_back(i);
869 if (temporalRoute.size() > 1) {
879 GLHelper::drawLine(temporalRoute.at(0)->getNBEdge()->getLanes().front().shape.front(),
880 temporalRoute.at(0)->getNBEdge()->getLanes().front().shape.back());
882 for (
int i = 1; i < (int)temporalRoute.size(); i++) {
883 GLHelper::drawLine(temporalRoute.at(i - 1)->getNBEdge()->getLanes().front().shape.back(),
884 temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front());
885 GLHelper::drawLine(temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front(),
886 temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.back());