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.
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.
- 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
(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
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'
- 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.
- 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