MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now


Customizer Update

by tbuser

Customizer now runs the new version of OpenSCAD 2015.03

Also, all the google fonts from http://www.google.com/fonts have been added to the servers and can be used in text() :)

View Comment


by atartanian

OpenSCAD is an open source programming language and IDE (Integrated Development Environment) for parametric 3D design. It is used to create precise, customizable and easily modifiable designs ready for 3D printing. It has a growing developer community and is the tool used to create designs compatible with the MakerBot Customizer app: http://www.thingiverse.com/apps/customizer

You can download OpenSCAD from www.openscad.org/downloads.html

This group is a place to discuss all things OpenSCAD including (but not limited to) new features, techniques, questions, libraries, works in progress, etc. So post a new Topic or contribute on an existing one!

Share knowledge, get constructive feedback, and ask questions!

Join to add your OpenSCAD designs or libraries to this group's Things. Non-OpenSCAD designs will be removed.

Have fun!

View Comment

OpenSCAD 2015.03 is out!

by atartanian

WOOT! now we can put comic sans on everything ;D

get it here: http://www.openscad.org/downloads.html

If you make any scripts that use features from the new version, add links to them in this post!

Summary of changes

Language Features

  • Added text() module for 2D text
  • Added offset() module for 2D offsets
  • Added list comprehensions and let()
  • Added concat() function
  • Added chr() function
  • surface() can now take PNG images as input
  • min() and max() can now take a vector argument
  • 2D minkowski can now handle polygons with holes
  • Variables can now be assigned in local blocks without using assign()

Program Features

  • Added Toolbar icons
  • New code editor based on QScintilla
  • Added Splash screen
  • Added SVG export
  • Added AMF export
  • Added --viewall and --autocenter cmd-line parameters
  • GUI is now translated into German, Czech, Spanish, French and Russian
  • MDI (Multiple Document Interface) is now available on all platforms
  • Color schemes for viewer and editor can be user-edited using JSON files
  • GUI components are now dockable
  • Added Tickmarks on axes


  • Performance improvement: 2D (clipper), preview, hull, minkowski, surface
  • Performance improvement: Reduce duplicate evaluation of identical expressions
  • Better recursion behavior
  • STL export and import is now more robust
  • Internal cavities are better supported
  • New examples
  • Windows cmd-line behaves better
  • Better mirror() and scale() behavior when using negative factors


  • polyhedron() now takes a faces= argument rather than triangles=
  • assign() is no longer needed. Local variables can be created in any scope
View Comment

Can a function() perform and return for mutable calculations?

by SavageRodent

A lot of designs use trigonometry so I was thinking it would be useful to have a SINGLE function that performed as triangle calculator but im not sure if something like the example below is possible?

function triangle_calculator(A,B,C,a,b,c)= // A,B,C=angles, a,b,c=length of sides

i=triangle_calculator(undef,90,undef,5,undef,5) //return value of all angles and all side lengths: i = [[45],[90],[45],[5],[7.07],[5]];

View Comment

Customizer Queue Jam?

by Kimlg

"We're sorry, but something went wrong."

I think my queue is jammed with a failed customization from a 2019 version of OpenScad and now anything I try customize gives this error, even though some of the things show up in my things later.
I reuploaded https://www.thingiverse.com/thing:3728064 with simpler code and now it works and doesnt give some error about "normalisation".
Not sure what is going on with my queue though.

Admin, please help.



African Potjie Cooking Pot
by Kimlg
View Comment

Valid polyhedron becomes invalid when using difference

by 3asy

I have been triying to do a difference on a polyhedron, but it visually glitches out and i get this warning message:
WARNING: Object may not be a valid 2-manifold and may need repair!

The polyhedron itself is a valid solid and i get a working .stl file when i export it. But when i try to cut pieces out of it, some faces disappear after i do an export.

How do i make it work?

polyhedron problem
View Comment

