Voraussetzungen
Du brauchst OpenSCAD und die Grundlagen aus Teil 3 des Kurses.
In den bisherigen Teilen haben wir grundlegende OpenSCAD-Syntax, Variablen und die wichtigsten 3D-Grundkörper kennengelernt.
Bisher wurden unsere Körper allerdings immer am Ursprung des Koordinatensystems erzeugt.
Für echte Konstruktionen reicht das natürlich nicht aus.
Wir müssen einzelne Elemente gezielt positionieren und drehen können.
Dafür stellt OpenSCAD zwei besonders wichtige Transformationen bereit:
translate();
rotate();
Lernziel: Nach dieser Lektion kannst du Objekte entlang der X-, Y- und Z-Achse verschieben, um diese Achsen drehen und mehrere Grundkörper gezielt zu einem ersten Bauteil anordnen.
Warum müssen Objekte verschoben werden?
Erzeugen wir mehrere Grundkörper ohne weitere Angaben:
cube([40, 30, 10]);
cylinder(h=20, d=15, $fn=64);
sphere(d=20, $fn=64);
werden alle am Ursprung erzeugt.
Dadurch können sich die Körper gegenseitig überlagern.
Damit wir diese Körper gezielt anordnen können, verwenden wir translate().
Objekte mit translate() verschieben
Die allgemeine Schreibweise lautet:
translate([X, Y, Z])
objekt();
Die drei Werte stehen für die Verschiebung entlang der drei Raumachsen.
Beispiel:
translate([30, 0, 0])
cube([20, 20, 10]);
Der Quader wird um 30 mm in positive X-Richtung verschoben.
Verschieben in X-Richtung
translate([30, 0, 0])
cube([20, 20, 10]);
Bedeutung:
| Achse | Verschiebung |
|---|---|
| X | 30 mm |
| Y | 0 mm |
| Z | 0 mm |
Verschieben in Y-Richtung
translate([0, 30, 0])
cube([20, 20, 10]);
Der Körper wird um 30 mm entlang der Y-Achse verschoben.
Verschieben in Z-Richtung
translate([0, 0, 20])
cube([20, 20, 10]);
Der Körper wird um 20 mm nach oben verschoben.
Negative Werte
Auch negative Koordinaten sind möglich.
translate([-30, 0, 0])
cube([20, 20, 10]);
Dadurch bewegt sich der Körper in negative X-Richtung.
Dasselbe gilt für Y und Z.
Mehrere Grundkörper anordnen
Jetzt können wir die in Teil 3 kennengelernten Grundkörper gezielt verteilen:
translate([-30, 0, 0])
cube([20, 20, 10]);
translate([0, 0, 0])
cylinder(h=20, d=15, $fn=64);
translate([30, 0, 10])
sphere(d=20, $fn=64);
Damit können wir erstmals mehrere Geometrien unabhängig voneinander positionieren.
Positionen parametrisch definieren
Auch Positionen müssen nicht als feste Zahlen angegeben werden.
Beispiel:
abstand = 30;
translate([-abstand, 0, 0])
cube([20, 20, 10]);
translate([abstand, 0, 10])
sphere(d=20, $fn=64);
Ändern wir:
abstand = 50;
werden beide Körper automatisch weiter auseinander positioniert.
So bleiben auch Positionsangaben parametrisch.
Objekte mit rotate() drehen
Mit rotate() können Körper um die drei Raumachsen gedreht werden.
Die allgemeine Schreibweise lautet:
rotate([X, Y, Z])
objekt();
Die Werte werden in Grad angegeben.
Beispiel:
rotate([0, 0, 45])
cube([40, 10, 5]);
Der Quader wird um 45 Grad um die Z-Achse gedreht.
Drehung um die X-Achse
Ein Zylinder wird standardmäßig entlang der Z-Achse erzeugt.
cylinder(h=30, d=10, $fn=64);
Mit:
rotate([90, 0, 0])
cylinder(h=30, d=10, $fn=64);
wird der Zylinder um 90 Grad um die X-Achse gedreht.
Drehung um die Y-Achse
rotate([0, 90, 0])
cylinder(h=30, d=10, $fn=64);
Auch damit lässt sich ein Zylinder horizontal ausrichten, allerdings in einer anderen Richtung.
Drehung um die Z-Achse
rotate([0, 0, 45])
cube([40, 10, 5]);
Diese Drehung erfolgt innerhalb der XY-Ebene.
Gerade bei Platten, Armen oder diagonalen Verstrebungen wird das später häufig benötigt.
Die Reihenfolge ist wichtig
Transformationen können ineinander verschachtelt werden.
Beispiel:
translate([30, 0, 0])
rotate([0, 0, 45])
cube([40, 10, 5]);
OpenSCAD wertet diesen Aufbau von innen nach außen aus.
Das bedeutet:
-
Quader erzeugen
-
Quader drehen
-
gedrehten Quader verschieben
Man kann sich den Aufbau also so vorstellen:
translate
└── rotate
└── cube
Warum ist die Reihenfolge wichtig?
Vergleichen wir:
translate([30, 0, 0])
rotate([0, 0, 45])
cube([40, 10, 5]);
mit:
rotate([0, 0, 45])
translate([30, 0, 0])
cube([40, 10, 5]);
Obwohl dieselben Werte verwendet werden, kann das Ergebnis unterschiedlich sein.
Im zweiten Beispiel wird zunächst der Quader verschoben und anschließend diese komplette Position um den Ursprung gedreht.
Praxisprojekt: einfache Halterung
Jetzt verwenden wir translate(), um eine erste einfache Halterung aufzubauen.
Sie besteht aus:
-
einer Grundplatte
-
einem senkrechten Steg
Die Grundplatte erhält:
| Parameter | Wert |
|---|---|
| Breite | 60 mm |
| Tiefe | 40 mm |
| Höhe | 5 mm |
Der Steg erhält:
| Parameter | Wert |
|---|---|
| Breite | 10 mm |
| Tiefe | 40 mm |
| Höhe | 30 mm |
Grundplatte
platte_b = 60;
platte_t = 40;
platte_h = 5;
cube([platte_b, platte_t, platte_h]);
Steg positionieren
Der Steg soll auf der Oberseite der Grundplatte stehen.
steg_b = 10;
steg_t = 40;
steg_h = 30;
translate([25, 0, platte_h])
cube([steg_b, steg_t, steg_h]);
Für die Z-Position verwenden wir direkt:
platte_h
Damit steht der Steg immer auf der Oberseite der Grundplatte – auch wenn deren Dicke später verändert wird.
Den Steg automatisch zentrieren
Statt die X-Position fest mit 25 anzugeben, können wir sie berechnen:
steg_x = (platte_b - steg_b) / 2;
Dann verwenden wir:
translate([steg_x, 0, platte_h])
cube([steg_b, steg_t, steg_h]);
Der vollständige Code lautet:
// -------------------------
// Grundplatte
// -------------------------
platte_b = 60;
platte_t = 40;
platte_h = 5;
// -------------------------
// Steg
// -------------------------
steg_b = 10;
steg_t = 40;
steg_h = 30;
// Position berechnen
steg_x = (platte_b - steg_b) / 2;
// -------------------------
// Modell
// -------------------------
cube([platte_b, platte_t, platte_h]);
translate([steg_x, 0, platte_h])
cube([steg_b, steg_t, steg_h]);
Jetzt bleibt der Steg automatisch mittig positioniert.
Warum ist diese Berechnung sinnvoll?
Angenommen, wir ändern:
platte_b = 100;
Dann wird die Position des Stegs automatisch neu berechnet.
Wir müssen keine Position von Hand verändern.
Das ist eines der grundlegenden Prinzipien parametrischer Konstruktion:
Ein Wert sollte möglichst aus bereits vorhandenen Parametern berechnet werden, wenn zwischen diesen Werten eine logische Beziehung besteht.
Mitmach-Aufgabe
Erstelle eine einfache parametrische Halterung.
Grundplatte
| Parameter | Wert |
|---|---|
| Breite | 80 mm |
| Tiefe | 50 mm |
| Höhe | 5 mm |
Steg
| Parameter | Wert |
|---|---|
| Breite | 10 mm |
| Tiefe | 50 mm |
| Höhe | 35 mm |
Der Steg soll:
-
auf der Oberseite der Grundplatte stehen
-
in X-Richtung automatisch mittig positioniert werden
Versuche die Position aus den vorhandenen Parametern zu berechnen.
Musterlösung
// -------------------------
// Grundplatte
// -------------------------
platte_b = 80;
platte_t = 50;
platte_h = 5;
// -------------------------
// Steg
// -------------------------
steg_b = 10;
steg_t = 50;
steg_h = 35;
// -------------------------
// Berechnungen
// -------------------------
steg_x = (platte_b - steg_b) / 2;
// -------------------------
// Modell
// -------------------------
cube([platte_b, platte_t, platte_h]);
translate([steg_x, 0, platte_h])
cube([steg_b, steg_t, steg_h]);
Teste anschließend beispielsweise:
platte_b = 100;
Der Steg sollte weiterhin automatisch mittig auf der Grundplatte stehen.
Was haben wir gelernt?
Nach dieser Lektion kannst du Objekte gezielt im dreidimensionalen Raum anordnen.
Du kennst:
translate();
rotate();
und weißt:
-
translate([X,Y,Z])verschiebt einen Körper -
positive und negative Werte sind möglich
-
rotate([X,Y,Z])dreht einen Körper -
Drehwinkel werden in Grad angegeben
-
Transformationen lassen sich verschachteln
-
OpenSCAD wertet verschachtelte Transformationen von innen nach außen aus
-
Positionen können aus Parametern berechnet werden
-
Bauteile können dadurch automatisch korrekt ausgerichtet bleiben
Damit können wir erstmals mehrere Grundkörper sinnvoll zu einer Konstruktion anordnen.
Im nächsten Teil
Im fünften Teil lernen wir zwei weitere Transformationen kennen:
scale();
mirror();
Mit scale() können wir Modelle vergrößern, verkleinern oder gezielt in einzelnen Richtungen strecken.
Mit mirror() können wir Geometrien spiegeln.
Das ist besonders praktisch für symmetrische Bauteile.
Passendes Cheatsheet
Im Cheatsheet „Transformationen und Koordinaten“ findest du die Befehle dieser Lektion kompakt zum Nachschlagen. Du kannst das Cheatsheet auch direkt als PDF herunterladen.
