private boolean isSizeChange = false; // changes size of the pipe. The next control point / component is on different PipeRun
private boolean isSub = false; // child point for offset / size change
+ private boolean disposed = false;
+
public PipeControlPoint(PipelineComponent component) {
this.component = component;
if (component.getPipeRun() != null)
public boolean isInline() {
return type == PointType.INLINE;
}
+
+ public boolean asPathLegEnd() {
+ // Ends and Turns are path leg ends by default, but also unconnected inline are path leg ends.
+ return isPathLegEnd() || getNext() == null || getPrevious() == null;
+ }
/**
* True for end components, if control point defines absolute position direction, which rules cannot modify.
if (MathTools.createRotation(dirOutN, dirOut, dir, aa)) {
setRotationAngle(aa.angle);
setTurnAngle(angle);
+ if (DEBUG) System.out.println("convertToFixed " + dir + " " + dirOut + " " +dirOutN + " " +angle + " "+ aa.angle);
}
}
public void _remove(boolean renconnect) {
- if (component == null && next == null && previous == null)
- return;
- if (DEBUG) System.out.println(this + " Remove " + renconnect);
+ if (disposed)
+ return;
+
+ if (DEBUG) System.out.println(this + " Remove " + renconnect);
if (getParentPoint() != null) {
getParentPoint()._remove(renconnect);
return;
}
PipeRun pipeRun = getPipeRun();
- if (pipeRun == null)
- return;
+// PipeRUn removal has been changed, so pipeRun may be null.
+// if (pipeRun == null)
+// return;
PipeControlPoint additionalRemove = null;
if (!PipingRules.isEnabled()) {
PipeControlPoint currentNext = next;
if (currentNext == null && currentPrev == null) {
removeComponent();
- pipeRun.remChild(this);
- checkRemove(pipeRun);
+ if (pipeRun != null) {
+ pipeRun.remChild(this);
+ checkRemove(pipeRun);
+ }
return;
}
if (currentNext != null && currentPrev != null) {
}
removeComponent();
- pipeRun.remChild(this);
- checkRemove(pipeRun);
- if (PipingRules.isEnabled() && pipeRun.getParent() != null && pipeRun.getControlPoints().size() > 0)
- PipingRules.validate(pipeRun);
+ if (pipeRun != null) {
+ pipeRun.remChild(this);
+ checkRemove(pipeRun);
+ if (PipingRules.isEnabled() && pipeRun.getParent() != null && pipeRun.getControlPoints().size() > 0)
+ PipingRules.validate(pipeRun);
+ }
if (additionalRemove != null)
additionalRemove.remove();
+ disposed = true;
}
/**
PipelineComponent n = next.getPipelineComponent();
while (n != null) {
+ if (n.getPipeRun() != previousRun)
+ break;
if (! (n instanceof Nozzle)) {
n.deattach();
nextPipeRun.addChild(n);
}
private boolean checkRemove(PipeRun pipeRun) {
+ if (pipeRun == null)
+ return false;
Collection<PipeControlPoint> points = pipeRun.getControlPoints();
if (points.size() == 0) {
pipeRun.remove();