3.9 KiB
3.9 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Gebogen lijnen | Lijnen en pijlen krijgen buigpunten waardoor een vloeiende kromme door alle punten loopt. Bij een geselecteerde lijn staat tussen elk paar punten een spook-greep; slepen daarvan maakt een nieuw buigpunt, dubbelklikken op een buigpunt verwijdert het. |
|
false |
Gebogen lijnen en pijlen
Gedrag
- Selecteer een lijn of pijl: je ziet de begin- en eindgreep, de buigpunten en, halverwege elk stuk van de kromme, een kleine halfdoorzichtige spook-greep.
- Sleep je een spook-greep, dan wordt die een echt buigpunt en volgt de lijn de muis (zoals in je screenshot).
- Dubbelklik op een buigpunt verwijdert het. Beide acties kun je ongedaan maken.
- De kromme loopt precies door alle punten (Catmull-Rom, omgezet naar kubische Beziers). De pijlpunt volgt de richting van het laatste stuk.
Wijzigingen
src/Kniip/Editor/Annotations/LineAnnotation.cs
- Nieuw:
List<Point> Bends, metStart + Bends + Endals doorlooppunten. - Een helper bouwt de Bezier-segmenten. Voor
Bounds,HitTesten de posities van de spook-grepen gebruikt hij bemonsterde punten (ongeveer 16 per segment). Zonder buigpunten blijft alles gelijk aan nu. Render: eenStreamGeometrymetBezierTo. Bij een pijl wordt de richting bepaald doorEndmin het laatste controlepunt. Het laatste segment eindigt op het basispunt van de pijlpunt.- Grepen: index 0 is
Starten 1 isEnd, zodat bestaande code blijft werken. Daarna volgen de buigpunten en dan de spook-grepen (het Bezier-punt bij t=0,5 van elk segment). BeginHandleDrag: bij een spook-greep wordt een buigpunt op de juiste plek inBendsingevoegd en het actieve buigpunt onthouden.MoveHandleverplaatst daarna dat punt.- Met Shift blijft
SnapAnglewerken voor begin en eind, maar dan ten opzichte van het naastliggende punt. Moveverschuift ook alle buigpunten.Clonemaakt een diepe kopie vanBends, nodig voor ongedaan maken (zelfde patroon als inHighlightAnnotation).
src/Kniip/Editor/Annotations/Annotation.cs
public virtual bool IsGhostHandle(int index) => false;public virtual bool RemoveHandle(int index) => false;(LineAnnotation verwijdert hiermee een buigpunt)
src/Kniip/Editor/AnnotationSurface.cs
DrawSelectiontekent spook-grepen als kleinere, halfdoorzichtige cirkels.HitHandlecontroleert eerst de echte grepen en daarna pas de spook-grepen, zodat een echte greep voorrang krijgt als ze overlappen.
src/Kniip/Editor/EditorWindow.xaml.cs (rond regel 452)
- In
Surface_MouseLeftButtonDown: als op een greep geklikt wordt mete.ClickCount == 2en_selected.RemoveHandle(handle)slaagt, dan volgenCommit(_pending)enInvalidateVisual, en stopt de verwerking daar. Anders start het bestaande sleepgedrag. - Optioneel: in
UpdateHinteen korte tip toevoegen voor lijnen ("Sleep het middenpunt om te buigen, dubbelklik om een punt te verwijderen").
Niet nodig
Exporteren gaat via Render in src/Kniip/Editor/DocumentRenderer.cs en werkt dus automatisch. Ook het aanmaken van lijnen (UpdateCreating) blijft ongewijzigd: nieuwe lijnen zijn recht.