View Javadoc
1   package org.opentrafficsim.draw.graphs;
2   
3   import org.djunits.value.vdouble.scalar.Time;
4   
5   /**
6    * Interface between plots (subclasses of {@code AbstractPlot}) and some source that knows about time in the context, e.g. a
7    * simulator, or a data loader which knows all time has past. For offline purposes, {@code PlotScheduler.OFFLINE} can be used.
8    * <p>
9    * Copyright (c) 2023-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
11   * </p>
12   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
13   */
14  public interface PlotScheduler
15  {
16  
17      /**
18       * Default offline scheduler. This will only provide an infinite time, causing {@code increaseTime()} to be invoked on all
19       * plots once.
20       */
21      PlotScheduler OFFLINE = new PlotScheduler()
22      {
23          /** {@inheritDoc} */
24          @Override
25          public Time getTime()
26          {
27              return Time.instantiateSI(Double.MAX_VALUE);
28          }
29  
30          /** {@inheritDoc} */
31          @Override
32          public void cancelEvent(final AbstractPlot abstractPlot)
33          {
34              // no action required
35          }
36  
37          /** {@inheritDoc} */
38          @Override
39          public void scheduleUpdate(final Time time, final AbstractPlot abstractPlot)
40          {
41              // no action required
42          }
43      };
44  
45      /**
46       * Returns the time.
47       * @return Time; time.
48       */
49      Time getTime();
50  
51      /**
52       * Cancel event on plot.
53       * @param abstractPlot AbstractPlot; plot.
54       */
55      void cancelEvent(AbstractPlot abstractPlot);
56  
57      /**
58       * Schedule {@code update()} call on abstractPlot
59       * @param time Time; time.
60       * @param abstractPlot AbstractPlot; plot.
61       */
62      void scheduleUpdate(Time time, AbstractPlot abstractPlot);
63  
64  }