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 | 2010-09-04  Sampo Niskanen | ||||||
| 
 | 
 | ||||||
| 	* Added launch rod velocity to FlightData | 	* Added launch rod velocity to FlightData | ||||||
|  | |||||||
| @ -3,19 +3,13 @@ package net.sf.openrocket.aerodynamics; | |||||||
| import java.util.Map; | import java.util.Map; | ||||||
| 
 | 
 | ||||||
| import net.sf.openrocket.rocketcomponent.Configuration; | import net.sf.openrocket.rocketcomponent.Configuration; | ||||||
| import net.sf.openrocket.rocketcomponent.Rocket; |  | ||||||
| import net.sf.openrocket.rocketcomponent.RocketComponent; | import net.sf.openrocket.rocketcomponent.RocketComponent; | ||||||
| import net.sf.openrocket.util.Coordinate; | import net.sf.openrocket.util.Coordinate; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * A class that is the base of all aerodynamical calculations. |  * An abstract aerodynamic calculator implementation, that offers basic implementation | ||||||
|  * <p> |  * of some methods and methods for cache validation and purging. | ||||||
|  * 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}. |  | ||||||
|  *  |  *  | ||||||
|  * @author Sampo Niskanen <sampo.niskanen@iki.fi> |  * @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 */ | 	/** The aerodynamic modification ID of the latest rocket */ | ||||||
| 	private int rocketAeroModID = -1; | 	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 | 	 * @param	configuration	the configuration of the current call | ||||||
| 	 */ | 	 */ | ||||||
| 	protected final void checkCache(Configuration configuration) { | 	protected final void checkCache(Configuration configuration) { | ||||||
| 		if (rocketAeroModID != configuration.getRocket().getAerodynamicModID()) { | 		if (rocketAeroModID != configuration.getRocket().getAerodynamicModID() || | ||||||
|  | 				stageCount != configuration.getStageCount()) { | ||||||
| 			rocketAeroModID = configuration.getRocket().getAerodynamicModID(); | 			rocketAeroModID = configuration.getRocket().getAerodynamicModID(); | ||||||
|  | 			stageCount = configuration.getStageCount(); | ||||||
| 			voidAerodynamicCache(); | 			voidAerodynamicCache(); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ import net.sf.openrocket.rocketcomponent.Configuration; | |||||||
| public abstract class AbstractMassCalculator implements MassCalculator { | public abstract class AbstractMassCalculator implements MassCalculator { | ||||||
| 	 | 	 | ||||||
| 	private int rocketMassModID = -1; | 	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 | 	 * @param	configuration	the configuration of the current call | ||||||
| 	 */ | 	 */ | ||||||
| 	protected final void checkCache(Configuration configuration) { | 	protected final void checkCache(Configuration configuration) { | ||||||
| 		if (rocketMassModID != configuration.getRocket().getMassModID()) { | 		if (rocketMassModID != configuration.getRocket().getMassModID() || | ||||||
|  | 				stageCount != configuration.getStageCount()) { | ||||||
| 			rocketMassModID = configuration.getRocket().getMassModID(); | 			rocketMassModID = configuration.getRocket().getMassModID(); | ||||||
|  | 			stageCount = configuration.getStageCount(); | ||||||
| 			voidMassCache(); | 			voidMassCache(); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -47,7 +47,6 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
| 	private int modID = 0; | 	private int modID = 0; | ||||||
| 	private int modIDadd = 0; |  | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| 	/** | 	/** | ||||||
| @ -71,7 +70,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 	 | 	 | ||||||
| 	public void setAllStages() { | 	public void setAllStages() { | ||||||
| 		stages.clear(); | 		stages.clear(); | ||||||
| 		stages.set(0,rocket.getStageCount()); | 		stages.set(0, rocket.getStageCount()); | ||||||
| 		fireChangeEvent(); | 		fireChangeEvent(); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| @ -84,8 +83,8 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 	 */ | 	 */ | ||||||
| 	public void setToStage(int stage) { | 	public void setToStage(int stage) { | ||||||
| 		stages.clear(); | 		stages.clear(); | ||||||
| 		stages.set(0, stage+1, true); | 		stages.set(0, stage + 1, true); | ||||||
| //		stages.set(stage+1, rocket.getStageCount(), false); | 		//		stages.set(stage+1, rocket.getStageCount(), false); | ||||||
| 		fireChangeEvent(); | 		fireChangeEvent(); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| @ -101,7 +100,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 	 | 	 | ||||||
| 	public boolean isStageActive(RocketComponent stage) { | 	public boolean isStageActive(RocketComponent stage) { | ||||||
| 		if (!(stage instanceof 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)); | 		return stages.get(stage.getParent().getChildPosition(stage)); | ||||||
| 	} | 	} | ||||||
| @ -121,7 +120,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 		int count = 0; | 		int count = 0; | ||||||
| 		int s = rocket.getStageCount(); | 		int s = rocket.getStageCount(); | ||||||
| 		 | 		 | ||||||
| 		for (int i=0; i < s; i++) { | 		for (int i = 0; i < s; i++) { | ||||||
| 			if (stages.get(i)) | 			if (stages.get(i)) | ||||||
| 				count++; | 				count++; | ||||||
| 		} | 		} | ||||||
| @ -133,14 +132,14 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 		List<Integer> active = new ArrayList<Integer>(); | 		List<Integer> active = new ArrayList<Integer>(); | ||||||
| 		int[] ret; | 		int[] ret; | ||||||
| 		 | 		 | ||||||
| 		for (int i=0; i < stageCount; i++) { | 		for (int i = 0; i < stageCount; i++) { | ||||||
| 			if (stages.get(i)) { | 			if (stages.get(i)) { | ||||||
| 				active.add(i); | 				active.add(i); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| 		ret = new int[active.size()]; | 		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); | 			ret[i] = active.get(i); | ||||||
| 		} | 		} | ||||||
| 		 | 		 | ||||||
| @ -164,7 +163,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| 	public double getReferenceArea() { | 	public double getReferenceArea() { | ||||||
| 		return Math.PI * MathUtil.pow2(getReferenceLength()/2); | 		return Math.PI * MathUtil.pow2(getReferenceLength() / 2); | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	 | 	 | ||||||
| @ -189,7 +188,6 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	 |  | ||||||
| 	/** | 	/** | ||||||
| 	 * Removes the listener connection to the rocket and listeners of this object. | 	 * Removes the listener connection to the rocket and listeners of this object. | ||||||
| 	 * This configuration may not be used after a call to this method! | 	 * 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; | 		boundsModID = -1; | ||||||
| 		refLengthModID = -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) { | 			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. | 	 * @return  true if this configuration has active motor mounts with motors defined to them. | ||||||
| 	 */ | 	 */ | ||||||
| 	public boolean hasMotors() { | 	public boolean hasMotors() { | ||||||
| 		for (RocketComponent c: this) { | 		for (RocketComponent c : this) { | ||||||
| 			if (c instanceof MotorMount) { | 			if (c instanceof MotorMount) { | ||||||
| 				MotorMount mount = (MotorMount) c; | 				MotorMount mount = (MotorMount) c; | ||||||
| 				if (!mount.isMotorMount()) | 				if (!mount.isMotorMount()) | ||||||
| @ -269,9 +267,9 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 			cachedBounds.clear(); | 			cachedBounds.clear(); | ||||||
| 			 | 			 | ||||||
| 			double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY; | 			double minX = Double.POSITIVE_INFINITY, maxX = Double.NEGATIVE_INFINITY; | ||||||
| 			for (RocketComponent component: this) { | 			for (RocketComponent component : this) { | ||||||
| 				for (Coordinate c: component.getComponentBounds()) { | 				for (Coordinate c : component.getComponentBounds()) { | ||||||
| 					for (Coordinate coord: component.toAbsolute(c)) { | 					for (Coordinate coord : component.toAbsolute(c)) { | ||||||
| 						cachedBounds.add(coord); | 						cachedBounds.add(coord); | ||||||
| 						if (coord.x < minX) | 						if (coord.x < minX) | ||||||
| 							minX = coord.x; | 							minX = coord.x; | ||||||
| @ -345,7 +343,7 @@ public class Configuration implements Cloneable, ChangeSource, ComponentChangeLi | |||||||
| 			rocket.addComponentChangeListener(config); | 			rocket.addComponentChangeListener(config); | ||||||
| 			return config; | 			return config; | ||||||
| 		} catch (CloneNotSupportedException e) { | 		} 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() { | 		public ConfigurationIterator() { | ||||||
| 			List<Iterator<RocketComponent>> list = new ArrayList<Iterator<RocketComponent>>(); | 			List<Iterator<RocketComponent>> list = new ArrayList<Iterator<RocketComponent>>(); | ||||||
| 			 | 			 | ||||||
| 			for (RocketComponent stage: rocket.getChildren()) { | 			for (RocketComponent stage : rocket.getChildren()) { | ||||||
| 				if (isStageActive(stage)) { | 				if (isStageActive(stage)) { | ||||||
| 					list.add(stage.deepIterator()); | 					list.add(stage.deepIterator()); | ||||||
| 				} | 				} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user