void GUILane::drawTLSLinkNo(const GUINet& net) const { unsigned int noLinks = (unsigned int)myLinks.size(); if (noLinks == 0) { return; } // draw all links SUMOReal w = myWidth / (SUMOReal) noLinks; SUMOReal x1 = myHalfLaneWidth; glPushMatrix(); const PositionVector& g = getShape(); const Position& end = g.back(); const Position& f = g[-2]; const Position& s = end; const SUMOReal rot = RAD2DEG(atan2((s.x() - f.x()), (f.y() - s.y()))); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (int i = noLinks; --i >= 0;) { SUMOReal x2 = x1 - (SUMOReal)(w / 2.); int linkNo = net.getLinkTLIndex(myLinks[i]); if (linkNo < 0) { continue; } GLHelper::drawText(toString(linkNo), Position(x2, 0), 0, .6, RGBColor(128, 128, 255, 255), 180); x1 -= w; } glPopMatrix(); }
void GUILaneWrapper::drawTLSLinkNo(const GUINet& net) const { unsigned int noLinks = getLinkNumber(); if (noLinks == 0) { return; } // draw all links SUMOReal w = myLane.getWidth() / (SUMOReal) noLinks; SUMOReal x1 = (SUMOReal)(myLane.getWidth() / 2.); glPushMatrix(); const PositionVector& g = getShape(); const Position& end = g.back(); const Position& f = g[-2]; const Position& s = end; SUMOReal rot = (SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI; glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (int i = noLinks; --i >= 0;) { SUMOReal x2 = x1 - (SUMOReal)(w / 2.); int linkNo = net.getLinkTLIndex(getLane().getLinkCont()[i]); if (linkNo < 0) { continue; } GLHelper::drawText(toString(linkNo), Position(x2, 0), 0, .6, RGBColor(128, 128, 255, 255), 180); x1 -= w; } glPopMatrix(); }
// =========================================================================== // member method definitions // =========================================================================== GUIViewTraffic::GUIViewTraffic( FXComposite* p, GUIMainWindow& app, GUISUMOViewParent* parent, GUINet& net, FXGLVisual* glVis, FXGLCanvas* share) : GUISUMOAbstractView(p, app, parent, net.getVisualisationSpeedUp(), glVis, share), myTrackedID(-1) {}
void ROWdrawAction_drawTLSLinkNo(const GUINet &net, const GUILaneWrapper &lane) { unsigned int noLinks = lane.getLinkNumber(); if (noLinks==0) { return; } // draw all links SUMOReal w = SUMO_const_laneWidth / (SUMOReal) noLinks; SUMOReal x1 = (SUMOReal)(SUMO_const_laneWidth / 2.); glPushMatrix(); glColor3d(.5, .5, 1); const Position2DVector &g = lane.getShape(); const Position2D &end = g.getEnd(); const Position2D &f = g[-2]; const Position2D &s = end; SUMOReal rot = (SUMOReal) atan2((s.x()-f.x()), (f.y()-s.y()))*(SUMOReal) 180.0/(SUMOReal) PI; glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (unsigned int i=0; i<noLinks; ++i) { SUMOReal x2 = x1 - (SUMOReal)(w/2.); int linkNo = net.getLinkTLIndex(lane.getLane().getLinkCont()[i]); if (linkNo<0) { continue; } glPushMatrix(); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); pfSetPosition(0, 0); pfSetScale(1); SUMOReal tw = pfdkGetStringWidth(toString(linkNo).c_str()); glRotated(180, 0, 1, 0); glTranslated(x2-tw/2., 0.5, 0); pfDrawString(toString(linkNo).c_str()); glPopMatrix(); x1 -= w; } glPopMatrix(); }
void ROWdrawAction_drawLinkRules(const GUINet &net, const GUILaneWrapper &lane, bool showToolTips) { unsigned int noLinks = lane.getLinkNumber(); const Position2DVector &g = lane.getShape(); const Position2D &end = g.getEnd(); const Position2D &f = g[-2]; const Position2D &s = end; SUMOReal rot = (SUMOReal) atan2((s.x()-f.x()), (f.y()-s.y()))*(SUMOReal) 180.0/(SUMOReal) PI; if (noLinks==0) { if (showToolTips) { glPushName(lane.getGlID()); } // draw a grey bar if no links are on the street glColor3d(0.5, 0.5, 0.5); glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); glBegin(GL_QUADS); glVertex2d(-SUMO_const_halfLaneWidth, 0.0); glVertex2d(-SUMO_const_halfLaneWidth, 0.5); glVertex2d(SUMO_const_halfLaneWidth, 0.5); glVertex2d(SUMO_const_halfLaneWidth, 0.0); glEnd(); glPopMatrix(); if (showToolTips) { glPopName(); } return; } // draw all links SUMOReal w = SUMO_const_laneWidth / (SUMOReal) noLinks; SUMOReal x1 = 0; glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (unsigned int i=0; i<noLinks; ++i) { SUMOReal x2 = x1 + w; MSLink::LinkState state = lane.getLane().getLinkCont()[i]->getState(); if (showToolTips) { switch (state) { case MSLink::LINKSTATE_TL_GREEN_MAJOR: case MSLink::LINKSTATE_TL_GREEN_MINOR: case MSLink::LINKSTATE_TL_RED: case MSLink::LINKSTATE_TL_YELLOW_MAJOR: case MSLink::LINKSTATE_TL_YELLOW_MINOR: case MSLink::LINKSTATE_TL_OFF_BLINKING: glPushName(net.getLinkTLID(lane.getLane().getLinkCont()[i])); break; case MSLink::LINKSTATE_MAJOR: case MSLink::LINKSTATE_MINOR: case MSLink::LINKSTATE_EQUAL: case MSLink::LINKSTATE_TL_OFF_NOSIGNAL: default: glPushName(lane.getGlID()); break; } } switch (state) { case MSLink::LINKSTATE_TL_GREEN_MAJOR: case MSLink::LINKSTATE_TL_GREEN_MINOR: glColor3d(0, 1, 0); break; case MSLink::LINKSTATE_TL_RED: glColor3d(1, 0, 0); break; case MSLink::LINKSTATE_TL_YELLOW_MAJOR: case MSLink::LINKSTATE_TL_YELLOW_MINOR: glColor3d(1, 1, 0); break; case MSLink::LINKSTATE_TL_OFF_BLINKING: glColor3d(1, 1, 0); break; case MSLink::LINKSTATE_TL_OFF_NOSIGNAL: glColor3d(0, 1, 1); break; case MSLink::LINKSTATE_MAJOR: glColor3d(1, 1, 1); break; case MSLink::LINKSTATE_MINOR: glColor3d(.2, .2, .2); break; case MSLink::LINKSTATE_EQUAL: glColor3d(.5, .5, .5); break; case MSLink::LINKSTATE_DEADEND: glColor3d(0, 0, 0); break; } glBegin(GL_QUADS); glVertex2d(x1-SUMO_const_halfLaneWidth, 0.0); glVertex2d(x1-SUMO_const_halfLaneWidth, 0.5); glVertex2d(x2-SUMO_const_halfLaneWidth, 0.5); glVertex2d(x2-SUMO_const_halfLaneWidth,0.0); glEnd(); if (showToolTips) { glPopName(); } x1 = x2; x2 += w; } glPopMatrix(); }
void GUILane::drawLinkRules(const GUINet& net) const { unsigned int noLinks = (unsigned int)myLinks.size(); const PositionVector& g = getShape(); const Position& end = g.back(); const Position& f = g[-2]; const Position& s = end; const SUMOReal rot = RAD2DEG(atan2((s.x() - f.x()), (f.y() - s.y()))); if (noLinks == 0) { glPushName(getGlID()); GLHelper::setColor(getLinkColor(LINKSTATE_DEADEND)); glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); glBegin(GL_QUADS); glVertex2d(-myHalfLaneWidth, 0.0); glVertex2d(-myHalfLaneWidth, 0.5); glVertex2d(myHalfLaneWidth, 0.5); glVertex2d(myHalfLaneWidth, 0.0); glEnd(); glPopMatrix(); glPopName(); return; } // draw all links const bool railway = isRailway(myPermissions); SUMOReal w = myWidth / (SUMOReal) noLinks; SUMOReal x1 = 0; glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (unsigned int i = 0; i < noLinks; ++i) { SUMOReal x2 = x1 + w; MSLink* link = myLinks[i]; // select glID switch (link->getState()) { case LINKSTATE_TL_GREEN_MAJOR: case LINKSTATE_TL_GREEN_MINOR: case LINKSTATE_TL_RED: case LINKSTATE_TL_YELLOW_MAJOR: case LINKSTATE_TL_YELLOW_MINOR: case LINKSTATE_TL_OFF_BLINKING: glPushName(net.getLinkTLID(link)); break; case LINKSTATE_MAJOR: case LINKSTATE_MINOR: case LINKSTATE_EQUAL: case LINKSTATE_TL_OFF_NOSIGNAL: default: glPushName(getGlID()); break; } GLHelper::setColor(getLinkColor(link->getState())); if (!railway || link->getState() != LINKSTATE_MAJOR) { // THE WHITE BAR SHOULD BE THE DEFAULT FOR MOST RAILWAY // LINKS AND LOOKS UGLY SO WE DO NOT DRAW IT glBegin(GL_QUADS); glVertex2d(x1 - myHalfLaneWidth, 0.0); glVertex2d(x1 - myHalfLaneWidth, 0.5); glVertex2d(x2 - myHalfLaneWidth, 0.5); glVertex2d(x2 - myHalfLaneWidth, 0.0); glEnd(); } glPopName(); x1 = x2; x2 += w; } glPopMatrix(); }
FXint GUILoadThread::run() { GUINet *net = 0; int simStartTime = 0; int simEndTime = 0; // remove old options OptionsCont &oc = OptionsCont::getOptions(); oc.clear(); // within gui-based applications, nothing is reported to the console MsgHandler::getErrorInstance()->report2cout(false); MsgHandler::getErrorInstance()->report2cerr(false); MsgHandler::getWarningInstance()->report2cout(false); MsgHandler::getWarningInstance()->report2cerr(false); MsgHandler::getMessageInstance()->report2cout(false); MsgHandler::getMessageInstance()->report2cerr(false); // register message callbacks MsgHandler::getMessageInstance()->addRetriever(myMessageRetriever); MsgHandler::getErrorInstance()->addRetriever(myErrorRetriever); MsgHandler::getWarningInstance()->addRetriever(myWarningRetriever); // try to load the given configuration if (!initOptions()) { // the options are not valid submitEndAndCleanup(net, simStartTime, simEndTime); return 0; } MsgHandler::initOutputOptions(true); if (!MSFrame::checkOptions()) { // the options are not valid MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); submitEndAndCleanup(net, simStartTime, simEndTime); return 0; } RandHelper::initRandGlobal(); // try to load MSFrame::setMSGlobals(oc); net = new GUINet(new GUIVehicleControl(), new GUIEventControl(), new GUIEventControl(), new GUIEventControl()); GUIEdgeControlBuilder *eb = new GUIEdgeControlBuilder(GUIGlObjectStorage::gIDStorage); NLJunctionControlBuilder jb(*net, oc); GUIDetectorBuilder db(*net); GUIGeomShapeBuilder sb(*net, GUIGlObjectStorage::gIDStorage); GUITriggerBuilder tb; NLHandler handler("", *net, db, tb, *eb, jb, sb); tb.setHandler(&handler); NLBuilder builder(oc, *net, *eb, jb, db, handler); try { MsgHandler::getErrorInstance()->clear(); MsgHandler::getWarningInstance()->clear(); MsgHandler::getMessageInstance()->clear(); if (!builder.build()) { throw ProcessError(); } else { net->initGUIStructures(); simStartTime = string2time(oc.getString("begin")); simEndTime = string2time(oc.getString("end")); } } catch (ProcessError &e) { if (std::string(e.what())!=std::string("Process Error") && std::string(e.what())!=std::string("")) { MsgHandler::getErrorInstance()->inform(e.what()); } MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); delete net; net = 0; #ifndef _DEBUG } catch (std::exception &e) { MsgHandler::getErrorInstance()->inform(e.what()); delete net; net = 0; #endif } if (net==0) { MSNet::clearAll(); } delete eb; submitEndAndCleanup(net, simStartTime, simEndTime); return 0; }
FXint GUILoadThread::run() { GUINet* net = 0; int simStartTime = 0; int simEndTime = 0; std::vector<std::string> guiSettingsFiles; bool osgView = false; OptionsCont& oc = OptionsCont::getOptions(); // register message callbacks MsgHandler::getMessageInstance()->addRetriever(myMessageRetriever); MsgHandler::getErrorInstance()->addRetriever(myErrorRetriever); MsgHandler::getWarningInstance()->addRetriever(myWarningRetriever); // try to load the given configuration if (!initOptions()) { // the options are not valid but maybe we want to quit GUIGlobals::gQuitOnEnd = oc.getBool("quit-on-end"); submitEndAndCleanup(net, simStartTime, simEndTime); return 0; } // within gui-based applications, nothing is reported to the console MsgHandler::getMessageInstance()->removeRetriever(&OutputDevice::getDevice("stdout")); MsgHandler::getWarningInstance()->removeRetriever(&OutputDevice::getDevice("stderr")); MsgHandler::getErrorInstance()->removeRetriever(&OutputDevice::getDevice("stderr")); // do this once again to get parsed options MsgHandler::initOutputOptions(); XMLSubSys::setValidation(oc.getString("xml-validation"), oc.getString("xml-validation.net")); GUIGlobals::gRunAfterLoad = oc.getBool("start"); GUIGlobals::gQuitOnEnd = oc.getBool("quit-on-end"); if (!MSFrame::checkOptions()) { MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); submitEndAndCleanup(net, simStartTime, simEndTime); return 0; } // initialise global settings RandHelper::initRandGlobal(); RandHelper::initRandGlobal(&MSVehicleControl::myVehicleParamsRNG); MSFrame::setMSGlobals(oc); GUITexturesHelper::allowTextures(!oc.getBool("disable-textures")); MSVehicleControl* vehControl = 0; #ifdef HAVE_INTERNAL GUIVisualizationSettings::UseMesoSim = MSGlobals::gUseMesoSim; if (MSGlobals::gUseMesoSim) { vehControl = new GUIMEVehicleControl(); } else #endif vehControl = new GUIVehicleControl(); GUIEdgeControlBuilder* eb = 0; try { net = new GUINet( vehControl, new GUIEventControl(), new GUIEventControl(), new GUIEventControl()); eb = new GUIEdgeControlBuilder(); GUIDetectorBuilder db(*net); NLJunctionControlBuilder jb(*net, db); GUITriggerBuilder tb; NLHandler handler("", *net, db, tb, *eb, jb); tb.setHandler(&handler); NLBuilder builder(oc, *net, *eb, jb, db, handler); MsgHandler::getErrorInstance()->clear(); MsgHandler::getWarningInstance()->clear(); MsgHandler::getMessageInstance()->clear(); if (!builder.build()) { throw ProcessError(); } else { net->initGUIStructures(); simStartTime = string2time(oc.getString("begin")); simEndTime = string2time(oc.getString("end")); guiSettingsFiles = oc.getStringVector("gui-settings-file"); #ifdef HAVE_INTERNAL osgView = oc.getBool("osg-view"); #endif } } catch (ProcessError& e) { if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) { WRITE_ERROR(e.what()); } MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); delete net; net = 0; #ifndef _DEBUG } catch (std::exception& e) { WRITE_ERROR(e.what()); delete net; net = 0; #endif } if (net == 0) { MSNet::clearAll(); } delete eb; submitEndAndCleanup(net, simStartTime, simEndTime, guiSettingsFiles, osgView); return 0; }
void GUILaneWrapper::drawLinkRules(const GUINet& net) const { unsigned int noLinks = getLinkNumber(); const PositionVector& g = getShape(); const Position& end = g.back(); const Position& f = g[-2]; const Position& s = end; SUMOReal rot = (SUMOReal) atan2((s.x() - f.x()), (f.y() - s.y())) * (SUMOReal) 180.0 / (SUMOReal) PI; if (noLinks == 0) { glPushName(getGlID()); // draw a grey bar if no links are on the street glColor3d(0.5, 0.5, 0.5); glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); glBegin(GL_QUADS); glVertex2d(-myHalfLaneWidth, 0.0); glVertex2d(-myHalfLaneWidth, 0.5); glVertex2d(myHalfLaneWidth, 0.5); glVertex2d(myHalfLaneWidth, 0.0); glEnd(); glPopMatrix(); glPopName(); return; } // draw all links SUMOReal w = myLane.getWidth() / (SUMOReal) noLinks; SUMOReal x1 = 0; glPushMatrix(); glTranslated(end.x(), end.y(), 0); glRotated(rot, 0, 0, 1); for (unsigned int i = 0; i < noLinks; ++i) { SUMOReal x2 = x1 + w; MSLink* link = getLane().getLinkCont()[i]; // select glID switch (link->getState()) { case LINKSTATE_TL_GREEN_MAJOR: case LINKSTATE_TL_GREEN_MINOR: case LINKSTATE_TL_RED: case LINKSTATE_TL_YELLOW_MAJOR: case LINKSTATE_TL_YELLOW_MINOR: case LINKSTATE_TL_OFF_BLINKING: glPushName(net.getLinkTLID(link)); break; case LINKSTATE_MAJOR: case LINKSTATE_MINOR: case LINKSTATE_EQUAL: case LINKSTATE_TL_OFF_NOSIGNAL: default: glPushName(getGlID()); break; } // select color switch (link->getState()) { case LINKSTATE_TL_GREEN_MAJOR: case LINKSTATE_TL_GREEN_MINOR: glColor3d(0, 1, 0); break; case LINKSTATE_TL_RED: glColor3d(1, 0, 0); break; case LINKSTATE_TL_YELLOW_MAJOR: case LINKSTATE_TL_YELLOW_MINOR: glColor3d(1, 1, 0); break; case LINKSTATE_TL_OFF_BLINKING: glColor3d(.7, .7, 0); break; case LINKSTATE_TL_OFF_NOSIGNAL: glColor3d(0, 1, 1); break; case LINKSTATE_MAJOR: glColor3d(1, 1, 1); break; case LINKSTATE_MINOR: glColor3d(.2, .2, .2); break; case LINKSTATE_EQUAL: glColor3d(.5, .5, .5); break; case LINKSTATE_DEADEND: glColor3d(0, 0, 0); break; } glBegin(GL_QUADS); glVertex2d(x1 - myHalfLaneWidth, 0.0); glVertex2d(x1 - myHalfLaneWidth, 0.5); glVertex2d(x2 - myHalfLaneWidth, 0.5); glVertex2d(x2 - myHalfLaneWidth, 0.0); glEnd(); glPopName(); x1 = x2; x2 += w; } glPopMatrix(); }