package net.sf.openrocket.gui.rocketfigure;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.Transformation;
public class RingComponentShapes extends RocketComponentShapes {
public static Shape[] getShapesSide(net.sf.openrocket.rocketcomponent.RocketComponent component,
Transformation transformation) {
net.sf.openrocket.rocketcomponent.RingComponent tube = (net.sf.openrocket.rocketcomponent.RingComponent)component;
Shape[] s;
double length = tube.getLength();
double or = tube.getOuterRadius();
double ir = tube.getInnerRadius();
Coordinate[] start = transformation.transform(tube.toAbsolute(new Coordinate(0,0,0)));
if ((or-ir >= 0.0012) && (ir > 0)) {
// Draw outer and inner
s = new Shape[start.length*2];
for (int i=0; i < start.length; i++) {
s[2*i] = new Rectangle2D.Double(start[i].x*S,(start[i].y-or)*S,
length*S,2*or*S);
s[2*i+1] = new Rectangle2D.Double(start[i].x*S,(start[i].y-ir)*S,
length*S,2*ir*S);
}
} else {
// Draw only outer
s = new Shape[start.length];
for (int i=0; i < start.length; i++) {
s[i] = new Rectangle2D.Double(start[i].x*S,(start[i].y-or)*S,
length*S,2*or*S);
}
}
return s;
}
public static Shape[] getShapesBack(net.sf.openrocket.rocketcomponent.RocketComponent component,
Transformation transformation) {
net.sf.openrocket.rocketcomponent.RingComponent tube = (net.sf.openrocket.rocketcomponent.RingComponent)component;
Shape[] s;
double or = tube.getOuterRadius();
double ir = tube.getInnerRadius();
Coordinate[] start = transformation.transform(tube.toAbsolute(new Coordinate(0,0,0)));
if ((ir < or) && (ir > 0)) {
// Draw inner and outer
s = new Shape[start.length*2];
for (int i=0; i < start.length; i++) {
s[2*i] = new Ellipse2D.Double((start[i].z-or)*S, (start[i].y-or)*S,
2*or*S, 2*or*S);
s[2*i+1] = new Ellipse2D.Double((start[i].z-ir)*S, (start[i].y-ir)*S,
2*ir*S, 2*ir*S);
}
} else {
// Draw only outer
s = new Shape[start.length];
for (int i=0; i < start.length; i++) {
s[i] = new Ellipse2D.Double((start[i].z-or)*S,(start[i].y-or)*S,2*or*S,2*or*S);
}
}
return s;
}
}