commit
						0ef470b02e
					
				@ -86,6 +86,7 @@ public class CustomExpression implements Cloneable{
 | 
			
		||||
		this.expression = expression;
 | 
			
		||||
		
 | 
			
		||||
		// Replace any indexed variables
 | 
			
		||||
		subExpressions.clear();
 | 
			
		||||
		expression = subTimeIndexes(expression);
 | 
			
		||||
		expression = subTimeRanges(expression);
 | 
			
		||||
		
 | 
			
		||||
@ -450,13 +451,13 @@ public class CustomExpression implements Cloneable{
 | 
			
		||||
		if ( !expressions.isEmpty() ) {
 | 
			
		||||
			// check if expression already exists
 | 
			
		||||
			if ( expressions.contains(this) ){
 | 
			
		||||
				log.user("Expression already in document. This unit : "+this.getUnit()+", existing unit : "+expressions.get(0).getUnit());
 | 
			
		||||
				log.debug("Expression already in document");
 | 
			
		||||
				return;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
		if (this.checkAll()){
 | 
			
		||||
			log.user("Custom expression added to rocket document");
 | 
			
		||||
			log.user("New custom expression added to rocket document");
 | 
			
		||||
			doc.addCustomExpression( this );
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@ -470,6 +471,7 @@ public class CustomExpression implements Cloneable{
 | 
			
		||||
		else {
 | 
			
		||||
			int index = doc.getCustomExpressions().indexOf(this);
 | 
			
		||||
			doc.getCustomExpressions().set(index, newExpression);
 | 
			
		||||
			log.debug("Overwriting custom expression already in document");
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
@ -28,8 +28,6 @@ public class CustomExpressionSimulationListener extends	AbstractSimulationListen
 | 
			
		||||
			//log.debug("Setting value of custom expression "+expression.toString()+" = "+value);
 | 
			
		||||
			data.setValue(expression.getType(), value);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Override
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ package net.sf.openrocket.simulation.customexpression;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import de.congrace.exp4j.Calculable;
 | 
			
		||||
import de.congrace.exp4j.ExpressionBuilder;
 | 
			
		||||
import de.congrace.exp4j.Variable;
 | 
			
		||||
import net.sf.openrocket.document.OpenRocketDocument;
 | 
			
		||||
import net.sf.openrocket.logging.LogHelper;
 | 
			
		||||
@ -27,7 +28,6 @@ public class IndexExpression extends CustomExpression {
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Variable evaluate(SimulationStatus status){
 | 
			
		||||
		
 | 
			
		||||
		Calculable calc = buildExpression();
 | 
			
		||||
		if (calc == null){
 | 
			
		||||
			return new Variable("Unknown");
 | 
			
		||||
@ -42,15 +42,22 @@ public class IndexExpression extends CustomExpression {
 | 
			
		||||
		List<Double> time = status.getFlightData().get(FlightDataType.TYPE_TIME);
 | 
			
		||||
		LinearInterpolator interp = new LinearInterpolator(time, data); 
 | 
			
		||||
		
 | 
			
		||||
		// Set the variables in the expression to evaluate
 | 
			
		||||
		for (FlightDataType etype : status.getFlightData().getTypes()){
 | 
			
		||||
			double value = status.getFlightData().getLast(etype); 
 | 
			
		||||
			calc.setVariable( new Variable(etype.getSymbol(), value ) );
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		// Evaluate this expression to get the t value
 | 
			
		||||
		//System.out.println("Evaluating expression to get t value "+this.getExpressionString());
 | 
			
		||||
		try{
 | 
			
		||||
			double tvalue = calc.calculate().getDoubleValue();
 | 
			
		||||
			//System.out.println("t = "+tvalue);
 | 
			
		||||
			return new Variable(hash(), interp.getValue( tvalue ) );
 | 
			
		||||
		}
 | 
			
		||||
		catch (java.util.EmptyStackException e){
 | 
			
		||||
			log.user("Unable to calculate time index for indexed expression "+getExpressionString()+" due to empty stack exception");
 | 
			
		||||
			return new Variable("Unknown");
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user