# Boolean operations.

CSG geometry is operated on boolean operations. Zencad provides operations for joining, subtracting and intersecting 3d and 2d objects. There are two groups of these operations in zencad:

• over arrays of bodies using the functions union, difference, intersect
• over pairs of bodies using the operators _ + _ - _ ^ _

! Note: ! Do not attempt to boolean a compound line from simple lines or sew a shell from faces. For these manipulations, there are special stitching procedures outlined in the relevant sections.

## Union.

Signature:

``````# Функция:
result = union(array)

# Оператор:
result = shp0 + shp1
``````

Example:

``````#with operators:
sphere(r=10) + cylinder(r=5, h=10, center=True) + cylinder(r=5, h=10, center=True).rotateX(deg(90))

#with function:
union([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
``````

## Difference.

Signature:

``````# Функция:
result = difference(array)

# Оператор:
result = shp0 - shp1
``````

Example:

``````#with operators:
sphere(r=10) - cylinder(r=5, h=10, center=True) - cylinder(r=5, h=10, center=True).rotateX(deg(90))

#with function:
difference([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
``````

## Intersect.

Signature:

``````# Функция:
result = intersect(array)

# Оператор:
result = shp0 ^ shp1
``````

Example:

``````#with operators:
sphere(r=10) ^ cylinder(r=5, h=10, center=True) ^ cylinder(r=5, h=10, center=True).rotateX(deg(90))

#with function:
intersect([
sphere(r=10),
cylinder(r=5, h=10, center=True),
cylinder(r=5, h=10, center=True).rotateX(deg(90))
])
``````

## Crossing shells.

Let's twin the operation intersect, which calculates the intersection of the shells of bodies.

Signature:

``````# Функция:
result = section(a, b)
``````

Example:

``````m0 = section(box(10, center=True) - sphere(4))
m1 = section(box(10, center=True), sphere(7))
``````

## Boolean operations on 2D solids.

Just like with 3D objects, the above operations can be applied to 2D objects as long as they are in the same plane.

Example:

``````m0 = sphere(10) - square(10)
m1 = sphere(10) + square(10)
m2 = sphere(10) ^ square(10)
m2 = section(sphere(10), square(10))
``````