From c9d408a8ee5044652d8fd19ce704d6c786695a0f Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Sun, 1 Nov 2020 19:37:23 -0500 Subject: [PATCH 1/3] [fix #801] eliminate redundant angle-offset property in LaunchLug component --- .../openrocket/savers/LaunchLugSaver.java | 1 - .../savers/RocketComponentSaver.java | 39 ++++++++-------- .../file/rocksim/export/LaunchLugDTO.java | 2 +- .../rocksim/importt/LaunchLugHandler.java | 2 +- .../openrocket/rocketcomponent/LaunchLug.java | 44 ++++++------------- .../rocksim/importt/RocksimLoaderTest.java | 2 +- .../rocketcomponent/LaunchLugTest.java | 2 +- .../gui/configdialog/LaunchLugConfig.java | 10 ++--- .../openrocket/gui/print/FinMarkingGuide.java | 6 +-- 9 files changed, 45 insertions(+), 63 deletions(-) diff --git a/core/src/net/sf/openrocket/file/openrocket/savers/LaunchLugSaver.java b/core/src/net/sf/openrocket/file/openrocket/savers/LaunchLugSaver.java index 62936b231..cd624ad4a 100644 --- a/core/src/net/sf/openrocket/file/openrocket/savers/LaunchLugSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/savers/LaunchLugSaver.java @@ -28,7 +28,6 @@ public class LaunchLugSaver extends ExternalComponentSaver { elements.add("" + lug.getOuterRadius() + ""); elements.add("" + lug.getLength() + ""); elements.add("" + lug.getThickness() + ""); - elements.add("" + (lug.getAngularOffset()*180.0/Math.PI)+ ""); } diff --git a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java index de05c9bf6..293550cb6 100644 --- a/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java +++ b/core/src/net/sf/openrocket/file/openrocket/savers/RocketComponentSaver.java @@ -88,32 +88,31 @@ public class RocketComponentSaver { if ( c instanceof Instanceable) { int instanceCount = c.getInstanceCount(); - if( c instanceof Clusterable ){ + if (c instanceof Clusterable) { ; // no-op. Instance counts are set via named cluster configurations - }else { + } else { emitInteger(elements, "instancecount", c.getInstanceCount()); } - if( c instanceof LineInstanceable ){ - LineInstanceable line = (LineInstanceable)c; - emitDouble( elements, "instanceseparation", line.getInstanceSeparation()); - } - if( c instanceof RadiusPositionable ){ - final RadiusPositionable radPos = (RadiusPositionable)c; - // The type names are currently equivalent to the enum names except for case. - final String radiusMethod = radPos.getRadiusMethod().name().toLowerCase(Locale.ENGLISH); - final double radiusOffset = radPos.getRadiusOffset(); - elements.add("" + radiusOffset + ""); - } - if( c instanceof AnglePositionable ) { - final AnglePositionable anglePos= (AnglePositionable)c; - // The type names are currently equivalent to the enum names except for case. - final String angleMethod = anglePos.getAngleMethod().name().toLowerCase(Locale.ENGLISH); - final double angleOffset = anglePos.getAngleOffset()*180.0/Math.PI ; - elements.add("" + angleOffset + ""); - + if (c instanceof LineInstanceable) { + LineInstanceable line = (LineInstanceable) c; + emitDouble(elements, "instanceseparation", line.getInstanceSeparation()); } } + if( c instanceof RadiusPositionable ){ + final RadiusPositionable radPos = (RadiusPositionable)c; + // The type names are currently equivalent to the enum names except for case. + final String radiusMethod = radPos.getRadiusMethod().name().toLowerCase(Locale.ENGLISH); + final double radiusOffset = radPos.getRadiusOffset(); + elements.add("" + radiusOffset + ""); + } + if( c instanceof AnglePositionable ) { + final AnglePositionable anglePos = (AnglePositionable)c; + // The type names are currently equivalent to the enum names except for case. + final String angleMethod = anglePos.getAngleMethod().name().toLowerCase(Locale.ENGLISH); + final double angleOffset = anglePos.getAngleOffset()*180.0/Math.PI; + elements.add("" + angleOffset + ""); + } // Save position unless "AFTER" if (c.getAxialMethod() != AxialMethod.AFTER) { diff --git a/core/src/net/sf/openrocket/file/rocksim/export/LaunchLugDTO.java b/core/src/net/sf/openrocket/file/rocksim/export/LaunchLugDTO.java index dce7c255f..38266f145 100644 --- a/core/src/net/sf/openrocket/file/rocksim/export/LaunchLugDTO.java +++ b/core/src/net/sf/openrocket/file/rocksim/export/LaunchLugDTO.java @@ -35,7 +35,7 @@ public class LaunchLugDTO extends BasePartDTO { super(theORLaunchLug); setId(theORLaunchLug.getInnerRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); setOd(theORLaunchLug.getOuterRadius() * RocksimCommonConstants.ROCKSIM_TO_OPENROCKET_RADIUS); - setRadialAngle(theORLaunchLug.getAngularOffset()); + setRadialAngle(theORLaunchLug.getAngleOffset()); } public double getOd() { diff --git a/core/src/net/sf/openrocket/file/rocksim/importt/LaunchLugHandler.java b/core/src/net/sf/openrocket/file/rocksim/importt/LaunchLugHandler.java index 9e6c0c514..f30cce631 100644 --- a/core/src/net/sf/openrocket/file/rocksim/importt/LaunchLugHandler.java +++ b/core/src/net/sf/openrocket/file/rocksim/importt/LaunchLugHandler.java @@ -70,7 +70,7 @@ class LaunchLugHandler extends PositionDependentHandler { setMaterialName(content); } if (RocksimCommonConstants.RADIAL_ANGLE.equals(element)) { - lug.setAngularOffset(Double.parseDouble(content)); + lug.setAngleOffset(Double.parseDouble(content)); } if (RocksimCommonConstants.FINISH_CODE.equals(element)) { lug.setFinish(RocksimFinishCode.fromCode(Integer.parseInt(content)).asOpenRocket()); diff --git a/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java b/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java index 6eb7840bc..442deb00d 100644 --- a/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java +++ b/core/src/net/sf/openrocket/rocketcomponent/LaunchLug.java @@ -21,14 +21,12 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B private double radius; private double thickness; - private double radialDirection = 0; - private double radialDistance = 0; + private double angleOffsetRadians = 0; + private double radialOffset = 0; private int instanceCount = 1; private double instanceSeparation = 0; // front-front along the positive rocket axis. i.e. [1,0,0]; - private double angle_rad = 0; - public LaunchLug() { super(AxialMethod.MIDDLE); radius = 0.01 / 2; @@ -75,15 +73,17 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - public double getAngularOffset() { - return this.radialDirection; + @Override + public double getAngleOffset() { + return this.angleOffsetRadians; } - - public void setAngularOffset(final double newAngle_rad){ - double clamped_rad = MathUtil.clamp( newAngle_rad, -Math.PI, Math.PI); - if (MathUtil.equals(this.radialDirection, clamped_rad)) + + @Override + public void setAngleOffset(double newAngleRadians) { + double clamped_rad = MathUtil.clamp( newAngleRadians, -Math.PI, Math.PI); + if (MathUtil.equals(this.angleOffsetRadians, clamped_rad)) return; - this.radialDirection = clamped_rad; + this.angleOffsetRadians = clamped_rad; fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } @@ -94,7 +94,6 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE); } - @Override public boolean isAfter() { return false; @@ -126,8 +125,8 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B public Coordinate[] getInstanceOffsets(){ Coordinate[] toReturn = new Coordinate[this.getInstanceCount()]; - final double yOffset = Math.cos(radialDirection) * (radialDistance); - final double zOffset = Math.sin(radialDirection) * (radialDistance); + final double yOffset = Math.cos(angleOffsetRadians) * (radialOffset); + final double zOffset = Math.sin(angleOffsetRadians) * (radialOffset); for ( int index=0; index < this.getInstanceCount(); index++){ toReturn[index] = new Coordinate(index*this.instanceSeparation, yOffset, zOffset); @@ -177,12 +176,9 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B parentRadius = Math.max(s.getRadius(x1), s.getRadius(x2)); } - this.radialDistance = parentRadius + radius; + this.radialOffset = parentRadius + radius; } - - - @Override public double getComponentVolume() { return length * Math.PI * (MathUtil.pow2(radius) - MathUtil.pow2(radius - thickness)); @@ -273,18 +269,6 @@ public class LaunchLug extends ExternalComponent implements AnglePositionable, B } - @Override - public double getAngleOffset() { - return this.angle_rad; - } - - - @Override - public void setAngleOffset(double newAngle) { - this.angle_rad = newAngle; - } - - @Override public AngleMethod getAngleMethod() { return AngleMethod.RELATIVE; 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 288396fee..df48f2148 100644 --- a/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java +++ b/core/test/net/sf/openrocket/file/rocksim/importt/RocksimLoaderTest.java @@ -134,7 +134,7 @@ public class RocksimLoaderTest extends BaseTestCase { BodyTube bt = (BodyTube) stage2.getChild(0); LaunchLug ll = (LaunchLug) bt.getChild(6); - Assert.assertEquals(1.22d, ll.getAngularOffset(), 0.001); + Assert.assertEquals(1.22d, ll.getAngleOffset(), 0.001); Assert.assertEquals(2, stage3.getChildCount()); Assert.assertEquals("Transition", stage3.getChild(0).getName()); diff --git a/core/test/net/sf/openrocket/rocketcomponent/LaunchLugTest.java b/core/test/net/sf/openrocket/rocketcomponent/LaunchLugTest.java index 4d82d9b80..79dd28f05 100644 --- a/core/test/net/sf/openrocket/rocketcomponent/LaunchLugTest.java +++ b/core/test/net/sf/openrocket/rocketcomponent/LaunchLugTest.java @@ -42,7 +42,7 @@ public class LaunchLugTest extends BaseTestCase { BodyTube body= (BodyTube)rocket.getChild(0).getChild(1); LaunchLug lug = (LaunchLug)rocket.getChild(0).getChild(1).getChild(1); double startAngle = Math.PI/2; - lug.setAngularOffset( startAngle ); + lug.setAngleOffset( startAngle ); lug.setInstanceSeparation(0.05); lug.setInstanceCount(2); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java index 7083121a4..6a295b83d 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java @@ -94,8 +94,8 @@ public class LaunchLugConfig extends RocketComponentConfig { //// Radial position: panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Radialpos"))); - m = new DoubleModel(component, "AngularOffset", UnitGroup.UNITS_ANGLE, -180, 180); - + m = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -180, 180); + spin = new JSpinner(m.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); panel.add(spin, "growx"); @@ -103,12 +103,12 @@ public class LaunchLugConfig extends RocketComponentConfig { panel.add(new UnitSelector(m), "growx"); panel.add(new BasicSlider(m.getSliderModel(-180, 180) ), "w 100lp, wrap"); - + // finish up the left column primary.add(panel, "grow, gapright 20lp"); + + // create a new panel for the right column panel = new JPanel(new MigLayout("gap rel unrel", "[][65lp::][30lp::][]", "")); - - //// Position relative to: panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Posrelativeto"))); EnumModel positionModel = new EnumModel(component, "AxialMethod", AxialMethod.axialOffsetMethods ); diff --git a/swing/src/net/sf/openrocket/gui/print/FinMarkingGuide.java b/swing/src/net/sf/openrocket/gui/print/FinMarkingGuide.java index 413d52cf4..7c1e5540a 100644 --- a/swing/src/net/sf/openrocket/gui/print/FinMarkingGuide.java +++ b/swing/src/net/sf/openrocket/gui/print/FinMarkingGuide.java @@ -287,7 +287,7 @@ public class FinMarkingGuide extends JPanel { } else if (externalComponent instanceof LaunchLug) { LaunchLug lug = (LaunchLug) externalComponent; - double angle = lug.getAngularOffset() - radialOrigin; + double angle = lug.getAngleOffset() - radialOrigin; while (angle < 0) { angle += TWO_PI; } @@ -331,7 +331,7 @@ public class FinMarkingGuide extends JPanel { for (ExternalComponent component : components) { if (component instanceof LaunchLug) { - double componentPosition = ((LaunchLug) component).getAngularOffset(); + double componentPosition = ((LaunchLug) component).getAngleOffset(); positions.add(makeZeroTwoPi(componentPosition)); } @@ -479,4 +479,4 @@ public class FinMarkingGuide extends JPanel { g2.fillPolygon(new int[] { x1, x1 + ARROW_SIZE, x1 + ARROW_SIZE, x1 }, new int[] { y1, y1 - ARROW_SIZE / 2, y1 + ARROW_SIZE / 2, y1 }, 4); } -} \ No newline at end of file +} From cf8b40229b3ecfa5cecb2609201f35bd80d940bc Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Sun, 1 Nov 2020 19:51:08 -0500 Subject: [PATCH 2/3] [fixes #751] Unifies angle-offset labels to 'Rotation' for component config dialogs --- core/resources/l10n/messages.properties | 6 +++--- .../net/sf/openrocket/gui/configdialog/LaunchLugConfig.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index 106ceb46e..2ae825699 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -969,16 +969,16 @@ LaunchLugCfg.lbl.Length = Length: LaunchLugCfg.lbl.Outerdiam = Outer diameter: LaunchLugCfg.lbl.Innerdiam = Inner diameter: LaunchLugCfg.lbl.Thickness = Thickness: -LaunchLugCfg.lbl.Radialpos = Radial position: +LaunchLugCfg.lbl.Angle = Rotation: LaunchLugCfg.lbl.Posrelativeto = Position relative to: LaunchLugCfg.lbl.plus = plus LaunchLugCfg.tab.General = General LaunchLugCfg.tab.Generalprop = General properties -! LaunchLugConfig +! RailButtonConfig RailBtnCfg.lbl.OuterDiam = Outer Diameter: RailBtnCfg.lbl.TotalHeight = Total Height -RailBtnCfg.lbl.Angle = Angular Position: +RailBtnCfg.lbl.Angle = Rotation: RailBtnCfg.lbl.PosRelativeTo = Position relative to: RailBtnCfg.lbl.Plus = plus RailBtnCfg.tab.General = General diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java index 6a295b83d..fbac8c4d6 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java @@ -92,7 +92,7 @@ public class LaunchLugConfig extends RocketComponentConfig { //// Radial position: - panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Radialpos"))); + panel.add(new JLabel(trans.get("LaunchLugCfg.lbl.Angle"))); m = new DoubleModel(component, "AngleOffset", UnitGroup.UNITS_ANGLE, -180, 180); From c54059a54e9da9c2504eadb166cdb34c85eeeb98 Mon Sep 17 00:00:00 2001 From: Daniel_M_Williams Date: Sun, 1 Nov 2020 19:56:27 -0500 Subject: [PATCH 3/3] [fixes #752] Fixes rotation slider in LaunchLugConfig --- .../src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java index fbac8c4d6..0711c72e6 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/LaunchLugConfig.java @@ -101,7 +101,7 @@ public class LaunchLugConfig extends RocketComponentConfig { panel.add(spin, "growx"); panel.add(new UnitSelector(m), "growx"); - panel.add(new BasicSlider(m.getSliderModel(-180, 180) ), "w 100lp, wrap"); + panel.add(new BasicSlider(m.getSliderModel(-Math.PI, Math.PI) ), "w 100lp, wrap"); // finish up the left column primary.add(panel, "grow, gapright 20lp");