Merged l10n branch to trunk
[debian/openrocket] / src / net / sf / openrocket / rocketcomponent / FreeformFinSet.java
index 792483d2618aa4cbd03c61e53b5cc2e7d0457728..ffa44be37b0bc04e1130afdaec234e064f007aa0 100644 (file)
@@ -1,35 +1,37 @@
 package net.sf.openrocket.rocketcomponent;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import net.sf.openrocket.l10n.Translator;
 import net.sf.openrocket.logging.LogHelper;
 import net.sf.openrocket.startup.Application;
 import net.sf.openrocket.util.ArrayList;
 import net.sf.openrocket.util.BugException;
 import net.sf.openrocket.util.Coordinate;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 
 public class FreeformFinSet extends FinSet {
        private static final LogHelper log = Application.getLogger();
-
+       private static final Translator trans = Application.getTranslator();
+       
        private ArrayList<Coordinate> points = new ArrayList<Coordinate>();
-
+       
        public FreeformFinSet() {
                points.add(Coordinate.NUL);
                points.add(new Coordinate(0.025, 0.05));
                points.add(new Coordinate(0.075, 0.05));
                points.add(new Coordinate(0.05, 0));
-
+               
                this.length = 0.05;
        }
-
-
+       
+       
        public FreeformFinSet(Coordinate[] finpoints) throws IllegalFinPointException {
                setPoints(finpoints);
        }
-
+       
        /*
        public FreeformFinSet(FinSet finset) {
                Coordinate[] finpoints = finset.getFinPoints();
@@ -59,12 +61,12 @@ public class FreeformFinSet extends FinSet {
                final RocketComponent root = finset.getRoot();
                FreeformFinSet freeform;
                List<RocketComponent> toInvalidate = Collections.emptyList();
-
+               
                try {
                        if (root instanceof Rocket) {
                                ((Rocket) root).freeze();
                        }
-
+                       
                        // Get fin set position and remove fin set
                        final RocketComponent parent = finset.getParent();
                        final int position;
@@ -74,7 +76,7 @@ public class FreeformFinSet extends FinSet {
                        } else {
                                position = -1;
                        }
-
+                       
 
                        // Create the freeform fin set
                        Coordinate[] finpoints = finset.getFinPoints();
@@ -85,24 +87,24 @@ public class FreeformFinSet extends FinSet {
                                                "freeform fin, fin=" + finset + " points=" + Arrays.toString(finpoints),
                                                e);
                        }
-
+                       
                        // Copy component attributes
                        toInvalidate = freeform.copyFrom(finset);
-
+                       
                        // Set name
                        final String componentTypeName = finset.getComponentName();
                        final String name = freeform.getName();
-
+                       
                        if (name.startsWith(componentTypeName)) {
                                freeform.setName(freeform.getComponentName() +
                                                name.substring(componentTypeName.length()));
                        }
-
+                       
                        // Add freeform fin set to parent
                        if (parent != null) {
                                parent.addChild(freeform, position);
                        }
-
+                       
                } finally {
                        if (root instanceof Rocket) {
                                ((Rocket) root).thaw();
@@ -114,8 +116,8 @@ public class FreeformFinSet extends FinSet {
                }
                return freeform;
        }
-
-
+       
+       
 
        /**
         * Add a fin point between indices <code>index-1</code> and <code>index</code>.
@@ -125,18 +127,18 @@ public class FreeformFinSet extends FinSet {
         */
        public void addPoint(int index) {
                double x0, y0, x1, y1;
-
+               
                x0 = points.get(index - 1).x;
                y0 = points.get(index - 1).y;
                x1 = points.get(index).x;
                y1 = points.get(index).y;
-
+               
                points.add(index, new Coordinate((x0 + x1) / 2, (y0 + y1) / 2));
                // adding a point within the segment affects neither mass nor aerodynamics
                fireComponentChangeEvent(ComponentChangeEvent.NONFUNCTIONAL_CHANGE);
        }
-
-
+       
+       
        /**
         * Remove the fin point with the given index.  The first and last fin points
         * cannot be removed, and will cause an <code>IllegalFinPointException</code>
@@ -149,20 +151,20 @@ public class FreeformFinSet extends FinSet {
                if (index == 0 || index == points.size() - 1) {
                        throw new IllegalFinPointException("cannot remove first or last point");
                }
-
+               
                ArrayList<Coordinate> copy = this.points.clone();
                copy.remove(index);
                validate(copy);
                this.points = copy;
-
+               
                fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
        }
-
-
+       
+       
        public int getPointCount() {
                return points.size();
        }
-
+       
        public void setPoints(Coordinate[] points) throws IllegalFinPointException {
                ArrayList<Coordinate> list = new ArrayList<Coordinate>(points.length);
                for (Coordinate p : points) {
@@ -170,12 +172,12 @@ public class FreeformFinSet extends FinSet {
                }
                validate(list);
                this.points = list;
-
+               
                this.length = points[points.length - 1].x;
                fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
        }
-
-
+       
+       
        /**
         * Set the point at position <code>i</code> to coordinates (x,y).
         * <p>
@@ -196,11 +198,11 @@ public class FreeformFinSet extends FinSet {
        public void setPoint(int index, double x, double y) throws IllegalFinPointException {
                if (y < 0)
                        y = 0;
-
+               
                double x0, y0, x1, y1;
-
+               
                if (index == 0) {
-
+                       
                        // Restrict point
                        x = Math.min(x, points.get(points.size() - 1).x);
                        y = 0;
@@ -208,9 +210,9 @@ public class FreeformFinSet extends FinSet {
                        y0 = Double.NaN;
                        x1 = points.get(1).x;
                        y1 = points.get(1).y;
-
+                       
                } else if (index == points.size() - 1) {
-
+                       
                        // Restrict point
                        x = Math.max(x, 0);
                        y = 0;
@@ -218,16 +220,16 @@ public class FreeformFinSet extends FinSet {
                        y0 = points.get(index - 1).y;
                        x1 = Double.NaN;
                        y1 = Double.NaN;
-
+                       
                } else {
-
+                       
                        x0 = points.get(index - 1).x;
                        y0 = points.get(index - 1).y;
                        x1 = points.get(index + 1).x;
                        y1 = points.get(index + 1).y;
-
+                       
                }
-
+               
 
 
                // Check for intersecting
@@ -237,7 +239,7 @@ public class FreeformFinSet extends FinSet {
                for (int i = 1; i < points.size(); i++) {
                        px1 = points.get(i).x;
                        py1 = points.get(i).y;
-
+                       
                        if (i != index - 1 && i != index && i != index + 1) {
                                if (intersects(x0, y0, x, y, px0, py0, px1, py1)) {
                                        throw new IllegalFinPointException("segments intersect");
@@ -248,49 +250,49 @@ public class FreeformFinSet extends FinSet {
                                        throw new IllegalFinPointException("segments intersect");
                                }
                        }
-
+                       
                        px0 = px1;
                        py0 = py1;
                }
-
+               
                if (index == 0) {
-
+                       
                        System.out.println("Set point zero to x:" + x);
                        for (int i = 1; i < points.size(); i++) {
                                Coordinate c = points.get(i);
                                points.set(i, c.setX(c.x - x));
                        }
-
+                       
                } else {
-
+                       
                        points.set(index, new Coordinate(x, y));
-
+                       
                }
                if (index == 0 || index == points.size() - 1) {
                        this.length = points.get(points.size() - 1).x;
                }
                fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
        }
-
-
+       
+       
 
        private boolean intersects(double ax0, double ay0, double ax1, double ay1,
                        double bx0, double by0, double bx1, double by1) {
-
+               
                double d = ((by1 - by0) * (ax1 - ax0) - (bx1 - bx0) * (ay1 - ay0));
-
+               
                double ua = ((bx1 - bx0) * (ay0 - by0) - (by1 - by0) * (ax0 - bx0)) / d;
                double ub = ((ax1 - ax0) * (ay0 - by0) - (ay1 - ay0) * (ax0 - bx0)) / d;
-
+               
                return (ua >= 0) && (ua <= 1) && (ub >= 0) && (ub <= 1);
        }
-
-
+       
+       
        @Override
        public Coordinate[] getFinPoints() {
                return points.toArray(new Coordinate[0]);
        }
-
+       
        @Override
        public double getSpan() {
                double max = 0;
@@ -300,37 +302,38 @@ public class FreeformFinSet extends FinSet {
                }
                return max;
        }
-
+       
        @Override
        public String getComponentName() {
-               return "Freeform fin set";
+               //// Freeform fin set
+               return trans.get("FreeformFinSet.FreeformFinSet");
        }
-
-
+       
+       
        @Override
        protected RocketComponent copyWithOriginalID() {
                RocketComponent c = super.copyWithOriginalID();
                ((FreeformFinSet) c).points = this.points.clone();
                return c;
        }
-
-       private void validate(ArrayList<Coordinate> points) throws IllegalFinPointException {
-               final int n = points.size();
-               if (points.get(0).x != 0 || points.get(0).y != 0 ||
-                               points.get(n - 1).x < 0 || points.get(n - 1).y != 0) {
+       
+       private void validate(ArrayList<Coordinate> pts) throws IllegalFinPointException {
+               final int n = pts.size();
+               if (pts.get(0).x != 0 || pts.get(0).y != 0 ||
+                               pts.get(n - 1).x < 0 || pts.get(n - 1).y != 0) {
                        throw new IllegalFinPointException("Start or end point illegal.");
                }
                for (int i = 0; i < n - 1; i++) {
                        for (int j = i + 2; j < n - 1; j++) {
-                               if (intersects(points.get(i).x, points.get(i).y, points.get(i + 1).x, points.get(i + 1).y,
-                                                               points.get(j).x, points.get(j).y, points.get(j + 1).x, points.get(j + 1).y)) {
+                               if (intersects(pts.get(i).x, pts.get(i).y, pts.get(i + 1).x, pts.get(i + 1).y,
+                                                               pts.get(j).x, pts.get(j).y, pts.get(j + 1).x, pts.get(j + 1).y)) {
                                        throw new IllegalFinPointException("segments intersect");
                                }
                        }
-                       if (points.get(i).z != 0) {
+                       if (pts.get(i).z != 0) {
                                throw new IllegalFinPointException("z-coordinate not zero");
                        }
                }
        }
-
+       
 }