Ein Basis Workshop mit OpenSCAD, dem etwas anderen 3D Design Tool
OpenSCAD ist eine freie Software um 3D CAD Objekte zu designen. Im Gegensatz zu vielen anderen CAD Programmen werden in OpenSCAD die 3D Objekte mit einer textbasierten Skriptsprache erstellt.
Die Objekte bestehen aus einfachen Grundkörpern die zu komplexen 3D Modellen kombiniert werden.
OpenSCAD läuft auf Linux, Mac und Windows Platformen (auch auf dem Raspberry Pi, siehe https://github.com/koendv/openscad-raspberrypi/releases).
Das Basis Tutorial kann als Zip Datei heruntergeladen werden und in einem beliebigen Ordner ausgepackt werden.
Die Fonts werden je nach OS entsprechend installiert und stehen dann unter OpenSCAD zur Verfügung.
Anfangen wollen wir mit dem Customizer. Da sich OpenSCAD Modelle sehr gut parametrisieren lassen ist dies ein einfacher Einstieg, der ohne Programmierkenntnisse auskommt.
Dazu öffnen wir OpenSCAD und laden das Skript badge-creator.scad aus dem Basis Tutorial Ordner.
Den Editor links im Bild schliessen wir zunächst (klick auf das x). Statt dessen benötigen wir den Customizer (Im Menü 'Windows' den Haken vor 'Hide customizer' entfernen).
Die Vorschau des Modells kann mit dem Scrollrad der Maus vergrößert/verkleinert werden.
Bei gedrückter linker Maustaste lässt sich das Modell in den Raumachsen bewegen.
Bei gedrückter rechter Maustaste lässt sich die Kameraposition, der Blick auf das Modell, ändern.
Zudem gibt es eine Iconleiste unter dem Vorschau Fenster, um die Ansicht zu ändern.
Die wichtigsten Tastaturbefehle in OpenSCAD sind:
Über den Customizer lassen sich Parameter des Modells ändern, sofern der Schöpfer des Modells dies vorgesehen hat.
In unserem Beispiel, dem badge-creator können die globalen Parameter u.a Form, Breite und Höhe des Badge. Der Text, Position, Font und Fontgröße kann für maximal 5 Textzeilen geändert werden. Zudem kann ein beliebiges SVG Logo oder ein QR Code platziert werden.
Damit lassen sich Badges für viele Anwendungszwecke individuell anpassen, ohne auch nur einzige Zeile zu programmieren.
Zu den globalen Einstellungen zählen:
Für jede der 5 Textzeilen kann:
eingestellt werden.
Auch Icons aus Icon Fonts können als Text verwendet und dargestellt werden. Der entsprechende Font muss dazu auf dem Rechner installiert werden. Sehr beliebt ist z.B. der Fontawesome Font (https://fontawesome.com/).
Zum Einfügen der Icons ist das Cheat Sheet hilfreich (https://fontawesome.com/v5/cheatsheet/free/solid). Einfach das gewünschte Icon auswählen und per copy & paste einfügen.
Als Logo können SVG Files oder Orcodes eingebunden werden. Das Logo kann ebenso frei positioniert, in der Größe skaliert und rotiert werden.
Ein SVG File als Logo sollte möglichst einfach gestaltet sein. Inkscape oder OpenSCAD können zum Erzeugen von SVG Dateien verwendet werden
Das SVG File muss im selben Ordner liegen wie das Skript.
Vorlagen zu frei verwendbaren SVG Files findet man z.B. unter:
Als Logo kann auch ein QR Code eingebunden werden. Leider klappt das nicht mit SVG Files. Der Qrcode kann online unter https://ridercz.github.io/OpenSCAD-QR/ erzeugt werden. Die Daten unter qr_data werden dann per copy & paste an die entsprechende Stelle in der Datei qrcode.scad eingefügt.
Erzeuge aus dem Beispiel badge-creator.scad ein persönliches Badge, z.B. ein Namensschild, einen Schlüsselanhänger oder einen Chip für Einkaufswagen.
Kommen wir zum eigentlichen Thema die Programmierung von SCAD. Die Befehlsübersicht von OpenSCAD findet man unter dem Menüpunkt 'Help | Cheat Sheet'.
Dahinter verbirgt sich ein Link auf:
https://openscad.org/cheatsheet/
Anfangen wollen wir mit den 3D Grundkörpern:
*Der Polyeder ist eher etwas für fortgeschrittene User.
Syntax: cube(l); cube(l, center=true); cube([x,y,z]);
Der Befehl cube zeichnet einen Würfel mit der Kantenlänge als Parameter. Einen Quader zeichnet man durch Angabe der x,y,z Kantenlänge in eckigen Klammern. Der optionale Parameter center=true zentriert den Würfel
Die folgenden Beispiele zeichnen einen Würfel mit 10mm Kantenläge, einen zentrierten Würfel mit 10mm Kantenläge und einen Quader mit 30x20x10mm (x,y,z) Kantenlänge.
Würfel:
cube(10);
** zentrierter Würfel:**
cube(10, center=true);
Quader:
cube([30,20,10]);
Syntax: cylinder(r,h);
Der Befehl cylinder zeichnet einen Zylinder. Als Parameter kann der Radius r oder der Durchmesser und die Höhe h angegeben werden. Für einen Kegel gibt man r1 für den unteren Radius und r2 für den oberen Radius, bzw d1 und d2 für den Durchmesser an.
Die folgenden Beispiele zeichen einen Zylinder, einen spitzen und einen stumpfen Kegel.
Zylinder:
cylinder(h=30, r=10);
Kegel:
cylinder(h=30, r1=10, r2=0, center=0);
Kegelstumpf:
cylinder(h=30, r1=10, r2=5, center=0);
Der Befehl sphere zeichnet eine Kugel. Als Parameter gibt man den Radius r oder den Durchmesser d an.
Die Anzahl der Ecken kann über den Parameter $fn bestimmt werden. Je höher desto feiner aufgelöst wird die dargestellte Kugel
Die folgenden Beispiele zeichen Kugeln mit 8, 30 und 100 Ecken.
Kugel mit 8 Ecken:
sphere(10, $fn=8);
Kugel mit 30 Ecken:
sphere(10);
Kugel mit 100 Ecken:
sphere(10, $fn=100);
Zum Bewegen eines 3D Objektes im 3 dimensionalen Raum gibt es die beiden Befehle:
Die Parameter für x, y und z werden jeweils in eckigen Klammern mit Komma getrennt angegeben.
Syntax: translate([x,y,z]) object();
Der Befehl translate bewegt ein Objekt in x-, y- bzw. z-Richtung.
Der folgende Befehl verschiebt einen Würfel um 10mm in x-Richtung, 0mm in y-Richtung und 5mm in z-Richtung.
translate([10,0,5]) cube(10);
Syntax: rotate([x,y,z]) object();
Der Befehl rotate rotiert ein Objekt um die x-, y- bzw. z-Achse.
Der folgende Befehle rotiert einen Würfel um 45° um die x-Achse.
rotate([45,0,0]) cube(10, true);
Beachte hier, dass der Würfel zentriert ist (center=true). Dann liegt die Rotations-Achse im Mittelpunkt des Würfels.
Mit den bisher vorgestellten Befehlen lässt sich bereits einges anfangen. Zur Übung soll eine aus Grundkörpern zusammengesetzes Gebäude erstellt werden, z.B. ein Haus, ein Turm, oder eine Brücke. Benutze translate und rotate um die Grundkörper im Raum anzuordnen bzw. zu drehen.
Haus:
Turm:
Brücke:
Zu den Mengenoperationen (boolsche Operationen) in OpenSCAD zählen:
Syntax: union() { object1(); object2(); }
Der Befehl union fasst mehrere Objekte zu einem Objekt zusammen. Auf das zusammengefasste Objekt können dann andere OPerationen wie verschieben (translate), rotieren (rotate) etc. angewandt werden.
Syntax: difference() { object1(); object2(); }
Der Befehl difference zieht vom ersten angegebenen Objekt die folgenden Objekte ab.
Syntax: intersection() { object1(); object2(); }
Der Befehl intersection bildet die Schnittmenge von Objekten.
Mit den Mengenoperatoren lassen sich nun auch Hohlkörper wie z.B. eine Gehäusebox o.ä erstellen, ebenso wie Bohrungen in Objekten erzeugen. Als Übung soll ein Pokal erstellt werden.
OpenSCAD kann auch zum erzeugen von 2D Objekte verwendet werden, so gibt es u.a:
Syntax: circle(d=10); circle(r=5);
Zeichnet einen Kreis. ALs Parameter kann der Durchmesser (d) oder der Radius (r) angegeben werden.
Syntax: square(10); square([10,20]);
Gibt man Parameter nur einen Wert an erhält man ein Quadrat. So erzeugt der Befehl square(10); ein Quadrat mit 10mm Kantenlänge.
Syntax: polygon([points]); polygon([points], [path])
Syntax: text(text="<text>", size=10, font="Ubuntu")
Texte sind ein wichtiger Baustein, für die es in der 3D Welt keinen entsprechenden Befehl gibt.
Um 2D Objekte in der 3D Welt nutzen zu können müssen diese in die Höhe "gezogen" werden, dazu gibt es die beiden Befehle:
Syntax: linear_extrude(height) object();
Um Text in 3D zu wandeln reicht es dem text Befehl ein linear_extrude voranzutellen. Die Höhe ist der einzige Parameter, den linear_extrude erwartet.
linear_extrude(1) text("Hello", size=10, font="Ubuntu");
Syntax: rotate_extrude(height) object();
Mit rotate_extrude kann ein 2D Objekt kreisförmig extrudiert werden. Folgendes Beispeil erstellt einen Donut.
rotate_extrude(angle=360) translate([20, 0])circle(d=5, $fn=30);
Syntax: import("...ext")
Mit import lassen sich 2D Objekte wie z.B: SVG Files in OpenSCAD importieren.
Auch 3D Objekte wie STL Files lassen sich mit import importieren. Anhand der Datei Extension erkennt OpenSCAD das Format der Datei.
Syntax: scale([x,y,z]) object();
Mit scale kann ein 3D Oject in den 3 Raumachsen skaliert werden. Das ist insbesondere bei importierten Objekten wichtig.
Syntax: hull() { object1; object2; ... }
Mit dem Befehl hull lassen sich Objekte mit einer Hüllkurve verbinden.
Syntax: minkowski() { object1; object2 };
Mit dem Befehl minkowski lässt sich die Minkowski Summe von 2 Objekten bilden. Hierbei wandert ein Objekt z. B. ein Cylinder an der Aussenkante eines zweiten Objekts, z.B. eines Würfel, herum. Die beiden Objekte verschmelzen dabei zu einem Objekt mit abgerundeten Ecken.
Erzeuge einen Quader mit abgerundeten Ecken. Verwende dazu Die Funktionen hull() oder minkowski()
Syntax: variable = wert;
Variablen in OpenSCAD können global oder lokal verwendet werden. Globale Variablen stehen ausserhalb von Modulen, lokale Variablen innerhalb von Modulen.
Syntax: for (i = [start:step:end]) { … }
Mit for Schleifen werden alle Befehle wiederholt ausgeführt. Der Startwert start der Schleife, Die Schrittweite step und der Endwert end bestimmen die Anzahl der Wiederholungen.
Syntax: if (test) { … } else { … }
Mit if bzw else Abfragen können Bedingungen getestet werden. Trifft die Bedingung zu, werden die folgenden Befehle ausgeführt.
Trifft die Bedingung nicht zu werden die Befehle aus dem else Zweig ausgeführt.
Öffne die Datei uebung2.scad aus dem examples Ordner und erzeuge mit Hilfe von for Schleifen eine Stadt aus den vorhandenen Bauwerken.
Bonus Aufgabe: Nutze if else Abfragen um mehr Abwechslung (Zufall) in die Stadt zu bringen
Syntax: module name( parameter ) { action }
OpenSCAD lässt sich mit eigenen Befehlen erweitern. Dazu wird der Befehl module benutzt. Module können Parameter besitzen
Aufrufen lässt sich ein Modul mit:
name( parameter values );
Syntax: include <....scad>
Mit dem Befehl include lassen sich Bibliotheken in eigene Skripte einbinden. Bibliotheken sind nichts anderes als SCAD Skripte. Es gibt diverse Bibliotheken zu allen möglichen Schwerpunkten wie z.B.:
Gewinde, Gehäuse, Round Anything, etc.
Nähere Infos zu Bibliotheken finden sich unter https://openscad.org/libraries.html
Syntax: use <....scad>
Mit dem Befehl use lassen sich ähnlich wie mit include Bibliotheken in eigene Skripte einbinden. Der einzige Unterschied zu include ist:
Bei use werden nur Module und Funktionen aus der Bibliothek übernommen. Include übernimmt alles.
Einige OpenSCAD Beispiel Bibliotheken:
Wie kommen nun die Parameter in das Customizer Fenster, um damit ein Modell zu parametrisieren? Ganz einfach: Sie werden am Anfang des Skripts vor dem ersten Modul als globale Variablen definiert und tauchen dadurch automatisch im Customizer auf.
Das Aussehen der Customizer Variablen kann mit Kommentaren hinter der Variable beeinflusst werden:
value = 0; // [0,1,2,3,4]
value = 1; // [start:step:end]
value = true;
value = 1.0; // .1
value = [0,90,-90];
Erzeuge aus einem deiner Beispiel Sketche ein parametrisierbares Objekt, das mit dem Customizer verändert werden kann.