1 package org.opentrafficsim.draw.graphs;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.djunits.value.vdouble.scalar.Duration;
7 import org.djunits.value.vdouble.scalar.Length;
8 import org.djunits.value.vdouble.scalar.Time;
9 import org.opentrafficsim.core.dsol.OTSSimulatorInterface;
10 import org.opentrafficsim.draw.graphs.GraphPath.Section;
11 import org.opentrafficsim.kpi.sampling.KpiLaneDirection;
12 import org.opentrafficsim.kpi.sampling.SamplerData;
13 import org.opentrafficsim.kpi.sampling.TrajectoryGroup;
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public abstract class AbstractSamplerPlot extends AbstractSpaceTimePlot
30 {
31
32
33 private final SamplerData<?> samplerData;
34
35
36 private final GraphPath<KpiLaneDirection> path;
37
38
39 private List<Time> lastUpdateTime = new ArrayList<>();
40
41
42 private List<List<TrajectoryGroup<?>>> trajectoriesCache = new ArrayList<>();
43
44
45
46
47
48
49
50
51
52
53 public AbstractSamplerPlot(final String caption, final Duration updateInterval, final OTSSimulatorInterface simulator,
54 final SamplerData<?> samplerData, final GraphPath<KpiLaneDirection> path, final Duration delay)
55 {
56 super(caption, updateInterval, simulator, delay, DEFAULT_INITIAL_UPPER_TIME_BOUND);
57 this.samplerData = samplerData;
58 this.path = path;
59 for (int i = 0; i < path.getNumberOfSeries(); i++)
60 {
61 this.trajectoriesCache.add(new ArrayList<>());
62 this.lastUpdateTime.add(null);
63 }
64 }
65
66
67
68
69
70
71 protected List<TrajectoryGroup<?>> getTrajectories(final int series)
72 {
73 if (this.lastUpdateTime.get(series) == null || this.lastUpdateTime.get(series).lt(getUpdateTime()))
74 {
75 List<TrajectoryGroup<?>> cache = new ArrayList<>();
76 for (Section<KpiLaneDirection> section : getPath().getSections())
77 {
78 cache.add(this.samplerData.getTrajectoryGroup(section.getSource(series)));
79 }
80 this.trajectoriesCache.set(series, cache);
81 this.lastUpdateTime.set(series, getUpdateTime());
82 }
83 return this.trajectoriesCache.get(series);
84 }
85
86
87
88
89
90 public final GraphPath<KpiLaneDirection> getPath()
91 {
92 return this.path;
93 }
94
95
96 @Override
97 protected final Length getEndLocation()
98 {
99 return getPath().getTotalLength();
100 }
101
102
103
104
105
106 protected final SamplerData<?> getSamplerData()
107 {
108 return this.samplerData;
109 }
110
111 }