# Anchor

An anchor is the editable unit of a path. Two anchors form a segment.

## Constructors

Anchor(position,handleIn,handleOut)→[Anchor](https://cuttle.xyz/learn/reference/Anchor)

Constructs an anchor. Vectors passed to this constructor will be set as their corresponding properties without any cloning. You may want to call `.clone()` before passing them in.

`position`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

`handleIn`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

`handleOut`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

## Properties

.position[Vec](https://cuttle.xyz/learn/reference/Vec)

The position of the anchor on the canvas.

.handleIn[Vec](https://cuttle.xyz/learn/reference/Vec)

The tangent of the path before this anchor.

Tangents are vectors relative to the anchor's `position`.

.handleOut[Vec](https://cuttle.xyz/learn/reference/Vec)

The tangent of the path after this anchor.

Tangents are vectors relative to the anchor's `position`.

## Methods inherited from [Geometry](https://cuttle.xyz/learn/reference/Geometry)

.transform(transform)→thischainable

Transforms this geometry.

A transform can optionally specify any of `position`, `rotation`, `scale`, `skew` and `origin`.

`origin` defines the center (in pre-transform coordinates) of the transformation for `rotation`, `scale` and `skew`.

```
// Simple translation
geometry.translate({
  position: Vec(1, 0),
});

// Rotation and scale
geometry.transform({
  rotation: 45,
  scale: 2,
});

// Complicated transform
geometry.transform({
  position: Vec(1, 1),
  rotation: 180,
  scale: Vec(2, 1),
  skew: 45,
  origin: Vec(-0.5, 0.5),
};
```

`transform`

`[TransformArgs](https://cuttle.xyz/learn/reference/interfaces#TransformArgs)`

.intersectionsWith(geometries,areaOfInterest)→[IntersectionResult](https://cuttle.xyz/learn/reference/interfaces#IntersectionResult)\[\]

`geometries`

`[Geometry](https://cuttle.xyz/learn/reference/Geometry)[]`

An array of geometries to intersect with.

`areaOfInterest`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

optional

If supplied, only intersection results inside this bounding box will be returned. This can save a lot of computation if you only need to find intersections within a small area.

Returns An array of intersections between this geometry and `geometries`

.overlapsWith(geometries,areaOfInterest,tolerance)→[OverlapResult](https://cuttle.xyz/learn/reference/OverlapResult)\[\]

`geometries`

`[Geometry](https://cuttle.xyz/learn/reference/Geometry)[]`

An array of geometries to find overlaps with.

`areaOfInterest`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

optional

If supplied, input geometry will be filtered so that only parts that intersect this bounding box will be tested. This can save a lot of time if only need to find overlaps within a small area.

`tolerance`

`number`

optional

The maximum distance apart two segments can be to be considered overlapping.

Returns An array of overlaps between this geometry and `geometries`

.distanceToIntersect(targetGeometry,direction,options)→(number | undefined)

`targetGeometry`

`[Geometry](https://cuttle.xyz/learn/reference/Geometry)`

The geometry to move toward.

`direction`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

The direction to move in. This should point towards the target geometry, otherwise no intersection may be found.

`options`

`[DistanceToIntersectOptions](https://cuttle.xyz/learn/reference/interfaces#DistanceToIntersectOptions)`

optional

Returns approximately the smallest distance to move until this geometry intersects the target geometry.

If `minOverlap` is specified, the distance to move until the geometry overlaps by some minimum width will be returned instead.

Returns `undefined` if no intersection is found.

.clone()→[Anchor](https://cuttle.xyz/learn/reference/Anchor)

Clone is useful when you need to make a change to geometry without changing the original.

```
const transformedPath = path.clone().transform({ rotation: 45 });
```

Returns A deep copy of this geometry

.isValid()→boolean

Returns `true` if this geometry is valid, or `false` otherwise.

.affineTransform(affineMatrix)→[Anchor](https://cuttle.xyz/learn/reference/Anchor)chainable

Spatially transforms this geometry by an affine transformation matrix.

Affine matrices can represent any 2-dimensional transformation that keeps lines parallel.

`affineMatrix`

`[AffineMatrix](https://cuttle.xyz/learn/reference/AffineMatrix)`

.affineTransformWithoutTranslation(affineMatrix)→[Anchor](https://cuttle.xyz/learn/reference/Anchor)chainable

Spatially transforms this geometry by an affine transformation matrix, excluding translation. Only rotation, scale, and skew transformations will be applied.

`affineMatrix`

`[AffineMatrix](https://cuttle.xyz/learn/reference/AffineMatrix)`

.looseBoundingBox()→[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)

The loose bounding box may not be the smallest possible, but it's usually cheaper to compute. Use this when the exact bounding box isn't required.

Returns an axis-aligned bounding box that contains this geometry.

.boundingBox()→[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)

Returns the smallest axis-aligned bounding box that contains this geometry.

.isContainedByBoundingBox(box)→boolean

Geometry is contained by a bounding box if no part of it lies beyond it's minimum and maximum.

`box`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

.isIntersectedByBoundingBox(box)→boolean

Geometry intersects a bounding box if part of the geometry crosses the boundary between the inside and outside of the box.

`box`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

.isOverlappedByBoundingBox(box)→boolean

Geometry is overlapped by a bounding box if a point can be chosen that is indside both the geometry and the box.

Geometry is overlapped by a bounding box if it's contained inside, or intersected by it.

`box`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

.closestPoint(point,areaOfInterest)→([ClosestPointResult](https://cuttle.xyz/learn/reference/interfaces#ClosestPointResult) | undefined)

`point`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

The target point

`areaOfInterest`

`[BoundingBox](https://cuttle.xyz/learn/reference/BoundingBox)`

optional

If supplied, only results inside this bounding box will be returned. This can save a lot of computation if you only need to find closest points within a small area. Typically `areaOfInterest` is centered on `point`, but this isn't required.

Returns The closest point to `point` that lies on this geometry, or `undefined` if no point is found.

.reverse()→[Anchor](https://cuttle.xyz/learn/reference/Anchor)chainable

Reverses this geometry.

.isValid(a)→

`a`

`unknown`

Returns `true` if `graphic` is a valid graphic

## Methods inherited from [Graphic](https://cuttle.xyz/learn/reference/Graphic)

.allAnchors()→[Anchor](https://cuttle.xyz/learn/reference/Anchor)\[\]

Returns all anchors contained within this graphic, recursively.

.allCompoundPaths()→[CompoundPath](https://cuttle.xyz/learn/reference/CompoundPath)\[\]

Returns all compound paths contained within this graphic, recursively.

.allPaths()→[Path](https://cuttle.xyz/learn/reference/Path)\[\]

Returns all paths contained within this graphic, recursively.

.allPathsAndCompoundPaths()→([Path](https://cuttle.xyz/learn/reference/Path) | [CompoundPath](https://cuttle.xyz/learn/reference/CompoundPath))\[\]

Returns all paths and compound paths contained within this graphic, recursively.

.allPathsByColor()→[Path](https://cuttle.xyz/learn/reference/Path)\[\]\[\]

Returns all paths grouped by their stroke and fill colors.

Paths must have identical stroke _and_ fill colors to be grouped together.

.hasStyle()→boolean

Returns `true` if this graphic has either a stroke or a fill.

.assignFill(fill)→[Graphic](https://cuttle.xyz/learn/reference/Graphic)chainable

Assigns a fill to this graphic.

`fill`

`([Fill](https://cuttle.xyz/learn/reference/Fill) | [ImageFill](https://cuttle.xyz/learn/reference/ImageFill))`

.removeFill()→[Anchor](https://cuttle.xyz/learn/reference/Anchor)chainable

Removes a fill style from this graphic.

.assignStroke(stroke)→[Graphic](https://cuttle.xyz/learn/reference/Graphic)chainable

Assigns a stroke style to this graphic.

`stroke`

`[Stroke](https://cuttle.xyz/learn/reference/Stroke)`

.removeStroke()→[Anchor](https://cuttle.xyz/learn/reference/Anchor)chainable

Removes a stroke style from this graphic.

.assignStyle(fill,stroke)→[Graphic](https://cuttle.xyz/learn/reference/Graphic)chainable

Assigns both a stroke and fill style to this graphic.

`fill`

`([Fill](https://cuttle.xyz/learn/reference/Fill) | [ImageFill](https://cuttle.xyz/learn/reference/ImageFill))`

`stroke`

`[Stroke](https://cuttle.xyz/learn/reference/Stroke)`

.copyStyle(graphic)→[Graphic](https://cuttle.xyz/learn/reference/Graphic)chainable

Copies the stroke and fill from `graphic`.

`graphic`

`[Graphic](https://cuttle.xyz/learn/reference/Graphic)`

.scaleStroke(scaleFactor)→[Graphic](https://cuttle.xyz/learn/reference/Graphic)chainable

Scales the stroke width of this graphic by `scaleFactor`.

`scaleFactor`

`number`

The amount to scale existing strokes by

.containsPoint(point)→boolean

Returns `true` if this graphic contains `point`.

`point`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

The point to test

.styleContainsPoint(point)→boolean

Returns `true` if this graphic's style contains `point`.

This method differs from `containsPoint()` in that it takes the stroke and fill styling into account.

`point`

`[Vec](https://cuttle.xyz/learn/reference/Vec)`

The point to test1

.firstStyled()→([Path](https://cuttle.xyz/learn/reference/Path) | [CompoundPath](https://cuttle.xyz/learn/reference/CompoundPath) | undefined)

Returns The first styled graphic (Path or CompoundPath) in a group, or the styled path itself. A path must have either a stroke or fill to be considered styled.