Handle transition with filled wall thickness
This commit is contained in:
parent
c364996449
commit
f02405046a
@ -46,7 +46,9 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
final boolean hasAftShoulder = Double.compare(component.getAftShoulderRadius(), 0) > 0
|
final boolean hasAftShoulder = Double.compare(component.getAftShoulderRadius(), 0) > 0
|
||||||
&& Double.compare(component.getAftShoulderLength(), 0) > 0
|
&& Double.compare(component.getAftShoulderLength(), 0) > 0
|
||||||
&& component.getAftRadius() > 0;
|
&& component.getAftRadius() > 0;
|
||||||
final boolean isFilled = component.isFilled();
|
final boolean isFilled = component.isFilled() ||
|
||||||
|
(Double.compare(component.getForeRadius(), component.getThickness()) <= 0 &&
|
||||||
|
Double.compare(component.getAftRadius(), component.getThickness()) <= 0);
|
||||||
|
|
||||||
final List<Integer> outsideForeRingVertices = new ArrayList<>();
|
final List<Integer> outsideForeRingVertices = new ArrayList<>();
|
||||||
final List<Integer> outsideAftRingVertices = new ArrayList<>();
|
final List<Integer> outsideAftRingVertices = new ArrayList<>();
|
||||||
@ -95,7 +97,7 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
|
|
||||||
// Add shoulders
|
// Add shoulders
|
||||||
addShoulders(this.nrOfSides, outsideForeRingVertices, outsideAftRingVertices,
|
addShoulders(this.nrOfSides, outsideForeRingVertices, outsideAftRingVertices,
|
||||||
insideForeRingVertices, insideAftRingVertices, hasForeShoulder, hasAftShoulder);
|
insideForeRingVertices, insideAftRingVertices, isFilled, hasForeShoulder, hasAftShoulder);
|
||||||
|
|
||||||
int endIdx = Math.max(obj.getNumVertices() - 1, startIdx); // Clamp in case no vertices were added
|
int endIdx = Math.max(obj.getNumVertices() - 1, startIdx); // Clamp in case no vertices were added
|
||||||
|
|
||||||
@ -130,6 +132,7 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
|
|
||||||
// Generate vertices and normals
|
// Generate vertices and normals
|
||||||
float x = 0; // Distance from the fore end
|
float x = 0; // Distance from the fore end
|
||||||
|
float xNext;
|
||||||
double r; // Current radius at location x
|
double r; // Current radius at location x
|
||||||
boolean isForeTip = false; // True if the fore end of the transition is a tip (radius = 0)
|
boolean isForeTip = false; // True if the fore end of the transition is a tip (radius = 0)
|
||||||
boolean isForeRing = false; // True if the current ring is the first fore ring
|
boolean isForeRing = false; // True if the current ring is the first fore ring
|
||||||
@ -143,7 +146,7 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
t = 1 - t;
|
t = 1 - t;
|
||||||
}
|
}
|
||||||
float dx = t < 0.2 ? (float) (dxBase / (5.0 - 20*t)) : (float) dxBase;
|
float dx = t < 0.2 ? (float) (dxBase / (5.0 - 20*t)) : (float) dxBase;
|
||||||
float xNext = x + dx;
|
xNext = x + dx;
|
||||||
xNext = Math.min(xNext, (float) component.getLength());
|
xNext = Math.min(xNext, (float) component.getLength());
|
||||||
|
|
||||||
// Calculate the radius at this height
|
// Calculate the radius at this height
|
||||||
@ -425,7 +428,7 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
|
|
||||||
private void addShoulders(int nrOfSides, List<Integer> outsideForeRingVertices, List<Integer> outsideAftRingVertices,
|
private void addShoulders(int nrOfSides, List<Integer> outsideForeRingVertices, List<Integer> outsideAftRingVertices,
|
||||||
List<Integer> insideForeRingVertices, List<Integer> insideAftRingVertices,
|
List<Integer> insideForeRingVertices, List<Integer> insideAftRingVertices,
|
||||||
boolean hasForeShoulder, boolean hasAftShoulder) {
|
boolean isFilled, boolean hasForeShoulder, boolean hasAftShoulder) {
|
||||||
final float foreShoulderRadius = (float) component.getForeShoulderRadius();
|
final float foreShoulderRadius = (float) component.getForeShoulderRadius();
|
||||||
final float aftShoulderRadius = (float) component.getAftShoulderRadius();
|
final float aftShoulderRadius = (float) component.getAftShoulderRadius();
|
||||||
final float foreShoulderLength = (float) component.getForeShoulderLength();
|
final float foreShoulderLength = (float) component.getForeShoulderLength();
|
||||||
@ -437,17 +440,16 @@ public class TransitionExporter extends RocketComponentExporter<Transition> {
|
|||||||
|
|
||||||
if (hasForeShoulder) {
|
if (hasForeShoulder) {
|
||||||
addShoulder(foreShoulderRadius, foreShoulderLength, foreShoulderThickness, foreShoulderCapped,
|
addShoulder(foreShoulderRadius, foreShoulderLength, foreShoulderThickness, foreShoulderCapped,
|
||||||
true, nrOfSides, outsideForeRingVertices, insideForeRingVertices);
|
isFilled, true, nrOfSides, outsideForeRingVertices, insideForeRingVertices);
|
||||||
}
|
}
|
||||||
if (hasAftShoulder) {
|
if (hasAftShoulder) {
|
||||||
addShoulder(aftShoulderRadius, aftShoulderLength, aftShoulderThickness, aftShoulderCapped,
|
addShoulder(aftShoulderRadius, aftShoulderLength, aftShoulderThickness, aftShoulderCapped,
|
||||||
false, nrOfSides, outsideAftRingVertices, insideAftRingVertices);
|
isFilled, false, nrOfSides, outsideAftRingVertices, insideAftRingVertices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addShoulder(float shoulderRadius, float shoulderLength, float shoulderThickness, boolean isCapped,
|
private void addShoulder(float shoulderRadius, float shoulderLength, float shoulderThickness, boolean isCapped, boolean isFilled,
|
||||||
boolean isForeSide, int nrOfSides, List<Integer> outerRingVertices, List<Integer> innerRingVertices) {
|
boolean isForeSide, int nrOfSides, List<Integer> outerRingVertices, List<Integer> innerRingVertices) {
|
||||||
final boolean isFilled = component.isFilled();
|
|
||||||
final float innerCylinderRadius = isCapped || isFilled ? 0 : shoulderRadius - shoulderThickness;
|
final float innerCylinderRadius = isCapped || isFilled ? 0 : shoulderRadius - shoulderThickness;
|
||||||
final List<Integer> outerCylinderForeVertices = new ArrayList<>();
|
final List<Integer> outerCylinderForeVertices = new ArrayList<>();
|
||||||
final List<Integer> outerCylinderAftVertices = new ArrayList<>();
|
final List<Integer> outerCylinderAftVertices = new ArrayList<>();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user