Merge pull request #1095 from SiboVG/issue-1090

[fixes #1090] Wrong FinSet tab position upon file opening
This commit is contained in:
Joe Pfeiffer 2022-01-31 10:41:59 -07:00 committed by GitHub
commit d459ba4bd8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 9 deletions

View File

@ -62,6 +62,10 @@ class FinSetPointHandler extends AbstractElementHandler {
public void endHandler(String element, HashMap<String, String> attributes,
String content, WarningSet warnings) {
finset.setPoints(coordinates.toArray(new Coordinate[0]));
// Update the tab position. This is because the tab position relies on the finset length, but because the
// <tabposition> tag comes before the <finpoints> tag in the .ork file, the tab position will be set first,
// using the default finset length, not the intended finset length that we extract in this part. So we update
// the tab position here to cope for the wrongly calculated tab position earlier.
finset.updateTabPosition();
}
}

View File

@ -5,8 +5,6 @@ import java.util.*;
import java.util.ArrayList;
import net.sf.openrocket.appearance.Appearance;
import net.sf.openrocket.appearance.Decal;
import net.sf.openrocket.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -103,7 +101,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
private static final double minimumTabArea = 1e-8;
private double tabHeight = 0;
private double tabLength = 0.05;
// this is always measured from the the root-lead point.
// this is always measured from the root-lead point.
private double tabPosition = 0.0;
private AxialMethod tabOffsetMethod = AxialMethod.MIDDLE;
private double tabOffset = 0.;
@ -291,12 +289,12 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
tabLength = lengthRequest;
setTabPosition();
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}
protected void setTabPosition(){
public void updateTabPosition(){
this.tabPosition = this.tabOffsetMethod.getAsPosition(tabOffset, tabLength, length);
}
@ -307,7 +305,7 @@ public abstract class FinSet extends ExternalComponent implements AxialPositiona
*/
public void setTabOffset( final double offsetRequest) {
tabOffset = offsetRequest;
setTabPosition();
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.MASS_CHANGE);
}

View File

@ -77,7 +77,7 @@ public class TrapezoidFinSet extends FinSet {
if (length == r)
return;
length = Math.max(r, 0);
setTabPosition();
updateTabPosition();
fireComponentChangeEvent(ComponentChangeEvent.AEROMASS_CHANGE);
}