package net.sf.openrocket.gui.rocketfigure; import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.Transformation; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; public class TubeFinSetShapes extends RocketComponentShapes { public static Shape[] getShapesSide(net.sf.openrocket.rocketcomponent.RocketComponent component, Transformation transformation) { net.sf.openrocket.rocketcomponent.TubeFinSet finset = (net.sf.openrocket.rocketcomponent.TubeFinSet)component; int fins = finset.getFinCount(); double length = finset.getLength(); double outerradius = finset.getOuterRadius(); double bodyradius = finset.getBodyRadius(); Coordinate[] start = finset.toAbsolute(new Coordinate(0,0,0)); Transformation baseRotation = finset.getBaseRotationTransformation(); Transformation finRotation = finset.getFinRotationTransformation(); // Translate & rotate the coordinates for (int i=0; i<start.length; i++) { start[i] = baseRotation.transform(transformation.transform(start[i].add(0,bodyradius+outerradius,0))); } //start = baseRotation.transform(start); Shape[] s = new Shape[fins]; for (int i=0; i<fins; i++) { s[i] = new Rectangle2D.Double(start[0].x*S,(start[0].y-outerradius)*S,length*S,2*outerradius*S); start = finRotation.transform(start); } return s; } public static Shape[] getShapesBack(net.sf.openrocket.rocketcomponent.RocketComponent component, Transformation transformation) { net.sf.openrocket.rocketcomponent.TubeFinSet finset = (net.sf.openrocket.rocketcomponent.TubeFinSet)component; int fins = finset.getFinCount(); double outerradius = finset.getOuterRadius(); double bodyradius = finset.getBodyRadius(); Coordinate[] start = finset.toAbsolute(new Coordinate(0,0,0)); Transformation baseRotation = finset.getBaseRotationTransformation(); Transformation finRotation = finset.getFinRotationTransformation(); // Translate & rotate the coordinates for (int i=0; i<start.length; i++) { start[i] = baseRotation.transform(transformation.transform(start[i].add(0,bodyradius+outerradius,0))); } Shape[] s = new Shape[fins]; for (int i=0; i < fins; i++) { s[i] = new Ellipse2D.Double((start[0].z-outerradius)*S,(start[0].y-outerradius)*S,2*outerradius*S,2*outerradius*S); start = finRotation.transform(start); } return s; } }