Kreis-Mittelpunkt + Quadranten (0/90/180/270°) sind jetzt snapbar

Nutzer-Wunsch: "bei Kreisen wäre ich froh wenn Kreismittelpunkte und
0/90/180/270 Grad auch snappen." Fund: computeSnap() (tools/snapping.ts)
kannte das schon vollständig (Center- + Quadranten-Fang für Kreis/Bogen,
Bogen nur innerhalb seiner Winkel-Spanne) -- gesteuert über
`settings.center`, das im Modell aber auf `false` stand UND im Footer
(StatusBar SnapControl) gar keinen Schalter hatte. Ein bereits fertig
gebautes Feature war dadurch komplett unerreichbar.

DEFAULT_SNAP.center jetzt `true`; neue Checkbox "Kreismitte/Quadranten
(0/90/180/270°)" im Fang-Popover der Statusleiste (analog den übrigen
Snap-Arten), damit es wie alle anderen auch abschaltbar bleibt.

tsc/vitest 940/940 grün (keine bestehenden Tests setzten auf
center:false als Default).
This commit is contained in:
2026-08-22 01:24:51 +02:00
parent 4788ca9261
commit c8ac5a3d89
4 changed files with 18 additions and 2 deletions
+1
View File
@@ -233,6 +233,7 @@ export const de = {
"snap.enabled": "Fang aktiv",
"snap.endpoint": "Endpunkt",
"snap.midpoint": "Mittelpunkt",
"snap.center": "Kreismitte/Quadranten (0/90/180/270°)",
"snap.intersection": "Schnittpunkt",
"snap.onEdge": "Auf Kante (Lot)",
"snap.grid": "Raster",
+1
View File
@@ -231,6 +231,7 @@ export const en: Record<TranslationKey, string> = {
"snap.enabled": "Snap on",
"snap.endpoint": "Endpoint",
"snap.midpoint": "Midpoint",
"snap.center": "Circle center/quadrants (0/90/180/270°)",
"snap.intersection": "Intersection",
"snap.onEdge": "On edge (perp.)",
"snap.grid": "Grid",
+7 -2
View File
@@ -93,13 +93,18 @@ export interface SnapSettings {
hoverDivideCount: number;
}
/** Default-Snap-Einstellungen (endpoint/midpoint/intersection/onEdge + grid). */
/**
* Default-Snap-Einstellungen (endpoint/midpoint/intersection/onEdge/center +
* grid). `center` (Kreis-/Bogen-Mittelpunkt + Quadranten 0/90/180/270°) war
* lange im Modell vorhanden, aber ohne UI-Schalter unerreichbar (Default
* `false`) — auf Nutzer-Wunsch jetzt an UND im Footer (StatusBar) umschaltbar.
*/
export const DEFAULT_SNAP: SnapSettings = {
enabled: true,
endpoint: true,
midpoint: true,
intersection: true,
center: false,
center: true,
onEdge: true,
grid: true,
gridSize: 0.1,
+9
View File
@@ -172,6 +172,15 @@ function SnapControl({
/>
<span>{t("snap.midpoint")}</span>
</label>
<label className="sb-snap-row">
<input
type="checkbox"
checked={snap.center}
disabled={!snap.enabled}
onChange={(e) => onSnapChange({ ...snap, center: e.target.checked })}
/>
<span>{t("snap.center")}</span>
</label>
<label className="sb-snap-row">
<input
type="checkbox"