create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / rocketfigure / RingComponentShapes.java
1 package net.sf.openrocket.gui.rocketfigure;\r
2 \r
3 \r
4 import java.awt.Shape;\r
5 import java.awt.geom.Ellipse2D;\r
6 import java.awt.geom.Rectangle2D;\r
7 \r
8 import net.sf.openrocket.util.Coordinate;\r
9 import net.sf.openrocket.util.Transformation;\r
10 \r
11 \r
12 public class RingComponentShapes extends RocketComponentShapes {\r
13 \r
14         public static Shape[] getShapesSide(net.sf.openrocket.rocketcomponent.RocketComponent component, \r
15                         Transformation transformation) {\r
16                 net.sf.openrocket.rocketcomponent.RingComponent tube = (net.sf.openrocket.rocketcomponent.RingComponent)component;\r
17                 Shape[] s;\r
18                 \r
19                 double length = tube.getLength();\r
20                 double or = tube.getOuterRadius();\r
21                 double ir = tube.getInnerRadius();\r
22                 \r
23 \r
24                 Coordinate[] start = transformation.transform(tube.toAbsolute(new Coordinate(0,0,0)));\r
25 \r
26                 if ((or-ir >= 0.0012) && (ir > 0)) {\r
27                         // Draw outer and inner\r
28                         s = new Shape[start.length*2];\r
29                         for (int i=0; i < start.length; i++) {\r
30                                 s[2*i] = new Rectangle2D.Double(start[i].x*S,(start[i].y-or)*S,\r
31                                                 length*S,2*or*S);\r
32                                 s[2*i+1] = new Rectangle2D.Double(start[i].x*S,(start[i].y-ir)*S,\r
33                                                 length*S,2*ir*S);\r
34                         }\r
35                 } else {\r
36                         // Draw only outer\r
37                         s = new Shape[start.length];\r
38                         for (int i=0; i < start.length; i++) {\r
39                                 s[i] = new Rectangle2D.Double(start[i].x*S,(start[i].y-or)*S,\r
40                                                 length*S,2*or*S);\r
41                         }\r
42                 }\r
43                 return s;\r
44         }\r
45         \r
46 \r
47         public static Shape[] getShapesBack(net.sf.openrocket.rocketcomponent.RocketComponent component, \r
48                         Transformation transformation) {\r
49                 net.sf.openrocket.rocketcomponent.RingComponent tube = (net.sf.openrocket.rocketcomponent.RingComponent)component;\r
50                 Shape[] s;\r
51                 \r
52                 double or = tube.getOuterRadius();\r
53                 double ir = tube.getInnerRadius();\r
54                 \r
55 \r
56                 Coordinate[] start = transformation.transform(tube.toAbsolute(new Coordinate(0,0,0)));\r
57 \r
58                 if ((ir < or) && (ir > 0)) {\r
59                         // Draw inner and outer\r
60                         s = new Shape[start.length*2];\r
61                         for (int i=0; i < start.length; i++) {\r
62                                 s[2*i]   = new Ellipse2D.Double((start[i].z-or)*S, (start[i].y-or)*S,\r
63                                                 2*or*S, 2*or*S);\r
64                                 s[2*i+1] = new Ellipse2D.Double((start[i].z-ir)*S, (start[i].y-ir)*S,\r
65                                                 2*ir*S, 2*ir*S);\r
66                         }\r
67                 } else {\r
68                         // Draw only outer\r
69                         s = new Shape[start.length];\r
70                         for (int i=0; i < start.length; i++) {\r
71                                 s[i] = new Ellipse2D.Double((start[i].z-or)*S,(start[i].y-or)*S,2*or*S,2*or*S);\r
72                         }\r
73                 }\r
74                 return s;\r
75         }\r
76         \r
77 }\r