private void drawLink(GL2 gl, VisLinkWLanes link){ //draw a rect around linkStart this.setColor(gl, Color.LANECOLOR); this.drawQuad(gl, link.getLinkStartCenterPoint(), quadSizeLinkStart); if (link.getLaneData() != null) { //draw the lanes for (VisLane ld : link.getLaneData().values()){ this.drawLane(gl, ld, link); } } else { //draw the link this.drawVertex(gl, link.getLinkStartCenterPoint(), link.getLinkEndCenterPoint(), (float) (link.getNumberOfLanes() * 2)); } }
private Point2D.Double calculatePointOnLink(final VisLinkWLanes laneLinkData, final double position, final double horizontalFraction) { Point2D.Double lenghtPoint = this.calcPoint(laneLinkData.getLinkStart(), laneLinkData.getNormalizedLinkVector(), position); return this.calcPoint(lenghtPoint, laneLinkData.getLinkOrthogonalVector(), horizontalFraction * laneLinkData.getLinkWidth()); }
public void connect(Map<String, VisLinkWLanes> otfNetwork){ for (VisLinkWLanes otfLink : otfNetwork.values()){ if (otfLink.getLaneData() == null || otfLink.getLaneData().isEmpty()){ if (otfLink.getToLinkIds() != null){ for (String toLinkId : otfLink.getToLinkIds()){ VisLinkWLanes toLink = otfNetwork.get(toLinkId); otfLink.addToLink(toLink); } } } else { for (VisLane otfLane : otfLink.getLaneData().values()){ if (otfLane.getToLinkIds() != null) { for (String toLinkId : otfLane.getToLinkIds()){ VisLinkWLanes toLink = otfNetwork.get(toLinkId); otfLane.addToLink(toLink); } } } } } }
public void recalculatePositions(VisLinkWLanes linkData, SnapshotLinkWidthCalculator linkWidthCalculator) { double linkWidth = linkWidthCalculator.calculateLinkWidth(linkData.getNumberOfLanes()) ; linkData.setLinkWidth(linkWidth); Point2D.Double linkStartCenter = this.calculatePointOnLink(linkData, 0.0, 0.5); linkData.setLinkStartCenterPoint(linkStartCenter); if (linkData.getLaneData() == null || linkData.getLaneData().isEmpty()){ double x = linkData.getLinkEnd().x + (0.5 * linkWidth * linkData.getLinkOrthogonalVector().x); double y = linkData.getLinkEnd().y + (0.5 * linkWidth * linkData.getLinkOrthogonalVector().y); linkData.setLinkEndCenterPoint(new Point2D.Double(x, y)); double numberOfLinkParts = (2 * linkData.getMaximalAlignment()) + 2; for (VisLane lane : linkData.getLaneData().values()){ double horizontalFraction = 0.5 - (lane.getAlignment() / numberOfLinkParts); Point2D.Double laneStart = calculatePointOnLink(linkData, lane.getStartPosition(), horizontalFraction); Point2D.Double drivingLaneStart = this.calcPoint(laneStart, linkData.getLinkOrthogonalVector(), laneOffset); Point2D.Double drivingLaneEnd = this.calcPoint(laneEnd, linkData.getLinkOrthogonalVector(), laneOffset); lane.addDrivingLane(i, drivingLaneStart, drivingLaneEnd); laneOffset = laneOffset + linkWidthCalculator.getLaneWidth();
VisLinkWLanes lanesLinkData = new VisLinkWLanes(link.getLink().getId().toString()); lanesLinkData.setLinkStartEndPoint(scaledLinkStart, scaledLinkEnd); lanesLinkData.setNormalizedLinkVector(deltaLinkNorm); lanesLinkData.setLinkOrthogonalVector(normalizedOrthogonal); lanesLinkData.setNumberOfLanes(link.getLink().getNumberOfLanes()); for (ModelLane lane : lanes){ VisLane visLane = this.createVisLane(lane, link.getLink().getLength(), linkScale, linkLengthCorrectionFactor); lanesLinkData.addLaneData(visLane); if (visLane.getAlignment() > maxAlignment) { maxAlignment = visLane.getAlignment(); lanesLinkData.setMaximalAlignment(maxAlignment); VisLane otfLane = lanesLinkData.getLaneData().get(lane.getLaneData().getId().toString()); if (lane.getToLanes() == null || lane.getToLanes().isEmpty()){ for (Id<Link> id : lane.getLaneData().getToLinkIds()){ VisLane otfToLane = lanesLinkData.getLaneData().get(toLane.getLaneData().getId().toString()); otfLane.addToLane(otfToLane); lanesLinkData.addToLinkId(id.toString());
private void drawLinkEndsAndSignals(GL2 gl, VisLinkWLanes link) { if (link.getLaneData() != null) { for (VisLane ld : link.getLaneData().values()){ if (ld.getSignals() != null){ this.drawSignals(gl, ld.getSignals(), ld.getEndPoint(), link.getLinkOrthogonalVector(), ld.getToLinks()); } else { this.setColor(gl, Color.LANECOLOR); this.drawLaneEnd(gl, ld); this.drawToLinks(gl, ld.getEndPoint(), ld.getToLinks()); } } } else { //link end without lanes if (link.getSignals() != null){ this.drawSignals(gl, link.getSignals(), link.getLinkEndCenterPoint(), link.getLinkOrthogonalVector(), link.getToLinks()); } else { this.setColor(gl, Color.LANECOLOR); this.drawQuad(gl, link.getLinkEndCenterPoint(), quadSizeLinkEnd); this.drawToLinks(gl, link.getLinkEndCenterPoint(), link.getToLinks()); } } }
int noLanes = in.getInt(); if (noLanes == 0){ link.addSignal(signal); VisLane laneData = link.getLaneData().get(laneId); laneData.addSignal(signal);
@Override public Collection<AgentSnapshotInfo> addAgentSnapshotInfo( final Collection<AgentSnapshotInfo> positions) { double now = context.getSimTimer().getTimeOfDay() ; if (visLink != null) { for (QLaneI ql : QLinkLanesImpl.this.laneQueues.values()) { VisLane otfLane = visLink.getLaneData().get( ql.getId().toString()); ((QueueWithBuffer.VisDataImpl) ql.getVisData()).setVisInfo( otfLane.getStartCoord(), otfLane.getEndCoord()); } } for (QLaneI road : QLinkLanesImpl.this.getQueueLanes().values()) { road.getVisData().addAgentSnapshotInfo(positions, now); } int cnt2 = 10; // treat vehicles from transit stops cnt2 = context.snapshotInfoBuilder.positionVehiclesFromTransitStop(positions, getLink(), getTransitQLink().getTransitVehicleStopQueue(), cnt2); // treat vehicles from waiting list: context.snapshotInfoBuilder.positionVehiclesFromWaitingList(positions, QLinkLanesImpl.this.getLink(), cnt2, QLinkLanesImpl.this.getWaitingList()); cnt2 = QLinkLanesImpl.this.getWaitingList().size(); context.snapshotInfoBuilder.positionAgentsInActivities(positions, QLinkLanesImpl.this.getLink(), QLinkLanesImpl.this.getAdditionalAgentsOnLink(), cnt2); return positions; } }
public void setLinkStartEndPoint(Double linkStart, Double linkEnd) { this.linkStart = linkStart; this.linkEnd = linkEnd; this.calcCoords(); }