void GUIJunctionWrapper::drawGL(const GUIVisualizationSettings &s) const throw() { // check whether it is not too small if (s.scale*myMaxSize<1.) { return; } // (optional) set id if (s.needsGlID) { glPushName(getGlID()); } glColor3d(0, 0, 0); glTranslated(0, 0, .01); GLHelper::drawFilledPoly(myJunction.getShape(), true); glTranslated(0, 0, -.01); // (optional) draw name if (s.drawJunctionName) { glPushMatrix(); glTranslated(0, 0, -.06); Position2D p = myJunction.getPosition(); glTranslated(p.x(), p.y(), 0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); pfSetPosition(0, 0); pfSetScale(s.junctionNameSize / s.scale); glColor3d(s.junctionNameColor.red(), s.junctionNameColor.green(), s.junctionNameColor.blue()); SUMOReal w = pfdkGetStringWidth(getMicrosimID().c_str()); glRotated(180, 1, 0, 0); glTranslated(-w/2., 0.4, 0); pfDrawString(getMicrosimID().c_str()); glPopMatrix(); } // (optional) clear id if (s.needsGlID) { glPopName(); } }
void GUIGlObject::drawName(const Position& pos, const SUMOReal scale, const GUIVisualizationTextSettings& settings, const SUMOReal angle) const { if (settings.show) { GLHelper::drawText(getMicrosimID(), pos, GLO_MAX, settings.size / scale, settings.color, angle); } }
void GUIE3Collector::MyWrapper::drawGL(const GUIVisualizationSettings &s) const throw() { // (optional) set id if (s.needsGlID) { glPushName(getGlID()); } glTranslated(0, 0, -.03); typedef std::vector<SingleCrossingDefinition> CrossingDefinitions; CrossingDefinitions::const_iterator i; glColor3d(0, .8, 0); for (i=myEntryDefinitions.begin(); i!=myEntryDefinitions.end(); ++i) { drawSingleCrossing((*i).myFGPosition, (*i).myFGRotation, s.addExaggeration); } glColor3d(.8, 0, 0); for (i=myExitDefinitions.begin(); i!=myExitDefinitions.end(); ++i) { drawSingleCrossing((*i).myFGPosition, (*i).myFGRotation, s.addExaggeration); } glTranslated(0, 0, .03); // (optional) draw name if (s.drawAddName) { drawGLName(getCenteringBoundary().getCenter(), getMicrosimID(), s.addNameSize / s.scale); } // (optional) clear id if (s.needsGlID) { glPopName(); } }
std::string GNEJunction::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getMicrosimID(); break; case SUMO_ATTR_POSITION: return toString(myNBNode.getPosition()); break; case SUMO_ATTR_TYPE: return toString(myNBNode.getType()); break; case GNE_ATTR_MODIFICATION_STATUS: return myLogicStatus; break; case SUMO_ATTR_SHAPE: return toString(myNBNode.getShape()); case SUMO_ATTR_RADIUS: return toString(myNBNode.getRadius()); case SUMO_ATTR_KEEP_CLEAR: return myNBNode.getKeepClear() ? "true" : "false"; default: throw InvalidArgument("junction attribute '" + toString(key) + "' not allowed"); } }
void GUIInductLoop::MyWrapper::drawGL(const GUIVisualizationSettings &s) const throw() { // (optional) set id if (s.needsGlID) { glPushName(getGlID()); } SUMOReal width = (SUMOReal) 2.0 * s.scale; glLineWidth(1.0); // shape glColor3d(1, 1, 0); glPushMatrix(); glTranslated(0, 0, -.03); glTranslated(myFGPosition.x(), myFGPosition.y(), 0); glRotated(myFGRotation, 0, 0, 1); glScaled(s.addExaggeration, s.addExaggeration, 1); glBegin(GL_QUADS); glVertex2d(0-1.0, 2); glVertex2d(-1.0, -2); glVertex2d(1.0, -2); glVertex2d(1.0, 2); glEnd(); glTranslated(0, 0, -.01); glBegin(GL_LINES); glVertex2d(0, 2-.1); glVertex2d(0, -2+.1); glEnd(); // outline if (width*s.addExaggeration>1) { glColor3d(1, 1, 1); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_QUADS); glVertex2f(0-1.0, 2); glVertex2f(-1.0, -2); glVertex2f(1.0, -2); glVertex2f(1.0, 2); glEnd(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } // position indicator if (width*s.addExaggeration>1) { glRotated(90, 0, 0, -1); glColor3d(1, 1, 1); glBegin(GL_LINES); glVertex2d(0, 1.7); glVertex2d(0, -1.7); glEnd(); } glPopMatrix(); // (optional) draw name if (s.drawAddName) { drawGLName(getCenteringBoundary().getCenter(), getMicrosimID(), s.addNameSize / s.scale); } // (optional) clear id if (s.needsGlID) { glPopName(); } }
void GNEDemandElement::changeDemandElementID(const std::string& newID) { if (myViewNet->getNet()->retrieveDemandElement(myTagProperty.getTag(), newID, false) != nullptr) { throw InvalidArgument("An DemandElement with tag " + getTagStr() + " and ID = " + newID + " already exists"); } else { // Save old ID std::string oldID = getMicrosimID(); // set New ID setMicrosimID(newID); // update demand element ID in the container of net myViewNet->getNet()->updateDemandElementID(oldID, this); } }
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 GNECrossing::getAttribute(SumoXMLAttr key) const { switch (key) { case SUMO_ATTR_ID: return getMicrosimID(); break; case SUMO_ATTR_WIDTH: return toString(myCrossing.width); break; case SUMO_ATTR_PRIORITY: return myCrossing.priority ? "true" : "false"; break; case SUMO_ATTR_EDGES: return toString(myCrossing.edges); break; default: throw InvalidArgument("junction attribute '" + toString(key) + "' not allowed"); } }
std::string GNELane::getAttribute(SumoXMLAttr key) const { const NBEdge* edge = myParentEdge.getNBEdge(); switch (key) { case SUMO_ATTR_ID: return getMicrosimID(); case SUMO_ATTR_SPEED: return toString(edge->getLaneSpeed(myIndex)); case SUMO_ATTR_ALLOW: // return all allowed classes (may differ from the written attributes) return getVehicleClassNames(edge->getPermissions(myIndex)); case SUMO_ATTR_DISALLOW: // return all disallowed classes (may differ from the written attributes) return getVehicleClassNames(~(edge->getPermissions(myIndex))); case SUMO_ATTR_WIDTH: return toString(edge->getLaneStruct(myIndex).width); case SUMO_ATTR_ENDOFFSET: return toString(edge->getLaneStruct(myIndex).endOffset); case SUMO_ATTR_INDEX: return toString(myIndex); default: throw InvalidArgument("lane attribute '" + toString(key) + "' not allowed"); } }
std::string GUIGlObject::createFullName() const { return myPrefix + ":" + getMicrosimID(); }
const std::string& GNEDemandElement::getDemandElementID() const { return getMicrosimID(); }