Folge-Issue aus #129 (Frage 6, Antwort: „auch boolesche Operationen als Folge-Issue").
Befund
Seit #129 ist eine Form eine flache Liste von Ringen mit Even-Odd-Regel — ein Loch entsteht durch einen zweiten Ring. Formen zu vereinigen, abzuziehen, zu schneiden oder auszuschließen geht nicht.
Zu bauen (Vorschlag)
Zwei oder mehr ausgewählte Formen: Vereinigen, Abziehen, Schneiden, Ausschließen.
Das Ergebnis ist wieder eine gewöhnliche Form (Ringe aus Punkten) — kein neuer Modelltyp, kein nachträglich veränderbarer Verbund. Wer das Ergebnis ändern will, macht es rückgängig.
Die Rechnung läuft auf den abgetasteten Pfaden (Bezier zu Polylinie), das Ergebnis besteht danach aus Ecken. Ob Kurven erhalten bleiben sollen, ist eine eigene Frage.
Offen
Eigene Umsetzung oder eine Bibliothek (z. B. polygon-clipping)? Bisher hat das Projekt keine Abhängigkeit dieser Art.
Folge-Issue aus #129 (Frage 6, Antwort: „auch boolesche Operationen als Folge-Issue").
## Befund
Seit #129 ist eine Form eine flache Liste von Ringen mit Even-Odd-Regel — ein Loch entsteht durch einen zweiten Ring. Formen zu **vereinigen**, **abzuziehen**, zu **schneiden** oder **auszuschließen** geht nicht.
## Zu bauen (Vorschlag)
- Zwei oder mehr ausgewählte Formen: **Vereinigen**, **Abziehen**, **Schneiden**, **Ausschließen**.
- Das Ergebnis ist wieder eine gewöhnliche Form (Ringe aus Punkten) — **kein** neuer Modelltyp, kein nachträglich veränderbarer Verbund. Wer das Ergebnis ändern will, macht es rückgängig.
- Die Rechnung läuft auf den **abgetasteten** Pfaden (Bezier zu Polylinie), das Ergebnis besteht danach aus Ecken. Ob Kurven erhalten bleiben sollen, ist eine eigene Frage.
## Offen
- Eigene Umsetzung oder eine Bibliothek (z. B. polygon-clipping)? Bisher hat das Projekt keine Abhängigkeit dieser Art.
meleki
added the new label 2026-09-20 19:46:47 +02:00
Umgesetzt in 1116818, Wiki b07676c (Vector Art, Architecture, Development).
Was dazukommt
Im Inspector gibt es unter der Formenliste den Block COMBINE mit Union, Subtract, Intersect und Exclude.
Mehrere Formen wählen: im Tab mit Strg/Cmd+Klick (Umschalt bleibt dort Pan), in der Liste mit Strg oder Umschalt. Ein normaler Klick wählt wieder nur eine Form. Die mitgewählten Formen zeigen ihren Umriss, Punkte und Griffe hat nur die zuletzt geklickte.
Das Ergebnis ersetzt die unterste gewählte Form: Name, Farbe, Kontur und Platz in der Reihenfolge bleiben, die anderen Formen verschwinden. Subtract zieht alle oberen Formen von der untersten ab.
Ein Undo-Schritt, heraus kommt eine gewöhnliche Form.
Kurven werden zu Ecken, abgetastet auf 0,2 Leinwandpixel (ein Kreis bekommt etwa 48 Punkte).
Nicht möglich mit nur einer Form oder mit einer offenen Linie: die Knöpfe sind dann aus, der Grund steht darunter. Ein leeres Ergebnis (z. B. Intersect ohne Überlappung) wird mit Meldung abgelehnt.
Nebenbei: Delete entfernt alle gewählten Formen, und die Auswahl lässt gelöschte Formen fallen.
Bibliothek
clipper2-ts@2.0.1, exakt gepinnt: Boost-Lizenz, keine Abhängigkeiten, TypeScript, kennt Even-Odd direkt. Importiert wird nur die Engine, das Bundle wächst um 55 kB (998 → 1053 kB) statt 110 kB.
Verworfen: clipper2-js, es zieht Angular 15 mit, npm audit meldet dazu high ohne Fix.
Fund
Pixi erkennt Löcher über Enthaltensein, nicht über Even-Odd. Eine Insel in einem Loch würde wieder als Loch gezeichnet. Die Ergebnisringe kommen deshalb in einer Reihenfolge heraus, die Pixi richtig zeichnet, ein Test bildet Pixis Regel nach.
Bewusst nicht gebaut
Kurven bleiben nicht erhalten (war im Issue als eigene Frage offen).
18 neue Unit-Tests: Flächen aller vier Operationen nach Even-Odd, Insel im Loch, Kreis-Toleranz, Sperrgründe, Command mit Undo/Redo, Mehrfachauswahl und Inspector-Knöpfe.
5 neue e2e-Checks (47h): Klick, Strg+Klick, Subtract über den Knopf (L-Form, 6 Ecken, Fläche 7600), Pixel im Tab, Undo.
Fünf Gegenproben greifen. Eine Sortierung nach Tiefe war toter Code und ist entfernt. Ein Pixel-Check wurde geschärft, weil er ohne Abzug grün blieb.
Check-Summe 1222 in README und Wiki, gerechnet (1217 + 5); gemessen wird sie in CI.
Umgesetzt in 1116818, Wiki b07676c (Vector Art, Architecture, Development).
## Was dazukommt
Im Inspector gibt es unter der Formenliste den Block **COMBINE** mit **Union**, **Subtract**, **Intersect** und **Exclude**.
- **Mehrere Formen wählen:** im Tab mit Strg/Cmd+Klick (Umschalt bleibt dort Pan), in der Liste mit Strg oder Umschalt. Ein normaler Klick wählt wieder nur eine Form. Die mitgewählten Formen zeigen ihren Umriss, Punkte und Griffe hat nur die zuletzt geklickte.
- **Das Ergebnis ersetzt die unterste gewählte Form:** Name, Farbe, Kontur und Platz in der Reihenfolge bleiben, die anderen Formen verschwinden. **Subtract** zieht alle oberen Formen von der untersten ab.
- **Ein Undo-Schritt**, heraus kommt eine gewöhnliche Form.
- **Kurven werden zu Ecken**, abgetastet auf 0,2 Leinwandpixel (ein Kreis bekommt etwa 48 Punkte).
- **Nicht möglich** mit nur einer Form oder mit einer offenen Linie: die Knöpfe sind dann aus, der Grund steht darunter. Ein leeres Ergebnis (z. B. Intersect ohne Überlappung) wird mit Meldung abgelehnt.
- **Nebenbei:** Delete entfernt alle gewählten Formen, und die Auswahl lässt gelöschte Formen fallen.
## Bibliothek
`clipper2-ts@2.0.1`, exakt gepinnt: Boost-Lizenz, keine Abhängigkeiten, TypeScript, kennt Even-Odd direkt. Importiert wird nur die Engine, das Bundle wächst um 55 kB (998 → 1053 kB) statt 110 kB.
Verworfen: `clipper2-js`, es zieht Angular 15 mit, `npm audit` meldet dazu high ohne Fix.
## Fund
Pixi erkennt Löcher über Enthaltensein, nicht über Even-Odd. Eine Insel in einem Loch würde wieder als Loch gezeichnet. Die Ergebnisringe kommen deshalb in einer Reihenfolge heraus, die Pixi richtig zeichnet, ein Test bildet Pixis Regel nach.
## Bewusst nicht gebaut
- Kurven bleiben nicht erhalten (war im Issue als eigene Frage offen).
- Mehrere gewählte Formen zusammen verschieben.
## Tests
```
./check.sh → 134 Files, 1986 Tests, exit 0 (vorher 133 / 1968)
npm run build → exit 0
GM_STEPS=47 (frisch) → ALL PASSED – 44 checks (vorher 39)
```
- 18 neue Unit-Tests: Flächen aller vier Operationen nach Even-Odd, Insel im Loch, Kreis-Toleranz, Sperrgründe, Command mit Undo/Redo, Mehrfachauswahl und Inspector-Knöpfe.
- 5 neue e2e-Checks (47h): Klick, Strg+Klick, Subtract über den Knopf (L-Form, 6 Ecken, Fläche 7600), Pixel im Tab, Undo.
- Fünf Gegenproben greifen. Eine Sortierung nach Tiefe war toter Code und ist entfernt. Ein Pixel-Check wurde geschärft, weil er ohne Abzug grün blieb.
- Check-Summe 1222 in README und Wiki, gerechnet (1217 + 5); gemessen wird sie in CI.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Folge-Issue aus #129 (Frage 6, Antwort: „auch boolesche Operationen als Folge-Issue").
Befund
Seit #129 ist eine Form eine flache Liste von Ringen mit Even-Odd-Regel — ein Loch entsteht durch einen zweiten Ring. Formen zu vereinigen, abzuziehen, zu schneiden oder auszuschließen geht nicht.
Zu bauen (Vorschlag)
Offen
Zur Frage: was wäre klüger? wenn es zu aufwendig ist, dann kann man ruhig eine Bibliothek verwenden.
Umgesetzt in
1116818, Wiki b07676c (Vector Art, Architecture, Development).Was dazukommt
Im Inspector gibt es unter der Formenliste den Block COMBINE mit Union, Subtract, Intersect und Exclude.
Bibliothek
clipper2-ts@2.0.1, exakt gepinnt: Boost-Lizenz, keine Abhängigkeiten, TypeScript, kennt Even-Odd direkt. Importiert wird nur die Engine, das Bundle wächst um 55 kB (998 → 1053 kB) statt 110 kB.Verworfen:
clipper2-js, es zieht Angular 15 mit,npm auditmeldet dazu high ohne Fix.Fund
Pixi erkennt Löcher über Enthaltensein, nicht über Even-Odd. Eine Insel in einem Loch würde wieder als Loch gezeichnet. Die Ergebnisringe kommen deshalb in einer Reihenfolge heraus, die Pixi richtig zeichnet, ein Test bildet Pixis Regel nach.
Bewusst nicht gebaut
Tests