21 package org.matsim.core.mobsim.qsim.qnetsimengine;
23 import java.util.ArrayList;
24 import java.util.Collection;
25 import java.util.List;
26 import java.util.Objects;
28 import org.apache.logging.log4j.LogManager;
29 import org.apache.logging.log4j.Logger;
57 private final static Logger
log = LogManager.getLogger(
QLinkImpl.class);
68 this.netsimEngine = netsimEngine2;
70 final void setLaneFactory(
LaneFactory laneFactory ) {
83 if ( laneFactory == null ) {
84 laneFactory =
new QueueWithBuffer.Builder( context ) ;
86 Objects.requireNonNull( linkSpeedCalculator );
87 return new QLinkImpl( link, toNode, laneFactory, context, netsimEngine, linkSpeedCalculator, vehicleHandler) ;
98 public QLaneI createLane(AbstractQLink qLinkImpl);
110 super(link2, toNode, context, netsimEngine, linkSpeedCalculator, vehicleHandler) ;
116 this.visdata = this.
new VisDataImpl() ;
117 super.setTransitQLink(
new TransitQLink(this.qlane) ) ;
122 super.clearVehicles();
133 this.getTransitQLink().handleTransitVehiclesInStopQueue(now);
136 this.getTransitQLink().handleTransitVehiclesInStopQueue(now);
154 while (!getWaitingList().isEmpty()) {
158 QVehicle veh = this.getWaitingList().poll();
164 if ( this.getTransitQLink().addTransitToStopQueue(now, veh, this.
getLink().getId()) ) {
202 for (
QVehicle veh : this.getWaitingList()) {
203 if (veh.getId().equals(vehicleId))
210 Collection<MobsimVehicle> vehicles =
new ArrayList<>();
211 vehicles.addAll(this.getTransitQLink().getTransitVehicleStopQueue());
212 vehicles.addAll(this.getWaitingList());
220 double getSpaceCap() {
232 double getSimulatedFlowCapacityPerTimeStep() {
247 return qlane.
isActive() || !this.getWaitingList().isEmpty() || !this.getTransitQLink().getTransitVehicleStopQueue().isEmpty() ;
277 class VisDataImpl
implements VisData {
282 private VisDataImpl() {
284 if (nodeOffset != 0.0) {
285 nodeOffset = nodeOffset +2.0;
294 public Collection<AgentSnapshotInfo> addAgentSnapshotInfo( Collection<AgentSnapshotInfo> positions) {
298 if (visLink != null) {
304 positions = roadVisData.addAgentSnapshotInfo(positions,now) ;
310 cnt2 = context.snapshotInfoBuilder.positionVehiclesFromTransitStop(positions,
getLink(), getTransitQLink().getTransitVehicleStopQueue(), cnt2 );
313 cnt2 = context.snapshotInfoBuilder.positionVehiclesFromWaitingList(positions,
QLinkImpl.this.getLink(), cnt2,
316 cnt2 = context.snapshotInfoBuilder.positionAgentsInActivities(positions,
QLinkImpl.this.getLink(),
317 QLinkImpl.this.getAdditionalAgentsOnLink(), cnt2);
326 List<QLaneI> list =
new ArrayList<>() ;
327 list.add( this.qlane ) ;
void changeEffectiveNumberOfLanes(final double val)
boolean hasGreenForToLink(Id< Link > toLinkId)
NetsimEngineContext context
VehicleHandler vehicleHandler
void setVehicleHandler(VehicleHandler vehicleHandler)
final NetsimEngineContext context
QVehicle getVehicle(final Id< Vehicle > vehicleId)
void addTransitSlightlyUpstreamOfStop(final QVehicle veh)
void changeUnscaledFlowCapacityPerSecond(final double val)
QVehicle getVehicle(Id< Vehicle > vehicleId)
Coord getLinkStartCoord()
NetsimInternalInterface netsimEngine
Collection< MobsimVehicle > getAllNonParkedVehicles()
List< QLaneI > getOfferingQLanes()
void processEvent(final Event event)
Collection< MobsimVehicle > getAllVehicles()
boolean isNotOfferingVehicle()
boolean isNotOfferingVehicle()
boolean hasGreenForAllToLinks()
void addFromWait(final QVehicle veh)
QLaneI createLane(AbstractQLink qLinkImpl)
LinkSpeedCalculator linkSpeedCalculator
void setSignalized(boolean isSignalized)
double getStorageCapacity()
boolean isInsertingWaitingVehiclesBeforeDrivingVehicles()
void setSignalStateAllTurningMoves(SignalGroupState state)
QLaneI getAcceptingQLane()
void recalcTimeVariantAttributes()
boolean checkForActivity()
double getSimulatedFlowCapacityPerTimeStep()
boolean isWantingToArriveOnCurrentLink()
MobsimDriverAgent getDriver()
VisLinkWLanes createVisLinkLanes(CoordinateTransformation transform, VisLink link, double nodeOffsetMeter, List< ModelLane > lanes)
void setLinkSpeedCalculator(LinkSpeedCalculator linkSpeedCalculator)
void setSignalStateForTurningMove(SignalGroupState state, Id< Link > toLinkId)
void recalcTimeVariantAttributes()
QLinkImpl(final Link link2, final QNodeI toNode, final LaneFactory roadFactory, NetsimEngineContext context, NetsimInternalInterface netsimEngine, LinkSpeedCalculator linkSpeedCalculator, VehicleHandler vehicleHandler)
boolean isAcceptingFromWait(QVehicle veh)
void recalculatePositions(VisLinkWLanes linkData, SnapshotLinkWidthCalculator linkWidthCalculator)