Reasoning behind changes...
- offset_on_edge_between is only called when offset_meet_edge returns true for both sides of emid (ok1 and ok2). The code for cases when they are not both true are removed. Note that all cases now return true.
- offset_meet_edge is called twice with the same inputs. Instead good_offset_on_edge_between is merged into offset_on_edge_between.
- The special case for absolute and percent is moved to offset_meet_edge and simplified by using the offset in the EdgeHalf data.
- offset_meet_edge_co is added to find the meeting point along an emid, taking into account the offset type and clamping the meeting point to the edge.
This fixes T95335.
Note that this issue is caused by loop sliding along an edge just under 180 causing the optimal meeting point to be far off in the distance. This change clamps the meeting point to the edge, but a squashed bevel is caused. For the best result disabling loop sliding works best.
This shows how loop sliding clamps to edges.
