npm package: @itk-wasm/cuberille
Description: Cuberille implicit surface polygonization to generate meshes from images.
Latest version: 0.2.0

# @itk-wasm/cuberille

[![npm version](https://badge.fury.io/js/@itk-wasm%2Fcuberille.svg)](https://www.npmjs.com/package/@itk-wasm/cuberille)

> Cuberille implicit surface polygonization to generate meshes from images.

## Installation

```sh
npm install @itk-wasm/cuberille
```

## Usage

### Browser interface

Import:

```js
import {
  cuberille,
  setPipelinesBaseUrl,
  getPipelinesBaseUrl,
} from "@itk-wasm/cuberille"
```

#### cuberille

*Create a mesh from an image via cuberille implicit surface polygonization.*

```ts
async function cuberille(
  image: Image,
  options: CuberilleOptions = {}
) : Promise<CuberilleResult>
```

| Parameter |   Type  | Description |
| :-------: | :-----: | :---------- |
|  `image`  | *Image* | Input image |

**`CuberilleOptions` interface:**

|                  Property                 |             Type            | Description                                                                                                                                               |
| :---------------------------------------: | :-------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |
|            `quadrilateralFaces`           |          *boolean*          | Generate quadrilateral faces instead of triangle faces.                                                                                                   |
|     `verticesNotProjectedToIsoSurface`    |          *boolean*          | Do not project the vertices to the iso-surface.                                                                                                           |
|           `imagePixelToCellData`          |          *boolean*          | Whether the adjacent input pixel value should be saved as cell data in the output mesh.                                                                   |
|  `projectVertexSurfaceDistanceThreshold`  |           *number*          | Threshold for the distance from the iso-surface during vertex projection in pixel units. Smaller is smoother but takes longer.                            |
|         `projectVertexStepLength`         |           *number*          | Initial step length for vertex projection in physical units. Default is max spacing * 0.25.                                                               |
| `projectVertexStepLengthRelaxationFactor` |           *number*          | The step length relaxation factor during vertex projection. The step length is multiplied by this factor each iteration to allow convergence, [0.0, 1.0]. |
|    `projectVertexMaximumNumberOfSteps`    |           *number*          | The maximum number of steps used during vertex projection.                                                                                                |
|        `generateQuadrilateralFaces`       |          *boolean*          | Generate quadrilateral faces instead of triangle faces.                                                                                                   |
|                `webWorker`                | *null or Worker or boolean* | WebWorker for computation. Set to null to create a new worker. Or, pass an existing worker. Or, set to `false` to run in the current thread / worker.     |
|                  `noCopy`                 |          *boolean*          | When SharedArrayBuffer's are not available, do not copy inputs.                                                                                           |

**`CuberilleResult` interface:**

|   Property  |   Type   | Description                     |
| :---------: | :------: | :------------------------------ |
|    `mesh`   |  *Mesh*  | Output mesh.                    |
| `webWorker` | *Worker* | WebWorker used for computation. |

#### setPipelinesBaseUrl

*Set base URL for WebAssembly assets when vendored.*

```ts
function setPipelinesBaseUrl(
  baseUrl: string | URL
) : void
```

#### getPipelinesBaseUrl

*Get base URL for WebAssembly assets when vendored.*

```ts
function getPipelinesBaseUrl() : string | URL
```


### Node interface

Import:

```js
import {
  cuberilleNode,
} from "@itk-wasm/cuberille"
```

#### cuberilleNode

*Create a mesh from an image via cuberille implicit surface polygonization.*

```ts
async function cuberilleNode(
  image: Image,
  options: CuberilleNodeOptions = {}
) : Promise<CuberilleNodeResult>
```

| Parameter |   Type  | Description |
| :-------: | :-----: | :---------- |
|  `image`  | *Image* | Input image |

**`CuberilleNodeOptions` interface:**

|                  Property                 |    Type   | Description                                                                                                                                               |
| :---------------------------------------: | :-------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |
|            `quadrilateralFaces`           | *boolean* | Generate quadrilateral faces instead of triangle faces.                                                                                                   |
|     `verticesNotProjectedToIsoSurface`    | *boolean* | Do not project the vertices to the iso-surface.                                                                                                           |
|           `imagePixelToCellData`          | *boolean* | Whether the adjacent input pixel value should be saved as cell data in the output mesh.                                                                   |
|  `projectVertexSurfaceDistanceThreshold`  |  *number* | Threshold for the distance from the iso-surface during vertex projection in pixel units. Smaller is smoother but takes longer.                            |
|         `projectVertexStepLength`         |  *number* | Initial step length for vertex projection in physical units. Default is max spacing * 0.25.                                                               |
| `projectVertexStepLengthRelaxationFactor` |  *number* | The step length relaxation factor during vertex projection. The step length is multiplied by this factor each iteration to allow convergence, [0.0, 1.0]. |
|    `projectVertexMaximumNumberOfSteps`    |  *number* | The maximum number of steps used during vertex projection.                                                                                                |
|        `generateQuadrilateralFaces`       | *boolean* | Generate quadrilateral faces instead of triangle faces.                                                                                                   |

**`CuberilleNodeResult` interface:**

| Property |  Type  | Description  |
| :------: | :----: | :----------- |
|  `mesh`  | *Mesh* | Output mesh. |