From 98b60d1f7a9a9c297599c7d2204a1c94c0972717 Mon Sep 17 00:00:00 2001 From: JoePfeiffer Date: Wed, 1 Jun 2022 16:03:25 -0600 Subject: [PATCH] update iteration through rocket components to account for inactive components and instances --- .../simulation/BasicTumbleStatus.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/core/src/net/sf/openrocket/simulation/BasicTumbleStatus.java b/core/src/net/sf/openrocket/simulation/BasicTumbleStatus.java index 9d895809d..324789b61 100644 --- a/core/src/net/sf/openrocket/simulation/BasicTumbleStatus.java +++ b/core/src/net/sf/openrocket/simulation/BasicTumbleStatus.java @@ -1,9 +1,13 @@ package net.sf.openrocket.simulation; +import java.util.ArrayList; import java.util.Iterator; +import java.util.Map; import net.sf.openrocket.rocketcomponent.FinSet; import net.sf.openrocket.rocketcomponent.FlightConfiguration; +import net.sf.openrocket.rocketcomponent.InstanceContext; +import net.sf.openrocket.rocketcomponent.InstanceMap; import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.SymmetricComponent; @@ -46,27 +50,33 @@ public class BasicTumbleStatus extends SimulationStatus { // compute the fin and body tube projected areas double aFins = 0.0; double aBt = 0.0; - Rocket r = this.getConfiguration().getRocket(); - Iterator componentIterator = r.iterator(); - while (componentIterator.hasNext()) { - RocketComponent component = componentIterator.next(); + final InstanceMap imap = this.getConfiguration().getActiveInstances(); + for(Map.Entry> entry: imap.entrySet() ) { + final RocketComponent component = entry.getKey(); + if (!component.isAerodynamic()) { continue; } - if (component instanceof FinSet) { - final FinSet finComponent = ((FinSet) component); - final double finArea = finComponent.getPlanformArea(); - int finCount = finComponent.getFinCount(); + + // iterate across component instances + final ArrayList contextList = entry.getValue(); + for(InstanceContext context: contextList ) { - // check bounds on finCount. - if (finCount >= finEff.length) { - finCount = finEff.length - 1; + if (component instanceof FinSet) { + final FinSet finComponent = ((FinSet) component); + final double finArea = finComponent.getPlanformArea(); + int finCount = finComponent.getFinCount(); + + // check bounds on finCount. + if (finCount >= finEff.length) { + finCount = finEff.length - 1; + } + + aFins += finArea * finEff[finCount] / finComponent.getFinCount(); + + } else if (component instanceof SymmetricComponent) { + aBt += ((SymmetricComponent) component).getComponentPlanformArea(); } - - aFins += finArea * finEff[finCount]; - - } else if (component instanceof SymmetricComponent) { - aBt += ((SymmetricComponent) component).getComponentPlanformArea(); } }