editor › Globals › TriangulatingPolygonClipper
Class: TriangulatingPolygonClipper
Hierarchy
↳ TriangulatingPolygonClipper
Index
Constructors
Properties
Methods
- _analyzeIntersectionCase
- _cleansePolygon
- _cleansePolygons
- _convertIntersectionCaseToSvg
- _polygonsTouchOrOverlap
- _sanityCheck
- _simpleUnion
- _simpleUnionBaseCandidate
- _simpleUnionWithCandidate
- _subdivide
- _triangulatePolygons
- difference
- intersection
- multiUnion
- union
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[] | Set‹Triangle›, candidate?: Triangle | Triangle[] | Set‹Triangle›, candidateStroke: string): string
Defined in src/util/polygon/TriangulatingPolygonClipper.ts:1084
Parameters:
| Name | Type | Default |
|---|---|---|
base |
Triangle | Triangle[] | Set‹Triangle› | - |
candidate? |
Triangle | Triangle[] | Set‹Triangle› | - |
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
-
base: TriangleMesh2D‹› = baseMesh
-
candidates: TriangleMesh2D‹› = candidatesMeshes
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‹›