sizeChange = ((InlineComponent)newComponent).isSizeChange();
}
+ // Calculate component position and direction vectors
+ // 'dir' is a unit vector that represents the direction from 'component' to 'newComponent'
if (toPcp.isInline()) {
switch (position) {
case NEXT:
}
Vector3d start = new Vector3d();
Vector3d end = new Vector3d();
- dir = new Vector3d();
- toPcp.getInlineControlPointEnds(start, end, dir);
- dir.normalize();
+ dir = toPcp.getInlineDir();
+ toPcp.getControlPointEnds(start, end);
switch (position) {
case NEXT:
pos = new Vector3d(end);
break;
case PREVIOUS:
pos = new Vector3d(start);
+ dir.negate();
break;
case SPLIT:
pos = new Vector3d(toPcp.getWorldPosition());
default:
break;
}
-
} else if (toPcp.isDirected()) {
- dir = new Vector3d(toPcp.getDirection(Direction.NEXT));
- if (position == PositionType.PREVIOUS)
- dir.negate();
+ // 'dir' always points out of a nozzle regardless of insertion direction
+ dir = new Vector3d(toPcp.getDirectedControlPointDirection());
pos = new Vector3d(toPcp.getWorldPosition());
} else if (toPcp.isTurn() && toPcp.asFixedAngle()) {
dir = new Vector3d(toPcp.getDirection(position == PositionType.NEXT ? Direction.NEXT : Direction.PREVIOUS));
((TurnComponent) newComponent).setRotationAngle(inst.rotationAngle);
}
-
newComponent.updateParameters();
Vector3d v = new Vector3d(dir);
} else {
v.scale(newComponent.getControlPoint().getInlineLength());
}
+
switch (position) {
case NEXT:
- pos.add(v);
- break;
case PREVIOUS:
- pos.sub(v);
+ pos.add(v);
break;
case SPLIT:
break;