Fixed bug that prevents adding stages to a rocket
This commit is contained in:
		
							parent
							
								
									f535b8caf0
								
							
						
					
					
						commit
						b9a0800ca5
					
				| @ -1,3 +1,7 @@ | ||||
| 2010-09-05  Sampo Niskanen | ||||
| 
 | ||||
| 	* [BUG] Fixed bug that prevents adding stages to a rocket | ||||
| 
 | ||||
| 2010-09-04  Sampo Niskanen | ||||
| 
 | ||||
| 	* Added launch rod velocity to FlightData | ||||
|  | ||||
| @ -3,19 +3,13 @@ package net.sf.openrocket.aerodynamics; | ||||
| import java.util.Map; | ||||
| 
 | ||||
| import net.sf.openrocket.rocketcomponent.Configuration; | ||||
| import net.sf.openrocket.rocketcomponent.Rocket; | ||||
| import net.sf.openrocket.rocketcomponent.RocketComponent; | ||||
| import net.sf.openrocket.util.Coordinate; | ||||
| 
 | ||||
| 
 | ||||
| /** | ||||
|  * A class that is the base of all aerodynamical calculations. | ||||
|  * <p> | ||||
|  * A rocket must be assigned to this class before any operations are allowed. | ||||
|  * This can be done using the constructor or using the | ||||
|  * {@link #setRocket(Rocket)} method.  The default is a | ||||
|  * <code>null</code> configuration, in which case the calculation | ||||
|  * methods throw {@link NullPointerException}. | ||||
|  * An abstract aerodynamic calculator implementation, that offers basic implementation | ||||
|  * of some methods and methods for cache validation and purging. | ||||
|  *  | ||||
|  * @author Sampo Niskanen <sampo.niskanen@iki.fi> | ||||
|  */ | ||||
| @ -33,7 +27,7 @@ public abstract class AbstractAerodynamicCalculator implements AerodynamicCalcul | ||||
| 	 | ||||
| 	/** The aerodynamic modification ID of the latest rocket */ | ||||
| 	private int rocketAeroModID = -1; | ||||
| 	 | ||||
| 	private int stageCount = -1; | ||||
| 	 | ||||
| 	 | ||||
| 
 | ||||
