本文整理汇总了C++中MESegment类的典型用法代码示例。如果您正苦于以下问题:C++ MESegment类的具体用法?C++ MESegment怎么用?C++ MESegment使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MESegment类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assert
SUMOReal
MSEdge::getCurrentTravelTime(SUMOReal minSpeed) const {
assert(minSpeed > 0);
if (!myAmDelayed) {
return myEmptyTraveltime;
}
SUMOReal v = 0;
#ifdef HAVE_INTERNAL
if (MSGlobals::gUseMesoSim) {
MESegment* first = MSGlobals::gMesoNet->getSegmentForEdge(*this);
unsigned segments = 0;
do {
v += first->getMeanSpeed();
first = first->getNextSegment();
segments++;
} while (first != 0);
v /= (SUMOReal) segments;
} else {
#endif
for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) {
v += (*i)->getMeanSpeed();
}
v /= (SUMOReal) myLanes->size();
#ifdef HAVE_INTERNAL
}
#endif
return getLength() / MAX2(minSpeed, v);
}
示例2: getLength
SUMOReal
MSEdge::getMeanSpeed() const {
SUMOReal v = 0;
SUMOReal no = 0;
if (MSGlobals::gUseMesoSim) {
for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this); segment != 0; segment = segment->getNextSegment()) {
const SUMOReal vehNo = (SUMOReal) segment->getCarNumber();
v += vehNo * segment->getMeanSpeed();
no += vehNo;
}
if (no == 0) {
return getLength() / myEmptyTraveltime; // may include tls-penalty
}
} else {
for (std::vector<MSLane*>::const_iterator i = myLanes->begin(); i != myLanes->end(); ++i) {
const SUMOReal vehNo = (SUMOReal)(*i)->getVehicleNumber();
v += vehNo * (*i)->getMeanSpeed();
no += vehNo;
}
if (no == 0) {
return getSpeedLimit();
}
}
return v / no;
}
示例3: UNUSED_PARAMETER
SUMOTime
MSLaneSpeedTrigger::processCommand(bool move2next, SUMOTime currentTime) {
UNUSED_PARAMETER(currentTime);
std::vector<MSLane*>::iterator i;
const SUMOReal speed = getCurrentSpeed();
for (i = myDestLanes.begin(); i != myDestLanes.end(); ++i) {
#ifdef HAVE_INTERNAL
if (MSGlobals::gUseMesoSim) {
MESegment* first = MSGlobals::gMesoNet->getSegmentForEdge((*i)->getEdge());
while (first != 0) {
first->setSpeed(speed, currentTime, -1);
first = first->getNextSegment();
}
continue;
}
#endif
(*i)->setMaxSpeed(speed);
}
if (!move2next) {
// changed from the gui
return 0;
}
if (myCurrentEntry != myLoadedSpeeds.end()) {
++myCurrentEntry;
}
if (myCurrentEntry != myLoadedSpeeds.end()) {
return ((*myCurrentEntry).first) - ((*(myCurrentEntry - 1)).first);
} else {
return 0;
}
}
示例4: GUIParameterTableWindow
GUIParameterTableWindow*
GUIEdge::getParameterWindow(GUIMainWindow& app,
GUISUMOAbstractView& parent) {
GUIParameterTableWindow* ret = 0;
#ifdef HAVE_INTERNAL
ret = new GUIParameterTableWindow(app, *this, 16);
// add edge items
ret->mkItem("length [m]", false, (*myLanes)[0]->getLength());
ret->mkItem("allowed speed [m/s]", false, getAllowedSpeed());
ret->mkItem("occupancy [%]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getBruttoOccupancy, 100.));
ret->mkItem("mean vehicle speed [m/s]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getMeanSpeed));
ret->mkItem("flow [veh/h/lane]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getFlow));
ret->mkItem("#vehicles", true, new CastingFunctionBinding<GUIEdge, SUMOReal, unsigned int>(this, &GUIEdge::getVehicleNo));
ret->mkItem("vehicle ids", false, getVehicleIDs());
// add segment items
MESegment* segment = getSegmentAtPosition(parent.getPositionInformation());
ret->mkItem("segment index", false, segment->getIndex());
ret->mkItem("segment length [m]", false, segment->getLength());
ret->mkItem("segment allowed speed [m/s]", false, segment->getMaxSpeed());
ret->mkItem("segment jam threshold [%]", false, segment->getRelativeJamThreshold());
ret->mkItem("segment occupancy [%]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getRelativeOccupancy));
ret->mkItem("segment mean vehicle speed [m/s]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getMeanSpeed));
ret->mkItem("segment flow [veh/h/lane]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getFlow));
ret->mkItem("segment #vehicles", true, new CastingFunctionBinding<MESegment, SUMOReal, size_t>(segment, &MESegment::getCarNumber));
ret->mkItem("segment leader leave time", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getEventTimeSeconds));
// close building
ret->closeBuilding();
#else
UNUSED_PARAMETER(app);
UNUSED_PARAMETER(parent);
#endif
return ret;
}
示例5: MSTrigger
/* -------------------------------------------------------------------------
* MSTriggeredRerouter - methods
* ----------------------------------------------------------------------- */
MSTriggeredRerouter::MSTriggeredRerouter(const std::string &id,
const std::vector<MSEdge*> &edges,
SUMOReal prob, const std::string &file, bool off)
: MSTrigger(id), SUMOSAXHandler(file),
myProbability(prob), myUserProbability(prob), myAmInUserMode(false) {
// read in the trigger description
if (!XMLSubSys::runParser(*this, file)) {
throw ProcessError();
}
// build actors
#ifdef HAVE_MESOSIM
if (MSGlobals::gUseMesoSim) {
for (std::vector<MSEdge*>::const_iterator j=edges.begin(); j!=edges.end(); ++j) {
MESegment *s = MSGlobals::gMesoNet->getSegmentForEdge(**j);
s->addRerouter(this);
}
} else {
#endif
for (std::vector<MSEdge*>::const_iterator j=edges.begin(); j!=edges.end(); ++j) {
const std::vector<MSLane*> &destLanes = (*j)->getLanes();
for (std::vector<MSLane*>::const_iterator i=destLanes.begin(); i!=destLanes.end(); ++i) {
mySetter.push_back(new Setter(this, (*i)));
}
}
#ifdef HAVE_MESOSIM
}
#endif
if (off) {
setUserMode(true);
setUserUsageProbability(0);
}
}
示例6: MSTrigger
// ===========================================================================
// method definitions
// ===========================================================================
MSTriggeredRerouter::MSTriggeredRerouter(const std::string& id,
const std::vector<MSEdge*>& edges,
SUMOReal prob, const std::string& file, bool off) :
MSTrigger(id),
MSMoveReminder(id),
SUMOSAXHandler(file),
myProbability(prob), myUserProbability(prob), myAmInUserMode(false) {
// read in the trigger description
if (file != "" && !XMLSubSys::runParser(*this, file)) {
throw ProcessError();
}
// build actors
for (std::vector<MSEdge*>::const_iterator j = edges.begin(); j != edges.end(); ++j) {
#ifdef HAVE_INTERNAL
if (MSGlobals::gUseMesoSim) {
MESegment* s = MSGlobals::gMesoNet->getSegmentForEdge(**j);
s->addDetector(this);
continue;
}
#endif
const std::vector<MSLane*>& destLanes = (*j)->getLanes();
for (std::vector<MSLane*>::const_iterator i = destLanes.begin(); i != destLanes.end(); ++i) {
(*i)->addMoveReminder(this);
}
}
if (off) {
setUserMode(true);
setUserUsageProbability(0);
}
}
示例7: return
unsigned int
GUIEdge::getVehicleNo() const {
size_t vehNo = 0;
for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this); segment != 0; segment = segment->getNextSegment()) {
vehNo += segment->getCarNumber();
}
return (unsigned int)vehNo;
}
示例8:
SUMOReal
GUIEdge::getFlow() const {
SUMOReal flow = 0;
for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this); segment != 0; segment = segment->getNextSegment()) {
flow += (SUMOReal) segment->getCarNumber() * segment->getMeanSpeed();
}
return 3600 * flow / (*myLanes)[0]->getLength();
}
示例9:
MELoop::~MELoop() {
for (std::vector<MESegment*>::const_iterator j = myEdges2FirstSegments.begin(); j != myEdges2FirstSegments.end(); ++j) {
for (MESegment* s = *j; s != 0;) {
MESegment* n = s->getNextSegment();
delete s;
s = n;
}
}
}
示例10: while
MESegment*
MELoop::getSegmentForEdge(const MSEdge& e, SUMOReal pos) {
MESegment* s = myEdges2FirstSegments[e.getNumericalID()];
if (pos > 0) {
SUMOReal cpos = 0;
while (s->getNextSegment() != 0 && cpos + s->getLength() < pos) {
cpos += s->getLength();
s = s->getNextSegment();
}
}
return s;
}
示例11: getSpeedLimit
SUMOReal
GUIEdge::getMeanSpeed() const {
SUMOReal v = 0;
SUMOReal no = 0;
for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this); segment != 0; segment = segment->getNextSegment()) {
SUMOReal vehNo = (SUMOReal) segment->getCarNumber();
v += vehNo * segment->getMeanSpeed();
no += vehNo;
}
if (no == 0) {
return getSpeedLimit();
}
return v / no;
}
示例12: switch
bool
MSEdge::insertVehicle(SUMOVehicle& v, SUMOTime time) const {
// when vaporizing, no vehicles are inserted...
if (isVaporizing()) {
return false;
}
#ifdef HAVE_INTERNAL
if (MSGlobals::gUseMesoSim) {
const SUMOVehicleParameter& pars = v.getParameter();
SUMOReal pos = 0.0;
switch (pars.departPosProcedure) {
case DEPART_POS_GIVEN:
if (pars.departPos >= 0.) {
pos = pars.departPos;
} else {
pos = pars.departPos + getLength();
}
if (pos < 0 || pos > getLength()) {
WRITE_WARNING("Invalid departPos " + toString(pos) + " given for vehicle '" +
v.getID() + "'. Inserting at lane end instead.");
pos = getLength();
}
break;
case DEPART_POS_RANDOM:
case DEPART_POS_RANDOM_FREE:
pos = RandHelper::rand(getLength());
break;
default:
break;
}
bool result = false;
MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this, pos);
MEVehicle* veh = static_cast<MEVehicle*>(&v);
if (pars.departPosProcedure == DEPART_POS_FREE) {
while (segment != 0 && !result) {
result = segment->initialise(veh, time);
segment = segment->getNextSegment();
}
} else {
result = segment->initialise(veh, time);
}
return result;
}
#else
UNUSED_PARAMETER(time);
#endif
MSLane* insertionLane = getDepartLane(static_cast<MSVehicle&>(v));
return insertionLane != 0 && insertionLane->insertVehicle(static_cast<MSVehicle&>(v));
}
示例13: locker
void
GUIEdge::drawMesoVehicles(const GUIVisualizationSettings& s) const {
GUIMEVehicleControl* vehicleControl = GUINet::getGUIInstance()->getGUIMEVehicleControl();
if (vehicleControl != 0) {
// draw the meso vehicles
vehicleControl->secureVehicles();
AbstractMutex::ScopedLocker locker(myLock);
size_t laneIndex = 0;
MESegment::Queue queue;
for (std::vector<MSLane*>::const_iterator msl = myLanes->begin(); msl != myLanes->end(); ++msl, ++laneIndex) {
GUILane* l = static_cast<GUILane*>(*msl);
// go through the vehicles
SUMOReal segmentOffset = 0; // offset at start of current segment
for (MESegment* segment = MSGlobals::gMesoNet->getSegmentForEdge(*this);
segment != 0; segment = segment->getNextSegment()) {
const SUMOReal length = segment->getLength();
if (laneIndex < segment->numQueues()) {
// make a copy so we don't have to worry about synchronization
queue = segment->getQueue(laneIndex);
const size_t queueSize = queue.size();
SUMOReal vehiclePosition = segmentOffset + length;
// draw vehicles beginning with the leader at the end of the segment
SUMOReal xOff = 0;
for (size_t i = 0; i < queueSize; ++i) {
GUIMEVehicle* veh = static_cast<GUIMEVehicle*>(queue[queueSize - i - 1]);
const SUMOReal vehLength = veh->getVehicleType().getLengthWithGap();
while (vehiclePosition < segmentOffset) {
// if there is only a single queue for a
// multi-lane edge shift vehicles and start
// drawing again from the end of the segment
vehiclePosition += length;
xOff += 2;
}
const Position p = l->geometryPositionAtOffset(vehiclePosition);
const SUMOReal angle = l->getShape().rotationAtOffset(l->interpolateLanePosToGeometryPos(vehiclePosition));
veh->setPositionAndAngle(p, angle);
veh->drawGL(s);
vehiclePosition -= vehLength;
}
}
segmentOffset += length;
}
glPopMatrix();
}
vehicleControl->releaseVehicles();
}
}
示例14: GUIParameterTableWindow
GUIParameterTableWindow*
GUIEdge::getParameterWindow(GUIMainWindow& app,
GUISUMOAbstractView& parent) {
GUIParameterTableWindow* ret = 0;
ret = new GUIParameterTableWindow(app, *this, 18);
// add edge items
ret->mkItem("length [m]", false, (*myLanes)[0]->getLength());
ret->mkItem("allowed speed [m/s]", false, getAllowedSpeed());
ret->mkItem("brutto occupancy [%]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getBruttoOccupancy, 100.));
ret->mkItem("mean vehicle speed [m/s]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getMeanSpeed));
ret->mkItem("flow [veh/h/lane]", true, new FunctionBinding<GUIEdge, SUMOReal>(this, &GUIEdge::getFlow));
ret->mkItem("routing speed [m/s]", true, new FunctionBinding<MSEdge, SUMOReal>(this, &MSEdge::getRoutingSpeed));
ret->mkItem("#vehicles", true, new CastingFunctionBinding<GUIEdge, SUMOReal, int>(this, &GUIEdge::getVehicleNo));
ret->mkItem("vehicle ids", false, getVehicleIDs());
// add segment items
MESegment* segment = getSegmentAtPosition(parent.getPositionInformation());
ret->mkItem("segment index", false, segment->getIndex());
ret->mkItem("segment queues", false, segment->numQueues());
ret->mkItem("segment length [m]", false, segment->getLength());
ret->mkItem("segment allowed speed [m/s]", false, segment->getEdge().getSpeedLimit());
ret->mkItem("segment jam threshold [%]", false, segment->getRelativeJamThreshold() * 100);
ret->mkItem("segment brutto occupancy [%]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getRelativeOccupancy, 100));
ret->mkItem("segment mean vehicle speed [m/s]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getMeanSpeed));
ret->mkItem("segment flow [veh/h/lane]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getFlow));
ret->mkItem("segment #vehicles", true, new CastingFunctionBinding<MESegment, SUMOReal, int>(segment, &MESegment::getCarNumber));
ret->mkItem("segment leader leave time", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getEventTimeSeconds));
ret->mkItem("segment headway [s]", true, new FunctionBinding<MESegment, SUMOReal>(segment, &MESegment::getLastHeadwaySeconds));
// close building
ret->closeBuilding();
return ret;
}
示例15: MSDetectorFileOutput
// ===========================================================================
// method definitions
// ===========================================================================
MSRouteProbe::MSRouteProbe(const std::string& id, const MSEdge* edge, const std::string& distID, const std::string& lastID) :
MSDetectorFileOutput(id), MSMoveReminder(id) {
myCurrentRouteDistribution = std::make_pair(distID, MSRoute::distDictionary(distID));
if (myCurrentRouteDistribution.second == 0) {
myCurrentRouteDistribution.second = new RandomDistributor<const MSRoute*>();
MSRoute::dictionary(distID, myCurrentRouteDistribution.second, false);
}
myLastRouteDistribution = std::make_pair(lastID, MSRoute::distDictionary(lastID));
#ifdef HAVE_INTERNAL
if (MSGlobals::gUseMesoSim) {
MESegment* seg = MSGlobals::gMesoNet->getSegmentForEdge(*edge);
while (seg != 0) {
seg->addDetector(this);
seg = seg->getNextSegment();
}
return;
}
#endif
for (std::vector<MSLane*>::const_iterator it = edge->getLanes().begin(); it != edge->getLanes().end(); ++it) {
(*it)->addMoveReminder(this);
}
}