create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / rocketcomponent / MassComponent.java
1 package net.sf.openrocket.rocketcomponent;
2
3 import net.sf.openrocket.l10n.Translator;
4 import net.sf.openrocket.startup.Application;
5 import net.sf.openrocket.util.MathUtil;
6
7 /**
8  * This class represents a generic component that has a specific mass and an approximate shape.
9  * The mass is accessed via get/setComponentMass.
10  * 
11  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
12  */
13 public class MassComponent extends MassObject {
14         private static final Translator trans = Application.getTranslator();
15         
16         private double mass = 0;
17         
18         
19         public MassComponent() {
20                 super();
21         }
22         
23         public MassComponent(double length, double radius, double mass) {
24                 super(length, radius);
25                 this.mass = mass;
26         }
27         
28         
29         @Override
30         public double getComponentMass() {
31                 return mass;
32         }
33         
34         public void setComponentMass(double mass) {
35                 mass = Math.max(mass, 0);
36                 if (MathUtil.equals(this.mass, mass))
37                         return;
38                 this.mass = mass;
39                 fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
40         }
41         
42         
43         public double getDensity() {
44                 double d = getComponentMass() / getVolume();
45                 if (Double.isNaN(d))
46                         d = 0;
47                 return d;
48         }
49         
50         public void setDensity(double density) {
51                 double m = density * getVolume();
52                 m = MathUtil.clamp(m, 0, 1000000);
53                 if (Double.isNaN(m))
54                         m = 0;
55                 setComponentMass(m);
56         }
57         
58         
59         private double getVolume() {
60                 return Math.PI * MathUtil.pow2(getRadius()) * getLength();
61         }
62         
63         
64         @Override
65         public String getComponentName() {
66                 //// Mass component
67                 return trans.get("MassComponent.MassComponent");
68         }
69         
70         @Override
71         public boolean allowsChildren() {
72                 return false;
73         }
74         
75         @Override
76         public boolean isCompatible(Class<? extends RocketComponent> type) {
77                 // Allow no components to be attached to a MassComponent
78                 return false;
79         }
80 }