| @ -89,8 +83,10 @@ public abstract class AbstractAerodynamicCalculator implements AerodynamicCalcul | ||||
| 	 * @param	configuration	the configuration of the current call | ||||
| 	 */ | ||||
| 	protected final void checkCache(Configuration configuration) { | ||||
| 		if (rocketAeroModID != configuration.getRocket().getAerodynamicModID()) { | ||||
| 		if (rocketAeroModID != configuration.getRocket().getAerodynamicModID() || | ||||
| 				stageCount != configuration.getStageCount()) { | ||||
| 			rocketAeroModID = configuration.getRocket().getAerodynamicModID(); | ||||
| 			stageCount = configuration.getStageCount(); | ||||
| 			voidAerodynamicCache(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -10,6 +10,7 @@ import net.sf.openrocket.rocketcomponent.Configuration; | ||||
| public abstract class AbstractMassCalculator implements MassCalculator { | ||||
| 	 | ||||
| 	private int rocketMassModID = -1; | ||||
| 	private int stageCount = -1; | ||||
| 	 | ||||
| 	 | ||||
| 	/** | ||||
| @ -24,8 +25,10 @@ public abstract class AbstractMassCalculator implements MassCalculator { | ||||
| 	 * @param	configuration	the configuration of the current call | ||||
| 	 */ | ||||
| 	protected final void checkCache(Configuration configuration) { | ||||
| 		if (rocketMassModID != configuration.getRocket().getMassModID()) { | ||||
| 		if (rocketMassModID != configuration.getRocket().getMassModID() || | ||||
| 				stageCount != configuration.getStageCount()) { | ||||
| 			rocketMassModID = configuration.getRocket().getMassModID(); | ||||
| 			stageCount = configuration.getStageCount(); | ||||
| 			voidMassCache(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -47,7 +47,6 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 | ||||
| 
 | ||||
| 	private int modID = 0; | ||||
| 	private int modIDadd = 0; | ||||
| 	 | ||||
| 	 | ||||
| 	/** | ||||
| @ -71,7 +70,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 | ||||
| 	public void setAllStages() { | ||||
| 		stages.clear(); | ||||
| 		stages.set(0,rocket.getStageCount()); | ||||
| 		stages.set(0, rocket.getStageCount()); | ||||
| 		fireChangeEvent(); | ||||
| 	} | ||||
| 	 | ||||
| @ -84,8 +83,8 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 */ | ||||
| 	public void setToStage(int stage) { | ||||
| 		stages.clear(); | ||||
| 		stages.set(0, stage+1, true); | ||||
| //		stages.set(stage+1, rocket.getStageCount(), false); | ||||
| 		stages.set(0, stage + 1, true); | ||||
| 		//		stages.set(stage+1, rocket.getStageCount(), false); | ||||
| 		fireChangeEvent(); | ||||
| 	} | ||||
| 	 | ||||
| @ -101,7 +100,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 | ||||
| 	public boolean isStageActive(RocketComponent stage) { | ||||
| 		if (!(stage instanceof Stage)) { | ||||
| 			throw new IllegalArgumentException("called with component "+stage); | ||||
| 			throw new IllegalArgumentException("called with component " + stage); | ||||
| 		} | ||||
| 		return stages.get(stage.getParent().getChildPosition(stage)); | ||||
| 	} | ||||
| @ -121,7 +120,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 		int count = 0; | ||||
| 		int s = rocket.getStageCount(); | ||||
| 		 | ||||
| 		for (int i=0; i < s; i++) { | ||||
| 		for (int i = 0; i < s; i++) { | ||||
| 			if (stages.get(i)) | ||||
| 				count++; | ||||
| 		} | ||||
| @ -133,14 +132,14 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 		List<Integer> active = new ArrayList<Integer>(); | ||||
| 		int[] ret; | ||||
| 		 | ||||
| 		for (int i=0; i < stageCount; i++) { | ||||
| 		for (int i = 0; i < stageCount; i++) { | ||||
| 			if (stages.get(i)) { | ||||
| 				active.add(i); | ||||
| 			} | ||||
| 		} | ||||
| 		 | ||||
| 		ret = new int[active.size()]; | ||||
| 		for (int i=0; i < ret.length; i++) { | ||||
| 		for (int i = 0; i < ret.length; i++) { | ||||
| 			ret[i] = active.get(i); | ||||
| 		} | ||||
| 		 | ||||
| @ -164,7 +163,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 | ||||
| 	 | ||||
| 	public double getReferenceArea() { | ||||
| 		return Math.PI * MathUtil.pow2(getReferenceLength()/2); | ||||
| 		return Math.PI * MathUtil.pow2(getReferenceLength() / 2); | ||||
| 	} | ||||
| 	 | ||||
| 	 | ||||
| @ -173,7 +172,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	} | ||||
| 	 | ||||
| 	public void setMotorConfigurationID(String id) { | ||||
| 		if ((motorConfiguration == null  &&  id == null) || | ||||
| 		if ((motorConfiguration == null && id == null) || | ||||
| 				(id != null && id.equals(motorConfiguration))) | ||||
| 			return; | ||||
| 		 | ||||
| @ -189,7 +188,6 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	 | ||||
| 	/** | ||||
| 	 * Removes the listener connection to the rocket and listeners of this object. | ||||
| 	 * This configuration may not be used after a call to this method! | ||||
| @ -221,9 +219,9 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 		boundsModID = -1; | ||||
| 		refLengthModID = -1; | ||||
| 		 | ||||
| 		for (int i = listeners.length-2; i>=0; i-=2) { | ||||
| 		for (int i = listeners.length - 2; i >= 0; i -= 2) { | ||||
| 			if (listeners[i] == ChangeListener.class) { | ||||
| 				((ChangeListener) listeners[i+1]).stateChanged(e); | ||||
| 				((ChangeListener) listeners[i + 1]).stateChanged(e); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @ -243,7 +241,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 * @return  true if this configuration has active motor mounts with motors defined to them. | ||||
| 	 */ | ||||
| 	public boolean hasMotors() { | ||||
| 		for (RocketComponent c: this) { | ||||
| 		for (RocketComponent c : this) { | ||||
| 			if (c instanceof MotorMount) { | ||||
| 				MotorMount mount = (MotorMount) c; | ||||
| 				if (!mount.isMotorMount()) | ||||
| @ -269,9 +267,9 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 			cachedBounds.clear(); | ||||
| 			 | ||||
| 			double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY; | ||||
| 			for (RocketComponent component: this) { | ||||
| 				for (Coordinate c: component.getComponentBounds()) { | ||||
| 					for (Coordinate coord: component.toAbsolute(c)) { | ||||
| 			for (RocketComponent component : this) { | ||||
| 				for (Coordinate c : component.getComponentBounds()) { | ||||
| 					for (Coordinate coord : component.toAbsolute(c)) { | ||||
| 						cachedBounds.add(coord); | ||||
| 						if (coord.x < minX) | ||||
| 							minX = coord.x; | ||||
| @ -299,7 +297,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 	 */ | ||||
| 	public double getLength() { | ||||
| 		if (rocket.getModID() != boundsModID) | ||||
| 			getBounds();  // Calculates the length | ||||
| 			getBounds(); // Calculates the length | ||||
| 			 | ||||
| 		return cachedLength; | ||||
| 	} | ||||
| @ -345,7 +343,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 			rocket.addComponentChangeListener(config); | ||||
| 			return config; | ||||
| 		} catch (CloneNotSupportedException e) { | ||||
| 			throw new BugException("BUG: clone not supported!",e); | ||||
| 			throw new BugException("BUG: clone not supported!", e); | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| @ -368,7 +366,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | ||||
| 		public ConfigurationIterator() { | ||||
| 			List<Iterator<RocketComponent>> list = new ArrayList<Iterator<RocketComponent>>(); | ||||
| 			 | ||||
| 			for (RocketComponent stage: rocket.getChildren()) { | ||||
| 			for (RocketComponent stage : rocket.getChildren()) { | ||||
| 				if (isStageActive(stage)) { | ||||
| 					list.add(stage.deepIterator()); | ||||
| 				} | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user