---
title: "The part's draft method"
---
Each part **must** have a `draft` property that holds a method that will draft the part.
In other words, this method is where the actual work happens. The method's signature
is as follows:
```js
function draft(props)
```
The draft method receives a single parameter, an object which you can _destructure_ to
access the following properties:
| Property | Description |
| ----------------: | :------------------------------------------------------------------------------------------------------------ |
| | **_Content constructors_** |
| `Path` | A [Path constructor](/reference/api/path) to create new paths |
| `Point` | A [Point constructor](/reference/api/point) to create new points |
| `Snippet` | A [Snippet constructor](/reference/api/snippet) to create new snippets |
| | **_Content containers_** |
| `paths` | Add a Path to your part by adding it to this object |
| `points` | Add a Points to your part by adding it to this object |
| `snippets` | Add a Snippet to your part by adding it to this object |
| | **_Access to settings_** |
| `absoluteOptions` | Access to `settings.absoluteOptions` |
| `complete` | Access to `settings.complete` |
| `expand` | Access to `settings.expand` |
| `measurements` | Access to `settings.measurements` |
| `options` | Access to `settings.options` |
| `paperless` | Access to `settings.paperless` |
| `sa` | Access to `settings.sa` |
| `scale` | Access to `settings.scale` |
| | **_Access to utilities_** |
| `context` | Allows access to the pattern object and other things higher in the tree |
| `getId` | See [the getId documentation](/reference/api/part/getid) |
| `log` | See [the Store Methods documentation](/reference/store-methods#store-methods-we-maintain) |
| `macro` | See [the macros documentation](/reference/macros/) |
| `store` | See [the store documentation](/reference/api/store) |
| `units` | A version of [`utils.units()`](/reference/api/utils/units) that is preconfigured with the user's chosen units |
| `utils` | See [the utils documentation](/reference/api/utils) |
| `Bezier` | The [bezier-js](https://pomax.github.io/bezierjs/) library's `Bezier` named export |
| | **_Return value_** |
| `part` | Your draft method **must** return this |
:::tip
Please note that there is no `optionalMeasurements` property.
Instead, optional measurements are accessed via the 'measurements'
property.
:::