View Javadoc
1   package org.opentrafficsim.animation.data;
2   
3   import java.util.List;
4   
5   import org.djunits.value.vdouble.scalar.Length;
6   import org.djutils.draw.line.PolyLine2d;
7   import org.opentrafficsim.base.StripeElement;
8   import org.opentrafficsim.base.StripeElement.StripeLateralSync;
9   import org.opentrafficsim.base.geometry.DirectionalPolyLine;
10  import org.opentrafficsim.base.geometry.OtsShape;
11  import org.opentrafficsim.draw.road.StripeAnimation.StripeData;
12  import org.opentrafficsim.road.network.lane.Stripe;
13  
14  /**
15   * Animation data of a Stripe.
16   * <p>
17   * Copyright (c) 2023-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
18   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
19   * </p>
20   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
21   */
22  public class AnimationStripeData extends AnimationCrossSectionElementData<Stripe> implements StripeData
23  {
24  
25      /** Center line. */
26      private DirectionalPolyLine directionalCenterLine = null;
27  
28      /**
29       * Constructor.
30       * @param stripe stripe
31       */
32      public AnimationStripeData(final Stripe stripe)
33      {
34          super(stripe);
35      }
36  
37      @Override
38      public DirectionalPolyLine getCenterLine()
39      {
40          if (this.directionalCenterLine == null)
41          {
42              this.directionalCenterLine = new DirectionalPolyLine(getObject().getCenterLine(),
43                      getObject().getLink().getStartNode().getHeading(), getObject().getLink().getEndNode().getHeading());
44          }
45          return this.directionalCenterLine;
46      }
47  
48      @Override
49      public PolyLine2d getReferenceLine()
50      {
51          return getObject().getLateralSync().equals(StripeLateralSync.NONE) ? getObject().getCenterLine()
52                  : getObject().getLinkReferenceLine();
53      }
54  
55      @Override
56      public PolyLine2d getLine()
57      {
58          return OtsShape.transformLine(getObject().getCenterLine(), getLocation());
59      }
60  
61      @Override
62      public List<StripeElement> getElements()
63      {
64          return getObject().getElements();
65      }
66  
67      @Override
68      public Length getDashOffset()
69      {
70          return getObject().getDashOffset();
71      }
72  
73      @Override
74      public Length getWidth(final Length location)
75      {
76          return getObject().getWidth(location);
77      }
78  
79      @Override
80      public String toString()
81      {
82          return "Stripe " + getObject().getLink().getId() + " " + getObject().getOffsetAtBegin();
83      }
84  
85  }