# Tutorial for Hatch¶

## Create hatches with one boundary path¶

The simplest form of a hatch has one polyline path with only straight lines as boundary path:

```
import ezdxf
dwg = ezdxf.new('AC1015') # hatch requires the DXF R2000 (AC1015) format or later
msp = dwg.modelspace() # adding entities to the model space
hatch = msp.add_hatch(color=2) # by default a solid fill hatch with fill color=7 (white/black)
with hatch.edit_boundary() as boundary: # edit boundary path (context manager)
# every boundary path is always a 2D element
# vertex format for the polyline path is: (x, y[, bulge])
# there are no bulge values in this example
boundary.add_polyline_path([(0, 0), (10, 0), (10, 10), (0, 10)], is_closed=1)
dwg.saveas("solid_hatch_polyline_path.dxf")
```

But like all polyline entities the polyline path can also have bulge values:

```
import ezdxf
dwg = ezdxf.new('AC1015') # hatch requires the DXF R2000 (AC1015) format or later
msp = dwg.modelspace() # adding entities to the model space
hatch = msp.add_hatch(color=2) # by default a solid fill hatch with fill color=7 (white/black)
with hatch.edit_boundary() as boundary: # edit boundary path (context manager)
# every boundary path is always a 2D element
# vertex format for the polyline path is: (x, y[, bulge])
# bulge value 1 = an arc with diameter=10 (= distance to next vertex * bulge value)
# bulge value > 0 ... arc is right of line
# bulge value < 0 ... arc is left of line
boundary.add_polyline_path([(0, 0, 1), (10, 0), (10, 10, -0.5), (0, 10)], is_closed=1)
dwg.saveas("solid_hatch_polyline_path_with_bulge.dxf")
```

The most flexible way to define a boundary path is the edge path. An edge path consist of a number of edges and each edge can be one of the following elements:

- line
`EdgePath.add_line()`

- arc
`EdgePath.add_arc()`

- ellipse
`EdgePath.add_ellipse()`

- spline
`EdgePath.add_spline()`

Create a solid hatch with an edge path (ellipse) as boundary path:

```
import ezdxf
dwg = ezdxf.new('AC1015') # hatch requires the DXF R2000 (AC1015) format or later
msp = dwg.modelspace() # adding entities to the model space
# important: major axis >= minor axis (ratio <= 1.)
msp.add_ellipse((0, 0), major_axis=(0, 10), ratio=0.5) # minor axis length = major axis length * ratio
hatch = msp.add_hatch(color=2) # by default a solid fill hatch with fill color=7 (white/black)
with hatch.edit_boundary() as boundary: # edit boundary path (context manager)
# every boundary path is always a 2D element
edge_path = boundary.add_edge_path()
# each edge path can contain line arc, ellipse and spline elements
# important: major axis >= minor axis (ratio <= 1.)
edge_path.add_ellipse((0, 0), major_axis=(0, 10), ratio=0.5)
dwg.saveas("solid_hatch_ellipse.dxf")
```

## Create hatches with multiple boundary paths (islands)¶

TODO

## Create hatches with with pattern fill¶

TODO

## Create hatches with gradient fill¶

TODO