Looking for UNF screws/threads (5/8"-18)

by runtimeterror

For a replacement part (water pump) I need a 5/8"-18 screw.
Does anyone know a library to produce UNF screws? Everything I found so far was focused on the generation of metric screws.

screw threads water
View Comment

Export scad to step

by LL77

Hi What is the best way to export a scad to step file.

View Comment

Box with slanted front and back.

by AeroMaxx

I'm wanting to create a box that has an slope front at approx 130 degrees, and a sloped rear at 40 degrees. The box is to have walls that are 2mm thick.

The box currently is in two parts that form a union, the first part is a slim box that has a hollow middle, the walls are 2mm thick, and the x, y, z is [60, 40, 6]

I think there is two ways I can do the front and rear slopes, I'd like the total height of the box to be 20.

The first way could be to make an additonal box with the same dimensions as the lower box but with a height of 14 such as x, y, z of [60, 40, 14], translate would need to be used with this. Make additional cubes and rotate and translate them then use difference to remove the parts from the cube. The problem I am having with this method is lining everything up accurately it seems near impossible to line everything up pixel perfect, it also is very difficult to get the slopes to start at the same height on the front and rear.

So I thought of a different way I could make thin cubes of 2mm thick as I wanted walls that thick anyway, such as using x, y, z of [56, 2, 22] and then rotate and translate them, this has the added benefit of not needing to have anything cut out from the inside of the cube to make the walls 2mm thick. It however doesn't solve the problem of lining everything up accurately it still seems near impossible to line everything up pixel perfect.

Once I have been able to resolve the above issues I was wanting to cut a rectangle hole in the front slope, the rear slope won't have a hole cut into it.

If someone could potentially share their thoughts and ideas, or perhaps even give some recommendations as to what you think I should do to get the results I am after it would be very much appreciated, I wouldn't necessarily need the code writing for me as I do have a programming/scripting background, but that being said if you would like to share some rough examples to explain what your suggesting that would be very much appreciated.

Thank you in advanced.

View Comment

Upgrade to 2019?

by jmckeown2

With the latest OpenSCAD release being "official" when will Thingiverse Customizer update to the latest version?

I'm particularly looking to see support for using $preview to set $fn

View Comment

Adding tabbed editing to OpenSCAD

by Torsten

Supported by the Google Summer of Code project, we currently work with a student who is improving the builtin editor of OpenSCAD. The first topic was implementing tabbed editing and this is now at a point where a very usable prototype is available (binaries for Windows and Linux, MacOS hopefully soon). So if you ever wanted to have that feature, feel free to have an early look and provide feedback if you see anything good or bad.

For a description of how to get the latest build, see this post in the OpenSCAD forum: http://forum.openscad.org/Testing-multi-tab-feature-tp26615p26623.html

View Comment

warning: too many unnamed arguments supplied

by rshambaugh

I'm trying to customize this speaker spacer: https://www.thingiverse.com/thing:2924217

but I'm getting a warning preventing the outer ring from rendering:

WARNING: Too many unnamed arguments supplied, in file speakerrings.scad, line 77

Specifically, this line:

    spacerTrim(0, spacerTrimThickness, spacerTrimHeight);

Here's the entire code:

// Speaker ring generator
// Code remix from https://www.thingiverse.com/thing:451253
// Use to make speaker rings for 5, 5.25, 6, 6.5, 6.75, 8, 10, 12, 15, 18, 21 inch speakers (sizes dependent on 3D printer capabilities, maybe use CNC for larger speaker spacers)
// preview[view:south, tilt:top]
/* [Unit adjustment] */
// Choose from mm, cm, or inch 
units_entered = 25.4;//[1:mm, 10:cm, 25.4:inch]

/* [Spacer Ring Sizing] */
// inner diameter (e.g. Speaker cutout diameter), set to just a little larger than the speaker cutout.  Default is for 6.5 inch ring.
d_inner= 5.5;

// outer diameter, (Speaker ring outer diameter)
d_outer= 7.61;

// height of adapter, (Common heights are .25, .5, .75, 1 inch)
h = 1.81;

/* [Hidden] */
// inner tolerance substract from wall)
i_inner = 0;
// outer tolerance in mm (substract from wall)
i_outer = 0;

// This code from https://www.thingiverse.com/apps/customizer/run?thing_id=1483876
/* [Flush Mounting Trim Ring] */

// Width of flush-mount trim, Set to .01 for no flush-mount ring (if height is less than .6 inches try using the opposite of the height, (i.e. height is 0.44 than make this -0.44) 
spacerTrimThickness = 0.25; 

// Height of flush-mount trim, Set to .01 for no flush-mount ring (if height is less than .6 inches try using the opposite of the height, (i.e. height is 0.44 than make this -0.44)
spacerTrimHeight = 0.15; 

/* [Speaker Screw Holes] */
//Speaker mount hole diameter, (same size as inner d_inner), (should be slightly larger than needed to ensure fit)
speakerHoleDiameter = d_inner;

//diagonally opposing holes this distance apart
speakerScrewHoleSpacing = 6.0;

numberOfSpeakerScrewHoles = 4; 

//.128 inch (3.25mm) seems good for #6 wood screw (screw in slowly / don't overtighten to avoid cracking) - chase with drill bit if needed
speakerScrewHoleDiameter = 0.128;

// Sets the angle from 0 to position holes, 45 is default
speakerScrewHoleAngle = 45;

/* [Spacer Ring Mounting Holes] */

//diagonally opposing holes this distance apart
mountScrewHoleSpacing = 6.5; 

numberOfMountScrewHoles = 4; 

//.2 inch (5.05mm) seems good for mount screws.  (use oem if possible), (screw in slowly / don't overtighten to avoid cracking) - chase with drill bit if needed
mountScrewHoleDiameter = 0.2;

/* [Spacer Ring Template] */
// Print 2D template to check fit

difference() {
    cylinder(d=d_outer+spacerTrimThickness-i_outer, h=h, $fn=256);

    translate([0,0,-1]) {
        cylinder(d=d_inner+i_inner, h=h+2, $fn=256);

    screwCutOuts(0, speakerScrewHoleSpacing, numberOfSpeakerScrewHoles, speakerScrewHoleDiameter, speakerScrewHoleAngle);

    mountscrewCutOuts(0, mountScrewHoleSpacing, numberOfMountScrewHoles, mountScrewHoleDiameter);

    spacerTrim(0, spacerTrimThickness, spacerTrimHeight);


echo ((d_outer-d_inner-i_outer-i_inner)/2, units_entered);

module screwCutOuts(rotation, distance, numberOfHoles, holeDiameter, holeAngle)

    rotate ([rotation,0,0]) translate([0, 0, 1]) 
        for (i = [0 : 360 / numberOfHoles : 360])
            rotate([0,0,i + holeAngle])
                translate([0, distance / 2, h*.25])
                    cylinder(r = holeDiameter / 2, h = h * 2, $fn=50);

module mountscrewCutOuts(rotation, distance, numberOfHoles, holeDiameter)

    rotate ([rotation,0,0]) translate([0, 0, -1.5]) 
        for (i = [0 : 360 / numberOfHoles : 360])
            rotate([0,0,i + 0])
                translate([0, distance / 2, 2])
                    union () {
                        cylinder(r = holeDiameter / 2, h = h * 2, $fn=50);
                translate([0,0,1])cylinder(h=h*.26, r=holeDiameter / 2 + .1, $fn=50);

// Trim for ring flush-mounting.  Code from https://www.thingiverse.com/apps/customizer/run?thing_id=1483876
module spacerTrim(spacerTrimThickness, spacerTrimHeight) 

    difference() {

        translate([0, 0, h+h-spacerTrimHeight])
        cylinder(h=h + spacerTrimHeight, d=d_outer, $fn=256);
        cylinder(h=h * 4, d=d_inner, center=true);


Any ideas about what's wrong?

Speaker Spacer Ring Generator
View Comment