Zum Inhalt springen

OpenSCAD Benutzerhandbuch/Export

Aus Wikibooks

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]);	
	}
}
Korrekte Verwendung von "difference()"

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);