18. Weitere Importmöglichkeiten
Mit OpenSCAD werden am Ende STL-Dateien erstellt.
Wikipedia:
STL ist ein Dateiformat, das viele CAD-Systeme lesen und schreiben können. Das Format wurde 1988 von 3D Systems für ihre Stereolithographie-Software
eingeführt. Mit Dateien im STL-Format werden Netzkoordinaten dreidimensionaler Datenmodelle für die Fertigung mittels additiver Fertigungsverfahren/3D-
Druck oder Rapid-Prototyping-Anlagen bereitgestellt.
Dieses Dateiformat ist die Basis, um mit einem 3D-Drucker Objekte zu drucken. In den folgenden Abschnitten werden wir solche STL-Dateien laden und auch weiterbearbeiten.
Spannend ist aber auch das Einscannen von Handzeichnungen und die Aufarbeitung dieser Zeichnungen, um SVG-Dateien (Umrissdateien, siehe Kapitel 16 und 17) zu laden und in den Code einzubinden.
18.1 Eine fertige Dame von einer STL-Datei
Wir haben nun immer wieder mit den Schachfiguren gearbeitet. Ja, es gibt verschiedenste fertige Schachfiguren, die aus der Bambu-Bibliothek heruntergeladen werden können.

Wir können sie herunterladen und gleich öffnen.

Es geht aber hier nicht um das Drucken der Figur, sondern um das Laden der Figur mit OpenSCAD. Dazu muss die Figur zuerst aus dem Bambu-Programm exportiert werden. Dazu wird das Teil selektiert und via der „Exportieren"-Funktion in unser „Schach"-Unterverzeichnis gespeichert.
Auf meinem Rechner wurde gleich der Name der Download-Datei übernommen und noch ein „.stl" angehängt. Der Name war somit „Queen v1.stl.stl". Ein bisschen zu viel des Guten. Der Name wird zu „Dame.stl" geändert.

Diese Dame soll nun in unserer „figuren_library.scad" die aktuelle Figur ersetzen. Darum gleich die Italienische Eröffnung laden und auch die „figuren_library.scad".
Dort steht noch unser Code der vereinfachten Dame.

Wie schon bei anderen Figuren belassen wir die erste translate() und color() Linie und ersetzen die eigentliche Figur mit import("queen.stl");.
//----------------------------------------
module dame(x,y,farbe) {
translate([(x-1)*feld+feld/2,(y-1)*feld+feld/2,dick]) {
import("queen.stl");
}
}
Speichern, in die Italienische Eröffnung wechseln und F5...

… verschwunden. Wenn wir aus dem Bild herauszoomen, finden wir die zwei Figuren so ziemlich „neben den Schuhen".

Darum etwas probieren, bis die Figur korrekt positioniert ist.
module dame(x,y,farbe) {
translate([(x-1)*feld+feld/2,(y-1)*feld+feld/2,dick]) {
translate([-128,-128,0])
import("queen.stl");
}
}
Um -128 in x und y? Da kommt eine Vermutung auf: Wenn ein Objekt in Bambu genau im Zentrum steht, sind alle Werte um 128 in x und y vom Nullpunkt entfernt. Das Druckbett ist ja 256 mm gross – und die Hälfte wäre dann … genau 128 mm.
Aber die Figur ist noch etwas gross und oh … color() habe ich vergessen zu übernehmen. Wichtig ist, den scale()-Befehl vor dem translate([-128 …]) anzuwenden, da sonst scale() auch auf das translate() angewendet wird!
module dame(x,y,farbe) {
translate([(x-1)*feld+feld/2,(y-1)*feld+feld/2,dick]) {
color(farbe) {
scale(.88)
translate([-128,-128,0])
import("queen.stl");
}
}
}
So passt es!

18.2 Flaschendeckel für Magnente
Wir können STL-Dateien importieren und die Objekte weiterverarbeiten. Es geht um einen Kronkorken, also um ein „Teckeli" einer Bierflasche. Das „Teckeli" soll zu einem Deckmagneten umgebaut werden.
In der Bambu-App kann schnell etwas Brauchbares gesucht werden. Das Suchwort „Flaschendeckel" fand gleich einen Kronkorken einer Bierflasche.

Das Teil wird heruntergeladen und in das gewünschte Verzeichnis kopiert. Den Code für den Import kennen wir bereits – er ist schön einfach.
import("Teckeli.stl");

Es gibt Magnete in verschiedensten Formen auf dem Markt. Die verwendeten Magnetscheiben haben einen Durchmesser von 15 mm. Somit braucht der Deckel einen Zylinder, damit der Magnet nicht im Deckel versinkt. Die Befehle circle() und linear_extrude() kennen wir bereits. Bei einem Durchmesser von 15 mm wäre der Radius 7,5 mm. Die Tiefe des Deckels können wir nur abschätzen. Versuchen wir es mit 10 mm.
import("Teckeli.stl");
linear_extrude(10)
circle(7.5);
Scheint etwas zu hoch zu sein, auch die Position stimmt nicht mit dem import() überein.

Mit etwas Probieren mit translate() und einem linear_extrude() von 6 schaut es von oben und der Seite ganz gut aus. Den Zylinder habe ich um 1 mm angehoben. So sollte er noch im „Teckeli" sein, aber nicht ganz auf der 0-Achse.
import("Teckeli.stl");
translate([18.1,13.9,1])
linear_extrude(6)
circle(7.5);
Das Einbinden von STL-Dateien aus dem Netz ist keine grosse Sache. Zu beachten ist jeweils die Grösse des STL-Objektes. Aber auch da kann mit scale() nachgeholfen werden.
18.3 Vertiefungen via externem Bild
Ab dieser Übung musste ich immer wieder neue Anläufe nehmen, um den besten/einfachsten Weg zu finden. Ein fertiges Bild sollte es nicht sein. Es sollte ein selbst gezeichnetes Bild sein, das eingescannt und dann eingebunden werden sollte.
Das Bild wurde mit einem Brother-MFC eingescannt. Dabei habe ich mit Graustufen gescannt und das Bild als „.png" gespeichert. Da mein Schreibgerät etwas kleckste, wurde eine Zehe etwas seltsam. Mit Paint (unter Windows) kann das schnell korrigiert werden.

Durch die Graustufen wurde auch der Hintergrund sichtbar … aber versuchen wir es mit diesem Hintergrund. Am Ende wieder als „*.png" speichern. Der Code scheint sehr einfach zu sein:
// Umriss einprägen
translate([0,0,-10])
scale([1,1, 0.1])
surface(file = "Fuss_Umriss.png", center = true, invert = true);
Stop! Nicht weiter mit der alten OpenSCAD-Version! Diese Version ist viel zu langsam beim Berechnen des Bildes. Zuerst erscheint eine Fehlermeldung, dass der Speicher nicht ausreicht. Dazu fand ich folgenden Eintrag: Die PolySet-Cache-Grösse muss erhöht werden.

Gemacht, aber nun dauert es sehr lange, bis etwas gerechnet wird. Die einfachste Lösung ist, die neueste Version von OpenSCAD herunterzuladen. Unter „Download" gibt es den Bereich „Development Snapshots". Das sind noch keine 100% wasserdichten Versionen, dafür auf dem neuesten Stand.

Hab ich gemacht und war erstaunt, wie sich die Oberfläche weiterentwickelt hat.
Machen wir dort weiter, wo wir zuvor waren. Code laden und rendern … das ging aber schnell! Alles geht schneller, auch das Rendern von komplexen Objekten. Ab jetzt wird nur noch mit der neuen Version gearbeitet. 😉

Und von ganz nah...

// Umriss einprägen
translate([0,0,-10])
scale([0.1, 0.1, 0.01])
surface(file = "Fuss_Umriss.png", center = true, invert = false);
Hübsch, kann man das drucken?

F5 und es dauert „nur" 3 Sekunden statt 1 Minute wie mit der alten Version. Gleich mit dem Bambu gedruckt … durch scale(0.1 …) wurde es ordentlich klein und die Oberfläche müsste etwas feiner eingestellt werden.

Es gibt noch einige weitere Funktionen und Befehle die auf die Erkundung werten. Fürs erste sollte mit den nun gelernten Funktionen vieles möglich sein. Spannend wird es wenn die neue Version von OpenSCAD veröffentlicht wird. Aktuell gibt es noch eine Beschreibung zur Version und oft tappt man im Dunkeln was wofür da ist.