OpenSCAD Benutzerhandbuch/Export
← Import | Handbuch-Inhalt | Befehlsglossar →
Export
[Bearbeiten]Nach dem vollständigen Rendern mit F6 kannst du über das Menü Datei → Exportieren dein Modell in folgende Formate exportieren: STL, OFF, AMF, 3MF, DXF, SVG, CSG, PNG (Bild) oder PDF.
Achte darauf, die Konsolenanzeige auf Fehlermeldungen zu prüfen – besonders beim STL-Export.
- STL, OFF und DXF können später wieder mit
import()geladen werden. - CSG-Dateien lassen sich wie SCAD-Dateien öffnen oder per
include<>einbinden. - PNG-Höhenkarten können mit
surface()importiert werden. - Für SVG und AMF gibt es bereits experimentelle Unterstützung (offene Pull Requests), die aber noch weiterer Tests bedarf.
- Das Dateiformat wird anhand der Dateiendung erkannt – achte also auf korrekte Endungen wie ".stl", ".3mf" usw.
STL Export
[Bearbeiten]Um dein Design als STL-Datei zu exportieren, wähle im Menü Datei → Exportieren → Als STL exportieren... und gib im Dialogfenster einen Dateinamen ein. Vergiss nicht, die Erweiterung ".stl" hinzuzufügen.
Fehlerbehebung:
Nach dem „Kompilieren und Rendern (CGAL)“ (F6) kann in der Konsole stehen:
simple: no
Das ist ein Warnhinweis – dein Modell ist kein gültiger 2-Mannigfaltiger Körper („not a valid 2-manifold“), und kann daher nicht zuverlässig exportiert werden.
Beispiel aus OpenSCAD 2010.02 (Zeile 8):
// Parameters
main_diameter = 70;
main_thickness = 30;
hole_diameter = 5;
num_holes = 3;
hole_radius = main_diameter / 2 - 5; // Inset from edge
difference() {
// Main cylinder
cylinder(d=main_diameter, h=main_thickness, $fn=100);
// Holes
for (i = [0 : 360 / num_holes : 359]) {
angle = i;
x = hole_radius * cos(angle);
y = hole_radius * sin(angle);
translate([x, y, 0])
cylinder(d=hole_diameter, h=main_thickness + 1, $fn=60); // Add height to ensure full cut
}
}
Beim Versuch, dieses Modell als STL zu exportieren, erscheint:
Object isn't a valid 2-manifold! Modify your design..
Ein 2-Mannigfaltiger Körper ist „wasserdicht“ – jede Kante muss genau zwei Flächen verbinden. Es darf keine mehrdeutigen oder offenen Kanten geben.
Problem: Wenn du z. B. einen Quader der Höhe 10 benutzt, um etwas aus einem größeren Quader derselben Höhe 10 auszuschneiden, ist unklar, wem die obere oder untere Fläche „gehört“. Lösung: Der ausschneidende Körper muss etwas länger (oder kürzer) sein, damit der Schnitt eindeutig ist:
difference() {
// Grundkörper
cube(size = [2,2,2]);
// Ausschneidender Körper – leicht verlängert!
# translate([0.5,0.5,-0.5]) {
cube(size = [1,1,3]);
}
}

Ein weiteres, subtileres Beispiel aus dem [OpenSCAD-Forum](http://rocklinux.net/pipermail/openscad/2009-December/000018.html):
module example1() {
cube([20, 20, 20]);
translate([-20, -20, 0]) cube([20, 20, 20]);
cube([50, 50, 5], center = true);
}
module example2() {
cube([20.1, 20.1, 20]);
translate([-20, -20, 0]) cube([20.1, 20.1, 20]);
cube([50, 50, 5], center = true);
}
"example1" ist kein gültiger 2-Mannigfaltiger Körper, weil sich die beiden kleinen Würfel nur an einer Kante berühren, aber nicht schneiden. Die gemeinsame Kante gehört keiner eindeutigen Fläche – das verletzt die 2-Mannigfaltigkeitsregel.
"example2" ist gültig, weil die Würfel sich leicht überlappen – jede Kante verbindet nun genau zwei Flächen.
➡️ Merke: Beim Ausschneiden ("difference") muss der subtrahierte Körper stets über den Grundkörper hinausragen – auch wenn es nur minimal ist. ([Quelle: I Heart Robotics – „Manifold Space and Time“](http://www.iheartrobotics.com/2010/01/openscad-tip-manifold-space-and-time.html))
Ein weiteres häufiges Problem: Zwei durch "difference" erzeugte Flächen berühren sich direkt – das führt ebenfalls zu einem „non-manifold“-Fehler:
difference () {
cube ([20,10,10]);
translate ([10,0,0]) cube (10);
}
difference () {
cube ([20,10,10]);
cube (10);
}
Im Gegensatz dazu ist das bloße Berühren von Oberflächen ohne boolesche Operationen problemlos:
translate ([10,0,0]) cube (10);
cube (10);