Wie konvertiere ich das Ausfüllen von Objekten in feine Linien?

7

Ich versuche einen Weg zu finden, um eine feste Objektfüllung in Millionen (mehr oder weniger) Zeilen umzuwandeln. zum Beispiel: Objektfüllung in Linien

Ich kann keine Tools verwenden, aber im Idealfall möchte ich eine Ausgabe im SVG-Format (nicht erforderlich).

Vergrößerte Ansicht: Geben Sie hier die Bildbeschreibung ein

MV
quelle

Antworten:

10

Dies ist eine Teillösung für Inkscape. Eine andere Antwort für Illustrator zeigt, wie man den Scribble-Effekt nicht zufällig verwenden und die gewünschte gerade Zick-Zack-Füllung erhalten kann. Das Ergebnis erfordert nur einige geringfügige manuelle Korrekturen (= Lückenfüllungen, wenn die Form komplex ist).

Inkscape hat keinen solchen Effekt. Es hat einen Pfadeffekt, der grobe Schraffurfüllungen erzeugt, aber das Ergebnis ist sehr grob. Theoretisch könnte es das gleiche wie Illustrator's Scribble sein, aber es hat einfach nicht die erforderliche Einstellbarkeit und Genauigkeit.

Der Fragesteller gab in einem Kommentar einen Hinweis: Es gibt eine Drittanbieter-Erweiterung eines Plotterherstellers (= EggBot), die ähnliche Füllmuster erzeugen kann. Ich überspringe sie, weil ich sie nicht habe. Ich habe versucht, sie zu bekommen, aber die Installation wurde gestoppt, da mein Inkscape nicht auf standardmäßige Weise installiert wurde.

Wenn Ihre Form vertikal symmetrisch ist, sodass die obere Hälfte in XY-Koordinaten als Y = f (x) dargestellt werden kann, wobei f eine Formel ist, die mit Python-Mathematikfunktionen und -operatoren geschrieben wurde, können Sie die Zickzackfüllung mit der Funktionsplotter-Erweiterung von Inkscape zeichnen. Als Beispiel überprüfen wir Ihren Kreis.

Ich muss ein wenig schummeln, weil die genaue Formel für eine dreieckige Zick-Zack-Kurve komplex ist. Es braucht knifflige Modulo-Arithmetik. Ich weiß nicht, wie ich es mit Pythons Funktionen schreiben soll. Ein kompetenter Programmierer könnte es wahrscheinlich in einer Sekunde sagen.

Aber Python hat einige allgemein bekannte (= wie in Excel) elementare mathematische Dinge wie Sinus, Pi und Squareroot. Ich benutze sie, weil die resultierende Kurve später in gerade Linien umgewandelt werden kann.

Geben Sie hier die Bildbeschreibung ein

Die Ansicht mit hohem Zoom zeigt, dass es sich tatsächlich um eine weiche Kurve handelt:

Geben Sie hier die Bildbeschreibung ein

Um es ein Quadrat zu zeichnen und GoTo Erweiterungen> Render> Funktion Plotter. Ich habe das Quadrat ausgewählt, das x- und y-Bereiche von -1 bis +1 darstellt.

Die Funktion wird aus der Elektronik übernommen. Es ist amplitudenmodulierter Sinus (kein Träger!). Der Hüllkurventeil sqrt (1-x * x) ist ein Halbkreis. Die letzte Zahl 40 definiert, dass es 40 vollständige Zyklen der Sinuskurve gibt, dh 40 obere und untere Spitzen. Es wurden ungefähr 161 Knoten im ungefähren Bereich definiert. In jedem Nulldurchgang und jeder Spitze befindet sich ein Knoten.

Wenn Sie mehr wollen, sagen wir 100 volle Zyklen, müssen Sie 40 zu 100 und 161 zu 401 ändern.

Wenn man alle Knoten in Eckpunkte konvertiert, erhält man die Dreiecksform ohne Berechnungen. Erweiterung Pfad ändern> Reduzieren Bezier erledigt den Job. Hier ist ein Beispiel für eine Abflachung:

Geben Sie hier die Bildbeschreibung ein

Sie sollten Flatten anwenden und dann alle Nulllinienknoten außer dem am weitesten links und am weitesten rechts liegenden mit dem Werkzeug none auswählen und DEL drücken. Dann wieder abflachen und fertig - nur gerade Linien, keine zusätzlichen Knoten:

Geben Sie hier die Bildbeschreibung ein

Speichern Sie es als einfaches SVG, um alle Inkscape-eigenen Teile zu löschen (es sollte keine geben, da das Ergebnis ein Pfad ist und keine Funktionen hat).

Ich denke, die Funktionsplotmethode ist nicht praktikabel, also versuche ich etwas anderes. Wenn gerade parallele Linien als Füllung akzeptiert werden (= kein Zickzack), kann man eine Reihe von Linien kacheln und entweder eine Schnittmaske festlegen oder die Linien destruktiv mit einer Form teilen

Inkscape bietet verschiedene Möglichkeiten, um eine Reihe von geraden Linien zu erstellen

  • gekacheltes Klonen (muss neu verknüpft werden, wenn man die Zeilen teilen möchte)
  • Pfadeffekt Unterpfade interpolieren
  • Erweiterung generieren aus Pfad> Interpolieren

Die 3. Methode ist am einfachsten. Es generiert die Zwischenzeilen als Gruppe:

Geben Sie hier die Bildbeschreibung ein

Die Linien sollten nicht gruppiert und kombiniert werden (Pfad> Kombinieren), um sie sicher als ein Objekt zu halten. Gruppen können leicht beschädigt werden, da ihre Mitglieder weiterhin unabhängig ausgewählt werden können. Darüber hinaus funktionieren viele Pfadoperationen nicht mit Gruppen, sondern benötigen einzelne Pfade oder kombinierte Pfade.

Das nächste Bild zeigt das Ergebnis, wenn eine Form auf die Linien gelegt und Objekt> Clip> Festlegen angewendet wird:

Geben Sie hier die Bildbeschreibung ein

Der Ausschnitt kann jederzeit zurückgenommen werden, die Originalteile sind dort intakt, nur teilweise verborgen. Es gibt keine Möglichkeit, etwas am scheinbaren Ende der Zeile zu fangen, da es keinen Knoten gibt. Dazu müssen die Linien destruktiv aufgeteilt werden oder es darf kein Clipping erfolgen. Das Einrasten an der Pfadkreuzung funktioniert in Inkscape sehr gut.

Wir können das Einrasten nutzen, indem wir den dreieckigen Zickzack mit dem Stift zeichnen:

Geben Sie hier die Bildbeschreibung ein

Der blaue Zickzack wird mit dem Stift nur durch Klicken erstellt, ein Klick pro Kreuzungspunkt. Es dauerte ungefähr eine Minute. Der blaue Zickzack ist ein unabhängiger Einzelpfad.

Geben Sie hier die Bildbeschreibung ein

Wenn es störend ist, dass die Hälfte der Liniensegmente s vertikal und die andere Hälfte geneigt ist, wird dies durch Drehen der Linien vor dem Zeichnen des Zickzacks behoben.

Es stellt sich die Frage: "Wenn man die Linien zum Beispiel mit Pfad> Pfad schneiden teilt, können die Teile irgendwie automatisch und nicht einzeln zu einem Zickzack kombiniert werden. Theoretisch JA. Aber es gibt Schwierigkeiten, die das Ergebnis unsicher machen.

Zuerst teilen wir die Linien mit der gleichen schwarzen Kurve. Eine obere Form teilt die zugrunde liegenden Linien wirklich, wenn sie kombiniert werden (Pfad> Kombinieren). Die Überreste können einfach mit dem normalen Auswahlwerkzeug im Modus "Auswählen, wenn berührt" (= Alt + Ziehen) ausgewählt und entfernt werden:

Geben Sie hier die Bildbeschreibung ein

Dann können wir die unteren Endknoten aller Linien auswählen und die Knotenfunktion ausprobieren. Ausgewählte Knoten verbinden. Das Ergebnis ist leider unerwartet:

Geben Sie hier die Bildbeschreibung ein

Alle Knotenverbindungs-Endverbindungsvorgänge wählen, wenn sie gebündelt sind, die Reihenfolge unvorhersehbar aus. Die Verbindungen müssen einzeln hergestellt werden. Es ist viel einfacher, den Zickzack mit dem Stift zu zeichnen, wie oben gezeigt.

user287001
quelle
Unglaublich perfekt, ich mache den Job wie am Beispiel und genau die perfekte Ausgabe, die ich wollte, nur ein Problem, was ist, wenn die erforderliche Ausgabeform rechteckig oder eine unregelmäßige Form ist!
MV
Sie können den Scribble-Effekt in Illustrator verwenden, er macht einen viel besseren Job als Sie beschreiben
joojaa
@ user287001 Vielen Dank für Ihre Aufmerksamkeit und Ihr Heads-up. Es macht den Job! Nur um einen weiteren Tipp hinzuzufügen, kann EggBot >> Hatch Fill ebenfalls verwendet werden, es müssen jedoch Linien verbunden werden, damit Zickzacklinien patten.
MV
@joojaa Danke für die Antwort, aber der Scribble-Effekt ist zufällig und hat keinen einzigen Pfad, der benötigt wird.
MV
@MV Sie können die Einstellungen bearbeiten, um Zufälligkeiten zu entfernen. Und Sie können sich dann den fehlerhaften Lücken anschließen.
joojaa
5

Der Illustrator-Scribble-Effekt macht viel, wonach Sie fragen

Wenden Sie einfach Scribble auf die Pfadfüllung an. Passen Sie dann die Scribble-Einstellungen an, um eine Variation von 0 zu erhalten.

Geben Sie hier die Bildbeschreibung ein

Da dies ein Live-Effekt ist, müssen Sie ihn mit Objekt → Darstellung erweitern erweitern

Geben Sie hier die Bildbeschreibung ein

Jetzt misst Scribble den Abstand zwischen Startpunkten etwas anders als in Ihrem Beispiel. Dies kann ein Problem sein oder auch nicht, es ist in der Problemeinstellung nicht so genau beschrieben.

joojaa
quelle
Wow, erst jetzt habe ich etwas über Scribble-Einstellungen gelernt, ein großes Dankeschön :-)
MV
0

Wenn Sie einen Weg finden, die Hüllkurve Ihrer Form mathematisch zu beschreiben, können Sie die Funktion sinmit einem kurzen Zeitraum multiplizieren . Für das Festplattenbeispiel sin(100*x) * sqrt(1 - x**2)scheint es gut zu funktionieren:

Geben Sie hier die Bildbeschreibung ein

Hier ist ein Live- Beispiel , in dem Sie die Parameter mit Schiebereglern ändern können.

Es ist möglich , eine Funktion als SVG aus plotten gnuplot , matplotlib oder dieser Webseite .

Eric Duminil
quelle