std::string GNEDetectorE1::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getAdditionalID(); case SUMO_ATTR_LANE: return getLaneParents().front()->getID(); case SUMO_ATTR_POSITION: return toString(myPositionOverLane); case SUMO_ATTR_FREQUENCY: return toString(myFreq); case SUMO_ATTR_NAME: return myAdditionalName; case SUMO_ATTR_FILE: return myFilename; case SUMO_ATTR_VTYPES: return myVehicleTypes; case SUMO_ATTR_FRIENDLY_POS: return toString(myFriendlyPosition); case GNE_ATTR_BLOCK_MOVEMENT: return toString(myBlockMovement); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
std::string GNECalibrator::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getAdditionalID(); case SUMO_ATTR_EDGE: return getEdgeParents().front()->getID(); case SUMO_ATTR_LANE: return getLaneParents().front()->getID(); case SUMO_ATTR_POSITION: return toString(myPositionOverLane); case SUMO_ATTR_FREQUENCY: return toString(myFrequency); case SUMO_ATTR_NAME: return myAdditionalName; case SUMO_ATTR_OUTPUT: return myOutput; case SUMO_ATTR_ROUTEPROBE: return myRouteProbe; case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
std::string GNEAccess::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getAdditionalID(); case SUMO_ATTR_LANE: return getLaneParents().front()->getID(); case SUMO_ATTR_POSITION: return toString(myPositionOverLane); case SUMO_ATTR_LENGTH: return toString(myLength); case SUMO_ATTR_FRIENDLY_POS: return toString(myFriendlyPosition); case GNE_ATTR_BLOCK_MOVEMENT: return toString(myBlockMovement); case GNE_ATTR_PARENT: return getAdditionalParents().at(0)->getID(); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
std::string GNECrossing::getAttribute(SumoXMLAttr key) const { auto crossing = myParentJunction->getNBNode()->getCrossing(myCrossingEdges, (key != SUMO_ATTR_ID)); switch (key) { case SUMO_ATTR_ID: // get attribute requieres a special case if (crossing) { return crossing->id; } else { return "Temporal Unreferenced"; } case SUMO_ATTR_WIDTH: return toString(crossing->customWidth); case SUMO_ATTR_PRIORITY: return crossing->priority ? "true" : "false"; case SUMO_ATTR_EDGES: return toString(crossing->edges); case SUMO_ATTR_TLLINKINDEX: return toString(crossing->customTLIndex); case SUMO_ATTR_TLLINKINDEX2: return toString(crossing->customTLIndex2); case SUMO_ATTR_CUSTOMSHAPE: return toString(crossing->customShape); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
void GNEConnection::drawGL(const GUIVisualizationSettings& s) const { // Check if connection must be drawed if (!myShapeDeprecated && (myNet->getViewNet()->getViewOptions().showConnections() || (myNet->getViewNet()->getEditModes().currentSupermode == GNE_SUPERMODE_DEMAND))) { // Push draw matrix 1 glPushMatrix(); // Push name glPushName(getGlID()); // Traslate matrix glTranslated(0, 0, GLO_JUNCTION + 0.1); // must draw on top of junction // Set color if (drawUsingSelectColor()) { // override with special colors (unless the color scheme is based on selection) GLHelper::setColor(s.selectedConnectionColor); } else if (mySpecialColor != nullptr) { GLHelper::setColor(*mySpecialColor); } else { // Set color depending of the link state GLHelper::setColor(GNEInternalLane::colorForLinksState(getLinkState())); } // draw connection checking whether it is not too small if isn't being drawn for selecting const double selectionScale = isAttributeCarrierSelected() ? s.selectionScale : 1; if ((s.scale * selectionScale < 5.) && !s.drawForSelecting) { // If it's small, draw a simple line GLHelper::drawLine(myShape); } else { // draw a list of lines const bool spreadSuperposed = s.scale >= 1 && s.spreadSuperposed && myFromLane->drawAsRailway(s) && getEdgeFrom()->getNBEdge()->isBidiRail(); PositionVector shape = myShape; if (spreadSuperposed) { shape.move2side(0.5); } GLHelper::drawBoxLines(shape, myShapeRotations, myShapeLengths, 0.2 * selectionScale); glTranslated(0, 0, 0.1); GLHelper::setColor(GLHelper::getColor().changedBrightness(51)); // check if internal junction marker has to be drawn if (myInternalJunctionMarker.size() > 0) { GLHelper::drawLine(myInternalJunctionMarker); } // check if dotted contour has to be drawn (not useful at high zoom) if (!s.drawForSelecting && (myNet->getViewNet()->getDottedAC() == this)) { GLHelper::drawShapeDottedContour(getType(), shape, 0.25); } } // Pop name glPopName(); // Pop draw matrix 1 glPopMatrix(); } }
std::string GNEPOI::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return myID; case SUMO_ATTR_COLOR: return toString(getShapeColor()); case SUMO_ATTR_LANE: return myLane; case SUMO_ATTR_POSITION: if (getLaneParents().size() > 0) { return toString(myPosOverLane); } else { return toString(*this); } case SUMO_ATTR_POSITION_LAT: return toString(myPosLat); case SUMO_ATTR_GEOPOSITION: return toString(myGEOPosition, gPrecisionGeo); case SUMO_ATTR_GEO: return toString(myGeo); case SUMO_ATTR_TYPE: return getShapeType(); case SUMO_ATTR_LAYER: if (getShapeLayer() == Shape::DEFAULT_LAYER_POI) { return "default"; } else { return toString(getShapeLayer()); } case SUMO_ATTR_IMGFILE: return getShapeImgFile(); case SUMO_ATTR_RELATIVEPATH: return toString(getShapeRelativePath()); case SUMO_ATTR_WIDTH: return toString(getWidth()); case SUMO_ATTR_HEIGHT: return toString(getHeight()); case SUMO_ATTR_ANGLE: return toString(getShapeNaviDegree()); case GNE_ATTR_BLOCK_MOVEMENT: return toString(myBlockMovement); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " attribute '" + toString(key) + "' not allowed"); } }
std::string GNEConnection::getAttribute(SumoXMLAttr key) const { if (key == SUMO_ATTR_ID) { // used by GNEReferenceCounter // @note: may be called for connections without a valid nbCon reference return getMicrosimID(); } NBEdge::Connection& nbCon = getNBEdgeConnection(); switch (key) { case SUMO_ATTR_FROM: return getEdgeFrom()->getID(); case SUMO_ATTR_TO: return nbCon.toEdge->getID(); case SUMO_ATTR_FROM_LANE: return toString(nbCon.toLane); case SUMO_ATTR_TO_LANE: return toString(nbCon.toLane); case SUMO_ATTR_PASS: return toString(nbCon.mayDefinitelyPass); case SUMO_ATTR_KEEP_CLEAR: return toString(nbCon.keepClear); case SUMO_ATTR_CONTPOS: return toString(nbCon.contPos); case SUMO_ATTR_UNCONTROLLED: return toString(nbCon.uncontrolled); case SUMO_ATTR_VISIBILITY_DISTANCE: return toString(nbCon.visibility); case SUMO_ATTR_TLLINKINDEX: return toString(nbCon.tlLinkIndex); case SUMO_ATTR_SPEED: return toString(nbCon.speed); case SUMO_ATTR_DIR: return toString(getEdgeFrom()->getNBEdge()->getToNode()->getDirection( getEdgeFrom()->getNBEdge(), nbCon.toEdge, OptionsCont::getOptions().getBool("lefthand"))); case SUMO_ATTR_STATE: return toString(getEdgeFrom()->getNBEdge()->getToNode()->getLinkState( getEdgeFrom()->getNBEdge(), nbCon.toEdge, nbCon.fromLane, nbCon.toLane, nbCon.mayDefinitelyPass, nbCon.tlID)); case SUMO_ATTR_CUSTOMSHAPE: return toString(nbCon.customShape); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
std::string GNEDetectorE2::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getAdditionalID(); case SUMO_ATTR_LANE: case SUMO_ATTR_LANES: return parseIDs(getLaneParents()); case SUMO_ATTR_POSITION: return toString(myPositionOverLane); case SUMO_ATTR_ENDPOS: return toString(myEndPositionOverLane); case SUMO_ATTR_FREQUENCY: return toString(myFreq); case SUMO_ATTR_LENGTH: return toString(myLength); case SUMO_ATTR_NAME: return myAdditionalName; case SUMO_ATTR_FILE: return myFilename; case SUMO_ATTR_VTYPES: return myVehicleTypes; case SUMO_ATTR_HALTING_TIME_THRESHOLD: return toString(myTimeThreshold); case SUMO_ATTR_HALTING_SPEED_THRESHOLD: return toString(mySpeedThreshold); case SUMO_ATTR_JAM_DIST_THRESHOLD: return toString(myJamThreshold); case SUMO_ATTR_FRIENDLY_POS: return toString(myFriendlyPosition); case GNE_ATTR_BLOCK_MOVEMENT: return toString(myBlockMovement); case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }
void GNEDetectorExit::drawGL(const GUIVisualizationSettings& s) const { // Start drawing adding gl identificator glPushName(getGlID()); // Push detector matrix glPushMatrix(); glTranslated(0, 0, getType()); // Set initial values if (isAttributeCarrierSelected()) { GLHelper::setColor(myViewNet->getNet()->selectedAdditionalColor); } else { GLHelper::setColor(s.SUMO_color_E3Exit); } const double exaggeration = s.addSize.getExaggeration(s); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // Push polygon matrix glPushMatrix(); glScaled(exaggeration, exaggeration, 1); glTranslated(myShape[0].x(), myShape[0].y(), 0); glRotated(myShapeRotations[0], 0, 0, 1); // Draw polygon glBegin(GL_LINES); glVertex2d(1.7, 0); glVertex2d(-1.7, 0); glEnd(); glBegin(GL_QUADS); glVertex2d(-1.7, .5); glVertex2d(-1.7, -.5); glVertex2d(1.7, -.5); glVertex2d(1.7, .5); glEnd(); // draw details if isn't being drawn for selecting if(!s.drawForSelecting) { // first Arrow glTranslated(1.5, 0, 0); GLHelper::drawBoxLine(Position(0, 4), 0, 2, .05); GLHelper::drawTriangleAtEnd(Position(0, 4), Position(0, 1), (double) 1, (double) .25); // second Arrow glTranslated(-3, 0, 0); GLHelper::drawBoxLine(Position(0, 4), 0, 2, .05); GLHelper::drawTriangleAtEnd(Position(0, 4), Position(0, 1), (double) 1, (double) .25); } // Pop polygon matrix glPopMatrix(); // Pop detector matrix glPopMatrix(); // Check if the distance is enought to draw details if (((s.scale * exaggeration) >= 10)) { // Push matrix glPushMatrix(); // Traslate to center of detector glTranslated(myShape.getLineCenter().x(), myShape.getLineCenter().y(), getType() + 0.1); // Rotate depending of myBlockIconRotation glRotated(myBlockIconRotation, 0, 0, -1); //move to logo position glTranslated(1.9, 0, 0); // draw Entry logo if isn't being drawn for selecting if(s.drawForSelecting) { GLHelper::setColor(s.SUMO_color_E3Exit); GLHelper::drawBoxLine(Position(0, 1), 0, 2, 1); } else if (isAttributeCarrierSelected()) { GLHelper::drawText("E3", Position(), .1, 2.8, myViewNet->getNet()->selectedAdditionalColor); } else { GLHelper::drawText("E3", Position(), .1, 2.8, s.SUMO_color_E3Exit); } //move to logo position glTranslated(1.7, 0, 0); // Rotate depending of myBlockIconRotation glRotated(90, 0, 0, 1); // draw Entry text if isn't being drawn for selecting if(s.drawForSelecting) { GLHelper::setColor(s.SUMO_color_E3Exit); GLHelper::drawBoxLine(Position(0, 1), 0, 2, 1); } else if (isAttributeCarrierSelected()) { GLHelper::drawText("Exit", Position(), .1, 1, myViewNet->getNet()->selectedAdditionalColor); } else { GLHelper::drawText("Exit", Position(), .1, 1, s.SUMO_color_E3Exit); } // pop matrix glPopMatrix(); // Show Lock icon depending of the Edit mode and if isn't being drawn for selecting if(!s.drawForSelecting) { drawLockIcon(0.4); } } // Draw name if isn't being drawn for selecting if(!s.drawForSelecting) { drawName(getCenteringBoundary().getCenter(), s.scale, s.addName); } // check if dotted contour has to be drawn if(!s.drawForSelecting && (myViewNet->getACUnderCursor() == this)) { GLHelper::drawShapeDottedContour(getType(), myShape[0], 3.4, 5, myShapeRotations[0], 0, 2); } // pop gl identificator glPopName(); }
std::string GNEStop::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getDemandElementID(); case SUMO_ATTR_DURATION: return time2string(duration); case SUMO_ATTR_UNTIL: return time2string(until); case SUMO_ATTR_INDEX: if (index == STOP_INDEX_END) { return "end"; } else if (index == STOP_INDEX_FIT) { return "fit"; } else { return toString(index); } case SUMO_ATTR_TRIGGERED: if (parametersSet & STOP_TRIGGER_SET) { return toString(triggered); } else { return ""; } case SUMO_ATTR_CONTAINER_TRIGGERED: if (parametersSet & STOP_CONTAINER_TRIGGER_SET) { return toString(containerTriggered); } else { return ""; } case SUMO_ATTR_EXPECTED: if (parametersSet & STOP_EXPECTED_SET) { return toString(awaitedPersons); } else { return ""; } case SUMO_ATTR_EXPECTED_CONTAINERS: if (parametersSet & STOP_EXPECTED_CONTAINERS_SET) { return toString(awaitedContainers); } else { return ""; } case SUMO_ATTR_PARKING: if (parametersSet & STOP_PARKING_SET) { return toString(parking); } else { return ""; } case SUMO_ATTR_ACTTYPE: return ""; // CHECK case SUMO_ATTR_TRIP_ID: if (parametersSet & STOP_TRIP_ID_SET) { return tripId; } else { return ""; } // specific of Stops over stoppingPlaces case SUMO_ATTR_BUS_STOP: case SUMO_ATTR_CONTAINER_STOP: case SUMO_ATTR_CHARGING_STATION: case SUMO_ATTR_PARKING_AREA: return getAdditionalParents().front()->getID(); // specific of stops over lanes case SUMO_ATTR_LANE: return getLaneParents().front()->getID(); case SUMO_ATTR_STARTPOS: if (parametersSet & STOP_START_SET) { return toString(startPos); } else { return ""; } case SUMO_ATTR_ENDPOS: if (parametersSet & STOP_END_SET) { return toString(endPos); } else { return ""; } case SUMO_ATTR_FRIENDLY_POS: return toString(myFriendlyPosition); // case GNE_ATTR_SELECTED: return toString(isAttributeCarrierSelected()); case GNE_ATTR_GENERIC: return getGenericParametersStr(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } }