77 myRouteFrameParent(routeFrameParent),
78 myCurrentRouteMode(ROUTEMODE_CONSECUTIVE_EDGES),
82 myRouteModesStrings.push_back(std::make_pair(ROUTEMODE_CONSECUTIVE_EDGES,
"consecutive edges"));
83 myRouteModesStrings.push_back(std::make_pair(ROUTEMODE_NONCONSECUTIVE_EDGES,
"non consecutive edges"));
87 for (
const auto& i : myRouteModesStrings) {
88 myRouteModeMatchBox->appendItem(i.second.c_str());
91 myRouteModeMatchBox->setNumVisible((
int)myRouteModeMatchBox->getNumItems());
96 myVClassMatchBox->appendItem(i.c_str());
99 myVClassMatchBox->setCurrentItem(7);
101 myVClassMatchBox->setNumVisible((
int)myVClassMatchBox->getNumItems());
112 return myCurrentRouteMode;
118 return myCurrentVehicleClass;
124 return myValidVClass;
133 myRouteModeMatchBox->setTextColor(FXRGB(0, 0, 0));
135 myCurrentRouteMode = routemode;
137 for (
int i = 0; i < (int)myRouteModesStrings.size(); i++) {
138 if (myRouteModesStrings.at(i).first == myCurrentRouteMode) {
139 myRouteModeMatchBox->setCurrentItem(i);
146 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
147 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
149 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
150 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
154 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
155 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
156 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
164 myRouteFrameParent->myConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
165 myRouteFrameParent->myNonConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
167 for (
const auto& i : myRouteModesStrings) {
168 if (i.second == myRouteModeMatchBox->getText().text()) {
170 myRouteModeMatchBox->setTextColor(FXRGB(0, 0, 0));
172 myCurrentRouteMode = i.first;
177 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
178 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
180 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
181 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
184 WRITE_DEBUG((
"Selected RouteMode '" + myRouteModeMatchBox->getText() +
"' in RouteModeSelector").text());
191 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
192 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
193 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
195 myRouteModeMatchBox->setTextColor(FXRGB(255, 0, 0));
197 WRITE_DEBUG(
"Selected invalid RouteMode in RouteModeSelector");
205 myRouteFrameParent->myConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
206 myRouteFrameParent->myNonConsecutiveEdges->onCmdAbortRoute(0, 0, 0);
209 if (i == myVClassMatchBox->getText().text()) {
211 myVClassMatchBox->setTextColor(FXRGB(0, 0, 0));
215 myValidVClass =
true;
220 myRouteFrameParent->myConsecutiveEdges->showConsecutiveEdgesModul();
221 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
223 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
224 myRouteFrameParent->myNonConsecutiveEdges->showNonConsecutiveEdgesModul();
227 WRITE_DEBUG((
"Selected VClass '" + myVClassMatchBox->getText() +
"' in RouteModeSelector").text());
234 myValidVClass =
false;
236 myRouteFrameParent->myRouteAttributes->hideAttributesCreatorModul();
237 myRouteFrameParent->myConsecutiveEdges->hideConsecutiveEdgesModul();
238 myRouteFrameParent->myNonConsecutiveEdges->hideNonConsecutiveEdgesModul();
240 myVClassMatchBox->setTextColor(FXRGB(255, 0, 0));
242 WRITE_DEBUG(
"Selected invalid VClass in RouteModeSelector");
252 myRouteFrameParent(routeFrameParent) {
284 onCmdAbortRoute(0, 0, 0);
293 if (myRouteEdges.empty()) {
295 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->disableUndoRedo(
"route creation");
297 myRouteEdges.push_back(edge);
299 refreshEdgeCandidates();
301 myCreateRouteButton->enable();
302 myAbortCreationButton->enable();
307 for (
const auto& i : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
310 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
311 for (
const auto& k : j->getLanes()) {
312 k->setSpecialColor(
nullptr);
316 myRouteEdges.push_back(edge);
318 myRemoveLastInsertedEdge->enable();
320 refreshEdgeCandidates();
334 if (myRouteEdges.size() > 0) {
336 for (
const auto& j : myRouteEdges) {
337 for (
const auto& k : j->getLanes()) {
338 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateColor());
342 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
345 for (
const auto& k : j->getLanes()) {
346 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
351 updateInfoRouteLabel();
353 myRouteFrameParent->getViewNet()->update();
361 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
362 for (
const auto& k : j->getLanes()) {
363 k->setSpecialColor(
nullptr);
367 for (
const auto& j : myRouteEdges) {
368 for (
const auto& k : j->getLanes()) {
369 k->setSpecialColor(
nullptr);
373 myRouteEdges.clear();
377 const std::vector<GNEEdge*>&
386 if (!myRouteFrameParent->myRouteAttributes->areValuesValid()) {
387 myRouteFrameParent->myRouteAttributes->showWarningMessage();
388 }
else if (myRouteEdges.size() > 0) {
390 std::map<SumoXMLAttr, std::string> valuesMap = myRouteFrameParent->myRouteAttributes->getAttributesAndValues(
true);
395 routeParameters.
routeID = myRouteFrameParent->getViewNet()->getNet()->generateDemandElementID(
"",
SUMO_TAG_ROUTE);
401 routeParameters.
edges = myRouteEdges;
402 routeParameters.
vClass = myRouteFrameParent->myRouteModeSelector->getCurrentVehicleClass();
404 GNERoute* route =
new GNERoute(myRouteFrameParent->getViewNet(), routeParameters);
408 myRouteFrameParent->getViewNet()->getUndoList()->p_end();
410 onCmdAbortRoute(0, 0, 0);
412 myRouteFrameParent->myRouteAttributes->refreshRows();
421 if (myRouteEdges.size() > 0) {
423 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->enableUndoRedo();
427 myCreateRouteButton->disable();
428 myAbortCreationButton->disable();
429 myRemoveLastInsertedEdge->disable();
431 updateInfoRouteLabel();
433 myRouteFrameParent->getViewNet()->update();
441 if (myRouteEdges.size() > 1) {
443 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
444 for (
const auto& k : j->getLanes()) {
445 k->setSpecialColor(
nullptr);
449 myRouteEdges.pop_back();
451 for (
const auto& j : myRouteEdges) {
452 for (
const auto& k : j->getLanes()) {
453 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateColor());
457 for (
const auto& j : myRouteEdges.back()->getGNEJunctionDestiny()->getGNEOutgoingEdges()) {
458 if (j != myRouteEdges.back()) {
459 for (
const auto& k : j->getLanes()) {
460 k->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
465 if (myRouteEdges.size() == 1) {
466 myRemoveLastInsertedEdge->disable();
469 updateInfoRouteLabel();
471 myRouteFrameParent->getViewNet()->update();
481 if (myRouteEdges.size() > 0) {
485 for (
const auto& i : myRouteEdges) {
486 length += i->getNBEdge()->getLength();
487 speed += i->getNBEdge()->getSpeed();
490 std::ostringstream information;
492 <<
"- Number of Edges: " <<
toString(myRouteEdges.size()) <<
"\n"
493 <<
"- Length: " <<
toString(length) <<
"\n"
494 <<
"- Average speed: " <<
toString(speed / myRouteEdges.size());
496 myInfoRouteLabel->setText(information.str().c_str());
498 myInfoRouteLabel->setText(
"No edges selected");
508 myRouteFrameParent(routeFrameParent) {
530 myFinishCreationButton->disable();
531 myAbortCreationButton->disable();
532 myRemoveLastInsertedEdge->disable();
546 std::vector<GNEEdge*>
548 return mySelectedEdges;
554 if (mySelectedEdges.empty() || ((mySelectedEdges.size() > 0) && (mySelectedEdges.back() != edge))) {
555 mySelectedEdges.push_back(edge);
557 myAbortCreationButton->enable();
559 myFinishCreationButton->enable();
561 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->disableUndoRedo(
"route creation");
564 i->setSpecialColor(&myRouteFrameParent->getEdgeCandidateSelectedColor());
567 if (mySelectedEdges.size() > 1) {
569 myRemoveLastInsertedEdge->enable();
574 myTemporalRoute.clear();
575 myTemporalRoute.push_back(mySelectedEdges.front());
578 updateInfoRouteLabel();
589 for (
const auto& i : mySelectedEdges) {
590 for (
const auto& j : i->getLanes()) {
591 j->setSpecialColor(
nullptr);
595 mySelectedEdges.clear();
596 myTemporalRoute.clear();
600 const std::vector<GNEEdge*>&
602 return myTemporalRoute;
608 return mySelectedEdges.size() > 0;
615 if (!myRouteFrameParent->myRouteAttributes->areValuesValid()) {
616 myRouteFrameParent->myRouteAttributes->showWarningMessage();
617 }
else if (mySelectedEdges.size() > 0) {
620 routeParameters.
edges.reserve(myTemporalRoute.size());
621 for (
const auto& i : myTemporalRoute) {
622 routeParameters.
edges.push_back(myRouteFrameParent->myViewNet->getNet()->retrieveEdge(i->getID()));
625 std::map<SumoXMLAttr, std::string> valuesMap = myRouteFrameParent->myRouteAttributes->getAttributesAndValues(
true);
628 routeParameters.
routeID = myRouteFrameParent->getViewNet()->getNet()->generateDemandElementID(
"",
SUMO_TAG_ROUTE);
632 routeParameters.
vClass = myRouteFrameParent->myRouteModeSelector->getCurrentVehicleClass();
634 GNERoute* route =
new GNERoute(myRouteFrameParent->getViewNet(), routeParameters);
638 myRouteFrameParent->getViewNet()->getUndoList()->p_end();
640 onCmdAbortRoute(0, 0, 0);
642 myRouteFrameParent->myRouteAttributes->refreshRows();
651 if (mySelectedEdges.size() > 0) {
653 myRouteFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->enableUndoRedo();
657 myFinishCreationButton->disable();
658 myAbortCreationButton->disable();
659 myRemoveLastInsertedEdge->disable();
661 updateInfoRouteLabel();
663 myRouteFrameParent->getViewNet()->update();
671 if (mySelectedEdges.size() > 1) {
673 for (
auto i : mySelectedEdges.back()->getLanes()) {
674 i->setSpecialColor(0);
677 mySelectedEdges.pop_back();
679 if (mySelectedEdges.size() == 1) {
681 myRemoveLastInsertedEdge->disable();
683 myTemporalRoute.clear();
684 myTemporalRoute.push_back(mySelectedEdges.front());
690 updateInfoRouteLabel();
692 myRouteFrameParent->myViewNet->update();
701 if (myTemporalRoute.size() > 0) {
705 for (
const auto& i : myTemporalRoute) {
706 length += i->getNBEdge()->getLength();
707 speed += i->getNBEdge()->getSpeed();
710 std::ostringstream information;
712 <<
"- Number of Edges: " <<
toString(myTemporalRoute.size()) <<
"\n"
713 <<
"- Length: " <<
toString(length) <<
"\n"
714 <<
"- Average speed: " <<
toString(speed / myTemporalRoute.size());
716 myInfoRouteLabel->setText(information.str().c_str());
718 myInfoRouteLabel->setText(
"No edges selected");
727 GNEFrame(horizontalFrameParent, viewNet,
"Routes") {
773 WRITE_DEBUG(
"Edge added in ConsecutiveEdges mode");
775 WRITE_DEBUG(
"Edge wasn't added in ConsecutiveEdges mode");
781 WRITE_DEBUG(
"Edge added in NonConsecutiveEdges mode");
783 WRITE_DEBUG(
"Edge wasn't added in NonConsecutiveEdges mode");
861 std::vector<GNEEdge*> temporalRoute;
868 temporalRoute.push_back(i);
878 if (temporalRoute.size() > 1) {
888 GLHelper::drawLine(temporalRoute.at(0)->getNBEdge()->getLanes().front().shape.front(),
889 temporalRoute.at(0)->getNBEdge()->getLanes().front().shape.back());
891 for (
int i = 1; i < (int)temporalRoute.size(); i++) {
892 GLHelper::drawLine(temporalRoute.at(i - 1)->getNBEdge()->getLanes().front().shape.back(),
893 temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front());
894 GLHelper::drawLine(temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front(),
895 temporalRoute.at(i)->getNBEdge()->getLanes().front().shape.back());