# MeshCreation

Added in 1.0.0

*** ** * ** ***


```
public final class MeshCreation
```

<br />

*** ** * ** ***

## Summary

| ### Public methods |
|---|---|
| `static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` | `https://developer.android.com/reference/androidx/ink/strokes/MeshCreation#(androidx.ink.strokes.StrokeInputBatch).createClosedShape()(@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/strokes/StrokeInputBatch receiver)` Creates a `https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` of the shape enclosed by the given `https://developer.android.com/reference/androidx/ink/strokes/StrokeInputBatch` input points. |

## Public methods

### createClosedShape

Artifact: [androidx.ink:ink-strokes](https://developer.android.com/jetpack/androidx/releases/ink) [View Source](https://cs.android.com/search?q=file:androidx/ink/strokes/MeshCreation.kt+function:createClosedShape) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/ink#1.0.0)

```
public static final @NonNull PartitionedMesh createClosedShape(@NonNull StrokeInputBatch receiver)
```

Creates a `https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` of the shape enclosed by the given `https://developer.android.com/reference/androidx/ink/strokes/StrokeInputBatch` input points. A typical use case is selecting a region of the scene and performing hit testing with the resulting `https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh`.

For a given stroke this algorithm aims to:

1. Identify and create any connections that the user may have intended to make but did not fully connect.

2. Trim any extra end points that the user did not intend to be part of the selected area.

Example usage:

```
fun onStrokeFinished(stroke: Stroke) {
   val selectionRegion = stroke.inputs.createClosedShape()
   for (stroke in myScene.strokes) {
       if (stroke.shape.intersects(selectionRegion)) {
           myScene.setSelected(stroke, true)
       }
   }
}
```

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/strokes/StrokeInputBatch receiver` | The `https://developer.android.com/reference/androidx/ink/strokes/StrokeInputBatch` to create a closed shape from. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` | The `https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` of the closed shape. If there are fewer than 3 input points, or if there are fewer than 3 points remaining after removing points with the same (x,y) coordinates as the previous point, this function will return a `https://developer.android.com/reference/androidx/ink/geometry/PartitionedMesh` that is point-like (1 point remaining) or segment-like (2 points remaining). The resulting mesh will have an area of 0 but can still be used for hit testing via intersection. |