411 REFERENCE · Wikibooks
OpenSCAD User Manual/STL Export
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
__NOTOC__
Export
After rendering with F6, the "File --> Export" menu can be used to export as STL, OFF, AMF, 3MF, DXF, SVG, CSG, PNG (image), or PDF.
Be sure to check the console window for error messages.
STL, OFF and DXF are imported using import()
CSG can be imported using include<> or loaded like an SCAD file
PNG can be imported using surface()
There are open pull requests for SVG and AMF, which require a bit more work/testing
The file suffix is used to determine type
STL Export
To export your design, select "Export as STL..." from the "File --> Export" menu, then enter a filename in the ensuing dialog box. Don't forget to add the ".stl" extension.
Trouble shooting:
After compile and render CGAL (F6), you may see that your design is simple: no. That's bad news.
See line 8 in the following output from OpenSCAD 2010.02:
// 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
}
}
When you try to export this to .STL, this message appears:
Object isn't a valid 2-manifold! Modify your design..
"Manifold" means that it is "water tight" and that there are no holes in the geometry.
In a valid 2-manifold each edge must connect exactly two facets. That means that the program must be able to connect a face with an object. E.g. if you use a cube of height 10 to carve out something from a wider cube of height 10, it is not clear to which cube the top or the bottom belongs. So make the small extracting cube a bit "longer" (or "shorter"):
difference() {
// original
cube (size = [2,2,2]);
// object that carves out
# translate ([0.5,0.5,-0.5]) {
cube (size = [1,1,3]);
}
}
frame|none|Correct use of difference
Here is a more tricky little example taken from the OpenSCAD Forum (retrieved 15:13, 22 March 2010 (UTC)):
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 would render like this:
frame|none|A not valid 2-manifold cube (simple = no)
The example1 module is not a valid 2-manifold because both cubes are
sharing one edge. They touch each other but do not intersect.
Example2 is a valid 2-manifold because there is an intersection. Now the construct meets the 2-manifold constraint stipulating that each edge must connect exactly two facets.
Pieces you are subtracting must extend past the original part. (OpenSCAD Tip: Manifold Space and Time, retrieved 18:40, 22 March 2010 (UTC)).
For reference, another situation that causes the design to be non-exportable is when two faces that are each the result of a subtraction touch. Then the error message comes up.
difference () {
cube ([20,10,10]);
translate ([10,0,0]) cube (10);
}
difference () {
cube ([20,10,10]);
cube (10);
}
simply touching surfaces is correctly handled.
translate ([10,0,0]) cube (10);
cube (10);