diff --git a/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java b/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java index 70f645ab1..8e65f29c7 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java +++ b/core/src/net/sf/openrocket/rocketcomponent/FlightConfiguration.java @@ -64,6 +64,7 @@ public class FlightConfiguration implements FlightConfigurableParameter stages = new HashMap(); final protected HashMap motors = new HashMap(); final private Collection activeMotors = new ArrayList(); + final private InstanceMap activeInstances = new InstanceMap(); private int boundsModID = -1; private BoundingBox cachedBounds = new BoundingBox(); @@ -101,6 +102,7 @@ public class FlightConfiguration implements FlightConfigurableParameter instanceCoordinates = component.getComponentBounds(); for (InstanceContext context : contexts) { - /* - * If the instance is not active in the current context, then - * skip the bound calculations. This is mildly confusing since - * getActiveInstances() implies that it will only return the - * instances that are active, but it returns all instances and - * the context indicates if it is active or not. - */ - if (!context.active) { - continue; - } - Collection transformedCoords = new ArrayList<>(instanceCoordinates); // mutating. Transforms coordinates in place. context.transform.transform(instanceCoordinates); diff --git a/core/src/net/sf/openrocket/rocketcomponent/InstanceContext.java b/core/src/net/sf/openrocket/rocketcomponent/InstanceContext.java index 2e7da00f9..e781182c8 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/InstanceContext.java +++ b/core/src/net/sf/openrocket/rocketcomponent/InstanceContext.java @@ -26,9 +26,8 @@ public class InstanceContext { return component.hashCode(); } - public InstanceContext(final RocketComponent _component, final boolean _active, final int _instanceNumber, final Transformation _transform) { + public InstanceContext(final RocketComponent _component, final int _instanceNumber, final Transformation _transform) { component = _component; - active = _active; instanceNumber = _instanceNumber; transform = _transform; @@ -48,7 +47,6 @@ public class InstanceContext { // ==== public ==== final public RocketComponent component; - final public boolean active; final public int instanceNumber; final public Transformation transform; diff --git a/core/src/net/sf/openrocket/rocketcomponent/InstanceMap.java b/core/src/net/sf/openrocket/rocketcomponent/InstanceMap.java index 36cc79e8a..1538e69aa 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/InstanceMap.java +++ b/core/src/net/sf/openrocket/rocketcomponent/InstanceMap.java @@ -34,7 +34,7 @@ public class InstanceMap extends HashMap()); } - final InstanceContext context = new InstanceContext(component, active, number, xform); + final InstanceContext context = new InstanceContext(component, number, xform); get(key).add(context); } diff --git a/core/src/net/sf/openrocket/util/TestRockets.java b/core/src/net/sf/openrocket/util/TestRockets.java index cf61a013a..632b36a63 100644 --- a/core/src/net/sf/openrocket/util/TestRockets.java +++ b/core/src/net/sf/openrocket/util/TestRockets.java @@ -66,7 +66,6 @@ import net.sf.openrocket.simulation.listeners.SimulationListener; import net.sf.openrocket.startup.Application; public class TestRockets { - public final static FlightConfigurationId TEST_FCID_0 = new FlightConfigurationId("d010716e-ce0e-469d-ae46-190f3653ebbf"); public final static FlightConfigurationId TEST_FCID_1 = new FlightConfigurationId("f41bee5b-ebb8-4d92-bce7-53001577a313"); public final static FlightConfigurationId TEST_FCID_2 = new FlightConfigurationId("3e8d1280-53c2-4234-89a7-de215ef5cd69"); @@ -1705,30 +1704,32 @@ public class TestRockets { // find the body and fins final InstanceMap imap = rocket.getSelectedConfiguration().getActiveInstances(); - for(Map.Entry> entry: imap.entrySet() ) { - RocketComponent c = entry.getKey(); + RocketComponent c = null; + for(Map.Entry> entry: imap.entrySet() ) { + c = entry.getKey(); if (c instanceof TrapezoidFinSet) { - final TrapezoidFinSet fins = (TrapezoidFinSet) c; - final BodyTube body = (BodyTube) fins.getParent(); - body.removeChild(fins); - - // create a PodSet to hook the fins to - PodSet podset = new PodSet(); - podset.setInstanceCount(fins.getFinCount()); - - body.addChild(podset); - - // put a phantom body tube on the pods - BodyTube podBody = new BodyTube(fins.getRootChord(), 0); - podBody.setName("Pod Body"); - podset.addChild(podBody); - - // change the number of fins to 1 and put the revised - // finset on the podbody - fins.setFinCount(1); - podBody.addChild(fins); + break; } } + final TrapezoidFinSet fins = (TrapezoidFinSet) c; + final BodyTube body = (BodyTube) fins.getParent(); + body.removeChild(fins); + + // create a PodSet to hook the fins to + PodSet podset = new PodSet(); + podset.setInstanceCount(fins.getFinCount()); + + body.addChild(podset); + + // put a phantom body tube on the pods + BodyTube podBody = new BodyTube(fins.getRootChord(), 0); + podBody.setName("Pod Body"); + podset.addChild(podBody); + + // change the number of fins to 1 and put the revised + // finset on the podbody + fins.setFinCount(1); + podBody.addChild(fins); return rocket; } diff --git a/swing/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java b/swing/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java index c6aef258e..d144ef2c5 100644 --- a/swing/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java +++ b/swing/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java @@ -85,21 +85,19 @@ public abstract class RocketRenderer { if (ignore != null && ignore.contains(comp)) continue; - if( geom.active ) { - final int hashCode = comp.hashCode(); - - selectionMap.put(hashCode, comp); - - gl.glColor4ub((byte) ((hashCode >> 24) & 0xFF), // red channel (LSB) - (byte) ((hashCode >> 16) & 0xFF), // green channel - (byte) ((hashCode >> 8) & 0xFF), // blue channel - (byte) ((hashCode) & 0xFF)); // alpha channel (MSB) - - if (isDrawnTransparent(comp)) { - geom.render(gl, Surface.INSIDE); - } else { - geom.render(gl, Surface.ALL); - } + final int hashCode = comp.hashCode(); + + selectionMap.put(hashCode, comp); + + gl.glColor4ub((byte) ((hashCode >> 24) & 0xFF), // red channel (LSB) + (byte) ((hashCode >> 16) & 0xFF), // green channel + (byte) ((hashCode >> 8) & 0xFF), // blue channel + (byte) ((hashCode) & 0xFF)); // alpha channel (MSB) + + if (isDrawnTransparent(comp)) { + geom.render(gl, Surface.INSIDE); + } else { + geom.render(gl, Surface.ALL); } } @@ -186,7 +184,6 @@ public abstract class RocketRenderer { for(InstanceContext context: contextList ) { Geometry instanceGeometry = cr.getComponentGeometry( comp, context.transform ); - instanceGeometry.active = context.active; treeGeometry.add( instanceGeometry ); } } @@ -196,19 +193,15 @@ public abstract class RocketRenderer { private void renderTree( GL2 gl, final Collection geometryList){ //cycle through opaque components first, then transparent to preserve proper depth testing for(Geometry geom: geometryList ) { - if( geom.active ) { - //if not transparent - if( !isDrawnTransparent( (RocketComponent)geom.obj) ){ - renderComponent(gl, geom, 1.0f); - } + //if not transparent + if( !isDrawnTransparent( (RocketComponent)geom.obj) ){ + renderComponent(gl, geom, 1.0f); } } for(Geometry geom: geometryList ) { - if( geom.active ) { - if( isDrawnTransparent( (RocketComponent)geom.obj) ){ - // Draw T&T front faces blended, without depth test - renderComponent(gl, geom, 0.2f); - } + if( isDrawnTransparent( (RocketComponent)geom.obj) ){ + // Draw T&T front faces blended, without depth test + renderComponent(gl, geom, 0.2f); } } } diff --git a/swing/src/net/sf/openrocket/gui/figure3d/geometry/Geometry.java b/swing/src/net/sf/openrocket/gui/figure3d/geometry/Geometry.java index 4c4b9df62..41554e575 100644 --- a/swing/src/net/sf/openrocket/gui/figure3d/geometry/Geometry.java +++ b/swing/src/net/sf/openrocket/gui/figure3d/geometry/Geometry.java @@ -25,8 +25,6 @@ public abstract class Geometry { public final Object obj; public final Transformation transform; - public boolean active; - public abstract void render(GL2 gl, Surface which ); private Geometry() { diff --git a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java index ab3330a0b..5275d8ad0 100644 --- a/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java +++ b/swing/src/net/sf/openrocket/gui/scalefigure/RocketFigure.java @@ -378,11 +378,7 @@ public class RocketFigure extends AbstractScaleFigure { for(InstanceContext context: contextList ) { final Transformation currentTransform = this.axialRotation.applyTransformation(context.transform); - - // generate shape for this component, if active - if( context.active ) { - allShapes = addThisShape( allShapes, this.currentViewType, comp, currentTransform); - } + allShapes = addThisShape( allShapes, this.currentViewType, comp, currentTransform); } } }