1 package net.sf.openrocket.rocketcomponent;
3 import net.sf.openrocket.l10n.Translator;
4 import net.sf.openrocket.startup.Application;
5 import net.sf.openrocket.util.MathUtil;
8 * This class represents a generic component that has a specific mass and an approximate shape.
9 * The mass is accessed via get/setComponentMass.
11 * @author Sampo Niskanen <sampo.niskanen@iki.fi>
13 public class MassComponent extends MassObject {
14 private static final Translator trans = Application.getTranslator();
16 private double mass = 0;
19 public MassComponent() {
23 public MassComponent(double length, double radius, double mass) {
24 super(length, radius);
30 public double getComponentMass() {
34 public void setComponentMass(double mass) {
35 mass = Math.max(mass, 0);
36 if (MathUtil.equals(this.mass, mass))
39 fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
43 public double getDensity() {
44 double d = getComponentMass() / getVolume();
50 public void setDensity(double density) {
51 double m = density * getVolume();
52 m = MathUtil.clamp(m, 0, 1000000);
59 private double getVolume() {
60 return Math.PI * MathUtil.pow2(getRadius()) * getLength();
65 public String getComponentName() {
67 return trans.get("MassComponent.MassComponent");
71 public boolean allowsChildren() {
76 public boolean isCompatible(Class<? extends RocketComponent> type) {
77 // Allow no components to be attached to a MassComponent