# Modifiers

Non-mutating transformations for boundaries, strings, and layouts.

`ExclusionZones` subtracts a separate named area from a boundary, while
`Setback` takes a margin off every edge the boundary already has, the outer ring
and the rim of any hole alike. The clearance a setback delivers is a minimum,
met and exceeded slightly rather than ever falling short.

```{eval-rst}
.. currentmodule:: oowl.modifiers

.. autosummary::

   BoundaryModifier
   StringModifier
   LayoutModifier
   ExclusionZones
   Setback
   Breaks
   Meander
   TurbineRemoval
   PositionNoise
   Relaxation
```

## Boundary partitions

`Partition` is a namespace rather than a modifier itself. Its concrete
partition modifiers retain their cells, which a {class}`~oowl.Sampler` given
`n_farms` turns into separate farms. `Voronoi` clips one cell around each
supplied or sampled site. `PowerDiagram` adjusts weighted-distance cells to
requested relative areas. `Channels` recursively cuts the boundary using a
string guide.

```{eval-rst}
.. autoclass:: oowl.modifiers.Partition.Voronoi
   :members:

.. autoclass:: oowl.modifiers.Partition.PowerDiagram
   :members:

.. autoclass:: oowl.modifiers.Partition.Channels
   :members:
```

```{eval-rst}
.. automodule:: oowl.modifiers
   :members:
   :exclude-members: Partition
```
