# Surface Manipulation¶

Spicoli manipulates surfaces through the following two primary mechanisms:

## Cliques¶

A clique is an integral value associated with portions of the surface.
They can be arbitrarily assigned in order to create groupings of
vertices. Cliques in Spicoli are unsigned ints that can be associated
with every vertex of the surface. Spicoli treats the zero clique as a
special `NULL` clique. Therefore, the user should not use zero for
performing any clique operations on the surface.

Cliques in Spicoli are collections of vertices. However, an ambiguity occurs when performing triangle-based operations on these cliques. Spicoli will automatically resolve vertex cliques into triangle cliques using the following rule: if two or more vertices in the triangle have the same clique value, the triangle is assigned that clique value; otherwise, if every vertex of the triangle has a different clique value then the triangle is arbitrarily assigned the lowest clique value of the three vertices.

## Grids¶

Spicoli can construct grids from surfaces. Grid values are assigned
using the distance to the nearest surface vertex to the grid point.
This makes grid construction very expensive because every grid point
must be compared to every surface vertex.
The `OEVoxelizeMethod` namespace describes the
available methods.