dir = new Vector3d();
toPcp.getInlineControlPointEnds(start, end, dir);
dir.normalize();
- if (!insertAdjustable || insertPosition == PositionType.NEXT) {
- switch (position) {
- case NEXT:
- pos = new Vector3d(end);
- break;
- case PREVIOUS:
- pos = new Vector3d(start);
- break;
- case SPLIT:
- break;
- }
- } else if (insertPosition == PositionType.SPLIT) {
- pos = new Vector3d(toPcp.getWorldPosition());
- } else {
- switch (position) {
- case NEXT:
- pos = new Vector3d(start);
- break;
- case PREVIOUS:
- pos = new Vector3d(end);
- break;
- case SPLIT:
- break;
- }
- }
+ switch (position) {
+ case NEXT:
+ pos = new Vector3d(end);
+ break;
+ case PREVIOUS:
+ pos = new Vector3d(start);
+ break;
+ case SPLIT:
+ pos = new Vector3d(toPcp.getWorldPosition());
+ break;
+ }
} else if (toPcp.isDirected()) {
dir = new Vector3d(toPcp.getDirection(Direction.NEXT));
} else if (toPcp.isTurn() && toPcp.isFixed()) {
dir = new Vector3d(toPcp.getDirection(position == PositionType.NEXT ? Direction.NEXT : Direction.PREVIOUS));
pos = new Vector3d(toPcp.getWorldPosition());
- if (!lengthAdjustable || insertPosition == PositionType.NEXT) {
+ if (!lengthAdjustable) {
Vector3d v = new Vector3d(dir);
v.scale(toPcp.getInlineLength());
pos.add(v);
+ } else {
+ if (insertPosition == PositionType.NEXT) {
+ Vector3d v = new Vector3d(dir);
+ v.scale(toPcp.getInlineLength());
+ pos.add(v);
+ } else if (insertPosition == PositionType.SPLIT) {
+ // scale 0.5*length so that we don't remove the length twice from the new component
+ Vector3d v = new Vector3d(dir);
+ v.scale(toPcp.getInlineLength()*0.5);
+ pos.add(v);
+ }
}
}