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.djutils.draw.point.OrientedPoint2d;
8 import org.opentrafficsim.base.StripeElement;
9 import org.opentrafficsim.base.StripeElement.StripeLateralSync;
10 import org.opentrafficsim.base.geometry.DirectionalPolyLine;
11 import org.opentrafficsim.base.geometry.OtsLocatable;
12 import org.opentrafficsim.draw.road.StripeAnimation.StripeData;
13 import org.opentrafficsim.road.network.lane.Stripe;
14
15
16
17
18
19
20
21
22
23 public class AnimationStripeData extends AnimationCrossSectionElementData<Stripe> implements StripeData
24 {
25
26
27 private DirectionalPolyLine directionalCenterLine = null;
28
29
30
31
32
33 public AnimationStripeData(final Stripe stripe)
34 {
35 super(stripe);
36 }
37
38 @Override
39 public DirectionalPolyLine getCenterLine()
40 {
41 if (this.directionalCenterLine == null)
42 {
43 this.directionalCenterLine = new DirectionalPolyLine(getElement().getCenterLine(),
44 getElement().getLink().getStartNode().getHeading(), getElement().getLink().getEndNode().getHeading());
45 }
46 return this.directionalCenterLine;
47 }
48
49 @Override
50 public PolyLine2d getReferenceLine()
51 {
52 return getElement().getLateralSync().equals(StripeLateralSync.NONE) ? getElement().getCenterLine()
53 : getLinkReferenceLine();
54 }
55
56
57
58
59
60 private PolyLine2d getLinkReferenceLine()
61 {
62 return getElement().getLinkReferenceLine();
63 }
64
65 @Override
66 public PolyLine2d getLine()
67 {
68 return OtsLocatable.transformLine(getElement().getCenterLine(), getLocation());
69 }
70
71 @Override
72 public List<StripeElement> getElements()
73 {
74 return getElement().getElements();
75 }
76
77 @Override
78 public Length getDashOffset()
79 {
80 return getElement().getDashOffset();
81 }
82
83 @Override
84 public OrientedPoint2d getLocation()
85 {
86 return getElement().getLocation();
87 }
88
89 @Override
90 public Length getWidth(final Length location)
91 {
92 return getElement().getWidth(location);
93 }
94
95 @Override
96 public String toString()
97 {
98 return "Stripe " + getElement().getLink().getId() + " " + getElement().getOffsetAtBegin();
99 }
100
101 }