Require next and previous symmetric components be in line. Avoids having "next" and "previous" go off between pods
This commit is contained in:
parent
b3d2b92edd
commit
da1130fd97
@ -10,7 +10,7 @@ import net.sf.openrocket.preset.ComponentPreset;
|
|||||||
import net.sf.openrocket.util.BoundingBox;
|
import net.sf.openrocket.util.BoundingBox;
|
||||||
import net.sf.openrocket.util.Coordinate;
|
import net.sf.openrocket.util.Coordinate;
|
||||||
import net.sf.openrocket.util.MathUtil;
|
import net.sf.openrocket.util.MathUtil;
|
||||||
|
import net.sf.openrocket.rocketcomponent.position.RadiusMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for an axially symmetric rocket component generated by rotating
|
* Class for an axially symmetric rocket component generated by rotating
|
||||||
@ -621,7 +621,11 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
|
|||||||
while (0 <= searchSiblingIndex) {
|
while (0 <= searchSiblingIndex) {
|
||||||
final RocketComponent searchSibling = searchParent.getChild(searchSiblingIndex);
|
final RocketComponent searchSibling = searchParent.getChild(searchSiblingIndex);
|
||||||
if (searchSibling instanceof SymmetricComponent) {
|
if (searchSibling instanceof SymmetricComponent) {
|
||||||
return (SymmetricComponent) searchSibling;
|
SymmetricComponent candidate = (SymmetricComponent) searchSibling;
|
||||||
|
if (inline(candidate)) {
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
--searchSiblingIndex;
|
--searchSiblingIndex;
|
||||||
}
|
}
|
||||||
@ -658,9 +662,12 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
|
|||||||
if(searchParent instanceof ComponentAssembly){
|
if(searchParent instanceof ComponentAssembly){
|
||||||
while (searchSiblingIndex < searchParent.getChildCount()) {
|
while (searchSiblingIndex < searchParent.getChildCount()) {
|
||||||
final RocketComponent searchSibling = searchParent.getChild(searchSiblingIndex);
|
final RocketComponent searchSibling = searchParent.getChild(searchSiblingIndex);
|
||||||
|
|
||||||
if (searchSibling instanceof SymmetricComponent) {
|
if (searchSibling instanceof SymmetricComponent) {
|
||||||
return (SymmetricComponent) searchSibling;
|
SymmetricComponent candidate = (SymmetricComponent) searchSibling;
|
||||||
|
if (inline(candidate)) {
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
++searchSiblingIndex;
|
++searchSiblingIndex;
|
||||||
}
|
}
|
||||||
@ -671,6 +678,29 @@ public abstract class SymmetricComponent extends BodyComponent implements BoxBou
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Determine whether a candidate symmetric component is in line with us
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private boolean inline(final SymmetricComponent candidate) {
|
||||||
|
// if we share a parent, we are in line
|
||||||
|
if (this.parent == candidate.parent)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// if both of our parents are either not ring instanceable, or
|
||||||
|
// have a radial offset of 0 from their centerline, we are in line.
|
||||||
|
|
||||||
|
if ((this.parent instanceof RingInstanceable) &&
|
||||||
|
(!MathUtil.equals(this.parent.getRadiusMethod().getRadius(this.parent.parent, this, this.parent.getRadiusOffset()), 0)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ((candidate.parent instanceof RingInstanceable) &&
|
||||||
|
(!MathUtil.equals(candidate.parent.getRadiusMethod().getRadius(candidate.parent.parent, candidate, candidate.parent.getRadiusOffset()), 0)))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the component uses the previous symmetric component for its auto diameter.
|
* Checks whether the component uses the previous symmetric component for its auto diameter.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user