Skip to content

editorGlobalsTriangulatingPolygonClipper

Class: TriangulatingPolygonClipper

Hierarchy

TriangulatingPolygonClipper

Index

Constructors

Properties

Methods

Constructors

constructor

+ new TriangulatingPolygonClipper(): TriangulatingPolygonClipper

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:52

Returns: TriangulatingPolygonClipper

Properties

Private Readonly distanceEpsilon

distanceEpsilon: number = Config.get("approximateSolutions.polygonClippingDistanceEpsilon") as number

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:50

distanceEpsilon describes until what distance two points are considered equal or under what distance a point is considered to be on a side. In order support small triangles during a clipping operation, it should be as high as possible while still covering up rounding errors. This value is only important during the clipping operation, as point values will be rounded before and after according to the (lower) positionPrecision value


Private Readonly maxSize

maxSize: any = Config.get("triangulatingPolygonClipper.maxSize")

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:52


Private Readonly positionPrecision

positionPrecision: number = Config.get("modelLimits.maximumPositionPrecision") as number

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:41

positionPrecision is the value incoming and outcoming points are rounded to. It should be a physically realistic value, e.g. 0.01mm might be fine since the laser cutter cannot fabricate polygons/plates with a higher resolution


Static Private simpleUnionDispatcher

simpleUnionDispatcher: IntersectionCaseDispatcher‹› = DispatcherFactory.getSimpleUnionDispatcher()

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:34


Static Private subdivideDispatcher

subdivideDispatcher: IntersectionCaseDispatcher‹› = DispatcherFactory.getSubdivideDispatcher()

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:33

IntersectionCaseDispatcher for the two different cases

Methods

Private _analyzeIntersectionCase

_analyzeIntersectionCase(base: Triangle, candidate: Triangle): IntersectionCase‹›

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:680

Calculates how the candidate intersects with the base

Parameters:

Name Type
base Triangle
candidate Triangle

Returns: IntersectionCase‹›


Private _cleansePolygon

_cleansePolygon(polygon: Polygon | MultiPolygon): boolean

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:354

Removes collinear and duplicate points, rounds the points to this.positionPrecision

Parameters:

Name Type
polygon Polygon | MultiPolygon

Returns: boolean

Whether the polygon degenerated during cleansing


Private _cleansePolygons

_cleansePolygons(polygons: Polygon[], errorHandlingMode: ErrorHandlingMode): Polygon[]

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:321

Parameters:

Name Type Description
polygons Polygon[] -
errorHandlingMode ErrorHandlingMode - If "throw", will throw an error if a polygon is degenerated If "discard", will remove the degenerated polygon and continue

Returns: Polygon[]

array of cleansed polygons

_cleansePolygons(polygons: MultiPolygon[], errorHandlingMode: ErrorHandlingMode): MultiPolygon[]

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:322

Parameters:

Name Type
polygons MultiPolygon[]
errorHandlingMode ErrorHandlingMode

Returns: MultiPolygon[]

_cleansePolygons(polygons: any, errorHandlingMode: ErrorHandlingMode): Array‹Polygon | MultiPolygon

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:323

Parameters:

Name Type
polygons any
errorHandlingMode ErrorHandlingMode

Returns: Array‹Polygon | MultiPolygon


Private _convertIntersectionCaseToSvg

_convertIntersectionCaseToSvg(base: Triangle | Triangle[] | SetTriangle›, candidate?: Triangle | Triangle[] | SetTriangle›, candidateStroke: string): string

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:1084

Parameters:

Name Type Default
base Triangle | Triangle[] | SetTriangle -
candidate? Triangle | Triangle[] | SetTriangle -
candidateStroke string "orange"

Returns: string


Private _polygonsTouchOrOverlap

_polygonsTouchOrOverlap(a: Polygon | MultiPolygon, b: Polygon | MultiPolygon): boolean

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:1118

Parameters:

Name Type
a Polygon | MultiPolygon
b Polygon | MultiPolygon

Returns: boolean

Whether the AABBs of the polygons touch or overlap. Important: the polygons are assumed to be rounded, since else, they might be touching but be considered non-touching


Private _sanityCheck

