From f1cf8c88bdc890e0414475c3803fbb7dfa95a1f2 Mon Sep 17 00:00:00 2001 From: Doug Pedrick Date: Sun, 29 Mar 2015 11:56:15 -0500 Subject: [PATCH] Added support for Rocksim Tube Fin Set file elements (import and export). --- .../file/rocksim/RocksimCommonConstants.java | 2 + .../file/rocksim/export/BodyTubeDTO.java | 6 +- .../file/rocksim/export/TubeFinSetDTO.java | 109 ++ .../rocksim/importt/AttachedPartsHandler.java | 2 +- .../rocksim/importt/TubeFinSetHandler.java | 119 ++ .../rocksim/importt/RocksimLoaderTest.java | 2 +- .../importt/TubeFinSetHandlerTest.java | 84 ++ .../file/rocksim/importt/TubeFins1.rkt | 1127 +++++++++++++++++ .../file/rocksim/importt/TubeFins2.rkt | 1127 +++++++++++++++++ 9 files changed, 2575 insertions(+), 3 deletions(-) create mode 100644 core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java create mode 100644 core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt create mode 100644 core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt diff --git a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java index 86cc5861d..1b8e92fca 100644 --- a/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java +++ b/core/src/net/sf/openrocket/file/rocksim/RocksimCommonConstants.java @@ -84,6 +84,8 @@ public class RocksimCommonConstants { public static final String RING_TAIL = "RingTail"; public static final String EXTERNAL_POD = "ExternalPod"; public static final String TEXTURE = "Texture"; + public static final String TUBE_COUNT = "TubeCount"; + public static final String MAX_TUBES_ALLOWED = "MaxTubesAllowed"; /** * Length conversion. Rocksim is in millimeters, OpenRocket in meters. diff --git a/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java index 4f9f708d9..18c56f70e 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/BodyTubeDTO.java @@ -15,6 +15,7 @@ import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Streamer; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.rocketcomponent.TubeCoupler; +import net.sf.openrocket.rocketcomponent.TubeFinSet; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -53,10 +54,11 @@ public class BodyTubeDTO extends BasePartDTO implements AttachableParts { @XmlElementRef(name = RocksimCommonConstants.LAUNCH_LUG, type = LaunchLugDTO.class), @XmlElementRef(name = RocksimCommonConstants.FIN_SET, type = FinSetDTO.class), @XmlElementRef(name = RocksimCommonConstants.CUSTOM_FIN_SET, type = CustomFinSetDTO.class), + @XmlElementRef(name = RocksimCommonConstants.TUBE_FIN_SET, type = TubeFinSetDTO.class), @XmlElementRef(name = RocksimCommonConstants.STREAMER, type = StreamerDTO.class), @XmlElementRef(name = RocksimCommonConstants.PARACHUTE, type = ParachuteDTO.class), @XmlElementRef(name = RocksimCommonConstants.MASS_OBJECT, type = MassObjectDTO.class)}) - List attachedParts = new ArrayList(); + List attachedParts = new ArrayList(); /** * Constructor. @@ -121,6 +123,8 @@ public class BodyTubeDTO extends BasePartDTO implements AttachableParts { attachedParts.add(new CustomFinSetDTO((FreeformFinSet) rocketComponents)); } else if (rocketComponents instanceof FinSet) { attachedParts.add(new FinSetDTO((FinSet) rocketComponents)); + } else if (rocketComponents instanceof TubeFinSet) { + attachedParts.add(new TubeFinSetDTO((TubeFinSet) rocketComponents)); } } } diff --git a/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java new file mode 100644 index 000000000..8c98a066b --- /dev/null +++ b/core/src/net/sf/openrocket/file/rocksim/export/TubeFinSetDTO.java @@ -0,0 +1,109 @@ +package net.sf.openrocket.file.rocksim.export; + +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.rocketcomponent.TubeFinSet; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +/** + * This class models an XML element for a Rocksim TubeFinSet. + */ +@XmlRootElement(name = RocksimCommonConstants.TUBE_FIN_SET) +@XmlAccessorType(XmlAccessType.FIELD) +public class TubeFinSetDTO extends BasePartDTO { + + @XmlElement(name = RocksimCommonConstants.OD) + private double od = 0d; + @XmlElement(name = RocksimCommonConstants.ID) + private double id = 0d; + @XmlElement(name = RocksimCommonConstants.TUBE_COUNT) + private int tubeCount = 0; + @XmlElement(name = RocksimCommonConstants.MAX_TUBES_ALLOWED) + private int maxTubeCount = 0; + + /** + * Default constructor. + */ + public TubeFinSetDTO() { + } + + /** + * Copy constructor. Fully populates this instance with values taken from the OR TubeFinSet. + * + * @param theORTubeFinSet The OR TubeFinSet component to be serialized in Rocksim format + */ + public TubeFinSetDTO(TubeFinSet theORTubeFinSet) { + super(theORTubeFinSet); + setId(theORTubeFinSet.getInnerRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); + setOd(theORTubeFinSet.getOuterRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); + setRadialAngle(theORTubeFinSet.getBaseRotation()); + setTubeCount(theORTubeFinSet.getFinCount()); + } + + /** + * Set the outer diameter of the tube fin(s). + * + * @return diameter in meters + */ + public double getOd() { + return od; + } + + /** + * Set the outer diameter of the tube fin(s). + * + * @param theOd diameter in meters + */ + public void setOd(double theOd) { + od = theOd; + } + + /** + * Get the inner diameter of the tube fin(s). + * + * @return diameter in meters + */ + public double getId() { + return id; + } + + /** + * Set the inner diameter of the tube fin(s). + * + * @param theId diameter in meters + */ + public void setId(double theId) { + id = theId; + } + + /** + * Get the tube fin count. + * + * @return # tube fins + */ + public int getTubeCount() { + return tubeCount; + } + + /** + * Set the tube fin count. + * + * @param theTubeCount # tube fins + */ + public void setTubeCount(final int theTubeCount) { + tubeCount = theTubeCount; + maxTubeCount = tubeCount; + } + + /** + * Get the max tube fin count. Since OR doesn't have this concept, just set it to the actual count. + * + * @return # tube fins + */ + public int getMaxTubeCount() { + return maxTubeCount; + } +} diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java index 3738a160f..7c3d57285 100644 --- a/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java +++ b/core/src/net/sf/openrocket/file/rocksim/importt/AttachedPartsHandler.java @@ -77,7 +77,7 @@ class AttachedPartsHandler extends AbstractElementHandler { return new SubAssemblyHandler(context, component); } if (RocksimCommonConstants.TUBE_FIN_SET.equals(element)) { - warnings.add("Tube fins are not currently supported. Ignoring."); + return new TubeFinSetHandler(context, component, warnings); } if (RocksimCommonConstants.RING_TAIL.equals(element)) { warnings.add("Ring tails are not currently supported. Ignoring."); diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java new file mode 100644 index 000000000..64c8de1b3 --- /dev/null +++ b/core/src/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandler.java @@ -0,0 +1,119 @@ +package net.sf.openrocket.file.rocksim.importt; + +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.file.DocumentLoadingContext; +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.file.rocksim.RocksimFinishCode; +import net.sf.openrocket.file.simplesax.ElementHandler; +import net.sf.openrocket.file.simplesax.PlainTextHandler; +import net.sf.openrocket.material.Material; +import net.sf.openrocket.rocketcomponent.RocketComponent; +import net.sf.openrocket.rocketcomponent.TubeFinSet; +import org.xml.sax.SAXException; + +import java.util.HashMap; + +/** + * Rocksim import SAX handler for Tube Fin Sets. + */ +public class TubeFinSetHandler extends PositionDependentHandler { + + /** + * The OpenRocket TubeFinSet instance. + */ + private final TubeFinSet tubeFin; + + /** + * Constructor. + * + * @param c the parent + * @param warnings the warning set + * + * @throws IllegalArgumentException thrown if c is null + */ + public TubeFinSetHandler(DocumentLoadingContext context, RocketComponent c, WarningSet warnings) throws IllegalArgumentException { + super(context); + if (c == null) { + throw new IllegalArgumentException("The parent component of a tube fin may not be null."); + } + tubeFin = new TubeFinSet(); + if (isCompatible(c, TubeFinSet.class, warnings)) { + c.addChild(tubeFin); + } + } + + + /** + * Set the relative position onto the component. + * + * @param position the OpenRocket position + */ + @Override + protected void setRelativePosition(final RocketComponent.Position position) { + tubeFin.setRelativePosition(position); + } + + /** + * Get the OR instance after the XML parsing is done. + * + * @return a TubeFinSet instance + */ + @Override + protected TubeFinSet getComponent() { + return tubeFin; + } + + /** + * Get the type of material the tube fins are constructed from. + * + * @return Material.Type + */ + @Override + protected Material.Type getMaterialType() { + return Material.Type.BULK; + } + + /** + * {@inheritDoc} + */ + @Override + public ElementHandler openElement(final String element, final HashMap attributes, final WarningSet warnings) throws SAXException { + return PlainTextHandler.INSTANCE; + } + + /** + * {@inheritDoc} + */ + @Override + public void closeElement(String element, HashMap attributes, String content, WarningSet warnings) + throws SAXException { + super.closeElement(element, attributes, content, warnings); + + try { + if (RocksimCommonConstants.OD.equals(element)) { + tubeFin.setOuterRadius(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS)); + } + if (RocksimCommonConstants.ID.equals(element)) { + tubeFin.setInnerRadius(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS)); + } + if (RocksimCommonConstants.LEN.equals(element)) { + tubeFin.setLength(Math.max(0, Double.parseDouble(content) / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH)); + } + if (RocksimCommonConstants.MATERIAL.equals(element)) { + setMaterialName(content); + } + if (RocksimCommonConstants.RADIAL_ANGLE.equals(element)) { + tubeFin.setBaseRotation(Double.parseDouble(content)); + } + if (RocksimCommonConstants.TUBE_COUNT.equals(element)) { + tubeFin.setFinCount(Integer.parseInt(content)); + } + if (RocksimCommonConstants.FINISH_CODE.equals(element)) { + tubeFin.setFinish(RocksimFinishCode.fromCode(Integer.parseInt(content)).asOpenRocket()); + } + } catch (NumberFormatException nfe) { + warnings.add("Could not convert " + element + " value of " + content + ". It is expected to be a number."); + } + } + +} diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java b/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java index 7711c463c..72d8be26c 100644 --- a/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java +++ b/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java @@ -122,7 +122,7 @@ public class RocksimLoaderTest extends BaseTestCase { Assert.assertEquals(0.185d, stage1.getOverrideMass(), 0.001); Assert.assertTrue(stage1.isCGOverridden()); Assert.assertEquals(0.3d, stage1.getOverrideCG().x, 0.001); - Assert.assertEquals(4, loader.getWarnings().size()); + Assert.assertEquals(3, loader.getWarnings().size()); Assert.assertEquals(1, stage2.getChildCount()); Assert.assertEquals("2nd Stage Tube", stage2.getChild(0).getName()); diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java new file mode 100644 index 000000000..0bd298a67 --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFinSetHandlerTest.java @@ -0,0 +1,84 @@ +package net.sf.openrocket.file.rocksim.importt; + +import net.sf.openrocket.aerodynamics.WarningSet; +import net.sf.openrocket.file.rocksim.RocksimCommonConstants; +import net.sf.openrocket.rocketcomponent.BodyTube; +import net.sf.openrocket.rocketcomponent.ExternalComponent; +import net.sf.openrocket.rocketcomponent.TubeFinSet; +import org.junit.Assert; + +import java.util.HashMap; + +/** + * Test for importing a Rocksim TubeFinSet into OR. + */ +public class TubeFinSetHandlerTest { + + /** + * Method: asOpenRocket(WarningSet warnings) + * + * @throws Exception thrown if something goes awry + */ + @org.junit.Test + public void testAsOpenRocket() throws Exception { + + WarningSet warnings = new WarningSet(); + TubeFinSetHandler handler = new TubeFinSetHandler(null, new BodyTube(), warnings); + + HashMap attributes = new HashMap<>(); + + handler.closeElement("Name", attributes, "The name", warnings); + handler.closeElement("TubeCount", attributes, "4", warnings); + handler.closeElement("RadialAngle", attributes, ".123", warnings); + + TubeFinSet fins = handler.getComponent(); + Assert.assertNotNull(fins); + Assert.assertEquals(0, warnings.size()); + + Assert.assertEquals("The name", fins.getName()); + Assert.assertEquals(4, fins.getFinCount()); + + Assert.assertEquals(.123d, fins.getBaseRotation(), 0d); + + handler.closeElement("OD", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "0", warnings); + Assert.assertEquals(0d, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "75", warnings); + Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getOuterRadius(), 0.001); + handler.closeElement("OD", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("ID", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "0", warnings); + Assert.assertEquals(0d, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "75", warnings); + Assert.assertEquals(75d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS, fins.getInnerRadius(), 0.001); + handler.closeElement("ID", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("Len", attributes, "-1", warnings); + Assert.assertEquals(0d, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "10", warnings); + Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "10.0", warnings); + Assert.assertEquals(10d / RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_LENGTH, fins.getLength(), 0.001); + handler.closeElement("Len", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + handler.closeElement("FinishCode", attributes, "-1", warnings); + Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish()); + handler.closeElement("FinishCode", attributes, "100", warnings); + Assert.assertEquals(ExternalComponent.Finish.NORMAL, fins.getFinish()); + handler.closeElement("FinishCode", attributes, "foo", warnings); + Assert.assertEquals(1, warnings.size()); + warnings.clear(); + + + } + +} diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt new file mode 100644 index 000000000..e91d25d50 --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins1.rkt @@ -0,0 +1,1127 @@ + + 4 + + + Airplane Look-A-Like Design + 0 + 1 + 1 + 0. + 0. + 0. + 0. + 0. + 1 + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 4 + 914.4 + 0 + 0 + 0 + 1 + 0 + This is a neat design that shows off the ability of RockSim to compute the stability of Assymetrical fin arrangements. + Tim Van Milligan. Visit my web site at: www.ApogeeRockets.com + 4 + 29 + 1 + 0 + CSV1|1|269.85,7.10543e-15,0|234.797,725.664,238.862|-0.445864,0.260358,-0.856399|544.986,1043.28|30|2|764.769|-34.4359|0|0|0|0 + 0,429.071,0,0 + 0,17.5351,0,0 + 0,429.071,0,0 + 0,17.5351,0,0 + 0,0,0,0 + 0,0,0,0 + 2 + 1 + 1 + 1 + 0. + 0. + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0. + 10. + 10.0076 + 10.0076 + 10.0076 + 0 + 0 + 0 + 10. + 0.15 + black + 87.122 + 29.972 + 635.051 + 635.051 + 0. + 635.051 + 0,29.972,0,0 + 0,635.051,0,0 + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11 +1 +0. +0. +0 +0. +0. +0. +0. +-1 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +Apogee +11.8 +1049.21 +Polystyrene PS +Nose cone +72.9996 +1 +0. +10.0765 +86.8842 +0.0068397 +0.0068397 +0. +0 +19114 +PNC 29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +1 +0 +0 +0 +rgb(204,43,29) +2. +0.0500862 +2. +0.0500862 +1 +0 +8 +0 +0. +108.001 +29.8958 +0 +1 +1 +29.9974 +0.9906 +0. +28.8036 +0. +0. +0. + + + + +Apogee +0. +1121.29 +Paper +Forward Fuselage Tube +0. +0 +0. +10.7139 +101.6 +0.0191333 +0.0191333 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +2 +1 +0 +0 +rgb(102,255,102) +0. +0. +0. +0. +1 +0 +8 +0 +108.001 +29.972 +28.956 +203.2 +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +924.265 +Polyethylene LDPE +Parachute +0. +0 +60.325 +6.87245 +50.8 +0. +0. +0. +0 +29115 + +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,0) +white +1 +11 +0 +0 +0 +rgb(255,102,0) +0. +0. +0. +0. +1 +0 +8 +0 +168.326 +609.6 +0. +6 +6 +0.0254 +609.6 +1 +0.00032972 +Carpet String (Apogee 29500) +0.75 + + + + +Estes +0. +0.00039698 +100lb Kevlar (Apogee 29505) +Shock Cord (Mass Object) +180.975 +0 +180.975 +0.483998 +0. +0. +0. +0. +2 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +12 +0 +0 +0 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +288.976 +1 +1219.2 + + + + +Apogee +63.786 +1121.29 +Paper +Tube coupler +0. +1 +-31.75 +2.41365 +31.75 +0. +0. +0. +0 +13008 +AC-29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,55,41) +white +1 +15 +0 +0 +2 +rgb(190,11,17) +0. +0. +0. +0. +1 +0 +8 +0 +279.451 +28.702 +27.94 +63.5 +0 +4 +0 + + + + + + +Apogee +0. +1121.29 +Paper +Aft Fuselage Tube +0. +0 +0. +13.3924 +127. +0.0239166 +0.0239166 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +3 +1 +0 +0 +rgb(26,209,56) +0. +0. +0. +0. +1 +0 +8 +0 +311.201 +29.972 +28.956 +254. +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +1121.29 +Paper +Engine Mount Tube +0. +0 +-69.85 +2.17025 +50.8 +0. +0. +0. +0 +10085 +18 mm +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(76,76,76) +white +1 +5 +0 +0 +2 +rgb(71,96,255) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +18.6944 +18.034 +101.6 +0 +1 +18. +12.7 +0. +0. +1 +0 + + +Apogee +0.44 +1121.29 +Paper +Engine block +0. +1 +57.15 +0.680438 +3.175 +0. +0. +0. +0 +13029 +CR 13-18 ring +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(39,181,255) +white +1 +6 +0 +0 +2 +rgb(0,51,153) +0. +0. +0. +0. +1 +0 +8 +0 +571.551 +17.78 +13.9446 +6.35 +0 +2 +0 + + + + +Estes +1.4 +0.00112861 +Engine hook (mass object) +28.575 +1 +28.575 +0. +0. +0. +0. +0. +2 +Engine hook +Standard size +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +8 +0 +0 +2 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +606.476 +0 +0. + + + + + + +Apogee +1.64 +1121.29 +Paper +Front Engine Mount Centering Ring +0. +1 +25.4 +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +9 +0 +0 +2 +rgb(204,0,153) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Apogee +1.64 +1121.29 +Paper +Rear Engine Mount Centering Ring +0. +1 +0. +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +10 +0 +0 +2 +rgb(204,30,85) +0. +0. +0. +0. +1 +0 +8 +0 +558.851 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Custom +0. +688.794 +Cardboard +Tube fins +0. +0 +174.625 +193.542 +36.5125 +0.043181 +0.043181 +0. +0 +29.2735 +0.903382 +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +29 +0 +0 +0 +blue +10.2204 +0.524222 +16.7631 +0.487223 +1 +0 +8 +0 +485.826 +28.575 +0. +73.025 +0 +6 +1.01975 +6 + + + + + + +Custom +0. +1049.21 +Polystyrene PS +Rear Boattail (transition) +0. +0 +0. +7.91299 +29.4088 +0.00525216 +0.00525216 +0. +0 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +4 +0 +0 +0 +rgb(0,64,128) +-1.22806 +0.605641 +-1.22806 +0.605641 +1 +0 +8 +0 +565.201 +29.972 +18.6944 +63.5 +0 +0. +0. +1 +1.524 +0. +0. +0. +1 +0. +102.846 +39.3464 + + + + + + + + + + + + + + + + + + +134.44 +45.3235 +80.1762 +5.98125 +4.53 +1 +10.207 +133.356 +5 +6.45125 +1 +1.45125 +44.3662 +6.45125 +2.10759 +44.3969 +9.12783 +78.9581 +13.9226 +129.31 +0. +0. +0 +914.4 +0 +0. +0 +0.174533 +0. +0. +759.813 +1.571 +0. +50. +15. +0. +0. +0 +3 +1.34112 +3.53162 +3 +0.04 +0.02 +0 +6 +1. +1. +1 +0. +0 +3 +300. +2000. +1 +5.99999 +0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2 +0.99 +2000. +1500. +2 +0.98 +1 +0. +0 +0.08 +1 +0. +1 +0. +1 +0. +1. +1. +0. +0 +0 +3600. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +[C6-5] +10.1691 +0. +0. +0.25625 +1.435 +0.18 +10 +1 +800. +0 +Earth +Standard earth condistions. +2.681 +129.31 +0. +3.75682 +1.36125 +-3.50153 +0. +0,0,6.45125,0,0 +-1,-1,6.45,0,0 +0,0,6.45125,0,0 +32,32,80,32,32 +0.25 +1 +0.149308 +0.356462 +0.00433885 +3.02787e-05 +0. +0. +0. + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +11 +1 +0. +0. +1 +133.356 +10.207 +58.8311 +6.45125 +128 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + + + + + +1 +C6 +0. +Estes +12.7 +0. +5 +5. +0. +0. + + + + + + + diff --git a/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt new file mode 100644 index 000000000..ea1c6673c --- /dev/null +++ b/core/test/net/sf/openrocket/file/rocksim/importt/TubeFins2.rkt @@ -0,0 +1,1127 @@ + + 4 + + + Airplane Look-A-Like Design + 0 + 1 + 1 + 0. + 0. + 0. + 0. + 0. + 1 + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 0. + 4 + 914.4 + 0 + 0 + 0 + 1 + 0 + This is a neat design that shows off the ability of RockSim to compute the stability of Assymetrical fin arrangements. + Tim Van Milligan. Visit my web site at: www.ApogeeRockets.com + 4 + 29 + 1 + 0 + CSV1|1|269.85,7.10543e-15,0|234.797,725.664,238.862|-0.445864,0.260358,-0.856399|544.986,1043.28|30|2|764.769|-34.4359|0|0|0|0 + 0,329.307,0,0 + 0,9.1535,0,0 + 0,329.307,0,0 + 0,9.1535,0,0 + 0,0,0,0 + 0,0,0,0 + 2 + 1 + 1 + 1 + 0. + 0. + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0. + 10. + 10.0076 + 10.0076 + 10.0076 + 0 + 0 + 0 + 10. + 0.15 + black + 87.122 + 29.972 + 635.051 + 635.051 + 0. + 635.051 + 0,29.972,0,0 + 0,635.051,0,0 + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +11 +1 +0. +0. +0 +0. +0. +0. +0. +-1 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +Apogee +11.8 +1049.21 +Polystyrene PS +Nose cone +72.9996 +1 +0. +10.0765 +86.8842 +0.0068397 +0.0068397 +0. +0 +19114 +PNC 29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +1 +0 +0 +0 +rgb(204,43,29) +2. +0.0500862 +2. +0.0500862 +1 +0 +8 +0 +0. +108.001 +29.8958 +0 +1 +1 +29.9974 +0.9906 +0. +28.8036 +0. +0. +0. + + + + +Apogee +0. +1121.29 +Paper +Forward Fuselage Tube +0. +0 +0. +10.7139 +101.6 +0.0191333 +0.0191333 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +2 +1 +0 +0 +rgb(102,255,102) +0. +0. +0. +0. +1 +0 +8 +0 +108.001 +29.972 +28.956 +203.2 +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +924.265 +Polyethylene LDPE +Parachute +0. +0 +60.325 +6.87245 +50.8 +0. +0. +0. +0 +29115 + +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,0) +white +1 +11 +0 +0 +0 +rgb(255,102,0) +0. +0. +0. +0. +1 +0 +8 +0 +168.326 +609.6 +0. +6 +6 +0.0254 +609.6 +1 +0.00032972 +Carpet String (Apogee 29500) +0.75 + + + + +Estes +0. +0.00039698 +100lb Kevlar (Apogee 29505) +Shock Cord (Mass Object) +180.975 +0 +180.975 +0.483998 +0. +0. +0. +0. +2 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +12 +0 +0 +0 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +288.976 +1 +1219.2 + + + + +Apogee +63.786 +1121.29 +Paper +Tube coupler +0. +1 +-31.75 +2.41365 +31.75 +0. +0. +0. +0 +13008 +AC-29A +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,55,41) +white +1 +15 +0 +0 +2 +rgb(190,11,17) +0. +0. +0. +0. +1 +0 +8 +0 +279.451 +28.702 +27.94 +63.5 +0 +4 +0 + + + + + + +Apogee +0. +1121.29 +Paper +Aft Fuselage Tube +0. +0 +0. +13.3924 +127. +0.0239166 +0.0239166 +0. +0 +10110 +29mm thin wall motor mount +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(102,102,102) +white +1 +3 +1 +0 +0 +rgb(26,209,56) +0. +0. +0. +0. +1 +0 +8 +0 +311.201 +29.972 +28.956 +254. +0 +0 +0. +0.5 +0. +0. +0 +0 + + +Apogee +0. +1121.29 +Paper +Engine Mount Tube +0. +0 +-69.85 +2.17025 +50.8 +0. +0. +0. +0 +10085 +18 mm +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(76,76,76) +white +1 +5 +0 +0 +2 +rgb(71,96,255) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +18.6944 +18.034 +101.6 +0 +1 +18. +12.7 +0. +0. +1 +0 + + +Apogee +0.44 +1121.29 +Paper +Engine block +0. +1 +57.15 +0.680438 +3.175 +0. +0. +0. +0 +13029 +CR 13-18 ring +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(39,181,255) +white +1 +6 +0 +0 +2 +rgb(0,51,153) +0. +0. +0. +0. +1 +0 +8 +0 +571.551 +17.78 +13.9446 +6.35 +0 +2 +0 + + + + +Estes +1.4 +0.00112861 +Engine hook (mass object) +28.575 +1 +28.575 +0. +0. +0. +0. +0. +2 +Engine hook +Standard size +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +8 +0 +0 +2 +rgb(204,153,0) +0. +0. +0. +0. +1 +0 +8 +0 +606.476 +0 +0. + + + + + + +Apogee +1.64 +1121.29 +Paper +Front Engine Mount Centering Ring +0. +1 +25.4 +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +9 +0 +0 +2 +rgb(204,0,153) +0. +0. +0. +0. +1 +0 +8 +0 +533.451 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Apogee +1.64 +1121.29 +Paper +Rear Engine Mount Centering Ring +0. +1 +0. +4.60687 +3.175 +0. +0. +0. +0 +13034 +CR 18-29 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(255,102,51) +white +1 +10 +0 +0 +2 +rgb(204,30,85) +0. +0. +0. +0. +1 +0 +8 +0 +558.851 +28.702 +18.796 +6.35 +0 +0 +0 + + + + +Custom +10. +688.794 +Cardboard +Tube fins +0. +1 +123.825 +20.31 +36.5125 +0.0375518 +0.0375518 +0. +0 +29.2735 +3.14177 +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +blue +white +1 +29 +0 +0 +0 +blue +5.11021 +0.459553 +8.38157 +0.436423 +1 +0 +8 +0 +435.026 +28.575 +25.4 +73.025 +0 +3 +1.01975 +6 + + + + + + +Custom +0. +1049.21 +Polystyrene PS +Rear Boattail (transition) +0. +0 +0. +7.91299 +29.4088 +0.00525216 +0.00525216 +0. +0 +0. +0. +file=()|position=(0,0,0)|origin=(0.5,0.5,0.5)|scale=(1,1,1)|repeat=(1)|interpolate=(0)|flipr(0)|flips(0)|flipt=(0)|preventseam=(1) +1. +0. +1. +0. +1. +blue +rgb(204,204,204) +white +1 +4 +0 +0 +0 +rgb(0,64,128) +-1.22806 +0.605641 +-1.22806 +0.605641 +1 +0 +8 +0 +565.201 +29.972 +18.6944 +63.5 +0 +0. +0. +1 +1.524 +0. +0. +0. +1 +0. +102.846 +39.3464 + + + + + + + + + + + + + + + + + + +134.44 +45.3235 +80.1762 +5.98125 +4.53 +1 +10.207 +133.356 +5 +6.45125 +1 +1.45125 +44.3662 +6.45125 +2.10759 +44.3969 +9.12783 +78.9581 +13.9226 +129.31 +0. +0. +0 +914.4 +0 +0. +0 +0.174533 +0. +0. +759.813 +1.571 +0. +50. +15. +0. +0. +0 +3 +1.34112 +3.53162 +3 +0.04 +0.02 +0 +6 +1. +1. +1 +0. +0 +3 +300. +2000. +1 +5.99999 +0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +2 +0.99 +2000. +1500. +2 +0.98 +1 +0. +0 +0.08 +1 +0. +1 +0. +1 +0. +1. +1. +0. +0 +0 +3600. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +0. +[C6-5] +10.1691 +0. +0. +0.25625 +1.435 +0.18 +10 +1 +800. +0 +Earth +Standard earth condistions. +2.681 +129.31 +0. +3.75682 +1.36125 +-3.50153 +0. +0,0,6.45125,0,0 +-1,-1,6.45,0,0 +0,0,6.45125,0,0 +32,32,80,32,32 +0.25 +1 +0.149308 +0.356462 +0.00433885 +3.02787e-05 +0. +0. +0. + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +0 +0 +0. +0. +0 +0. +0. +0. +0. +-1 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + +11 +1 +0. +0. +1 +133.356 +10.207 +58.8311 +6.45125 +128 +28,28,28 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 +0,0,0 + + + + + + + + +1 +C6 +0. +Estes +12.7 +0. +5 +5. +0. +0. + + + + + + +