# OpenSCAD User Manual/CSG Modelling

The text in its current form is incomplete. |

## Contents

### boolean overview[edit]

##### 2D examples[edit]

union() {square(10);circle(10);} // square or circle difference() {square(10);circle(10);} // square and not circle difference() {circle(10);square(10);} // circle and not square intersection(){square(10);circle(10);} // square and circle

##### 3D examples[edit]

union() {cube(12, center=true); sphere(8);} // cube or sphere difference() {cube(12, center=true); sphere(8);} // cube and not sphere difference() {sphere(8); cube(12, center=true);} // sphere and not cube intersection(){cube(12, center=true); sphere(8);} // cube and sphere

### union[edit]

Creates a union of all its child nodes. This is the **sum** of all children (logical **or**).

May be used with either 2D or 3D objects, but don't mix them.

Usage example: union() { cylinder (h = 4, r=1, center = true, $fn=100); rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100); }

Remark: union is implicit when not used. But it is mandatory, for example, in difference to group first child nodes into one.

### difference[edit]

Subtracts the 2nd (and all further) child nodes from the first one (logical **and not**).

May be used with either 2D or 3D objects, but don't mix them.

Usage example: difference() { cylinder (h = 4, r=1, center = true, $fn=100); rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100); }

##### difference with multiple children[edit]

Note, in the second instance, the result of adding a union of the 1st and 2nd children.

// Usage example for difference of multiple children: $fn=90; difference(){ cylinder(r=5,h=20,center=true); rotate([00,140,-45]) color("LightBlue") cylinder(r=2,h=25,center=true); rotate([00,40,-50]) cylinder(r=2,h=30,center=true); translate([0,0,-10])rotate([00,40,-50]) cylinder(r=1.4,h=30,center=true); } // second instance with added union translate([10,10,0]){ difference(){union(){ // combine 1st and 2nd children cylinder(r=5,h=20,center=true); rotate([00,140,-45]) color("LightBlue") cylinder(r=2,h=25,center=true); } rotate([00,40,-50]) cylinder(r=2,h=30,center=true); translate([0,0,-10])rotate([00,40,-50]) cylinder(r=1.4,h=30,center=true); } }

### intersection[edit]

Creates the intersection of all child nodes. This keeps the **overlapping** portion (logical **and**).

Only the area which is common or shared by **all** children is retained.

May be used with either 2D or 3D objects, but don't mix them.

Usage example: intersection() { cylinder (h = 4, r=1, center = true, $fn=100); rotate ([90,0,0]) cylinder (h = 4, r=0.9, center = true, $fn=100); }

### render[edit]

Always calculate the CSG model for this tree (even in OpenCSG preview mode).

Usage example: render(convexity = 1) { ... }

convexity | Integer. The convexity parameter specifies the maximum number of front sides (back sides) a ray intersecting the object might penetrate. This parameter is only needed for correctly displaying the object in OpenCSG preview mode and has no effect on the polyhedron rendering. |

This image shows a 2D shape with a convexity of 4, as the ray indicated in red crosses the 2D shape a maximum of 4 times. The convexity of a 3D shape would be determined in a similar way. Setting it to 10 should work fine for most cases.