- if (position == PositionType.NEXT) {
- PipingRules.addSizeChange(false, pipeRun, other, (InlineComponent)newComponent, toPcp, null);
- } else if (position == PositionType.PREVIOUS){
- PipingRules.addSizeChange(true, pipeRun, other, (InlineComponent)newComponent, toPcp, null);
- }
- newPcp.setWorldPosition(pos);
- // TODO : chicken-egg problem
- newComponent.updateParameters();
- Vector3d v = new Vector3d(dir);
- v.scale(newComponent.getControlPoint().getLength()*0.5);
- switch (position) {
- case NEXT:
- pos.add(v);
- break;
- case PREVIOUS:
- pos.sub(v);
- break;
- case SPLIT:
- break;
+ boolean forward = position != PositionType.PREVIOUS;
+ PipelineComponent comp = forward ? newComponent.getNext() : newComponent.getPrevious();
+ while (comp != null && comp.getPipeRun() == pipeRun) {
+ if (comp.getParent() == pipeRun) {
+ comp.deattach();
+ other.addChild(comp);
+ } else {
+ comp.setPipeRun(other);
+ }
+
+ // Reset parameters to match new pipe run
+ comp.updateParameters();
+
+ comp = forward ? comp.getNext() : comp.getPrevious();