In den 90ern habe ich auch mal Statikprogramme entwickelt. Damals habe ich die grafische Eingabe des ebenen Stabwerks so gelöst:
Während du die Maus bewegst, werden in zwei Editfeldern ständig die aktuellen X- und Y-Koordinaten angezeigt. Dabei kann man umschalten, ob diese Koordinaten absolut oder relativ zum letzten Punkt gelten. Damit weiß man während der Mausbewegung schon mal, wo man ist.
Das Editfeld für X hat dabei den Tastaturfocus. Um einen Punkt zu setzen kannst du jetzt entweder mit der Maus klicken oder die Koordinaten eintippen. X hat ja schon den Focus, dann gehst du mit Return oder Tab zu Y und beendest mit Return. Damit ist der Punkt gesetzt und die Linie zum nächsten Punkt hängt an der Maus.
Die Mausbewegung folgt einem Raster. Vorhandene Knoten/Endpunkte werden gefangen.
Habe es gerade nochmal rausgekramt. So sah das aus:
Habe mal etwas ähnliches gemacht (Vektorgrafikprogramm). Meine Lösung war damals folgende: Intern habe ich eine ObjectList definiert, die ihrerseits Records aufnehmen konnte. Das Record speicherte Koordinatenpunkte (x,y,z) und jeweils eine Angabe zur Zeichenform (Polyline oder Polygon). Mit jedem Links-Klick auf einer Paintbox wurde ein weiterer Punkt aufgenommen, ein Rechts-Klick beendete die Punktaufnahme. Im OnPaint-Ereignis der Paintbox wurden die Figuren dann der Reihe nach abgearbeitet und gezeichnet, solange jeweils mehr als ein Koordinatenpunkt für Polylines oder drei Punkte für Polygone eingegeben worden waren. Die in den Records enthaltenen Koordinatenwerte konnten auch in einer Tabelle wiedergegeben und von dort aus auch verändert werden (OnChange). Allerdings konnte ich die Koordinatenpunkte auch per Maus greifen. Meines Wissens haben sämtliche User es auf diese Weise gemacht - keiner hat mit den Tabellen arbeiten wollen. Als zusätzliches Feature ließ sich auf der Paintbox ein Hintergrundbild einblenden, so dass man praktisch "durchpausen" konnte. Für geometrische Figuren gab es eine Snap-to-grid-Funktion.
Ok. Vielen Dank für die Ideen. Ich hab mich jetzt dafür entschieden, separate Punkte einzugeben, die man anschließend in einem OI ändern kann. Dadurch wird der Zeichenprozess nicht so "Spaghetti".