Erst einmal: Vielen Dank

!
Über das Einfügen der Punkte hatte ich mir ebenfalls schon Gedanken gemacht, aber für so eine kleine Demoanwendung, mit der man nicht wirklich Formen konstruieren kann (dazu bräuchte es noch die Möglichkeit zur Erstellung mehrerer getrennte Béziers), als unwichtig abgetan. Als du das Thema jedoch wieder erwähnt hast, habe ich die Nichtexistenz eines Ansatze in meinem Kopf bemerkt, wie man die Punkte überhaupt dynamisch in die Kurve einfügen könnte. Was das Thema sofort wieder interessanter machte

.
Mindestens fünfmal während der Entwicklung umgeworfen sieht mein finales Konzept, mit dem ich endlich zufrieden bin, so aus:
Zuerst werden die dem Cursor am nächsten liegende Strecke und der nächstliegende Punkt ermittelt. Zum Punkt gibt es nicht viel zu sagen, zur Strecke soviel:
Der Abstand eines Punktes A zu einer Strecke OB errechnet sich aus der Länge der Lotstrecke des Ersteren auf Letztere. Nun muss erst einmal bestimmt werden, ob der Lotfußpunkt überhaupt Element der Strecke ist:

Länge des Lots:
Sollte der Streckenabstand kleiner als der zum nächsten Punkt sein, wird der Punkt in diese Strecke eingefügt. Ansonsten gehts mit einer Fallunterscheidung weiter:
Sollte der nächste Punkt der erste/letzte Kontrollpunkt sein, wird der neue Punkt der erste bzw. letzte. Ansonsten wird er in die nächste Strecke eingefügt, mathematisch gesehen ist es von den zwei Strecken, die am nächsten Punkt enden, die Strecke mit dem längsten Lot.
Tja, eigentlich sollte jetzt noch das Feature dazukommen, den Punkt direkt nach dem Hinzufügen umherzuziehen und ihn dabei "Just in Time" in andere Strecken einfügen zu können. Die Idee wurde leider von 20 Garbage Collections pro Sekunde zunichte gemacht. Ich weiß zwar, wo sie geschehen (nämlich beim Verschieben des Punktes per List<T>.RemoveAt + Insert), allerdings fallen weder Dax noch mir eine
sinnvolle Ursache für diese GCs ein, da das Ganze auch ohne jegliche Allocations möglich sein müsste.

Zitat von
Christian S.:
Ach ja, kann es sein, dass Du anonyme Methoden magst?

Könnte sein

. Da fällt das Benennen nicht so schwer *g* .