Aidan, I think the problem now is that the triangle marker is auto-oriented towards the opposite (source or target) object instead of towards a close point on the curvy path. This is something you have to tell the LinkView how to do it. There are two places in joint.dia.link.js that this is being done:
1. update() method: for the source/target markers (the visible arrowheads):
this._markerSource.translateAndAutoOrient(sourcePosition, firstVertex || targetPosition, this.paper.viewport);
this._markerTarget.translateAndAutoOrient(targetPosition, lastVertex || sourcePosition, this.paper.viewport);
2. renderArrowheadMarkers(): for the 'handles' that appear when the link is being hovered:
V(sourceArrowhead).translateAndAutoOrient(sourcePosition, firstVertex || targetPosition, this.paper.viewport);
V(targetArrowhead).translateAndAutoOrient(targetPosition, lastVertex || sourcePosition, this.paper.viewport);
The vectorizer's translateAndAutoOrient() function provides a facility similar to what native SVG markers do when the orient=auto attribute is set on them. The reason we don't use native SVG markers is that they cannot be accessed through the DOM. That's why we use <path> elements for arrowheads and have our own translateAndAutoOrient() method. This method has the following signature and can be found in src/vectorizer.js:
translateAndAutoOrient(position, reference, target);
Where position is the point the arrowhead should point to (usually on the boundary of the source/target objects). reference is another point that is used to calculate the orientation of the arrowhead (its rotation). E.g. if the position is somewhere in the center of the screen and the reference is horizontally to the left of the position, the arrowhead would point to the right "touching" the position. The last argument is the target which is an element relative to which transformations are applied. You don't have to worry about this last argument, it is always the paper.viewport.
Long story short, your challenge would be to find the reference point. Does this make sense to you?