OpenSCAD Benutzerhandbuch/2D-Objekte
Alle 2D-Grundformen können mit 3D-Transformationen bearbeitet werden. Meistens werden sie als Basis für eine 3D-Extrusion genutzt. Obwohl sie eigentlich unendlich dünn sind, werden sie in der Vorschau mit einer Dicke von 1 Einheit dargestellt.
Hinweis: Wenn du versuchst, mit difference() etwas von einem 3D-Objekt abzuziehen, das aus einer 2D-Form stammt, kann das zu unerwarteten Ergebnissen beim Rendern führen.
square
[Bearbeiten]Erzeugt ein Quadrat oder Rechteck im ersten Quadranten. Ist "center = true", wird das Quadrat am Ursprung zentriert. Die Parameternamen sind optional, wenn die Argumente in der hier gezeigten Reihenfolge übergeben werden.
square(size = [x, y], center = true/false);
square(size = x , center = true/false);
- Parameter:
- size
- Einzelwert → Quadrat mit dieser Seitenlänge
- 2-Werte-Array "[x,y]" → Rechteck mit Breite x und Höhe y
- center
- false (Standard): Liegt im 1. Quadranten, eine Ecke bei (0,0)
- true: Am Punkt (0,0) zentriert
- size
Standardwert:
square(); // entspricht: square(size = [1, 1], center = false);
- Beispiele:
Äquivalente Schreibweisen für dieses Beispiel:
square(size = 10);
square(10);
square([10,10]);
square(10,false);
square([10,10],false);
square([10,10],center=false);
square(size = [10, 10], center = false);
square(center = false,size = [10, 10]);
Äquivalente Schreibweisen für dieses Beispiel:
square([20,10],true);
a=[20,10];square(a,true);
circle
[Bearbeiten]Erzeugt einen Kreis am Ursprung. Alle Parameter außer "r" müssen benannt werden.
circle(r=radius | d=durchmesser);
- Parameter
- r : Radius des Kreises. Nur bei "r" ist der Name optional.
- Die Auflösung richtet sich nach der Größe und den Variablen "$fa" oder "$fs".
- r : Radius des Kreises. Nur bei "r" ist der Name optional.
- Für einen kleinen, hochauflösenden Kreis kannst du entweder einen großen Kreis erzeugen und ihn verkleinern – oder direkt "$fn" setzen.
- Hinweis: Diese Beispiele übertreffen oft die Auflösung von 3D-Druckern und Bildschirmen!
scale([1/100, 1/100, 1/100]) circle(200); // Kreis mit Radius 2, hohe Auflösung
circle(2, $fn=50); // Alternative Methode
- d : Durchmesser (nur in Versionen ab 2014.03 verfügbar)
- $fa : Minimaler Winkel (in Grad) pro Segment
- $fs : Minimale Bogenlänge pro Segment
- $fn : Feste Anzahl der Segmente für 360°. Werte ≥ 3 überschreiben "$fa" und "$fs".
- Werden diese verwendet, müssen sie als benannte Parameter übergeben. Mehr dazu hier.
Standardwert:
circle(); // entspricht: circle($fn = 0, $fa = 12, $fs = 2, r = 1);
Äquivalente Schreibweisen für dieses Beispiel:
circle(10);
circle(r=10);
circle(d=20);
circle(d=2+9*2);
Ellipsen
[Bearbeiten]Eine Ellipse entsteht aus einem Kreis, indem du mit scale() oder resize() die x- und y-Ausdehnung unterschiedlich machst.
Siehe OpenSCAD User Manual/Transformations.
Äquivalente Schreibweisen für dieses Beispiel:
resize([30,10]) circle(d=20);
scale([1.5,.5]) circle(d=20);
Regelmäßige Vielecke
[Bearbeiten]Ein regelmäßiges Vieleck mit mindestens 3 Seiten lässt sich mit circle() erzeugen, indem du "$fn" auf die gewünschte Seitenzahl setzt. Folgende Codeschnipsel sind äquivalent:
circle(r=1, $fn=4);
module regular_polygon(order = 4, r=1){
angles=[ for (i = [0:order-1]) i*(360/order) ];
coords=[ for (th=angles) [r*cos(th), r*sin(th)] ];
polygon(coords);
}
regular_polygon();
Beide erzeugen dieselbe Form: ein Vieleck, das im Kreis eingeschrieben ist – alle Seiten und Winkel gleich, eine Ecke zeigt in positive x-Richtung. Für unregelmäßige Formen verwende stattdessen das "polygon"-Primitiv.
Beispielskript:
translate([-42, 0]){circle(20,$fn=3);%circle(20,$fn=90);}
translate([ 0, 0]) circle(20,$fn=4);
translate([ 42, 0]) circle(20,$fn=5);
translate([-42,-42]) circle(20,$fn=6);
translate([ 0,-42]) circle(20,$fn=8);
translate([ 42,-42]) circle(20,$fn=12);
color("black"){
translate([-42, 0,1])text("3",7,,center);
translate([ 0, 0,1])text("4",7,,center);
translate([ 42, 0,1])text("5",7,,center);
translate([-42,-42,1])text("6",7,,center);
translate([ 0,-42,1])text("8",7,,center);
translate([ 42,-42,1])text("12",7,,center);
}
polygon
[Bearbeiten]Erzeugt eine beliebige, mehrseitige Form aus einer Liste von x,y-Koordinaten. Das "polygon" ist das mächtigste 2D-Objekt: Es kann alles, was "circle" und "square" können – und noch viel mehr. Dazu gehören auch unregelmäßige Formen mit konkaven und konvexen Kanten sowie Löcher im Inneren.
polygon(points = [ [x, y], ... ], paths = [ [p1, p2, p3..], ...], convexity = N);
- Parameter
- points
- Liste der x,y-Punkte des Polygons – ein Vektor aus 2-elementigen Vektoren.
- Hinweis: Punkte werden von 0 bis n-1 durchnummeriert.
- paths
- Standardfall
- Ohne Angabe werden alle Punkte in der angegebenen Reihenfolge verbunden.
- Einzelner Vektor
- Definiert die Reihenfolge der Punkte (per Index). Kann alle oder nur einige Punkte nutzen und in beliebiger Reihenfolge.
- Mehrere Vektoren
- Erzeugt eine Hauptform und Sekundärformen. Letztere werden von der Hauptform abgezogen (wie bei
difference()). Sie können ganz oder teilweise innerhalb der Hauptform liegen.
- Erzeugt eine Hauptform und Sekundärformen. Letztere werden von der Hauptform abgezogen (wie bei
- Standardfall
- Eine geschlossene Form entsteht automatisch durch Verbindung des letzten Punkts mit dem ersten.
- convexity
- Ganzzahl: Maximale Anzahl der „Einbuchtungen“, also wie oft eine beliebige Linie das Polygon durchqueren kann. Wichtig für die korrekte Darstellung in der Vorschau (siehe unten).
Standardwert:
polygon(); // entspricht: polygon(points = undef, paths = undef, convexity = 1);
Ohne Löcher
[Bearbeiten]Äquivalente Schreibweisen für dieses Beispiel:
polygon(points=[[0,0],[100,0],[130,50],[30,50]]);
polygon([[0,0],[100,0],[130,50],[30,50]], paths=[[0,1,2,3]]);
polygon([[0,0],[100,0],[130,50],[30,50]], [[3,2,1,0]]);
polygon([[0,0],[100,0],[130,50],[30,50]], [[1,0,3,2]]);
a=[[0,0],[100,0],[130,50],[30,50]];
b=[[3,0,1,2]];
polygon(a);
polygon(a,b);
polygon(a,[[2,3,0,1,2]]);
Ein Loch
[Bearbeiten]Äquivalente Schreibweisen für dieses Beispiel:
polygon(points=[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]], paths=[[0,1,2],[3,4,5]],convexity=10);
triangle_points =[[0,0],[100,0],[0,100],[10,10],[80,10],[10,80]];
triangle_paths =[[0,1,2],[3,4,5]];
polygon(triangle_points,triangle_paths,10);
Der erste Pfadvektor "[0,1,2]" wählt die Punkte "[0,0],[100,0],[0,100]" für die Hauptform.
Der zweite Pfadvektor "[3,4,5]" wählt "[10,10],[80,10],[10,80]" für die Sekundärform.
Da die Sekundärform vollständig innerhalb der Hauptform liegt, entsteht ein Objekt mit Loch – ähnlich wie bei difference().
Mehrere Löcher
[Bearbeiten]Vorlage:Requires (wegen Verwendung von concat())
// Beispiel: Polygon mit mehreren Löchern
a0 = [[0,0],[100,0],[130,50],[30,50]]; // Hauptform
b0 = [1,0,3,2];
a1 = [[20,20],[40,20],[30,30]]; // Loch 1
b1 = [4,5,6];
a2 = [[50,20],[60,20],[40,30]]; // Loch 2
b2 = [7,8,9];
a3 = [[65,10],[80,10],[80,40],[65,40]]; // Loch 3
b3 = [10,11,12,13];
a4 = [[98,10],[115,40],[85,40],[85,10]]; // Loch 4
b4 = [14,15,16,17];
a = concat(a0,a1,a2,a3,a4);
b = [b0,b1,b2,b3,b4];
polygon(a,b);
// Alternativ:
polygon(a,[b0,b1,b2,b3,b4]);
3D-Form aus einem Polygon extrudieren
[Bearbeiten]
translate([0,-20,10]) {
rotate([90,180,90]) {
linear_extrude(50) {
polygon(
points = [
//x,y
/*
O .
*/
[-2.8,0],
/*
O__X .
*/
[-7.8,0],
/*
O
\
X__X .
*/
[-15.3633,10.30],
/*
X_______._____O
\
X__X .
*/
[15.3633,10.30],
/*
X_______._______X
\ /
X__X . O
*/
[7.8,0],
/*
X_______._______X
\ /
X__X . O__X
*/
[2.8,0],
/*
X__________.__________X
\ /
\ O /
\ / /
\ / /
X__X . X__X
*/
[5.48858,5.3],
/*
X__________.__________X
\ /
\ O__________X /
\ / /
\ / /
X__X . X__X
*/
[-5.48858,5.3],
]
);
}
}
}
convexity
[Bearbeiten]Der "convexity"-Parameter gibt an, wie oft ein Strahl das Objekt maximal durchdringen kann. Dieser Wert ist nur für die korrekte Darstellung im OpenCSG-Vorschaumodus (F5) relevant – er beeinflusst das finale Rendering nicht.
Das Bild zeigt eine 2D-Form mit "convexity = 2": Der rote Strahl durchquert die Form maximal zweimal (von außen nach innen oder umgekehrt). Bei 3D-Objekten gilt das analog. In den meisten Fällen reicht ein Wert von 10 völlig aus.
import_dxf
[Bearbeiten]en:OpenSCAD_User_Manual/The_OpenSCAD_Language#import import().}}
Liest eine DXF-Datei und erzeugt daraus eine 2D-Form.
Beispiel
linear_extrude(height = 5, center = true, convexity = 10)
import_dxf(file = "example009.dxf", layer = "plate");






