Initial Multiport
[sw/motorsim] / src / com / billkuker / rocketry / motorsim / ConvergentDivergentNozzle.java
index 09e0598a43a48d071a2c775d7727e0ad601ab9b7..3d15550bb8b743f5da8d853bcd2e3795625ab512 100644 (file)
@@ -2,7 +2,6 @@ package com.billkuker.rocketry.motorsim;
 \r
 import java.awt.Shape;\r
 import java.awt.geom.AffineTransform;\r
-import java.awt.geom.Ellipse2D;\r
 import java.awt.geom.GeneralPath;\r
 import java.awt.geom.Line2D;\r
 \r
@@ -15,7 +14,7 @@ import javax.measure.unit.SI;
 \r
 import org.jscience.physics.amount.Amount;\r
 \r
-public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {\r
+public class ConvergentDivergentNozzle implements Nozzle, Validating {\r
 \r
        private Amount<Length> throatDiameter;\r
        \r
@@ -24,7 +23,6 @@ public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {
        private double efficiency = 1.0;\r
        \r
        \r
-       @Override\r
        public Amount<Area> throatArea() {\r
                return throatDiameter.divide(2).pow(2).times(Math.PI).to(Area.UNIT);\r
        }\r
@@ -40,11 +38,7 @@ public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {
 \r
 \r
        public void setThroatDiameter(Amount<Length> throatDiameter) {\r
-               if ( exitDiameter != null && throatDiameter.isGreaterThan(exitDiameter))\r
-                       throw new IllegalArgumentException("Throat > Exit");\r
-               Amount<Length> old = this.throatDiameter;\r
                this.throatDiameter = throatDiameter;\r
-               firePropertyChange("throatDiameter", old, throatDiameter);\r
        }\r
        \r
 \r
@@ -54,14 +48,9 @@ public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {
 \r
 \r
        public void setExitDiameter(Amount<Length> exitDiameter) {\r
-               if ( throatDiameter != null && exitDiameter.isLessThan(throatDiameter))\r
-                       throw new IllegalArgumentException("Throat > Exit");\r
-               Amount<Length> old = this.exitDiameter;\r
                this.exitDiameter = exitDiameter;\r
-               firePropertyChange("exitDiameter", old, exitDiameter);\r
        }\r
        \r
-       @Override\r
        public Amount<Force> thrust(Amount<Pressure> Po, Amount<Pressure> Pe, Amount<Pressure> Patm, final double k ){\r
                double cF = thrustCoefficient(Po, Pe, Patm, k);\r
                return Po.times(throatArea()).times(cF).to(Force.UNIT);\r
@@ -90,9 +79,7 @@ public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {
        }\r
 \r
        public void setEfficiency(double efficiency) {\r
-               double old = this.efficiency;\r
                this.efficiency = efficiency;\r
-               firePropertyChange("efficiency", old, efficiency);\r
        }\r
 \r
        public Shape nozzleShape(Amount<Length> chamberDiameter){\r
@@ -112,13 +99,20 @@ public class ConvergentDivergentNozzle extends MotorPart implements Nozzle {
                s.append(new Line2D.Double(0,0,cDiff,-cDiff), true);\r
                \r
                s.transform(AffineTransform.getScaleInstance(-1, 1));\r
-               s.transform(AffineTransform.getTranslateInstance(-throatR, 0));\r
+               s.transform(AffineTransform.getTranslateInstance(-throatR * 2, 0));\r
                \r
                s.append(new Line2D.Double(0,0,diff,diff*3), false);\r
                s.append(new Line2D.Double(0,0,cDiff,-cDiff), true);\r
                \r
+               s.transform(AffineTransform.getTranslateInstance(throatR, cDiff));\r
                //a.add(new java.awt.geom.Area( new Ellipse2D.Double(0,0,5,5)));\r
                \r
                return s;\r
        }\r
+\r
+       @Override\r
+       public void validate() throws ValidationException {\r
+               if ( exitDiameter != null && throatDiameter.isGreaterThan(exitDiameter))\r
+                       throw new IllegalArgumentException("Throat > Exit");\r
+       }\r
 }\r