The normal routing behavior is that when both spot (fromSpot and toSpot) are (computed to be) go.Spot.None
, then there are only two points in the link. When one of the spots indicates a direction because it is a specific spot or because it specifies a side, then it adds a point to the route in order to support the end segment at that end of the link route. So when both spots are specific or sided, there are four points in the route (i.e. in the Link.points list).
The computation of the path’s geometry is based on the properties of the Link, including Link.curve as well as Link.points. I think when the curve is Bezier the computed geometry is pretty good for 2, for 3, and for 4 points. However, it is true that it could be better – since we seem not to handle short length (toShortLength and fromShortLength) for Bezier curves well. [That is partly because we didn’t want to be doing that mathematical calculation all the time, for performance reasons.]
I think the LinkReshapingTool behavior is pretty reasonable too, for all of these combinations of cases. It doesn’t make sense to be able to reshape a route that only consists of 2 points. When there are 3 points, there is only one point that can have any freedom. But for 4 points, one can have two reshaping handles. When it’s a Bezier curve, that means for both control points.
I think you are the first person to ask for any behavior like what I think you are describing, as far as I can recall over twenty years and many thousands of customers. Your request is quite reasonable, but that’s just not how things were designed for the default behavior, which I have just outlined. You can override almost all of the behavior so that you can do what you want. That’s the trade-off.