2013-02-23 6 views
11

Ab Anfang 2014 SVG-Spezifikation hat keine eingebaute Unterstützung für Boolesche OperationenBoolesche Operationen auf SVG Pfade

Boolesche Operationen sind Methoden für die inhärente Geometrie meist überlappende Pfade zu verändern. Sie ermöglichen die Konstruktion von komplizierten Formen durch Ausführen von Operationen an einfacheren Formen und sind in etwa ähnlich zu Constructive Solid Geometry(CSG).

Diese Frage bezieht sich jedoch auf 2D-Vektorpfade. Die beliebten Pfadoperationen sind: Vereinigung, Subtraktion, Kreuzung, XOR (Exclusive Or).

Gibt es Bibliotheken, die herumschweben, die mir dabei helfen könnten?

+0

Können Sie einige Beispiel-Eingabe/Ausgabe-Paare geben? –

+0

Also wie Venn-Diagramme? –

+0

Das klingt nach Set-Operationen, nicht nach Booleschen Operationen. Und du kannst nicht zwei Kreise in eine Zahl 8 verwandeln. Es gibt einen SVG-Kreis, aber keine SVG-Zahl-8. Vielleicht möchten Sie dafür eine Canvas-Bibliothek wie KineticJS verwenden. –

Antwort

8

Es gibt Javascript Clipper, die für alle Sätze von Boolean Operations auf Pfaden erlaubt, aber unter der Bedingung, dass der Eingabepfad ein Polygon ist.

  • Wenn wir irgendwelche Kurven (Cubic/Quader Bezier-Kurven) haben, können sie auf Polygone leicht die De Casteljau algorithm mit unterteilt werden.

    • Wenn die Unterteilung Probe hoch genug ist, wäre das Ergebnis ein Polygon sein, die optisch wie eine Kurve sieht (auf Kosten einer großen Menge von Daten wie die Anzahl der Scheitelpunkte linear zunimmt, auf die Treue der Abhängigkeit Unterteilung).

Dann können wir den Weg in JavaScript Clipper für die Boolesche Operationen füttern.

Der Vorbehalt hier ist, dass wir die inhärente "kurvige" Natur des Pfades verlieren, wenn er Kurven enthält. Die oben erwähnte "Polygonisierung" ist mehr oder weniger eine Einbahnstraße.

+0

Was ist, wenn eine solche Pologonisierung keine Option ist? – Thayne

+0

@thayne Google 'fette Linie Ausschnitt' –