task(B3): offset respects click side (fixes BUG-3)
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
*/
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { SeatingService } from '../src/services/seatingService';
|
||||
import { trimElement } from '../src/tools/modification/geometry';
|
||||
import { trimElement, offsetElement } from '../src/tools/modification/geometry';
|
||||
import type { CADElement } from '../src/types/cad.types';
|
||||
|
||||
// ── Helfer (Muster aus tests/geometry.test.ts) ─────────────
|
||||
@@ -69,3 +69,34 @@ describe('BUG-2: trim line at circle', () => {
|
||||
expect(result).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
// ── BUG-3: Offset ignorierte die Klickseite ─────────────────
|
||||
describe('BUG-3: offset respects click side', () => {
|
||||
it('side=-1 versetzt Linie entgegen der Normalenrichtung', () => {
|
||||
// Linie (100,100)→(300,100): Laufrichtung +x.
|
||||
// Normale (-dy,dx)=(0,1) zeigt in Canvas-Koordinaten nach UNTEN (+y).
|
||||
const line = makeLine('l1', 100, 100, 300, 100);
|
||||
const result = offsetElement(line, 20, -1);
|
||||
expect(result.properties.y1).toBeCloseTo(80); // nach OBEN versetzt
|
||||
expect(result.properties.y2).toBeCloseTo(80);
|
||||
});
|
||||
|
||||
it('side=+1 versetzt Linie in Normalenrichtung (Default wie vorher)', () => {
|
||||
const line = makeLine('l1', 100, 100, 300, 100);
|
||||
const result = offsetElement(line, 20, 1);
|
||||
expect(result.properties.y1).toBeCloseTo(120); // nach UNTEN versetzt
|
||||
expect(result.properties.y2).toBeCloseTo(120);
|
||||
});
|
||||
|
||||
it('ohne side bleibt Verhalten identisch zur alten API (Rueckwaertskompatibilitaet)', () => {
|
||||
const line = makeLine('l1', 100, 100, 300, 100);
|
||||
const result = offsetElement(line, 20);
|
||||
expect(result.properties.y1).toBeCloseTo(120);
|
||||
});
|
||||
|
||||
it('Kreis: side=-1 verkleinert Radius, side=+1 vergroessert', () => {
|
||||
const circle = makeCircle('c1', 0, 0, 50);
|
||||
expect(offsetElement(circle, 10, -1).properties.radius).toBeCloseTo(40);
|
||||
expect(offsetElement(circle, 10, 1).properties.radius).toBeCloseTo(60);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user