When calculating the subject dimensions, use the height as the
radius of the circle which intersects all four corners of the
BoundingBox in the Y, Z plane for both the rear view and the
side view. The rear view was already doing this, but it was
non-obvious that the side view should also be using this to
calculate the height.
It becomes obvious if we think about a winged rocket, i.e. a
rocket who's fins in the Z direction are larger than those in
the Y direction. In this configuration, a height based off of
the fins in along the Y-axis alone will result in a "Fit" scaling
which encapuslates the Y-axis fins. However, rotating that
rocket will move the larger wings (the Z-axis fins) into the
view, but the height will not allow for the wings to draw properly
on the screen.
Thusly, using the radius from the circle intersecting the bounding
box along the Y, Z plane will ensure that the widest point from the
body will be able to fit within the side view, regardless of the
rotation around the X axis.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Fixes the stage selection buttons to only be active when the stage
is active and properly reflect the displayed stage state.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Use the curConfig.getLength() for the length displayed in the
RocketPanel rather than calculating it based off the bounds.
The length method provided by the FlightConfiguration takes
everything into account that is needed (active stages, etc)
to calculate the length.
Closes#452
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Previously, updateFigure was overridden in RocketFigure in order to
ensure that all component shapes were added to the rocket prior to
calling the paintComponent method. This is superfluous as the
paintComponent method already adds the shapes prior to rendering.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
NoseCones aren't rendered correctly when printing/exporting as PDF
due to the scaleFactor not being honored correctly in TransitionShapes.
There was a good refactor to move some of the scaling pieces out,
however the PrintableNoseCone didn't benefit from these changes.
This restores part of the scaleFactor bits to the TransitionShapes
in order to get the printing to correctly work again. This code should
be transitioned to the new method for scaling.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Stages need to be activated correctly in order to properly
calculate the mass for all components that contribute to
the current launch scenario.
This change ensures that all of the stages from the top-most
stage to the currently active stage are set as activated when
stage mass is being calculated.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Fix the number of motors that are reported. A previous change made
the MotorMount.getMotorCount() return the number of motors which
have been configured. However, according to the javadocs of the
MotorMount interface, the getMotorCount() method is supposed to
return the number of motors that a MotorMount can take for
configuring it. This restores the InnerTube and BodyTube getMotorCount
behavior and adds a new getMotorConfigurationCount() method to
provide the new behavior.
Additionally, the stageMass calculations in the DesignReport were
using a deprecated method which does not return proper component
weights. Change this to use the MassCalculator.calculateLaunch(...)
method, which is consistent with the RocketPanel behavior.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Clean up some of the code in DesignReport, including some
refactoring TODOs in the addMotorData method.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Some refactoring of the code for the RocketFigure class caused
changes which prevent the rocket from being rendered correctly
when printing a report or exporting as PDF. The issue was due
to shapes not being added to the rocket and pixel dimensions
being incorrect for the logic in the DesignReport.
This change ensures that rocket shapes are added when the
RocketFigure's updateFigure method is called. It also modifies
the PrintFigure to expose some of the underlying geometries of
the subject_bounds, which are necessary for the pixel and drawing
calculations used in the DesignReport.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Correct the logic for detecting if a motor has an invalid
FlightConfigurationId and throw an IllegalStateException only in the
case that it has an error.
Additionally, fix the lookup for the stageMass. The wrong value was
passed to the MassCalculator.getCGAnalysis(..) which resulted in
a NullPointerException.
Fixes#531
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Commit a7c0cb2 removed the OrangeExtensions-1.2.jar file from the
swing project, but failed to remove it from the eclipse classpath.
This fixes that.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Previous refactoring of the event listeners lost notifications
to classes which care about changes to the DoubleModel. One
such example is the UnitSelector. Ensure that all the
ChangeEventListeners and StateChangeEventListeners are called
when the setValue method is invoked.
Closes#553
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Update the eclipse .classpath files to point to the new and updated
jar files that were merged as part of the recent upgrade to Java 11/
Java 13 commits.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
The switch to using JOGL uses the current JPEGs, but these textures
cannot be read using the GL.GL_RGBA format which is eventually
propigated to the user by an error dialog showing a NullPointerException
for the texture which failed to load. Using GL.GL_RGB as the format when
loading the textures will resolve the texture loading issue, but the
images are inverted due to differences between AWT and JOGL
interpretation of where the image starts (top left vs bottom left).
Change instead to use the AWTTextureIO class to create the textures
which solves both problems - the loading of the texture as well as
presenting the image in the appropriate orientation.
Closes#573
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Adds back the instance options in the previous commit for specifying
instance details about rail buttons. This change adds it back but
slightly tweaks the layout and location in order to keep the config
panel in a 2 column arrangement.
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Add two new material types for rail buttons, delrin and nylon.
The material densities are pulled from wikipedia and cross-referenced
with Dupont's material database.
Additionally, set Delrin as the default material for RailButtons.
Closes#554
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
Allow rail buttons to define presets. This change doesn't actually add
any default presets to the library, but enables the ability to add some
preset options for rail buttons.
Partially Closes#554
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
The default values assigned to RailButton sizes were configured with
a 1.0 meter outer diameter and 0.8 meter internal diameter (for 1010
rail buttons) which resulted in overly large rail buttons when added
using the default values.
Presuming that 1010 rail buttons are the common and an acceptable
default, change the default button sizes to align with the 1010 size.
Additionally, this change fixes some of the layout issues present in
add railbutton dialog.
Closes#554
Signed-off-by: Billy Olsen <billy.olsen@gmail.com>
PR than I like as well. All I can do is apologize...
Fixes length calculation in RocketPanel.
(1) Finished switching over from deprecated getBounds() function to getBoundingBox().
getBounds() function is removed.
(2) 3D rendering code had its own getBounds(). Switched this over to
RocketComponent:getBoundingBox() as well
(3) Made getBoundingBox() consistently get the bounding box relative to the component.
Implementations for some components were calculating box relative to start of rocket
(4) Used InstanceMap to iterate through all instances of components in creating bounding box.