package net.sf.openrocket.rocketcomponent;
+import java.util.List;
+
+import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.material.Material;
+import net.sf.openrocket.startup.Application;
import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Prefs;
public abstract class ExternalComponent extends RocketComponent {
public enum Finish {
- ROUGH("Rough", 500e-6),
- UNFINISHED("Unfinished", 150e-6),
- NORMAL("Regular paint", 60e-6),
- SMOOTH("Smooth paint", 20e-6),
- POLISHED("Polished", 2e-6);
+ //// Rough
+ ROUGH("ExternalComponent.Rough", 500e-6),
+ //// Unfinished
+ UNFINISHED("ExternalComponent.Unfinished", 150e-6),
+ //// Regular paint
+ NORMAL("ExternalComponent.Regularpaint", 60e-6),
+ //// Smooth paint
+ SMOOTH("ExternalComponent.Smoothpaint", 20e-6),
+ //// Polished
+ POLISHED("ExternalComponent.Polished", 2e-6);
private final String name;
private final double roughnessSize;
@Override
public String toString() {
- return name + " (" + UnitGroup.UNITS_ROUGHNESS.toStringUnit(roughnessSize) + ")";
+ final Translator trans = Application.getTranslator();
+ return trans.get(name) + " (" + UnitGroup.UNITS_ROUGHNESS.toStringUnit(roughnessSize) + ")";
}
}
-
+
/**
* The material of the component.
*/
- protected Material material=null;
+ protected Material material = null;
protected Finish finish = Finish.NORMAL;
-
+
/**
* Constructor that sets the relative position of the component.
*/
super(relativePosition);
this.material = Prefs.getDefaultComponentMaterial(this.getClass(), Material.Type.BULK);
}
-
+
/**
* Returns the volume of the component. This value is used in calculating the mass
* of the object.
*/
public abstract double getComponentVolume();
-
+
/**
* Calculates the mass of the component as the product of the volume and interior density.
*/
public double getComponentMass() {
return material.getDensity() * getComponentVolume();
}
-
+
/**
* ExternalComponent has aerodynamic effect, so return true.
*/
public void setMaterial(Material mat) {
if (mat.getType() != Material.Type.BULK) {
throw new IllegalArgumentException("ExternalComponent requires a bulk material" +
- " type="+mat.getType());
+ " type=" + mat.getType());
}
-
+
if (material.equals(mat))
return;
material = mat;
fireComponentChangeEvent(ComponentChangeEvent.AERODYNAMIC_CHANGE);
}
+
+
+ @Override
+ protected List<RocketComponent> copyFrom(RocketComponent c) {
+ ExternalComponent src = (ExternalComponent) c;
+ this.finish = src.finish;
+ this.material = src.material;
+ return super.copyFrom(c);
+ }
+
+ /**
+ * Accept a visitor to this ExternalComponent in the component hierarchy.
+ *
+ * @param theVisitor the visitor that will be called back with a reference to this ExternalComponent
+ */
+ @Override
+ public void accept (final ComponentVisitor theVisitor) {
+ theVisitor.visit(this);
+ }
+
}