1 package org.opentrafficsim.core.network.point2d;
2
3 import java.awt.geom.Point2D;
4 import java.rmi.RemoteException;
5
6 import javax.media.j3d.Bounds;
7 import javax.vecmath.Point3d;
8
9 import nl.tudelft.simulation.language.d3.BoundingBox;
10 import nl.tudelft.simulation.language.d3.DirectedPoint;
11
12 import org.opentrafficsim.core.network.AbstractLink;
13 import org.opentrafficsim.core.unit.FrequencyUnit;
14 import org.opentrafficsim.core.unit.LengthUnit;
15 import org.opentrafficsim.core.value.vdouble.scalar.DoubleScalar;
16
17
18
19
20
21
22
23
24
25
26
27
28 public class LinkPoint2D<IDL, IDN> extends AbstractLink<IDL, IDN, Point2D, NodePoint2D<IDN>>
29 {
30
31 private static final long serialVersionUID = 20150104L;
32
33
34
35
36
37
38
39
40
41 public LinkPoint2D(final IDL id, final NodePoint2D<IDN> startNode, final NodePoint2D<IDN> endNode,
42 final DoubleScalar.Rel<LengthUnit> length, final DoubleScalar.Abs<FrequencyUnit> capacity)
43 {
44 super(id, startNode, endNode, length, capacity);
45 }
46
47
48
49
50
51
52
53
54 public LinkPoint2D(final IDL id, final NodePoint2D<IDN> startNode, final NodePoint2D<IDN> endNode,
55 final DoubleScalar.Rel<LengthUnit> length)
56 {
57 super(id, startNode, endNode, length);
58 }
59
60
61 @Override
62 public final DirectedPoint getLocation() throws RemoteException
63 {
64 double x = (getEndNode().getX() - getStartNode().getX()) / 2.0;
65 double y = (getEndNode().getY() - getStartNode().getY()) / 2.0;
66 return new DirectedPoint(new double[] {x, y, 0.0d});
67 }
68
69
70 @Override
71 public final Bounds getBounds() throws RemoteException
72 {
73 DirectedPoint c = getLocation();
74 double minX = Math.min(getEndNode().getX(), getStartNode().getX());
75 double minY = Math.min(getEndNode().getY(), getStartNode().getY());
76 double maxX = Math.max(getEndNode().getX(), getStartNode().getX());
77 double maxY = Math.max(getEndNode().getY(), getStartNode().getY());
78 return new BoundingBox(new Point3d(minX - c.x, minY - c.y, 0.0d), new Point3d(maxX - c.x, maxY - c.y, 0.0d));
79 }
80
81
82
83
84
85
86
87
88
89
90
91
92 public static class STR extends LinkPoint2D<String, String>
93 {
94
95 private static final long serialVersionUID = 20150104L;
96
97
98
99
100
101
102
103
104
105 public STR(final String id, final NodePoint2D.STR startNode, final NodePoint2D.STR endNode,
106 final DoubleScalar.Rel<LengthUnit> length, final DoubleScalar.Abs<FrequencyUnit> capacity)
107 {
108 super(id, startNode, endNode, length, capacity);
109 }
110
111
112
113
114
115
116
117
118 public STR(final String id, final NodePoint2D.STR startNode, final NodePoint2D.STR endNode,
119 final DoubleScalar.Rel<LengthUnit> length)
120 {
121 super(id, startNode, endNode, length);
122 }
123 }
124
125
126
127
128
129
130
131
132
133
134
135
136 public static class INT extends LinkPoint2D<Integer, Integer>
137 {
138
139 private static final long serialVersionUID = 20150104L;
140
141
142
143
144
145
146
147
148
149 public INT(final int id, final NodePoint2D.INT startNode, final NodePoint2D.INT endNode,
150 final DoubleScalar.Rel<LengthUnit> length, final DoubleScalar.Abs<FrequencyUnit> capacity)
151 {
152 super(id, startNode, endNode, length, capacity);
153 }
154
155
156
157
158
159
160
161
162 public INT(final int id, final NodePoint2D.INT startNode, final NodePoint2D.INT endNode,
163 final DoubleScalar.Rel<LengthUnit> length)
164 {
165 super(id, startNode, endNode, length);
166 }
167 }
168
169 }