Initial commit
[debian/openrocket] / src / net / sf / openrocket / rocketcomponent / ReferenceType.java
diff --git a/src/net/sf/openrocket/rocketcomponent/ReferenceType.java b/src/net/sf/openrocket/rocketcomponent/ReferenceType.java
new file mode 100644 (file)
index 0000000..02264eb
--- /dev/null
@@ -0,0 +1,50 @@
+/**
+ * 
+ */
+package net.sf.openrocket.rocketcomponent;
+
+public enum ReferenceType {
+       
+       NOSECONE {
+               @Override
+               public double getReferenceLength(Configuration config) {
+                       for (RocketComponent c: config) {
+                               if (c instanceof SymmetricComponent) {
+                                       SymmetricComponent s = (SymmetricComponent)c;
+                                       if (s.getForeRadius() >= 0.0005)
+                                               return s.getForeRadius() * 2;
+                                       if (s.getAftRadius() >= 0.0005)
+                                               return s.getAftRadius() * 2;
+                               }
+                       }
+                       return Rocket.DEFAULT_REFERENCE_LENGTH;
+               }
+       },
+       
+       MAXIMUM {
+               @Override
+               public double getReferenceLength(Configuration config) {
+                       double r = 0;
+                       for (RocketComponent c: config) {
+                               if (c instanceof SymmetricComponent) {
+                                       SymmetricComponent s = (SymmetricComponent)c;
+                                       r = Math.max(r, s.getForeRadius());
+                                       r = Math.max(r, s.getAftRadius());
+                               }
+                       }
+                       r *= 2;
+                       if (r < 0.001)
+                               r = Rocket.DEFAULT_REFERENCE_LENGTH;
+                       return r;
+               }
+       }, 
+
+       CUSTOM {
+               @Override
+               public double getReferenceLength(Configuration config) {
+                       return config.getRocket().getCustomReferenceLength();
+               }
+       };
+       
+       public abstract double getReferenceLength(Configuration rocket);
+}