382 Commits

Author SHA1 Message Date
Joe Pfeiffer
c7b3466dd5
Unstable (#5)
* Fix Average Thrust Calculation (fixes issue #441)

Remove test for short time interval before first data point in thrust
curve.  Comment said it was for numerical stability; multiplying by a
small number and then adding doesn't introduce any instabilities I'm
aware of in this code.

Add parentheses to clarify that values are being multiplied by time
intervals, not divided.

* Code clarification; should make no difference to results

* [refactor] fixed warnings and made variable names more explicit in [Freeform]FinSetConfig Dialogs

- de-duped  writeCSVFile methods

* [Fixes #424] Respaced FinSetConfig Window:

Resolved some sources of phantom whitespace; Spacing on component configuration
windows is now generally tighter.

* [cleanup] Refactored naming in ScaleSelector to be more consistent 'Zoom' -> 'Scale'

* [refactor] updated BoundingBox class to be more useful

- FlightConfiguration now exposes the BoundingBox method for its rocket

* [refactor] Reduce redundant methods in Scalefigures, and harmonize common function names

- removed interface that was only inherited by the single AbstractBaseClass
- harmonizes  the border pixels variables in the scalefigure package

* [rm] excised EXTRA_SCALE (==S) factor in ScaleFigure Code

* [fix] FinPointFigure now auto-scales correctly

- auto-zooms on startup
- ScaleSelector Text updates with +/- buttons
- adjusts fin-point drawing code

* [feat] FinPointFigure draws its parent/mounting half-body (w/front & back terminators)

* [fixes #425] FinPointFigure ScrollBars now adjust with zoom in/out

* [fix] clicking away from points now longer causes an exception

* Version Bump to Alpha 8

* [fixes #424] Addes back in ConfigDialog outside spacing.

* [feature][Resolves #426] implemented FinPoint SelectedIndex Indicators

- figure and table update each other

* [fixes #419] Clicking in fin-point figure now calculates closest segment correctly

* [fixes #431] Fins default to instance count / fin count == 1

- Fixed init bug
- added unittests for fin count loading/saving/creation

* [fix] Revert patch 6289aef0... which introduced simulation anomalies

* [resolves #423][partial] BarrowmanCalculator no longer multiplies instanced leaf nodes.

* [fix] Fixes the way BarrowmanCalculator handles instancing, particularly for ComponentAssemblies

* [test] Moved fins from core-body to booster-body; (they are now doubly-instanced); adjusted tests to accept this.

* [refactor] renamed FinSet#fins => FinSet#finCount to make it's meaning more explicit

* [minor][debug][oneline] removed excess sys.err debug line

* [fixes #439] May now delete points again, in the FreeformFinSetConfig window

* [fix] AbstractScaleFigure now stores (& requires!) the visible bounds when setting zoom/scale.

- if the visible bounds are larger than the requested scale bounds, then the figure is expanded to match.

* [fixes #436] Rocket figures now center as desired.

* [fixes #425][fixes #440] FinPointFigure contents are bottom-aligned, properly sized.

* [refactor] separated FinSet Tests into files corresponding to FinSet, TrapezoidalFinSet, and FreeformFinSet

* [fixes #419] Adding new points to FreeformFins are now placed at the mouse cursor

* Little bit more massaging for clarity (replace avgImpulse with impulse)

* [fixes #426] reworks FreeformFinSet Selected point display... it is now a second, expanded, different colored box.

* missed reversing the operands in the calculation of last bit of impulse

* [build] Updated dependencies for running from intellij

* [feat] added shared build configurations for Intellij at .idea/runConfigurations/*"

* [fix][config] rename Run Target Configurations

* [build] added jar artifact for IDEA Intellij build

* [fix] run configuration and jar paths are now cross-platform

* [fix] may now create and drag a point in one click.

* [fix] cleanup up unused imports in core/test/net/sf/openrocket/rocketcomponent/*

* [cleanup] removed dead code, and fixed javadocs

* [refactor] tightened access specifiers in FinSet.java

* [fix][Refactor] rocketcomponent.position.RadiusMethod to be clearer

1. renamed getOuterRadius() => getBoundingRadius()
   Previous function did not make sense, where implemented in FinSet.
2. Changed implementation of RadiusMethod.*.getRadius()
   now fails a bit more gracefully.

* [fix] Fixes repeated bug in Presets/Material Loading -- inconsistent test criteria

* Closes 443

When the events STAGE_SEPARATION and EJECTION_CHARGE are both triggered by
BURNOUT, both events occur simultaneously and either can be inserted
in EventQueue first.  If STAGE_SEPARATION is inserted first, the
filter in BasicEventSimulationEngine.java ignoring events from
components that are no longer attached to the rocket drops ignores
EJECTION_CHARGE.  If second stage IGNITION is triggered by
EJECTION_CHARGE it is filtered out, and second stage IGNITION fails to
happen.  This can be seen in the following snippet of a log file:

10592          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4]
10592          DEBUG [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine -  detected Motor Burnout for motor B4@ 1.03  on stage 1: Stage
10592          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null]
10592          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=EJECTION_CHARGE,time=1.0311458852237796,source=Stage,data=B4], FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]]
10592          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null]
10592          INFO  [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - ==>> @ 1.03115; from Branch: Sustainer ---- Branching: Stage ----

10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=EJECTION_CHARGE,time=1.0311458852237796,source=Stage,data=B4]
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]]
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Ignoring event from unattached componenent
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = []
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=ALTITUDE,time=1.0311458852237796,source=Rocket,data=[25.502739793351193;25.603323566419885]]
10593          TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Taking simulation step at t=1.0311458852237796 altitude 25.603323566419885
10593          TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Too small time step 0.0014030377018961126 (limiting factor 5), using 0.0025 instead.
10593          TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Thrust = 0.0

Note here that there was no IGNITION in the sustainer branch, and the
Thrust is 0.0 at the end of the snippet.

Moving the test for ignition events ahead of the filter assures the
IGNITION is scheduled, as seen in this log file snippet:

8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4]
8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]]
8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=BURNOUT,time=1.03,source=Body tube,data=B4]
8994           DEBUG [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine -  detected Motor Burnout for motor B4@ 1.03  on stage 1: Stage
8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null]
8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=EJECTION_CHARGE,time=1.0302951181945657,source=Stage,data=B4], FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]]
8994           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=STAGE_SEPARATION,time=1.03,source=Stage,data=null]
8995           INFO  [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - ==>> @ 1.03030; from Branch: Sustainer ---- Branching: Stage ----

8995           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=EJECTION_CHARGE,time=1.0302951181945657,source=Stage,data=B4]
8995           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]]
8995           INFO  [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Queueing Ignition Event for:               Body tube/334ebb79 /   A8 - Armed @: 1.0302951181945657
8995           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Ignoring event from unattached componenent
8995           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=IGNITION,time=1.0302951181945657,source=Body tube,data=A8]
8995           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]]
8996           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=IGNITION,time=1.0302951181945657,source=Body tube,data=A8]
8996           INFO  [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine -   Igniting motor:               Body tube/334ebb79 /   A8 - Armed @1.0302951181945657
8996           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Obtained event from queue:  FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]
8996           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Remaining EventQueue = [FlightEvent[type=BURNOUT,time=1.7602951181945656,source=Body tube,data=A8]]
8996           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Handling event FlightEvent[type=ALTITUDE,time=1.0302951181945657,source=Rocket,data=[25.478255057184594;25.5788943164009]]
8996           TRACE [pool-4-thread-1] n.s.o.s.BasicEventSimulationEngine - Taking simulation step at t=1.0302951181945657 altitude 25.5788943164009
8996           TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Too small time step 0.0012514398786730699 (limiting factor 5), using 0.0025 instead.
8996           TRACE [pool-4-thread-1] n.s.o.s.RK4SimulationStepper - Thrust = 0.015609756097560644

Here, the IGNITION does take place, and Thrust is non-zero.
Displaying a plot of the flight, and saving CSV files, shows a normal
two-stage flight profile.

This commit does two things:

(1) adds a little more logging, in particular logging what event has been
    obtained from EventQueue and logging when that event is ignored.

(2) moves the motor ignition events test ahead of the filter, as
    described above.

* Correct active stages after STAGE_SEPARATION event

* oops, didn't want to keep the extra debugging log entries

* more fixes to stage ignition:  now also pays attention to ignition
type and additional delay
2018-09-29 16:17:33 -06:00
Wes Cravens
e6612ddbe0
Merge pull request #430 from teyrana/fix_debug_window
[fixes #428] DebugLogDialog // details Pane stays hidden (if toggled hidden)
2018-08-01 10:49:32 -05:00
Daniel_M_Williams
6add0b396c [fixes #428] minor patch to fix behavior of toggling the details pane in the debug log window 2018-07-08 11:32:51 -04:00
Wes Cravens
3538d53c6d
Merge pull request #416 from JoePfeiffer/fixnewconfiguration
Set current configuration before creating simulation
2018-07-05 00:55:01 -05:00
Wes Cravens
5fcd62dc84
Merge pull request #420 from teyrana/fix_new_stage
[fix][oneline] both Create Stage buttons now create stages with the same name
2018-07-05 00:54:41 -05:00
Daniel_M_Williams
82d5f871f0 [upgrade] Updated Eclipse buildfiles to use Java 1.8 2018-06-17 15:34:55 -04:00
Daniel_M_Williams
32c612fb91 [upgrade] Updated ant build.xml to use java 1.8 2018-06-17 15:34:46 -04:00
Daniel_M_Williams
a9efed4288 [fix] both Create Stage buttons now create stages with the same name
- reads the value of `Stage.Stage` from 'core/resources/l10n/messages.properties'
- currently "Stage"
2018-06-09 20:15:19 -04:00
Daniel_M_Williams
f15830fc3b [fix] 2d figure - Transition Shoulders now rotate correctly 2018-06-04 20:25:07 -04:00
Joe Pfeiffer
09123dd0ce Set current configuration before creating simulation
createSimulationForConfiguration() assumed addConfiguration() and
copyConfiguration() would set the new configuration as selected, but
they didn't resulting in simulation based on old configuration, not new
one.  Fixed.

addConfiguration() and copyConfiguration() had enough common code that
consolidating them and createSimulationForConfiguration() seemed like a
good idea.

Let FlightConfiguration.copy() create new ID for consistency with
constructor.
2018-06-04 12:37:40 -06:00
ChrisMickelson
5cf53f870f
Update JarInJarStarter.java
#346 re-fix
change line 33 back to ClassLoader loader = new URLClassLoader(urlArray, null);
2018-05-30 05:41:23 -05:00
Joe Pfeiffer
2839dfd4dd Cleared up problem with blank combobox popups after adding flight
configurations.

(1) Created new ConfigurationComboBox, extended from
JComboBox<FlightConfiguration>, with a listener for popup opens that
connects to a new ConfigurationModel.

(2) Removed some cruft from ConfigurationModel and made it a nested
class within ConfigurationComboBox.

(3) Updated ComponentAnalysisDialog, RocketPanel, and
SimulationEditDialog to use ConfigurationComboBox.
2018-05-24 12:38:09 -06:00
Daniel_M_Williams
32aa32da15 [Workaround] Hides the Optimization Dialog until it can be fixed 2018-04-08 11:29:46 -04:00
Daniel_M_Williams
0b1e01137a [Resolves #397][Workaround] Hides the Component Analysis Dialog until it can be fixed. 2018-04-08 11:25:48 -04:00
Daniel_M_Williams
786ca55c45 [fix][Resolves #378] Component Preset Dialog has an appropriately sized search bar 2018-03-03 17:03:27 -05:00
Daniel_M_Williams
28bdfac550 [fix][Resolves #330] Rocket size now updates on main screen after scaling rocket 2018-03-03 17:03:18 -05:00
Daniel_M_Williams
d859337e12 [fix] prevent a NPE if openrocket does not detect the example files 2018-03-03 17:03:10 -05:00
Daniel_M_Williams
1470a84673 [debug] removed unnecessary printlns in unit tests 2018-02-25 12:43:49 -05:00
Daniel_M_Williams
7017b0b2f0 [fix] removed Angle.Fixed and Radius.Surface positioning methods 2018-02-03 10:25:03 -05:00
ChrisMickelson
40f18d9125
Update RocketRenderer.java
Fix depth test issues with transparent components
2018-02-02 04:49:32 -06:00
Wes Cravens
82b78face9
Merge pull request #390 from teyrana/alpha5
Alpha5
2018-01-27 21:36:00 -06:00
Daniel_M_Williams
85fc41d203 [feature][refactor] Implemented Relative Positioning for Axial, Angular, and Radius directions
- Allows more precise and flexible control of component positions
- file format:
  -- maintains compatability with previous major release (15.04)
  -- may not accept file formats from unstable development branches in-between major releases
2018-01-21 12:06:42 -05:00
Daniel_M_Williams
0498900078 [feat] Added Positioning methods and interfaces for Axial, Radius, and Angle directions
- also added minor angle-wrapping function to MathUtil
2018-01-21 12:06:25 -05:00
Daniel_M_Williams
23d7397fa6 [refactor] Pods and ParallelStages are now attached to BodyTubes *only* 2018-01-13 14:35:16 -05:00
Johan Tibell
15d14e43a3 [Resolves #346][fix] Use a parent ClassLoader
Before we explicitly set the parent to null, which caused classes to
fail to load on Java 9.

Fixes #346.
2017-12-30 11:16:21 -05:00
Daniel_M_Williams
20eff575f4 [fix] Fix MassCalculator Unittests.
(Effectively a re-write of the MassCalculation code)
- renamed some mass calculator accesor methods
- MassData, InertiaMatrix refactored into 'RigidBody' class

- refactors out cache code to separate wrapper class
- calculations now use the Transform class to translate masses, CM, and MOI

- new class: MassCalculation
  - contains relevant context for a given calculation: tree-root, type, time, config
  - contains most actual calculation code
  - calculations are tracked with a context class: MassCalculation
2017-12-25 20:56:11 -05:00
Daniel_M_Williams
23a488db48 [Resolves #369] Fixes 3d rendering for instanced components
This is a relatively major refactor / rewrite of the 3d rendering code.

- components geometries are rendered recursively
- components inherit parents' transformations ( translation, rotation)
- implemented Transformation#toGLMatrix()
  -- openrocket transformations can be directly fed into Java OpenGL

- added: FinSet#getBoundingBox()
- improved documentation on RocketComponent Location methods

- Refactor RocketRenderer:
  - render component trees recursively
  - removed RocketRendere#isDrawn(c) -- return true in all implementations

- Refactor ComponentRenderer
  - renamed variables to be more descriptive
  - changed RocketComponent#toAbsolute(...) => RocketComponent#getComponentLocations()
- Adjust FinRender Code:
  - Render Single Fin Instance at-a-time
  - takes in an angle for the instance
  - assumes the fin is already at it's desired position.
  - renames 'fs' -> 'finSet'
2017-11-05 17:56:14 -05:00
Daniel_M_Williams
2379fbae95 [Resolves #377] new Configuration Button now updates to be available if motor mounts are present. 2017-11-05 11:11:12 -05:00
Daniel_M_Williams
9bfaf8877e [Resolves #379] Can now toggle motormounts from the Motor Configuration Tab
- Actual Fix is at MotorMountTableModel:102:   re-added callback to the MotorMount component
- cleaned up unused variables in the other panels
- Tightened up variable re-use in GUIUtil class
  -- made several intermediate variables separate, uniquely-named, and final.
2017-11-05 11:06:11 -05:00
Daniel_M_Williams
cfc1715cf4 [fix] Added details toggle to DebugLogDialog 2017-11-05 11:06:11 -05:00
Daniel_M_Williams
886faae76b [fix] removed debugging println 2017-10-29 13:07:04 -04:00
Daniel_M_Williams
015437d335 [resolves #368][resolves #331] User may scale freeform fins. 2017-10-28 13:42:10 -04:00
Daniel_M_Williams
9c93ada83f [resolves #371] MassCalculator now updates result on FlightConfiguration change
- added check in MassCalculator against last-used FlightConfiguration
- removed dead code
2017-10-28 13:42:10 -04:00
Daniel_M_Williams
4ce1e8ef0d [resolves #367] Can no longer add Components to rocket directly (add buttons are greyed-out) 2017-10-28 13:42:09 -04:00
Daniel_M_Williams
eb72329c58 [fix][refactor] simplified rocketfigure drawing code
Fixes Issues:
- https://github.com/openrocket/openrocket/issues/366
- https://github.com/openrocket/openrocket/issues/323

- RocketFigure no longer draws specific stages:
  Starts drawing rocket, and then propogates location, angle/transformation downwards
  - fixed active/inactive visibility toggling
  - Fixed Drowing Bounds for RocketFigure
    - Fix: FlightConfiguration#getBounds()
    - Fix: FinSet#getComponentBounds()
    - Fix: InnerTube#getInstanceCount()
    - Add: Coordinate#MIN, Coordinate#MAX
    - Add: net.sf.openrocket.util.BoundingBox

- RocketComponent:
  - implement: #getInstanceLocations() // relative to parent component
  - implement #getInstanceAngles()
  - implement: #getComponentLocations()  (Refactor/rename of #getLocations() )

- Implement <x>#getInstanceOffsets() // relative to component-reference-point
  - FinSet
  - PodSet
  - ParallelStage
  - RailButton
  - InnerTube:

- fixed drawing shapes:
  - TubeShapes
  - BodyTube
  - Launch Lug
  - RingComponent (InnerTube, EngineBlock, Coupler)
  - Finset
  - Transition
  - Rail Button
2017-10-28 13:41:51 -04:00
Daniel_M_Williams
c36ce2eae4 [resolves #323] Major patch to improve rendering of instanced+rotated components
- introduced interfaces for different types of positionable components:
  -- AnglePositionable
  -- AxialPositionable
  -- RadiusPositionable
- RingInstanceable now includes these other interfaces, making explicit the expectations of
   any implementing subclass.
- RingInstanceable now indicates its angles as an array instead of returning angles one-at-a-time
  -- commit includes updates to match this new API
- Added getAssembly() method to RocketComponent, to simplify instancing code
2017-10-28 13:41:25 -04:00
Daniel_M_Williams
c437b7870a [fix] parallel-stage / pod config tab no longer throws for axial stages 2017-09-23 11:20:00 -04:00
Alexander Allen
107d987973 Implemented CD Override 2017-09-20 21:45:26 -04:00
Daniel_M_Williams
f1c9ebb25f [refactor] Merged configuration tabs for boosters and pods into the 'ComponentAssemblyConfig' class 2017-09-02 11:09:37 -04:00
Daniel_M_Williams
15bc607acc [fix] fixed deprecated method (reflection) references. 2017-09-02 10:59:17 -04:00
ChrisMickelson
bd8f246a63 Update RealisticRenderer.java 2017-06-05 00:17:53 -04:00
kruland2607
a59aadbf04 Merge pull request #321 from ChrisMickelson/unstable
Alpha value for semi-transparent components saved/loaded and small bug fix
2017-02-01 23:46:02 -06:00
kruland2607
eb2d569b5f Merge pull request #318 from dkingsley/SimResultsCopyToClipboard
Copy Simulation Results to Clipboard
2017-02-01 23:45:52 -06:00
kruland2607
6ca4085349 Merge pull request #317 from dkingsley/ExportFinGeometry
Export Free Form Fin Profile to CSV File
2017-02-01 23:45:42 -06:00
kruland2607
c8eaca6cb0 Merge pull request #315 from teyrana/fix-cg
[Fix][Issue #295] CG now correctly updates when Stages are toggled
2017-02-01 23:45:03 -06:00
kruland2607
33aeb25d84 Merge pull request #301 from Vicilu/unstable
adds more documentation
2017-02-01 23:44:51 -06:00
ChrisMickelson
e0f5d7711b Update RealisticRenderer.java
Small bug fix to keep Unfinished renderer showing interior of tubes
2017-02-01 22:00:15 -05:00
dkingsley
0c9fdb38b2 Export Free Form Fin Profile to CSV File
Add code to export the free form fin profile shape as a CSV file.
2017-02-01 14:30:43 -05:00
dkingsley
fafdc81c40 Copy Simulation Results to Clipboard
Implement code to copy the simulation results to the system clipboard.
2017-02-01 14:15:53 -05:00
Daniel_M_Williams
c44f976a62 [Fix][Issue #295] Toggling (in)active stages will now trigger a change to the CG
- stage toggling was sending the wrong event type: updated to AERO | MASS | MOTOR change event.
2016-12-23 18:44:20 -05:00