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'
- moved 'instancecount' and 'instanceseparation' loading from CenteringRing to RadiusRingComponent
- enables both Bulkhead and CenteringRing to load those tags from .ork file
- Adjusted masscalculater code to not double-count instances (when mass > 0, and instance > 1 )
- RingComponents now correctly calculate their mass again
- 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
- The Rocket#trackStages function needs to handle being updated with the same stage id#, but different instance
- Rocket#update now updates the stageMap
- FlightConfigurations refactored to use stage numbers instead of references.
- conceptually, a rocket *IS A* ComponentAssembly.
- reduces code duplication: 7 redundant functions
- rocket still inherits all the RocketComponent methods
- Also: changed Coordinate.NUL -> Coordinate.ZERO to better reflect our intent.
-- Nitpick: Coordinate.NUL is *not* null. It's zero. These are different!
-- Null is an error condition.
-- Zero is a valid coordinate. Zero means something is located at the origin. Like the rocket, and the nosecone.
OpenRocket. At build time, it will utilize the Thrustcurve.org xml api
to download the current information (curve files and supplemental
information). OpenRocket uses the supplemental information to populate
case-info, propellant type, availability as well as correct diameters
and length. Modified motor search dialog to hide unavailable motors and
show case-info.