# 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))
```