_sanityCheck(...polygons: Array‹Polygon | MultiPolygon›): boolean

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:1124

Parameters:

Name Type
...polygons Array‹Polygon | MultiPolygon

Returns: boolean


Private _simpleUnion

_simpleUnion(baseTriangles: TriangleMesh2D, candidateTriangles: TriangleMesh2D): TriangleMesh2D‹›

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:369

Parameters:

Name Type
baseTriangles TriangleMesh2D
candidateTriangles TriangleMesh2D

Returns: TriangleMesh2D‹›


Private _simpleUnionBaseCandidate

_simpleUnionBaseCandidate(intersectionCase: IntersectionCase, candidateTriangles: TriangleMesh2D): boolean

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:428

Parameters:

Name Type
intersectionCase IntersectionCase
candidateTriangles TriangleMesh2D

Returns: boolean


Private _simpleUnionWithCandidate

_simpleUnionWithCandidate(candidate: Triangle, candidateIterator: TriangleMesh2DIterator, baseTriangles: TriangleMesh2D, candidateTriangles: TriangleMesh2D): void

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:387

Parameters:

Name Type
candidate Triangle
candidateIterator TriangleMesh2DIterator
baseTriangles TriangleMesh2D
candidateTriangles TriangleMesh2D

Returns: void


Private _subdivide

_subdivide(baseTriangles: TriangleMesh2D, candidateTriangles: TriangleMesh2D): void

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:616

Subdivides base triangles based on cuts with candidate triangles. The baseTriangles mesh is modified.

Parameters:

Name Type
baseTriangles TriangleMesh2D
candidateTriangles TriangleMesh2D

Returns: void


Private _triangulatePolygons

_triangulatePolygons(base: Polygon | MultiPolygon, candidates: Array‹Polygon | MultiPolygon›): object

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:575

Triangulates base and candidate polygons. throws together candidate triangles since we do not need to separate candidate triangles

Parameters:

Name Type
base Polygon | MultiPolygon
candidates Array‹Polygon | MultiPolygon

Returns: object


difference

difference(base: Polygon | MultiPolygon, candidates: Array‹Polygon | MultiPolygon›, __namedParameters: object): MultiPolygon‹›

Overrides PolygonClipper.difference

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:245

This implementation allows touching and/or overlapping candidates

Parameters:

base: Polygon | MultiPolygon

candidates: Array‹Polygon | MultiPolygon

Default value __namedParameters: object= {}

Name Type Default
postCleanse boolean true
preCleanse boolean true

Returns: MultiPolygon‹›


intersection

intersection(base: Polygon | MultiPolygon, candidates: Array‹Polygon | MultiPolygon›): MultiPolygon‹›

Overrides PolygonClipper.intersection

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:197

This implementation allows touching and/or overlapping candidates

Parameters:

Name Type
base Polygon | MultiPolygon
candidates Array‹Polygon | MultiPolygon

Returns: MultiPolygon‹›


multiUnion

multiUnion(polygons: Array‹Polygon | MultiPolygon›, ensuredConstraints: "touchAndOverlap" | "onlyTouch"): MultiPolygon‹›

Overrides PolygonClipper.multiUnion

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:132

Unions multiple polygons into one big polygon.

Parameters:

Name Type Default Description
polygons Array‹Polygon | MultiPolygon - Array of polygons, will be cleansed and degenerated ones will be ignored
ensuredConstraints "touchAndOverlap" | "onlyTouch" "touchAndOverlap" - What level of constraints the user can ensure to the algorithm with regard to the input polygons - "touchAndOverlap" the polygons touch and may overlap each other. WARNING: very inefficient algorithm! - "onlyTouch" polygons only touch, but do not overlap each other

Returns: MultiPolygon‹›

Resulting union-ed polygon(s)


union

union(base: Polygon | MultiPolygon, candidates: Array‹Polygon | MultiPolygon›): MultiPolygon‹›

Overrides PolygonClipper.union

Defined in src/util/polygon/TriangulatingPolygonClipper.ts:59

Parameters:

Name Type
base Polygon | MultiPolygon
candidates Array‹Polygon | MultiPolygon

Returns: MultiPolygon‹›