本文整理汇总了C++中MESegment::getLengthGeometryFactor方法的典型用法代码示例。如果您正苦于以下问题:C++ MESegment::getLengthGeometryFactor方法的具体用法?C++ MESegment::getLengthGeometryFactor怎么用?C++ MESegment::getLengthGeometryFactor使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MESegment
的用法示例。
在下文中一共展示了MESegment::getLengthGeometryFactor方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setVehicleColor
void
GUIEdge::drawMesoVehicles(const GUIVisualizationSettings& s) const {
const GUIVisualizationTextSettings& nameSettings = s.vehicleName;
const SUMOReal exaggeration = s.vehicleSize.getExaggeration(s);
GUIMEVehicleControl* vehicleControl = GUINet::getGUIInstance()->getGUIMEVehicleControl();
if (vehicleControl != 0) {
// draw the meso vehicles
vehicleControl->secureVehicles();
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() * segment->getLengthGeometryFactor();
if (laneIndex < segment->numQueues()) {
// make a copy so we don't have to worry about synchronization
queue = segment->getQueue(laneIndex);
const SUMOReal avgCarSize = segment->getBruttoOccupancy() / segment->getCarNumber();
const SUMOReal avgCarHalfSize = 0.5 * avgCarSize;
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) {
MSBaseVehicle* veh = queue[queueSize - i - 1];
const SUMOReal vehLength = veh->getVehicleType().getLengthWithGap();
setVehicleColor(s, veh);
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().rotationDegreeAtOffset(l->interpolateLanePosToGeometryPos(vehiclePosition));
glPushMatrix();
glTranslated(p.x(), p.y(), 0);
glRotated(angle, 0, 0, 1);
glTranslated(xOff, 0, GLO_VEHICLE);
glScaled(exaggeration, vehLength * exaggeration, 1);
glBegin(GL_TRIANGLES);
glVertex2d(0, 0);
glVertex2d(0 - 1.25, 1);
glVertex2d(0 + 1.25, 1);
glEnd();
glPopMatrix();
if (nameSettings.show) {
glPushMatrix();
glRotated(angle, 0, 0, 1);
glTranslated(xOff, 0, 0);
glRotated(-angle, 0, 0, 1);
GLHelper::drawText(veh->getID(),
l->geometryPositionAtOffset(vehiclePosition - 0.5 * vehLength),
GLO_MAX, nameSettings.size / s.scale, nameSettings.color);
glPopMatrix();
}
vehiclePosition -= vehLength;
}
}
segmentOffset += length;
}
glPopMatrix();
}
vehicleControl->releaseVehicles();
}
}