Open SCAD
Open SCAD
Open SCAD
org/wiki/OpenSCAD_User_Manual/Print_version
Contents
1 Introduction
2 Contents
3 Chapter 1 -- First Steps
3.1 Compiling and rendering our first model
3.2 See also
3.3 There is no semicolon following the translate command
3.4 CGAL Surfaces
3.5 CGAL Grid Only
3.6 The OpenCSG View
3.7 The thrown together view
4 Chapter 2 -- The OpenSCAD User Interface
4.1 User Interface
4.1.1 Viewing area
4.1.2 Console window
4.1.3 Text editor
4.2 View navigation
4.3 View setup
4.3.1 Render modes
4.3.1.1 OpenCSG (F9)
4.3.1.1.1 Implementation Details
4.3.1.2 CGAL (Surfaces and Grid, F10 and F11)
4.3.1.2.1 Implementation Details
4.3.2 View options
4.3.2.1 Show Edges (Ctrl+1)
1 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
2 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
3 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
4 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
5 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
6 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Introduction
OpenSCAD is a software for creating solid 3D CAD objects.
It is free software (http://www.gnu.org/philosophy/free-sw.html) and available for GNU/Linux (http://www.gnu.org/), Microsoft Windows and Mac OS X.
Unlike most free software for creating 3D models (such as the well-known application Blender), OpenSCAD does not focus on the artistic aspects of 3D
modelling, but instead focuses on the CAD aspects. So it might be the application you are looking for when you are planning to create 3D models of machine
parts, but probably is not what you are looking for when you are more interested in creating computer-animated movies or organic life-like models.
OpenSCAD, unlike many CAD products, is not an interactive modeler. Instead it is something like a 2D/3D-compiler that reads in a program file that describes
the object and renders the model from this file. This gives you (the designer) full control over the modelling process. This enables you to easily change any step
in the modelling process. This enables you to make designs that are defined by configurable parameters.
OpenSCAD has two main operating modes, Preview and Render. Preview is relatively fast using 3D graphics and the computer's GPU, but is an approximation
of the model and can produce artifacts; Preview uses OpenCSG (http://opencsg.org/) and OpenGL. Render generates exact geometry and a fully tessellated
mesh, it is not an approximation and as such it is often a lengthy process, taking minutes or hours for larger designs; Render uses CGAL as its geometry engine.
Autocad DXF files are used as the data exchange format for 2D outlines. In addition to 2D paths for extrusion it is also possible to read design parameters from
DXF files. Besides DXF files OpenSCAD can read and create 3D models in the STL and OFF file formats.
OpenSCAD can be downloaded from http://openscad.org/. You may find extra information in the mailing list (http://rocklinux.net/mailman/listinfo/openscad).
People who don't want to (or can't) install new software on their computer may be able to use OpenJSCAD ( http://OpenJSCAD.org/ ), a port of OpenSCAD that
runs in a web browser, if your browser supports WebGL.
7 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Contents
OpenSCAD User Manual without The OpenSCAD Language Reference
1. First Steps
2. The OpenSCAD User Interface
3. Commented Example Projects
4. Export
5. Using an external Editor with OpenSCAD
6. Using OpenSCAD in a command line environment
7. Building OpenSCAD from Sources
1. Building on Linux/UNIX
2. Cross-compiling for Windows on Linux or Mac OS X
3. Building on Windows
4. Building on Mac OS X
8. Frequently Asked Questions
9. Libraries
10. Glossary
8 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
To create our cuboid we will use the openSCAD editor window to type our one line command:
cube([2,3,4]);
The cuboid can now be compiled and rendered by pressing F5 or F6 Function key on your keyboard while the OpenSCAD editor has focus. You should now see
your object in the preview window as shown above.
See also
Positioning an object
9 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Open one of the many examples that come with OpenSCAD (File, Examples). Or you can copy and paste this simple
example into the OpenSCAD window:
Usage example 1
difference() {
cube(30, center=true);
sphere(20);
}
translate([0, 0, 30]) { OpenSCAD after starting
cylinder(h=40, r=10);
}
Then press F5 to get a graphical preview of what you typed (or press F6 to get a graphical view).
1. Drag with left mouse button to rotate the view. The bottom line will change the rotate values.
2. Drag with an other mouse button (or control-drag under OSX) to translate (move) the view. The bottom line will
change translate values.
3. Use the mouse scroll to zoom in and out. Alternatively you can use the + and - keys, or right-drag with the mouse OpenSCAD after pasting the example
while pressing a shift key (or control-shift-drag under OSX). The Viewport line at the bottom of the window will code and pressing F5
show a change in the distance value.
We have already seen how to create a simple cuboid. Our next task is to attempt to use the translate positioning command to place an identical cuboid next to the
existing cuboid. Type the data as shown below. There are a total of 4 lines of code. Press F5 or F6 function key when done to see the preview.
cube([2,3,4]);
translate([3,0,0]) {
cube([2,3,4]);
}
10 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Notice that there is no semicolon following the translate command. This is because the translate command relates to the following object. If the semicolon was
in place, then the effect of the position translation would end, and the second cuboid would be placed at the same position as the first cuboid. We can change the
color of an object by giving it RGB values. Instead of the traditional RGB values from 0 to 255 floating point values are used from 0.0 to 1.0. Note! Changing
the colors only works in Preview mode (F5). Render mode (F6) does not currently support color.
color([1,0,0]) cube([2,3,4]);
translate([3,0,0])
color([0,1,0]) cube([2,3,4]);
translate([6,0,0])
color([0,0,1]) cube([2,3,4]);
11 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Color names can be used in the 2011.12 version (and newer). The names are the same used for Web colors (http://en.wikipedia.org/wiki/Web_colors). For
example: color("red") cube();
If you think of the entire command as a sentence, then color() is an "adjective" that describes the "object" of the sentence (which is a "noun"). In this case, the
object is the cube() to be created. The adjective is placed before the noun in the sentence, like so: color() cube();. In the same way, translate() can be
thought of as a "verb" that acts upon the object, and is placed like this: translate() color() cube();. The following code will produce the same result:
translate([6,0,0])
{
color([0,0,1]) // notice that there is NO semicolon
cube([2,3,4]); // notice the semicolon is at the end of all related commands
}
The "View" menu at the top of the OpenSCAD application window provides a variety of view options in the OpenSCAD model view window.
CGAL Surfaces
The surface view is the initial model view that appears when the model code is first rendered. You can get back to this view by choosing "View >> CGAL
Surfaces".
12 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
The Grid Only view presents only the "scaffolding" beneath the surface, also known as a wireframe. Think of the Eiffel Tower.
A wire frame is a visual presentation of a three dimensional or physical object. Using a wire frame model allows visualization of the underlying design structure
of a 3D model. Since wireframe renderings are relatively simple and fast to calculate, they are often used in cases where a high screen frame rate is needed (for
instance, when working with a particularly complex 3D model, or in real-time systems that model exterior phenomena). When greater graphical detail is desired,
surface textures can be added automatically after completion of the initial rendering of the wireframe. This allows the designer to quickly review changes or
rotate the object to new desired views without long delays associated with more realistic rendering. The wire frame format is also well suited and widely used in
programming tool paths for DNC (Direct Numerical Control) machine tools. Wireframe models are also used as the input for CAM (computer-aided
manufacturing). Wireframe is the most abstract and least realistic of the three main CAD models. This method of modelling consists only of lines, points and
curves defining the edges of an object. (From Wikipedia: http://en.wikipedia.org/wiki/Wire-frame_model)
13 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
User Interface
The user interface of OpenSCAD has three parts
Viewing area
Preview and rendering output goes into the viewing area. Using the Show Axes menu entry an indicator for the Main Window of OpenSCAD with a
coordinate axes can be enabled. small program generating the
OpenSCAD-Logo.
Console window
Status information, warnings and errors are displayed in the console window.
Text editor
The built-in text editor provides basic editing features like text search & replace and also supports syntax highlighting. There are predefined color schemes
which can be selected in the Preferences dialog.
14 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
View navigation
The viewing area is navigated primarily using the mouse:
Dragging with the left mouse button rotates the view along the axes of the viewing area. It preserves the vertical axis' direction.
Dragging with the left mouse button when the shift key is pressed rotates the view along the vertical axis and the axis pointing towards the user.
Dragging with the right mouse button moves the viewing area.
For zooming, there are four ways:
using the scroll wheel
dragging with the middle mouse button
dragging with the right or middle mouse button and the shift key pressed
the keys Ctrl and ] and Ctrl and [
first used by Cabe
Rotation can be reset using the shortcut Ctrl+0. Movement can be reset using the shortcut Ctrl+P.
15 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
View setup
The viewing area can be configured to use different rendering methods and other options using the View menu. Most of the options described here are available
using shortcuts as well.
Render modes
OpenCSG (F9)
This method produces instantaneous results, but has low frame rates when working with highly nonconvex objects.
Note that selecting the OpenCSG mode using F9 will switch to the last generated OpenCSG view, but will not re-evaluate the source code. You may want to use
the Compile function (F5, found in the Design menu) to re-evaluate the source code, build the OpenCSG objects and then switch to OpenCSG view.
Implementation Details
In OpenCSG mode, the OpenCSG library (http://opencsg.org/) is used for generating the visible model. This library uses advanced OpenGL features (2.0) like
the Z buffer and does not require an explicit description of the resulting mesh instead, it tracks how objects are to be combined. For example, when rendering a
spherical dent in a cube, it will first render the cube on the graphics card and then render the sphere, but instead of using the Z buffer to hide the parts of the
sphere that are covered by the cube, it will render only those parts of the sphere, visually resulting in a cube with a spherical dent.
This method might need some time when first used with a new program, but will then have higher framerates.
As before with OpenCSG, F10 and F11 only enable CGAL display mode and don't update the underlying objects; for that, use the Compile and Render function
(F6, found in the Design menu).
To combine the benefits of those two display methods, you can selectively wrap parts of your program in a render function and force them to be baken into a
mesh even with OpenCSG mode enabled.
Implementation Details
The acronym CGAL refers to The Open Source Computational Geometry Algorithms Library.
16 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
In CGAL mode, the CGAL library is used to compute the mesh of the root object, which is then displayed using simple OpenGL.
View options
If Show Edges is enabled, both OpenCSG and CGAL mode will render edges as well as faces, CGAL will
even show vertices. In CGAL grid mode, this option has no effect.
Enabling this option shows the difference between OpenCSG and CGAL quite clearly: While in CGAL
mode you see an edge drawn everywhere it "belongs", OpenCSG will not show edges resulting from
boolean operations this is because they were never explicitly calculated but are just where one object's Z
clipping begins or ends.
If Show Axes is enabled, the origin of the global coordinate system will be indicated by an orthogonal axes
indicator. Additionally, a smaller axes indicator with axes names will be shown in the lower left corner of The difference between the CGAL and OpenCSG
the viewing area. The smaller axes indicator is marked x, y, z and coloured red, green, blue respectively. approaches can be seen at edges created by boolean
operations.
Show Crosshairs (Ctrl+3)
If Show Crosshairs is enabled, the center of the viewport will be indicated by four lines pointing in the room diagonal directions of the global coordinate system.
This is useful when aligning the viewing area to a particular point in the model to keep it centered on screen during rotation.
Animation
The Animate option adds an animation bar to the lower edge of the screen. As soon as FPS and Steps are set (reasonable values to begin with are 10 and 100,
respectively), the current Time is incremented by 1/Steps, FPS times per second, until it reaches 1, when it wraps back to 0.
Every time Time is changed, the program is re-evaluated with the variable $t set to the current time. Read more about how $t is used in section
Other_Language_Features.
View alignment
17 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
The menu items Top, Bottom, , Diagonal and Center (Ctrl+4, Ctrl+5, , Ctrl+0, Ctrl+P) align the view to the global coordinate system.
Top, Bottom, Left, Right, Front and Back align it in parallel to the axes, the Diagonal option aligns it diagonally as it is aligned when OpenSCAD starts.
The Center option will put the coordinate center in the middle of the screen (but not rotate the view).
By default, the view is in Perspective mode, meaning that distances far away from the viewer will look shorter, as it is common with eyes or cameras. When the
view mode is changed to Orthogonal, visible distances will not depend on the camera distance (the view will simulate a camera in infinite distance with infinite
focal length). This is especially useful in combination with the Top etc. options described above, as this will result in a 2D image similar to what one would see
in an engineering drawing.
Dodecahedron
Bounding Box
18 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
// Rather kludgy module for determining bounding box from intersecting projections
module BoundingBox()
{
intersection()
{
translate([0,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false) intersection()
{
rotate([0,90,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([0,-90,0])
children(0);
rotate([90,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([-90,0,0])
children(0);
}
rotate([90,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([-90,0,0])
intersection()
{
rotate([0,90,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([0,-90,0]) Bounding Box applied to an Ellipsoid
children(0);
rotate([0,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([0,0,0])
children(0);
}
}
}
19 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
20 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
linear_extrude_fs(height=20);
21 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
square([12,9]);
}
linear_extrude_ft(height=30);
22 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
translate([0,-50,0])
linear_extrude_ftfs(height=50,isteps=3);
linear_extrude_ftfs(height=50,isteps=3,slices=20);
translate([0,50,0])
linear_extrude_ftfs(height=50);
Rocket
23 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
// a cylinder
rocket_d = 30; // 3 cm wide
rocket_r = rocket_d / 2;
rocket_h = 100; // 10 cm tall
cylinder(d = rocket_d, h = rocket_h);
//
// the head :
// a cone
head_d = 40; // 4 cm wide
head_r = head_d / 2;
head_h = 40; // 4 cm tall
// prepare a triangle
tri_base = head_r;
tri_height = head_h;
tri_points = [
[0,0],
[tri_base,0],
[0,tri_height]];
// rotation around X-axis and then 360 around Z-axis
// put it on top of rocket's body
translate([0,0,rocket_h])
rotate_extrude(angle = 360)
polygon(tri_points);
//
// the wings :
// 3x triangles
wing_w = 2; // 2 mm thick
many = 3; // 3x wings
wing_l = 40; // length
wing_h = 40; // height
wing_points = [[0,0],[wing_l,0],[0,wing_h]];
module wing() { A rocket using rotate_extrude()
// let it a bit inside the main body
in_by = 1; // 1 mm
// set it up on the rocket's perimeter
translate([rocket_r - in_by,0,0])
// set it upright by rotating around X-axis
rotate([90,0,0])
// set some width and center it
linear_extrude(height = wing_w,center = true)
// make a triangle
polygon(wing_points);
}
for (i = [0:many-1])
rotate([0,0,360/many*i])
wing();
OpenSCAD can not only be used as a GUI, but also handles command line arguments. Its usage line says:
24 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
25 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Export options
When called with the -o option, OpenSCAD will not start the GUI, but execute the given file and export the to the output_file in a format depending on the
extension (.stl / .off / .dxf, .csg).
Some versions use -s/-d/-o to determine the output file format instead; check with "openscad --help".
If the option -d is given in addition to an export command, all files accessed while building the mesh are written in the argument of -d in the syntax of a
Makefile.
For at least 2015.03-2+, specifying the extension .echo causes openscad to produce a text file containing error messages and the output of all echo() calls in
filename as they would appear in the console window visible in the GUI. Multiple output files are not supported, so using this option you cannot also obtain the
model that would have normally been generated.
For 2013.05+, the option to output a .png image was added. There are two types of cameras available for the generation of images.
The first camera type is a 'gimbal' camera that uses Euler angles, translation, and a camera distance, like OpenSCAD's GUI viewport display at the bottom of the
OpenSCAD window.
The second camera type is a 'vector' camera, with an 'eye' camera location vector and a 'lookat' center vector.
--imgsize chooses the .png dimensions and --projection chooses orthogonal or perspective, as in the GUI.
By default, cmdline .png output uses Preview mode (f5) with OpenCSG. For some situations it will be desirable instead to use the full render, with CGAL. This
is done by adding '--render' as an option.
Constants
In order to pre-define variables, use the -D option. It can be given repeatedly. Each occurrence of -D must be followed by an assignment. Unlike normal
OpenSCAD assignments, these assignments don't define variables, but constants, which can not be changed inside the program, and can thus be used to
26 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
If you want to assign the -D variable to another variable, the -D variable MUST be initialised in the main .scad program
The right hand sides can be arbitrary OpenSCAD expressions, including mathematical operations and strings. Be aware that strings have to be enclosed in
quotes, which have to be escaped from the shell. To render a model that takes a quality parameter with the value "production", one has to run
In a complex build process, some files required by an OpenSCAD file might be currently missing, but can be generated, for example if they are defined in a
Makefile. If OpenSCAD is given the option -m make, it will start make file the first time it tries to access a missing file.
If it closes without processing, check to set the PATH by adding openscad directory to:
27 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Start - Settings - Control Panel - System - Advanced tab - Environment Variables - System Variables, select Path, then click Edit.
Makefile example
The -d and -m options only make sense together. (-m without -d would not consider modified dependencies when building exports, -d without -m would require
the files to be already built for the first run that generates the dependencies.)
Here is an example of a basic Makefile that creates an .stl file from an .scad file of the same name:
%.stl: %.scad
openscad -m make -o $@ -d [email protected] $<
When make my_example.stl is run for the first time, it finds no .deps files, and will just depend on my_example.scad; since my_example.stl is not yet preset,
it will be created unconditionally. If OpenSCAD finds missing files, it will call make to build them, and it will list all used files in my_example.stl.deps.
When make my_example.stl is called subsequently, it will find and include my_example.stl.deps and check if any of the files listed there, including
my_example.scad, changed since my_example.stl was built, based on their time stamps. Only if that is the case, it will build my_example.stl again.
Automatic targets
When building similar .stl files from a single .scad file, there is a way to automate that too:
all: ${TARGETS}
# auto-generated .scad files with .deps make make re-build always. keeping the
# scad files solves this problem. (explanations are welcome.)
.SECONDARY: $(shell echo "${TARGETS}" | sed 's/\.stl/.scad/g')
28 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
%.scad:
echo -n 'use <base.scad>\n$*();' > $@
%.stl: %.scad
openscad -m make -o $@ -d [email protected] $<
All objects that are supposed to be exported automatically have to be defined in base.scad in an own module with their future file name (without the ".stl"), and
have a comment like "// make me" in the line of the module definition. The "TARGETS=" line picks these out of the base file and creates the file names. These
will be built when make all (or make, for short) is called.
As the convention from the last example is to create the .stl files from .scad files of the same base name, for each of these files, an .scad file has to be generated.
This is done in the "%.scad:" paragraph; my_example.scad will be a very simple OpenSCAD file:
use <base.scad>
my_example();
The ".SECONDARY" line is there to keep make from deleting the generated .scad files. If it deleted it, it would not be able to automatically determine which files
need no rebuild any more; please post ideas about what exactly goes wrong there (or how to fix it better) on the talk page!
Windows notes
On Windows, openscad.com should be called from the command line as a wrapper for openscad.exe. This is because Openscad uses the 'devenv' solution to the
Command-Line/GUI output issue. Typing 'openscad' at the cmd.exe prompt will, by default, call the .com program wrapper.
MacOS notes
On MacOS the binary is normally hidden inside the App folder. If OpenSCAD is installed in the global Applications folder, it can be called from command line
like in the following example that just shows the OpenSCAD version:
macbook:/$ /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD -v
OpenSCAD version 2013.06
29 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Dodecahedron
Bounding Box
// Rather kludgy module for determining bounding box from intersecting projections
module BoundingBox()
{
intersection()
30 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
{
translate([0,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false) intersection()
{
rotate([0,90,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([0,-90,0])
children(0);
rotate([90,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([-90,0,0])
children(0);
}
rotate([90,0,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([-90,0,0])
intersection()
{
rotate([0,90,0])
linear_extrude(height = 1000, center = true, convexity = 10, twist = 0)
projection(cut=false)
rotate([0,-90,0])
children(0);
31 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
linear_extrude_fs(height=20);
32 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
linear_extrude_ft(height=30);
33 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
34 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
translate([0,-50,0])
linear_extrude_ftfs(height=50,isteps=3);
linear_extrude_ftfs(height=50,isteps=3,slices=20);
translate([0,50,0])
linear_extrude_ftfs(height=50);
Rocket
35 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
tri_points = [
[0,0],
[tri_base,0],
[0,tri_height]];
// rotation around X-axis and then 360 around Z-axis
// put it on top of rocket's body
translate([0,0,rocket_h])
rotate_extrude(angle = 360)
polygon(tri_points);
//
// the wings :
// 3x triangles
wing_w = 2; // 2 mm thick
many = 3; // 3x wings
wing_l = 40; // length
wing_h = 40; // height
wing_points = [[0,0],[wing_l,0],[0,wing_h]];
module wing() {
// let it a bit inside the main body
in_by = 1; // 1 mm
// set it up on the rocket's perimeter
translate([rocket_r - in_by,0,0])
// set it upright by rotating around X-axis
rotate([90,0,0])
// set some width and center it
linear_extrude(height = wing_w,center = true)
// make a triangle
polygon(wing_points);
}
for (i = [0:many-1])
rotate([0,0,360/many*i])
wing();
36 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Chapter 4 -- Export
OpenSCAD User Manual
Export
After rendering with F6, the "File --> Export" menu can be used to export as STL, OFF, AMF, DXF, SVG, CSG OR PNG (Image).
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.
37 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Vertices: 22
Halfedges: 70
Edges: 35
Halffacets: 32
Facets: 16
Volumes: 2
Total rendering time: 0 hours, 0 minutes, 0 seconds
Rendering finished.
When you try to export this to .STL you will get a message like:
"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]);
}
}
38 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Here is a more tricky little example taken from the OpenSCAD (http://rocklinux.net/pipermail/openscad/2009-December/000018.html) 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);
}
39 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
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 (http://www.iheartrobotics.com/2010/01/openscad-tip-
manifold-space-and-time.html), 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]);
40 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
cube (10);
}
With the import() and extrusion modules it is possible to convert 2D objects read from DXF files to 3D objects. See also 2D to 3D Extrusion.
Linear Extrude
Rotate Extrude
rotate_extrude(convexity = 10)
import (file = "example009.dxf", layer = "fan_side", origin = fan_side_center);
Inkscape is an open source drawing program. Tutorials for transferring 2d DXF drawings from Inkscape to OpenSCAD are available here:
41 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
10/29/2014, see link below registration window. Note: As of 6/17/15 only works with version 0.48.5 or earlier of inkscape, due to a breaking change made
in 0.91.)
http://www.instructables.com/id/Convert-any-2D-image-to-a-3D-object-using-OpenSCAD/ (Convert any 2D image to a 3D object using OpenSCAD)
Currently, OpenSCAD only supports DXF as a graphics format for 2D graphics. Other common formats are PS/EPS, SVG and AI.
PS/EPS
The pstoedit (http://www.pstoedit.net/) program can convert between various vector graphics formats. OpenSCAD needs the -polyaslines option passed to the
dxf output plugin to understand the file. The -mm option sets one mm to be one unit in the dxf; include this if you use one unit in OpenSCAD as equal to one
millimeter. The -dt options instructs pstoedit to render texts, which is usually what you want if you include text. (If the rendered text's resolution in terms of
polygon count is too low, the easiest solution is to scape up the eps before converting; if you know a more elegant solution, please add it to the example.)
SVG
Inkscape (http://inkscape.org) can convert SVG to EPS. Then pstoedit can convert the EPS to DXF.
Makefile automation
The conversion can be automated using the make system; put the following lines in your Makefile:
%.eps: %.svg
inkscape -E $@ $<
%.dxf: %.eps
pstoedit -dt -f dxf:-polyaslines\ -mm $< $@
42 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
The first line specifies which dxf files are to be generated when make is called in the current directory. The second paragraph specifies how to convert a file
ending in .svg to a file ending in .eps, and the third from .eps to .dxf.
A more complete makefile could autogenerate dxf files from the any svg in the folder. In which case, put the following lines into your Makefile:
all: $(DXF)
%.eps: %.svg
inkscape -E $*.eps $*.svg
%.dxf: %.eps
pstoedit -dt -f "dxf: -polyaslines -mm" $*.eps $*.dxf
clean-dxf:
rm -f $(DXF)
clean-eps:
rm -f $(EPS)
It's still possible to call make filename.dxf to build a particular file, but this code also allows for (re)building of all dxf files in a folder just by calling make or
make all.
This code is also universal enough that it's possible to put the code in a single file and symlink every makefile in any directory that has svg files for dxf
conversion by running:
ln -s /path/to/this/svg_to_dxf_makefile makefile
AI (Adobe Illustrator)
Although Adobe Illustrator CC/CC.2014 allows you to export illustrations as DXF (and select DXF format versions as early as 12), it will use DXF entities that
are not supported by OpenSCAD, such as POLYLINE and SPLINE.
43 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Since pstoedit does not natively support Adobe Illustrator files, one alternative is to use EXDXF (http://www.baby-universe.co.jp/en/plug-in/products/exdxf-
pro/) which is an Adobe Illustrator plug-in (30 free trial exports and then you have to pay $90 to register the plugin).
Before exporting, it is recommended that you ensure that your Artboard is the same dimensions as the component you are exporting. Although EXDXF provides
you with numerous options when exporting to DXF the most important option for OpenSCAD compliance is to set Line Conversion to Line and Arc.
OpenSCAD doesn't always provide information about the issues it encountered with a DXF import. If this happens, select Design | Flush Caches and then
Design | Reload and Compile.
44 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Once the feature is activated, just load the scad file within OpenSCAD as usual ("File->Open.."). After that, open the
scad file in your favorite editor too. Edit and work on the scad file within the external editor. Whenever the file is saved
to disk (from within the external editor), OpenSCAD will recognize the file change and automatically recompiles
accordingly.
The internal editor can be hidden by minimizing the frame with the mouse or by selecting "View->Hide editor".
Atom: There is a Language OpenSCAD package (https://atom.io/packages/language-openscad) for Atom (https://atom.io) that provides highlighting and
snippets.
Emacs: OpenSCAD provides an emacs mode (https://github.com/openscad/openscad/blob/master/contrib/scad-mode.el) for OpenSCAD files. Use the
link or install via emacs package management (ELPA) with the MELPA (https://melpa.org) repository.
Geany: cobra18t (http://www.thingiverse.com/cobra18t/overview) provides a Geany syntax file (http://www.thingiverse.com/thing:263620) for
OpenSCAD. See Instructions tab in Thingiverse to install it.
Gedit: Andy Turner (https://github.com/AndrewJamesTurner) provides a Gedit syntax file (https://github.com/AndrewJamesTurner/openSCAD-lang-file)
for OpenSCAD.
45 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Kate: nerd256 (http://www.thingiverse.com/nerd256/overview) provides a kate syntax file (http://www.thingiverse.com/thing:29505) for OpenSCAD. See
Instructions tab in Thingiverse to install it. You could create also a kate External tool to open OpenSCAD with the current file with script
openscad %directory/%filename
Notepad++: TheHeadlessSourceMan (http://www.thingiverse.com/TheHeadlessSourceMan/overview) provides a Notepad++ syntax file
(http://www.thingiverse.com/thing:280319) for OpenSCAD. See Instructions tab in Thingiverse to install it.
OpenSCADitor: OpenSCAD-dedicated editor (http://rcs-34.net//software/openscaditor/index.php)
Sublime: Syntax highlighting and Customizer support (http://www.thingiverse.com/thing:67566)
Textmate: Syntax highlighting and Customizer support (http://www.thingiverse.com/thing:67566)
VIM: vim.org provides a VIM syntax file (http://www.vim.org/scripts/script.php?script_id=3556) for OpenSCAD.
Visual Studio Code: Free, open-source code editor (https://code.visualstudio.com/) Install the scad extension for syntax highlighting
Additional benefits
Besides using your editor of choice, this solutions enables the flexible usage of multi-monitor set-ups. One can have one monitor set-up to depict the 3D object
on the entire screen and a second monitor for the editor and other tools.
46 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
OpenSCAD can not only be used as a GUI, but also handles command line arguments. Its usage line says:
47 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
[ --camera=translatex,y,z,rotx,y,z,dist | \
--camera=eyex,y,z,centerx,y,z ] \
[ --imgsize=width,height ] [ --projection=(o)rtho|(p)ersp] \
filename
Export options
When called with the -o option, OpenSCAD will not start the GUI, but execute the given file and export the to the output_file in a format depending on the
extension (.stl / .off / .dxf, .csg).
Some versions use -s/-d/-o to determine the output file format instead; check with "openscad --help".
If the option -d is given in addition to an export command, all files accessed while building the mesh are written in the argument of -d in the syntax of a
Makefile.
For at least 2015.03-2+, specifying the extension .echo causes openscad to produce a text file containing error messages and the output of all echo() calls in
filename as they would appear in the console window visible in the GUI. Multiple output files are not supported, so using this option you cannot also obtain the
model that would have normally been generated.
For 2013.05+, the option to output a .png image was added. There are two types of cameras available for the generation of images.
The first camera type is a 'gimbal' camera that uses Euler angles, translation, and a camera distance, like OpenSCAD's GUI viewport display at the bottom of the
OpenSCAD window.
48 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
The second camera type is a 'vector' camera, with an 'eye' camera location vector and a 'lookat' center vector.
--imgsize chooses the .png dimensions and --projection chooses orthogonal or perspective, as in the GUI.
By default, cmdline .png output uses Preview mode (f5) with OpenCSG. For some situations it will be desirable instead to use the full render, with CGAL. This
is done by adding '--render' as an option.
Constants
In order to pre-define variables, use the -D option. It can be given repeatedly. Each occurrence of -D must be followed by an assignment. Unlike normal
OpenSCAD assignments, these assignments don't define variables, but constants, which can not be changed inside the program, and can thus be used to
overwrite values defined in the program at export time.
If you want to assign the -D variable to another variable, the -D variable MUST be initialised in the main .scad program
The right hand sides can be arbitrary OpenSCAD expressions, including mathematical operations and strings. Be aware that strings have to be enclosed in
quotes, which have to be escaped from the shell. To render a model that takes a quality parameter with the value "production", one has to run
In a complex build process, some files required by an OpenSCAD file might be currently missing, but can be generated, for example if they are defined in a
Makefile. If OpenSCAD is given the option -m make, it will start make file the first time it tries to access a missing file.
49 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
If it closes without processing, check to set the PATH by adding openscad directory to:
Start - Settings - Control Panel - System - Advanced tab - Environment Variables - System Variables, select Path, then click Edit.
Makefile example
The -d and -m options only make sense together. (-m without -d would not consider modified dependencies when building exports, -d without -m would require
the files to be already built for the first run that generates the dependencies.)
Here is an example of a basic Makefile that creates an .stl file from an .scad file of the same name:
%.stl: %.scad
openscad -m make -o $@ -d [email protected] $<
When make my_example.stl is run for the first time, it finds no .deps files, and will just depend on my_example.scad; since my_example.stl is not yet preset,
it will be created unconditionally. If OpenSCAD finds missing files, it will call make to build them, and it will list all used files in my_example.stl.deps.
When make my_example.stl is called subsequently, it will find and include my_example.stl.deps and check if any of the files listed there, including
my_example.scad, changed since my_example.stl was built, based on their time stamps. Only if that is the case, it will build my_example.stl again.
50 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Automatic targets
When building similar .stl files from a single .scad file, there is a way to automate that too:
all: ${TARGETS}
# auto-generated .scad files with .deps make make re-build always. keeping the
# scad files solves this problem. (explanations are welcome.)
.SECONDARY: $(shell echo "${TARGETS}" | sed 's/\.stl/.scad/g')
%.scad:
echo -n 'use <base.scad>\n$*();' > $@
%.stl: %.scad
openscad -m make -o $@ -d [email protected] $<
All objects that are supposed to be exported automatically have to be defined in base.scad in an own module with their future file name (without the ".stl"), and
have a comment like "// make me" in the line of the module definition. The "TARGETS=" line picks these out of the base file and creates the file names. These
will be built when make all (or make, for short) is called.
As the convention from the last example is to create the .stl files from .scad files of the same base name, for each of these files, an .scad file has to be generated.
This is done in the "%.scad:" paragraph; my_example.scad will be a very simple OpenSCAD file:
use <base.scad>
my_example();
The ".SECONDARY" line is there to keep make from deleting the generated .scad files. If it deleted it, it would not be able to automatically determine which files
need no rebuild any more; please post ideas about what exactly goes wrong there (or how to fix it better) on the talk page!
Windows notes
On Windows, openscad.com should be called from the command line as a wrapper for openscad.exe. This is because Openscad uses the 'devenv' solution to the
Command-Line/GUI output issue. Typing 'openscad' at the cmd.exe prompt will, by default, call the .com program wrapper.
51 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
MacOS notes
On MacOS the binary is normally hidden inside the App folder. If OpenSCAD is installed in the global Applications folder, it can be called from command line
like in the following example that just shows the OpenSCAD version:
macbook:/$ /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD -v
OpenSCAD version 2013.06
52 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
For Ubuntu systems you can also try chrysn's Ubuntu packages at his launchpad PPA (https://launchpad.net/~chrysn/+archive/openscad), or you can just
copy/paste the following onto the command line:
His repositories for OpenSCAD and OpenCSG are here (http://archive.amsuess.com/pool/contrib/o/openscad/) and here (http://archive.amsuess.com/pool/main
/o/opencsg/).
There is also a generic linux binary package at http://www.openscad.org that can be unpacked and run from within most linux systems. It is self contained and
includes the required libraries.
cd ~/
git clone https://github.com/openscad/openscad.git
cd openscad
Then get the MCAD library, which is now included with OpenSCAD binary distributions
53 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Installing dependencies
OpenSCAD uses a large number of third-party libraries and tools. These are called dependencies. An up to date list of dependencies can usually be found in the
README.md in openscad's main directory, here: https://github.com/openscad/openscad/ A brief list follows:
Eigen, GCC or Clang, Bison, Flex, CGAL, Qt, GMP, MPFR, boost, cmake, OpenCSG, GLEW, QScintilla, glib2, harfbuzz, freetype2, pkg-config, fontconfig
Prepackaged dependencies
Most systems are set up to install pre-built dependencies using a 'package manager', such as apt on ubuntu or pacman on Arch Linux. OpenSCAD comes with a
'helper script' that will attempt to automatically run your package manager for you and download and install these pre-built packages if they exist. Note you
must be running as root and/or using sudo to try this. Note that these scripts will likely fail on Sun, Solaris, AIX, IRIX, etc (skip to the 'building dependencies'
section below).
./scripts/uni-get-dependencies.sh
Verifying dependencies
After attempting to install dependencies, you should double check them. Exit any shells and perhaps reboot.
Now verify that the version numbers are up to those listed in openscad/README.md file. Also verify that no packages were accidentally missed. For example
open a shell and run 'flex --version' or 'gcc --version'. These are good sanity checks to make sure your environment is proper.
OpenSCAD comes with another helper script that attempts to automate this process on many Linux and BSD systems (Again, it won't work on Sun/Solaris
/Irix/AIX/etc).
./scripts/check-dependencies.sh
If you cannot verify that your dependencies are installed properly and of a sufficient version, then you may have to install some 'by hand' (see the section below
on building your own dependencies).
54 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
If your system has all the proper versions of dependencies, then continue to the 'Building OpenSCAD' section.
On systems that lack updated dependency libraries or tools, you will need to download each and build it and install it by hand. You can do this by downloading
and following installation instructions for each package separately. However OpenSCAD comes with scripts that attempt to automate this process on Linux and
BSD systems, by installing everything into a folder created under $HOME/openscad_deps. This script will not build typical development dependencies like
X11, Qt4, gcc, bash etc. But it will attempt things like OpenCSG, CGAL, boost, etc.
To run the automated script, first set up the environment variables (if you don't use bash, replace "source" with a single ".")
source scripts/setenv-unibuild.sh
./scripts/uni-build-dependencies.sh
(If you only need CGAL or OpenCSG, you can just run ' ./scripts/uni-build-dependencies.sh cgal' or opencsg and it will only build a single library.)
The complete download and build process can take several hours, depending on your network connection speed and system speed. It is recommended to have at
least 2 Gigabyte of free disk space to do the full dependency build. Each time you log into a new shell and wish to re-compile OpenSCAD you need to re-run
the 'source scripts/setenv-unibuild.sh' script.
After completion, return to the section above on 'verifying dependencies' to see if they installed correctly.
Once you have installed your dependencies, you can build OpenSCAD.
You can also install OpenSCAD to /usr/local/ if you wish. The 'openscad' binary will be put under /usr/local/bin, the libraries and examples will be under
something like /usr/local/share/openscad possibly depending on your system. Note that if you have previously installed a binary linux package of openscad, you
55 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
should take care to delete /usr/local/lib/openscad and /usr/local/share/openscad because they are not the same paths as what the standard qmake-built 'install'
target uses.
If you prefer not to install you can run "./openscad" directly whilst still in the ~/openscad directory.
Experimental
CONFIG+=experimental
qmake
make -B
The -B is only required once (when you have changed the config).
The experimental features are disabled by default, even when explicitly build as experimental build.
When you successfully build, you find a "features" tab in the preferences, where you can enable individual experimental features.
56 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
OpenSCAD comes with over 740 regression tests. To build and run them, it is recommended to first build the GUI
version of OpenSCAD by following the steps above, including the downloading of MCAD. Then, from the same login,
run these commands:
cd tests
mkdir build && cd build
cmake ..
make
ctest -C All
The file 'openscad/doc/testing.txt' has more information. Full test logs are under tests/build/Testing/Temporary. A
pretty-printed index.html web view of the tests can be found under a machine-specific subdirectory thereof and opened
with a browser.
Troubleshooting
If you encounter any errors when building, please file an issue report at https://github.com/openscad/openscad/issues/ .
Note that CGAL depends on Boost and OpenCSG depends on GLEW - interdependencies like this can really cause issues if there are stray libraries in unusual
places.
Another source of confusion can come from running from within an 'unclean shell'. Make sure that you don't have LD_LIBRARY_PATH set to point to any old
libraries in any strange places. Also don't mix a Mingw windows cross build with your linux build process - they use different environment variables and may
conflict.
If for some reason the recommended build process above fails to work with OpenCSG, please file an issue on the OpenSCAD github. In the meantime, you can
try building it yourself.
57 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
wget http://www.opencsg.org/OpenCSG-1.3.2.tar.gz
sudo apt-get purge libopencsg-dev libopencsg1 # or your system's equivalent
tar -xvf OpenCSG-1.3.2.tar.gz
cd OpenCSG-1.3.2
# edit the Makefile and remove 'example'
make
sudo cp -d lib/lib* $HOME/openscad_deps/lib/
sudo cp include/opencsg.h $HOME/openscad_deps/include/
Note: on Debian-based systems (such as Ubuntu), you can add the 'install' target to the OpenCSG Makefile, and then use checkinstall to create a
clean .deb package for install/removal/upgrade. Add this target to Makefile:
install:
# !! THESE LINES PREFIXED WITH ONE TAB, NOT SPACES !!
cp -d lib/lib* /usr/local/lib/
cp include/opencsg.h /usr/local/include/
ldconfig
Then:
If this happens, you can try to compile CGAL yourself. It is recommended to install to $HOME/openscad_deps and otherwise follow the build process as
outlined above.
This can happen if you run out of virtual memory, which means all of physical RAM as well as virtual swap space from the disk. See below under "horribly
slow" for reasons. If you are non-root, there are a few things you can try. The first is to use the 'clang' compiler, as it uses much less RAM than gcc. The second
thing is to edit the Makefile and remove the '-g' and '-pipe' flags from the compiler flags section.
If, on the other hand, you are root, then you can expand your swap space. On Linux this is pretty standard procedure and easily found in a web search. Basically
58 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
you do these steps (after verifying you have no file named /swapfile already):
For permanent swap setup in /etc/fstab, instructions are easily found through web search. If you are building on an SSD (solid state drive) machine the speed of
a swapfile will allow a very reasonable build time.
It is recommended to have at least 1.5 Gbyte of RAM to compile OpenSCAD. There are a few workarounds in case you don't. The first is to use the
experimental support for the Clang Compiler (described below) as Clang uses much less RAM than GCC. Another workaround is to edit the Makefile generated
by qmake and search/replace the optimization flags (-O2) with -O1 or blank, and to remove any '-g' debug flags from the compiler line, as well as '-pipe'.
If you have plenty of RAM and just want to speed up the build, you can try a paralell multicore build with
make -jx
Where 'x' is the number of cores you want to use. Remember you need x times the amount of RAM to avoid possible disk thrashing.
The reason the build is slow is because OpenSCAD uses template libraries like CGAL, Boost, and Eigen, which use large amounts of RAM to compile -
especially CGAL. GCC may take up 1.5 Gigabytes of RAM on some systems during the build of certain CGAL modules. There is more information at
StackOverflow.com (http://stackoverflow.com/questions/3634203/why-are-templates-so-slow-to-compile).
BSD issues
The build instructions above are designed to work unchanged on FreeBSD and NetBSD. However the BSDs typically require special environment variables set
up to build any QT project - you can set them up automatically by running
source ./scripts/setenv-unibuild.sh
NetBSD 5.x, requires a patched version of CGAL. It is recommended to upgrade to NetBSD 6 instead as it has all dependencies available from pkgin. NetBSD
also requires the X Sets to be installed when the system was created (or added later (http://ghantoos.org/2009/05/12/my-first-shot-of-netbsd/)).
59 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
On OpenBSD it may fail to build after running out of RAM. OpenSCAD requires at least 1 Gigabyte to build with GCC. You may have need to be a user with
'staff' level access or otherwise alter required system parameters. The 'dependency build' sequence has also not been ported to OpenBSD so you will have to rely
on the standard OpenBSD system package tools (in other words you have to have root).
The OpenSCAD dependency builds have been mainly focused on Linux and BSD systems like Debian or FreeBSD. The 'helper scripts' likely will fail on other
types of Un*x. Furthermore the OpenSCAD build system files (qmake .pro files for the GUI, cmake CMakeFiles.txt for the test suite) have not been tested
thoroughly on non-Linux non-BSD systems. Extensive work may be required to get a working build on such systems.
Headless server
The test suite will try to automatically detect if you have an X11 DISPLAY environment variable set. If not, it will try to automatically start Xvfb or Xvnc
(virtual X framebuffers) if they are available.
If you want to run these servers manually, you can attempt the following:
Alternatively:
There are some cases where Xvfb/Xvnc won't work. Some older versions of Xvfb may fail and crash without warning. Sometimes Xvfb/Xvnc have been built
without GLX (OpenGL) support and OpenSCAD won't be able to generate any images.
Image-based tests takes a long time, they fail, and the log says 'return -11'
Imagemagick may have crashed while comparing the expected images to the test-run generated (actual) images. You can try using the alternate ImageMagick
comparison method by by erasing CMakeCache, and re-running cmake with -DCOMPARATOR=ncc. This will enable the Normalized Cross Comparison method
which is more stable, but possibly less accurate and may give false positives or negatives.
Testing images fails with 'morphology not found" for ImageMagick in the log
60 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Your version of imagemagick is old. Upgrade imagemagick, or pass -DCOMPARATOR=old to cmake. The comparison will be of lowered reliability.
It isn't advised to move them because the build is using RPATH hard coded into the openscad binary. You may try to workaround by setting the
LD_LIBRARY_PATH environment variable to place yourpath/lib first in the list of paths it searches. If all else fails, you can re-run the entire dependency build
process but export the BASEDIR environment variable to your desired location, before you run the script to set environment variables.
After you have built the dependencies you can free up space by removing the $BASEDIR/src directory - where $BASEDIR defaults to $HOME/openscad_deps.
Preferences
The following paragraph describes an easy way to setup a development environment for OpenSCAD in Ubuntu 11.04. After executing the following steps QT
Creator can be used to graphically start developing/debugging OpenSCAD.
61 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
# mkdir ~/src
# cd ~/src
# git clone https://github.com/openscad/openscad.git
# cd ~/src/openscad
# qmake
# make
Just open the project file openscad.pro (CTRL+O) in QT Creator and hit the build all (CTRL+SHIFT+B) and run button (CTRL+R).
There is experimental support for building with the Clang compiler under linux. Clang is faster, uses less RAM, and has different error messages than GCC. To
use it, first of all you will need CGAL of at least version 4.0.2, as prior versions have a bug that makes clang unusable. Then, run this script before you build
OpenSCAD.
Clang support depends on your system's QT installation having a clang enabled qmake.conf file. For example, on Ubuntu, this is under /usr/share/qt4/mkspecs
/unsupported/linux-clang/qmake.conf. BSD clang-building may require a good deal of fiddling and is untested, although eventually it is planned to move in this
direction as the BSDs (not to mention OSX) are moving towards favoring clang as their main compiler. OpenSCAD includes convenience scripts to cross-build
Windows installer binaries using the MXE system (http://mxe.cc). If you wish to use them, you can first install the MXE Requirements such as cmake, perl,
scons, using your system's package manager (click to view a complete list of requirements) (http://mxe.cc/#requirements). Then you can perform the following
commands to download OpenSCAD source and build a windows installer:
The x-build-dependencies process takes several hours, mostly to cross-build QT. It also requires several gigabytes of disk space. If you have multiple CPUs you
62 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
can speed up things by running export NUMCPU=x before running the dependency build script. By default it builds the dependencies in
$HOME/openscad_deps/mxe. You can override the mxe installation path by setting the BASEDIR environment variable before running the scripts. The
OpenSCAD binaries are built into a separate build path, openscad/mingw32.
Note that if you want to then build linux binaries, you should log out of your shell, and log back in. The 'setenv' scripts, as of early 2013, required a 'clean' shell
environment to work.
If you wish to cross-build manually, please follow the steps below and/or consult the release-common.sh source code.
Setup
The easiest way to cross-compile OpenSCAD for Windows on Linux or Mac is to use mxe (M cross environment). You will need to install git to get it. Once
you have git, navigate to where you want to keep the mxe files in a terminal window and run:
Requirements
The requirements to cross-compile for Windows are just the requirements of mxe. They are listed, along with a command for installing them here (http://mxe.cc
/#requirements). You don't need to type 'make'; this will make everything and take up >10 GB of diskspace. You can instead follow the next step to compile only
what's needed for openscad.
Now that you have the requirements for mxe installed, you can build OpenSCAD's dependencies (CGAL, Opencsg, MPFR, and Eigen2). Just open a terminal
window, navigate to your mxe installation and run:
63 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
This will take a few hours, because it has to build things like gcc, qt, and boost. Just go calibrate your printer or something while you wait. To speed things up,
you might want do something like "make -j 4 JOBS=2" for parallel building. See the mxe tutorial (http://mxe.cc/#tutorial) for more details.
Optional: If you want to build an installer, you need to install the nullsoft installer system. It should be in your package manager, called "nsis".
Build OpenSCAD
Now that all the requirements have been met, all that remains is to build OpenSCAD itself. Open a terminal window and enter:
You need to create a symbolic link here for the build system to find the libraries:
When that is finished, you will have openscad.exe in ./release and you can build an installer with it as described in the instructions for building with Microsoft
Visual C++, described here (http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows#Building_an_installer).
The difference is that instead of right-clicking on the *.nsi file you will run:
64 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
makensis installer.nsis
Note that as of early 2013, OpenSCAD's 'scripts/release-common.sh' automatically uses the version of nsis that comes with the MXE cross build system, so you
may wish to investigate the release-common.sh source code to see how it works, if you have troubles. This is a set of instructions for building OpenSCAD with
the Microsoft Visual C++ compilers. It has not been used since circa 2012 and is unlikely to work properly. It is maintained here for historical reference
purposes.
A newer build is being attempted with the Msys2 system, please see http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Microsoft_Windows
---
This MSVC build is as static as reasonable, with no external DLL dependencies that are not shipped with Windows
Note: It was last tested on the Dec 2011 build. Newer checkouts of OpenSCAD may not build correctly or require extensive modification to compile under
MSVC. OpenSCAD releases of 2012 were typically cross-compiled from linux using the Mingw & MXE system. See Cross-compiling for Windows on Linux
or Mac OS X.
Downloads
start by downloading:
65 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Installing
Install Visual Studio
No need for siverlight or mssql express
You can use a virtual-CD program like MagicDisc to mount the ISO file and install without using a CD
Install QT
Install to default location C:\Qt\4.7.2\
Install Git
Click Run Git and included Unix tools from the Windows Command Prompt despite the big red letters warning you not to.
Install Cmake
Check the 'Add cmake to the system path for the current user' checkbox
Install to default location C:\Program Files\CMake 2.8
Install Boost
Select the VC++ 9.0 vs2008 radio
Check the 'multithreaded static runtime' checkbox only
Install into C:\boost_1_46_1\
Install CGAL
Note - CGAL 3.9 fixes several bugs in earlier versions of CGAL, but CGAL 3.9 will not compile under MSVC without extensive patching. Please
keep that in mind when compiling OpenSCAD with MSVC - there may be bugs due to the outdated version of CGAL required to use MSVC.
Note its not a binary distribution, just an installer that installs the source.
No need for CGAL Examples and Demos
Make sure mpfr and gmp precompiled libs is checked
The installer wants you to put this in C:\Program Files\CGAL-3.7\ I used C:\CGAL-3.7\
Make sure CGAL_DIR environment checked.
Install MinGW
Make sure you select the MSYS Basic System under components
Extract downloaded win32_gmp_mpfr.zip file to C:\win32_gmp_mpfr\
Replace the mpfr and gmp .h files in CGAL with the ones from win32_gmp_mpfr
Delete, or move to a temp folder, all files in CGAL-3.7\auxiliary\gmp\include folder
Copy all the .h files in C:\win32_gmp_mpfr\gmp\Win32\Release to CGAL-3.7\auxiliary\gmp\include
Copy all the .h files in C:\win32_gmp_mpfr\mpfr\Win32\Release to CGAL-3.7\auxiliary\gmp\include
Replace the mpfr and gmp libs in CGAL with the ones from win32_gmp_mpfr
Delete, or move to a temp folder, all (06/20/2011 libmpfr-4.lib is needed 7/19/11 - i didnt need it) files in CGAL-3.7\auxiliary\gmp\lib folder.
Copy C:\win32_gmp_mpfr\gmp\Win32\Release\gmp.lib to CGAL-3.7\auxiliary\gmp\lib
66 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Open "Git Bash" (or MingW Shell) (the installer may have put a shortcut on your desktop). This launches a command line window.
Type cd c: to change the current directory.
Type git clone git://github.com/openscad/openscad.git This will put OpenSCAD source into C:\openscad\
C:\eigen2\
C:\glew-1.5.8\
C:\OpenCSG-1.3.2\
.tgz can be extracted with tar -zxvf from the MingW shell, or Windows tools like 7-zip. Rename and move sub-directories if needed. I.e eigen-eigen-
0938af7840b0 should become c:\eigen2, with the files like COPYING and CMakeLists.txt directly under it. c:\glew-1.5.8 should have 'include' and 'lib' directly
under it.
Compiling Dependencies
For compilation I use the QT Development Command Prompt
Qt
Qt needs to be recompiled to get a static C runtime build. To do so, open the command prompt and do:
Configure will take several minutes to finish processing. After it is done, open up the file Qt\4.7.2\mkspecs\win32-msvc2008\qmake.conf and replace every
67 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
nmake
This takes a very, very long time. Have a nap. Get something to eat. On a Pentium 4, 2.8GHZ CPU with 1 Gigabyte RAM, Windows XP, it took more than 7
hours, (that was with -O2 turned off)
CGAL
cd C:\CGAL-3.7\
set BOOST_ROOT=C:\boost_1_46_1\
cmake .
Now edit the CMakeCache.txt file. Replace every instance of /MD with /MT . Now, look for a line like this:
CMAKE_BUILD_TYPE:STRING=Debug
cmake .
It should scroll by, watch for lines saying "--Building static libraries" and "--Build type: Release" to confirm the proper settings. Also look for /MT
in the CXXFLAGS line. When it's done, you can do the build:
nmake
You should now have a CGAL-vc90-mt-s.lib file under C:\CGAL-3.7\lib . If not, see Troubleshooting, below.
OpenCSG
cd C:\OpenCSG-1.3.2
68 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
vcexpress OpenCSG.sln
Substitute devenv for vcexpress if you are not using the express version
Build OpenCSG library. You can use the GUI Build/Build menu (the Examples project might fail, but glew and OpenCSG should succeed). Alternatively you
can use the command line:
The cmd /c bit is needed otherwise you will be returned to the shell immediately and have to Wait for build process to complete (there will be no indication that
this is happening appart from in task manager)
OpenSCAD
Bison/Flex: Open the mingw shell and type mingw-get install msys-bison. Then do the same for flex: mingw-get install msys-flex
69 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
cd C:\openscad
set INCLUDE=%INCLUDE%C:\CGAL-3.7\include;C:\CGAL-3.7\auxiliary\gmp\include;
set INCLUDE=%INCLUDE%C:\boost_1_46_1;C:\glew-1.5.8\include;C:\OpenCSG-1.3.2\include;C:\eigen2
set LIB=%LIB%C:\CGAL-3.7\lib;C:\CGAL-3.7\auxiliary\gmp\lib;
set LIB=%LIB%C:\boost_1_46_1\lib;C:\glew-1.5.8\lib;C:\OpenCSG-1.3.2\lib
qmake
nmake -f Makefile.Release
Wait for the nmake to end. There are usually a lot of non-fatal warnings about the linker. On success, there will be an openscad.exe file in the release folder.
Enjoy.
Building an installer
Download and install NSIS from http://nsis.sourceforge.net/Download
Put the FileAssociation.nsh macro from http://nsis.sourceforge.net/File_Association in the NSIS Include directory, C:\Program Files\NSIS\Include
Run 'git submodule init' and 'git submodule update' to download the MCAD system (https://github.com/elmom/MCAD) into the openscad/libraries folder.
Copy the OpenSCAD "libraries" and "examples" directory into the "release" directory
Copy OpenSCAD's "scripts/installer.nsi" to the "release" directory.
Right-click on the file and compile it with NSIS. It will spit out a nice, easy installer. Enjoy.
70 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
This should produce a number of test .exe files in your directory. Now run
ctest
Troubleshooting
Linker errors
If you have errors during linking, the first step is to improve debug logging, and redirect to a file. Open Openscad.pro and uncomment this line:
QMAKE_LFLAGS += -VERBOSE
Now rerun
You can use a program like 'less' (search with '/') or wordpad to review the log.
To debug these errors, you must understand basics about Windows linking. Windows links to its standard C library with basic C functions like malloc(). But
there are four different ways to do this, as follows:
All of the libraries that are link together in a final executable must be compiled with the same type of linking to the standard C library. Otherwise, you get link
errors like, "LNK2005 - XXX is already defined in YYY". But how can you track down which library wasn't linked properly? 1. Look at the log, and 2.
dumpbin.exe
dumpbin.exe
71 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
dumpbin.exe can help you determine what type of linking your .lib or .obj files were created with. For example, dumpbin.exe /all CGAL.lib | find /i
"DEFAULTLIB" will give you a list of DEFAULTLIB symbols inside of CGAL.lib. Look for LIBCMT, LIBCMTD, MSVCRT, or MSVCRTD. That will tell you,
according to the above table, whether it was built Static Release, Static Debug, DLL Release, or DLL Debug. (DLL, of course means Dynamic Link Library in
this conversation.) This can help you track down, for example, linker errors about conflicting symbols in LIBCMT and LIBCMTD.
dumpbin.exe can also help you understand errors involving unresolved external symbols. For example, if you get an error about unresolved external symbol
___GLEW_NV_occlusion_query, but your VERBOSE error log says the program linked in glew32.lib, then you can dumpbin.exe /all glew32.lib | find /i
"occlusion" to see if the symbol is actually there. You may see a mangled symbol, with __impl, which gives you another clue with which you can google. In
this particular example, glew32s.lib (s=static) should have been linked instead of glew32.lib.
CGAL
CGAL-vc90-mt-s.lib
After compilation, it is possible that you might get a file named CGAL-vc90-mt.lib or CGAL-vc90-mt-gd.lib instead of CGAL-vc90-mt-s.lib. There are many
possibilities: you accidentally built the wrong version, or you may have built the right version and VCExpress named it wrong. To double check, and fix the
problem, you can do the following:
cd C:\CGAL-3.7\lib
dumpbin /all CGAL-vc90-mt.lib | find /i "DEFAULTLIB"
(if you have mt-gd, use that name instead)
If this shows lines referencing LIBCMTD, MSVCRT, or MSVCRTD then you accidentally built the debug and/or dynamic version, and you need to clean the build,
and try to build again with proper settings to get the multi-threaded static release version. However, if it just says LIBCMT, then you are probably OK. Look for
another line saying DEFAULTLIB:CGAL-vc90-mt-s. If it is there, then you can probably just rename the file and have it work.
You can build CGAL using the GUI of visual studio, as an alternative to nmake. You have to use an alternate cmake syntax. Type 'cmake' by itself and it will
give you a list of 'generators' that are valid for your machine; for example Visual Studio Express is cmake -G"Visual Studio 9 2008" .. That should get you
a working .sln (solution) file.
72 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
vcexpress CGAL.sln
Modify the build configure target to Release (not Debug) and change the properties of the projects to be '/MT' multithreaded static builds. This is the similar
procedure used to build OpenCSG, so refer to those instructions above for more detail.
The 'MingW Shell' (Start/Programs) provide tools like bash, sed, grep, vi, tar, &c. The C:\ drive is under '/c/'. MingW has packages, for example: mingw-get
install msys-unzip downloads and installs the 'unzip' program. Git contains some programs by default, like perl. The windows command shell has cut/paste -
hit alt-space. You can also change the scrollback buffer settings.
References
C Run-Time Libraries linking (http://msdn.microsoft.com/en-us/library/abx4dbyh(v=vs.80).aspx), Microsoft.com for Visual Studio 8 (The older manual is
good too, here (http://msdn.microsoft.com/en-us/library/aa278396(VS.60).aspx))
Windows vs. Unix: Linking dynamic load modules (http://xenophilia.org/winvunix.html) by Chris Phoenix
73 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
General
How is OpenSCAD pronounced?
The intended pronounciation is: Open - ESS - CAD
Display
Preview doesn't appear to work at all
Some systems, in particular Intel GPUs on Windows, tend to have old or broken OpenGL drivers. This affects preview
rendering when using difference or intersection operators.
The following tends to improve the situation: Edit->Preferences->Advanced->Force Goldfeather (see screenshot).
Force Goldfeather
74 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
difference() {
cube(20, center = true);
cylinder(r = 10, h = 20, center = true);
}
In most cases the final render will be fine, but it's recommended to make the cuts a little bit larger to prevent this type of
issues.
Note that this issue may also occur with faces that are not even visible in the final result, for example because they're
removed by a difference() operation. This is an artifact of the library used for drawing the preview. See this discussion OpenSCAD display issue with
(https://github.com/openscad/openscad/issues/1793) for an example and a workaround. coincident faces
Why are some parts (e.g. holes) of the model not rendered correctly?
This can happen when using features like linear_extrude() or when importing objects. The convexity of the objects is not
known. For more complex objects, the convexity parameter can be used to specify the value. Note that higher values will
cause a slowdown in preview.
difference() {
linear_extrude(height = 15) {
difference() {
square([50, 50]);
translate([10, 10]) circle(5);
}
}
translate([25, 25]) cube([5, 5, 40], center = true); OpenSCAD display issue with
} convexity setting too low
75 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
This can be visualized in "Thrown Together" display mode. See misordered faces for details.
points = [[5,5,0],[5,-5,0],[-5,-5,0],[-5,5,0],[0,0,3]];
faces = [[0,1,4],[1,2,4],[2,3,4],[3,4,0],[1,0,3],[2,1,3]];
polyhedron(points, faces);
If the model imports external STL files, see also import related question.
OpenSCAD polyhedron with
flipped face
This is hard to explain, but in essence, having intersections as the negative objects in difference is expensive. The preview rendering algorithm only allows
having primitive objects as negatives, and everything else has to be unpacked.
A - B*C - D*E
All combinations have to be rendered, which can take some time, especially on older GPUs, and especially on low-end Intel GPUs.
Import
Why is my imported STL file only showing up with F5 but not F6?
76 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
This is mostly caused by bad STL files, the best bet is to verify the STL file in a tool like Blender, MeshLab or NetFabb and fix the issues. In essence the model
needs to be manifold to be processed in OpenSCAD.
The reason for the model still showing up in preview mode is that there is no real geometry calculation going on yet. The preview simply draws the triangles
from the STL.
There is one specific issue that causes problems called "Zero faces" (meaning the STL contains triangles with zero area because all 3 points are on one line)
which are currently not handled well in OpenSCAD.
Using MeshLab
Set the Ratio to a very high value (e.g. 1000000), otherwise it's possible the model gets distorted.
Using Blender
Blender has a 3D-Printing-Toolbox Plug-in (needs to be enabled in the UserSettings) which can show issues with the STL file. See http://wiki.blender.org
/index.php/Extensions:2.6/Py/Scripts/Modeling/PrintToolbox
The Microsoft 3D Model Repair service can help with fixing STL files. Make sure to read the service conditions before posting files. See
https://modelrepair.azurewebsites.net/
I'm getting "Unsupported DXF Entity" warnings when importing DXF files, what does that mean?
DXF import sometimes produces warning messages like Unsupported DXF Entity 'SPLINE' (1c1) in "file.dxf". This means the DXF file is using
features that the OpenSCAD importer does not know how to handle. The importer will simply ignore those unknown entities which could result in an
incomplete model.
When using Inkscape, the easiest way to produces DXF files without unsupported entities is to convert all Bezier curves to short line segments using
77 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
The value given in the dialog will determine the length of the line segments. Lower values will produce smoother results, but also much more line segments. As
export file format, use "Desktop Cutting Plotter (AutoCAD DXF R14)".
Export
How can I export multiple parts from one script?
Answer based on comments in related issue on github https://github.com/openscad/openscad/pull/1534#issuecomment-227024209
There is a way to generate a bunch of geometric primitives and export them as STL files from a single script, without commenting/uncommenting code.
There is a variable, PARTNO, that indicates which part is being exported in the current run. If PARTNO is 'undef', then nothing is exported.
module tree() {
color("green") cylinder(r1 = 12, r2 = 1, h = 30);
// ...
}
module trunk() {
color("brown") cylinder(r = 3, h = 10);
// ...
}
module base() {
color("white") translate([-10, -10, 0]) cube([20, 20, 5]);
// ...
}
if (PARTNO == 1) tree();
if (PARTNO == 2) trunk(); Image exported with PARTNO=0
if (PARTNO == 3) base();
78 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
When working interactively, the PARTNO variable at the top of the file can be set to the number of the part that will be shown/exported from the GUI.
It's possible to automate the process of exporting all of the parts by writing a shell script on MacOS or Linux, or a batch file on Windows. The shell script would
look something like this:
Running this script once from the command line will export all of the parts to separate files.
Language
Why am I getting an error when writing a = a + 1?
http://forum.openscad.org/A-A-1-tp11385p11411.html
First of all, the question why we have these "limitations" will become more clear once we start better exploiting the opportunities.
We need a "reduce" function to help collecting information depending on a list of input. Recursion is fine, but people tend to struggle with it and we could
offer some help.
We should probable disallow any attempt of reassignment, to make it more clear what's going on. The only real reason we partially allow it is to allow
cmd-line variable overrides.
Imagine every expression in OpenCAD being executed in parallel. Any dependency of existing expressions must be made explicit by hierarchical
grouping. This will kill the idea of iterating in order to accumulate information.
In terms of functions: Imagine a function expression being something you'd type into a spreadsheet cell. Not totally mappable, but it might help framing
it.
Now, we could add all kinds of sugar to help people apply their existing programming problem solving skills. Question is more if it really helps us, secondary
79 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
who will spearhead the design of such language extensions, as we currently don't really have attachment for these ideas on the dev-team.
If you think about the OpenSCAD language as something similar to HTML, but for 3D modeling, you'd still have a need for various programs generating code
in this language (similar to the plethora of HTML generators out there). There exist a number of tools for helping with OpenSCAD code generation from
existing programming languages (python, ruby, C++, haskell, clojure off the top of my head) and there are tools offering Javascript interfaces for similar
purposes (OpenJSCAD, CoffeeSCAD). Until we have a really good reason to do so in OpenSCAD proper, and a really good candidate for which language to
support, I think it's better to keep these things separate.
User Interface
I'm not getting any menubar when running OpenSCAD in Ubuntu, how can I get it back?
This seems to be caused by Ubuntu messing with Qt to move the menubar somewhere else (e.g. top of the screen).
Set the QT_QPA_PLATFORMTHEME environment variable to an empty string (the default value is probably "appmenu-qt5") or simply run OpenSCAD with
QT_QPA_PLATFORMTHEME= openscad
Remove the appmenu-qt5 package to globally disable menubar changes for all applications
When depending on libraries, it's recommended to use use<> instead which does not have that problem and also automatically inhibits any top-level geometry of
that file (which might be there as demo for the library).
80 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Errors / Problems
Why am I getting "no top level geometry to render"?
This can have different reasons, some common ones include
module model() {
cube(20);
}
%model();
Using the % modifier does not only make the part transparent, it's not included in the final render!
The easiest way to solve this type of issues is to highlight the objects using the # modifier and see if the objects are placed at the position where they should be.
See Why is my imported STL file only showing up with F5 but not F6?
This file is stored in the users documents folder in a separate directory (e.g. on Linux this is normally $HOME/.local/share/OpenSCAD/backups). The actual
path can be checked in the Help->Library Info dialog where it is listed as "Backup Path".
81 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Bugs in OpenSCAD are best reported in the github (http://github.com/) issue tracking system at https://github.com/openscad/openscad/issues. If you are not sure
it's a bug, asking on the mailing list/forum (http://www.openscad.org/community.html) can help clarifying things.
Please try searching through the existing issues if the bug was already reported. If you find something similar or if you are unsure, create a new issue, but
mention the (possibly) related one.
The bug report should give as much information as possible to help with reproducing it, including but not limited to
Most of the technical version information can be found in menu Help -> Library Info.
Please make an effort to clearly explain the new feature / change as detailed as possible. Including some background about why you think this feature would be
useful to you and other people helps a lot and increases the chances of it being implemented.
How do I report bugs that are related to the Operating System I use?
Windows
The Windows version is currently maintained by the OpenSCAD team, so please use the github issue tracker (https://github.com/openscad/openscad/issues) for
reporting bugs.
Mac OSX
The Mac OSX version is currently maintained by the OpenSCAD team, so please use the github issue tracker (https://github.com/openscad/openscad/issues) for
reporting bugs.
82 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Linux
The OpenSCAD versions included in / distributed by the various Linux distributions are usually maintained by people/teams working with the distributions.
Specific bugs can be reported in the respective bug tracking systems, e.g.
The nightly builds (https://build.opensuse.org/package/show/home:t-paul/OpenSCAD) hosted on the openSUSE build service (https://build.opensuse.org/) are
maintained by the OpenSCAD team, so please use the github issue tracker (https://github.com/openscad/openscad/issues) for reporting issues with those
packages.
83 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Chapter 9 -- Libraries
OpenSCAD User Manual
Library Locations
OpenSCAD uses three library locations, the installation library, built-in library, and user defined libraries.
1. The Installation library location is the libraries directory under the directory where OpenSCAD is installed.
2. The Built-In library location is O/S dependent. Since version 2014.03, it can be opened in the system specific file manager using the "File->Show Library
Folder..." menu entry.
Windows: My Documents\OpenSCAD\libraries
Linux: $HOME/.local/share/OpenSCAD/libraries
Mac OS X: $HOME/Documents/OpenSCAD/libraries
3. The User-Defined library path can be created using the OPENSCADPATH Environment Variable to point to the library(s). OPENSCADPATH can contain multiple
directories in case you have library collections in more than one place, separate directories with a semi-colon for Windows, and a colon for Linux/Mac
OS. For example:
OpenSCAD will need to be restarted to recognise any change to the OPENSCADPATH Environment Variable.
Where you specify a non-fully qualified path & filename in the use <...> or include <...> statement that path/file is checked against the
directory of the calling .scad file, the User-Defined library paths (OPENSCADPATH), the Built-In library (i.e. the O/S dependent locations above), and
the Installation library, in that order. NOTE: In the case of a library file itself having use <...> or include <...> the directory of the library
.scad file is the 'calling' file, i.e. when looking for libraries within a library, it does not check the directory of the top level .scad file.
For example, with the following locations & files defined: (with OPENSCADPATH=/usr/lib:/home/lib_os:.)
1. <installation library>/lib1.scad
84 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
2. <built-in library>/lib2.scad
3. <built-in library>/sublib/lib2.scad
4. <built-in library>/sublib/lib3.scad
5. /usr/lib/lib2.scad
6. /home/lib_os/sublib/lib3.scad
The following include <...> statements will match to the nominated library files
Since 2014.03, the currently active list of locations can be verified in the "Help->Library Info" dialog.
The details info shows both the content of the OPENSCADPATH variable and the list of all library locations. The locations will be searched in the order they appear
in this list. For example;
OPENSCADPATH: /data/lib1:/data/lib2
OpenSCAD library path:
/data/lib1
/data/lib2
/home/user/.local/share/OpenSCAD/libraries
/opt/OpenSCAD/libraries
Setting OPENSCADPATH
In Windows, Environment Variables are set via the Control panel, select System, then Advanced System Settings, click Environment Variables. Create a
new User Variable, or edit OPENSCADPATH if it exists.
On Linux (probably also on Mac), to simply add the environment variable to all users, you can type in terminal: sudo sh -c 'echo
"OPENSCADPATH=$HOME/openscad/libraries" >>/etc/profile' to set the OPENSCADPATH to openscad/libraries under each user's home directory. For more
control on environment variables, you'll need to edit the configuration files; see for example this page (http://unix.stackexchange.com/questions/117467/how-to-
permanently-set-environmental-variables).
MCAD
85 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
There are many different forks floating around (e.g.[1] (https://github.com/SolidCode/MCAD), [2] (https://github.com/elmom/MCAD), [3] (https://github.com
/benhowes/MCAD)) many of them unmaintained.
Many common shapes like rounded boxes, regular polygons and polyeders in 2D and 3D
Gear generator for involute gears and bevel gears.
Stepper motor mount helpers, stepper and servo outlines
Nuts, bolts and bearings
Screws and augers
Material definitions for common materials
Mathematical constants, curves
Teardrop holes and polyholes
The git repo also contains python code to scrape OpenSCAD code, a testing framework and SolidPython, an external python library for solid cad.
Other Libraries
BOLTS tries to build a standard part and vitamin library that can be used with OpenSCAD and other CAD tools: [4] (http://www.bolts-library.org/)
Obiscad contains various useful tools, notably a framework for attaching modules on other modules in a simple and modular way: [5] (https://github.com
/Obijuan/obiscad)
This library provides tools to create proper 2D technical drawings of your 3D objects: [6] (http://www.cannymachines.com/entries
/9/openscad_dimensioned_drawings)
Stephanie Shaltes (https://plus.google.com/u/0/101448691399929440302) wrote a fairly comprehensive fillet library (https://github.com/StephS/i2_xends
/blob/master/inc/fillets.scad)
The shapes library (http://svn.clifford.at/openscad/trunk/libraries/shapes.scad) contains many shapes like rounded boxes, regular polygons. It is also
included in MCAD.
Also Giles Bathgates shapes library (https://github.com/elmom/MCAD/blob/master/regular_shapes.scad) provides regular polygons and polyeders and is
included in MCAD.
The OpenSCAD threads (http://dkprojects.net/openscad-threads/) library provides ISO conform metric and imperial threads and support internal and
external threads and multiple starts.
Sprockets for ANSI chains and motorcycle chains can be created with the Roller Chain Sprockets OpenSCAD Module (http://www.thingiverse.com
86 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
87 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
http://www.openscad.org/cheatsheet/
Mathematical Operators
+
- // also as unary negative
*
/
%
<
<=
==
!=
>=
>
Mathematical Functions
88 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
abs ( <value> )
cos ( <degrees> )
sin ( <degrees> )
tan ( <degrees> )
asin ( <value> )
acos ( <value> )
atan ( <value> )
atan2 ( <y_value>, <x_value> )
String Functions
str(string, value, ...)
Primitive Solids
cube(size = <value or vector>, center = <boolean>);
sphere(r = <radius>);
89 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
polyhedron(points = [[x, y, z], ... ], triangles = [[p1, p2, p3..], ... ], convexity = N);
Transformations
scale(v = [x, y, z]) { ... }
mirror([ 0, 1, 0 ]) { ... }
90 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
CSG Modelling
union() {...}
difference() {...}
intersection() {...}
Modifier Characters
! { ... } // Ignore the rest of the design and use this subtree as design root
* { ... } // Ignore this subtree
% { ... } // Ignore CSG of this subtree and draw it in transparent gray
# { ... } // Use this subtree as usual but draw it in transparent pink
Modules
module name(<var1>, <var2>, ...) { ...<module code>...}
In module you can use children() to refer to all child nodes, or children(i) where i is between 0 and $children.
91 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
Include Statement
After 2010.02
Prior to 2010.02
<filename.scad>
When $fa and $fs are used to determine the number of fragments for a circle, then OpenSCAD will never use less than 5 fragments.
$t
The $t variable is used for animation. If you enable the animation frame with view->animate and give a value for "FPS" and "Steps", the "Time" field shows the
current value of $t.
92 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
2D Primitives
square(size = <val>, center=<boolean>);
square(size = [x,y], center=<boolean>);
circle(r = <val>);
polygon(points = [[x, y], ... ], paths = [[p1, p2, p3..], ... ], convexity = N);
3D to 2D Projection
projection(cut = <boolean>)
2D to 3D Extrusion
linear_extrude(height = <val>, center = <boolean>, convexity = <val>, twist = <degrees>[, slices = <val>, $fn=...,$fs=...,$fa=...]){...}
DXF Extrusion
linear_extrude(height = <val>, center = <boolean>, convexity = <val>, twist = <degrees>[...])
93 de 94 11/7/17 9:23
OpenSCAD User Manual/Print version - Wikibooks, open books for an open world https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Print_version
STL Import
import("filename.stl", convexity = <val>);
94 de 94 11/7/17 9:23