editor › Globals › MeshModificator
Class: MeshModificator
A class that can do in-place modification of triangle meshes See MeshModificatorIllustration.svg for visual documentation of the methods
Hierarchy
- MeshModificator
Index
Methods
- _connectTriangles
- _cutOutSliceContainedPoint
- _cutOutSlicePointOnBorder
- _cutOutSliceSimple
- _determineOppositePoint
- _intersectsLine
- _sliceWithPointPointingToIsolatedPoint
- _sliceWithPointPointingToTwoPoints
- _sliceWithPointStraightLineHasTrianglePoint
- _triangulateAlongOutline
- _tripleDivideAndGetSide
- cutAlongLine
- cutOutContainedTriangle
- cutOutDavidStar
- cutOutPentagon
- cutOutQuadrangle
- cutOutRectangle
- cutOutSharedPointQuadrangle
- cutOutSideTouchingTriangle
- cutOutSlice
- cutOutSliceWithPoint
- cutSideContainedSharedPointTouchingTriangle
- cutSideContainedSharedPointTriangle
- cutSideContainedTouchingTriangle
- cutSideContainedTriangle
- cutThreePointLine
- cutThreeSideTouchingTriangle
- cutTwoSideTouchingTriangle
- divideSide
- divideSideTwice
- tripleDivide
- tripleDivideTwice
Methods
Static Private _connectTriangles
▸ _connectTriangles(trianglesA: Triangle[], trianglesB: Triangle[]): void
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1700
Connect triangles from A with B by checking if they share two points
Parameters:
| Name | Type |
|---|---|
trianglesA |
Triangle[] |
trianglesB |
Triangle[] |
Returns: void
Static Private _cutOutSliceContainedPoint
▸ _cutOutSliceContainedPoint(triangle: Triangle, lines: IStraightLine[]): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1479
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
lines |
IStraightLine[] |
Returns: Triangle‹›[]
Static Private _cutOutSlicePointOnBorder
▸ _cutOutSlicePointOnBorder(triangle: Triangle, lines: IStraightLine[], pointOnBorder: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1427
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
lines |
IStraightLine[] |
pointOnBorder |
Vector3 |
Returns: Triangle‹›[]
Static Private _cutOutSliceSimple
▸ _cutOutSliceSimple(triangle: Triangle, lines: IStraightLine[]): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1448
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
lines |
IStraightLine[] |
Returns: Triangle‹›[]
Static Private _determineOppositePoint
▸ _determineOppositePoint(triangle: Triangle, insidePoint0: Vector3, insidePoint1: Vector3): Vector3‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1618
Determines the point of the triangle that is as opposite as possible to the inside section (so the section and this point can form a non-degenerated triangle) the opposite point is searched on the right side of the section
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
insidePoint0 |
Vector3 |
insidePoint1 |
Vector3 |
Returns: Vector3‹›
Static Private _intersectsLine
▸ _intersectsLine(referencePoint: Vector3, testPoints: Vector3[], linePoint0: Vector3, linePoint1: Vector3): boolean
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1591
Test if one of the referencePoint -> testPoint lines intersects the specified line
Parameters:
| Name | Type |
|---|---|
referencePoint |
Vector3 |
testPoints |
Vector3[] |
linePoint0 |
Vector3 |
linePoint1 |
Vector3 |
Returns: boolean
Static Private _sliceWithPointPointingToIsolatedPoint
▸ _sliceWithPointPointingToIsolatedPoint(triangle: Triangle, straightLine: IStraightLine, lineWithPoint: ILineWithPoint): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1530
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
straightLine |
IStraightLine |
lineWithPoint |
ILineWithPoint |
Returns: Triangle‹›[]
Static Private _sliceWithPointPointingToTwoPoints
▸ _sliceWithPointPointingToTwoPoints(triangle: Triangle, straightLine: IStraightLine, lineWithPoint: ILineWithPoint, isolatedTriangle: Triangle): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1234
Cuts a slice with an additional point, with that point pointing towards the two points of the original triangle. Supports that one of the two points is contained in the slice or part of the lineWithPoint. Supports that the inner point (point1) of the lineWithPoint touches the side of triangle
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
straightLine |
IStraightLine |
lineWithPoint |
ILineWithPoint |
isolatedTriangle |
Triangle |
Returns: Triangle‹›[]
Static Private _sliceWithPointStraightLineHasTrianglePoint
▸ _sliceWithPointStraightLineHasTrianglePoint(triangle: Triangle, straightLine: IStraightLine, lineWithPoint: ILineWithPoint): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1562
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
straightLine |
IStraightLine |
lineWithPoint |
ILineWithPoint |
Returns: Triangle‹›[]
Static Private _triangulateAlongOutline
▸ _triangulateAlongOutline(oldTriangle: Triangle, centerPoint: Vector3, outlinePoints: Vector3[]): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1663
Assume an arbitrary outline and a point in the center of it. Triangulates it by creating triangles with two outlinePoints and the center point each. Expects the outlinePoints already to be sorted to create non-overlapping/non-degenerated triangles
Parameters:
| Name | Type |
|---|---|
oldTriangle |
Triangle |
centerPoint |
Vector3 |
outlinePoints |
Vector3[] |
Returns: Triangle‹›[]
Static Private _tripleDivideAndGetSide
▸ _tripleDivideAndGetSide(triangle: Triangle, sideCode: SideCode, insidePoint: Vector3): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1402
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
insidePoint |
Vector3 |
Returns: object
Static cutAlongLine
▸ cutAlongLine(triangle: Triangle, sideCode0: SideCode, intersectionPoint0: Vector3, sideCode1: SideCode, intersectionPoint1: Vector3): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:983
Cuts the triangle along a line defined by two intersection points (which have to be on different sides of the triangle). Also see MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode0 |
SideCode |
intersectionPoint0 |
Vector3 |
sideCode1 |
SideCode |
intersectionPoint1 |
Vector3 |
Returns: object
the three triangles, two on one side of the cutting line and one on the other side of the line
Static cutOutContainedTriangle
▸ cutOutContainedTriangle(triangle: Triangle, containedTrianglePoints: Vector3[]): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:704
Cuts out a fully contained (not touching) triangle
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
containedTrianglePoints |
Vector3[] |
Returns: Triangle‹›
the contained triangle
Static cutOutDavidStar
▸ cutOutDavidStar(triangle: Triangle, pointsAB: [Vector3, Vector3], pointsBC: [Vector3, Vector3], pointsCA: [Vector3, Vector3]): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:628
Handles this triangle as part of a david star (six intersections), divides this triangle and returns the triangles of the overlapping surface
Parameters:
| Name | Type | Description |
|---|---|---|
triangle |
Triangle | - |
pointsAB |
[Vector3, Vector3] | Intersection points on the AB side |
pointsBC |
[Vector3, Vector3] | Intersection points on the BC side |
pointsCA |
[Vector3, Vector3] | Intersection points on the CA side |
Returns: Triangle‹›[]
Static cutOutPentagon
▸ cutOutPentagon(triangle: Triangle, containedPoint: Vector3, sidePoint0: Vector3, insidePoint0: Vector3, sidePoint1: Vector3, insidePoint1: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:448
Cuts out a pentagon
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
containedPoint |
Vector3 |
sidePoint0 |
Vector3 |
insidePoint0 |
Vector3 |
sidePoint1 |
Vector3 |
insidePoint1 |
Vector3 |
Returns: Triangle‹›[]
Static cutOutQuadrangle
▸ cutOutQuadrangle(triangle: Triangle, sideCode: SideCode, sidePoint0: Vector3, insidePoint0: Vector3, insidePoint1: Vector3, sidePoint1: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1095
Cuts out an arbitrary quadrangle, with one side being part of the side of a triangle The points sidePoint0, insidePoint0, insidePoint1 and sidePoint1 describe the quadrangle, starting and ending with the points that touch the triangle's side
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sidePoint0 |
Vector3 |
insidePoint0 |
Vector3 |
insidePoint1 |
Vector3 |
sidePoint1 |
Vector3 |
Returns: Triangle‹›[]
Static cutOutRectangle
▸ cutOutRectangle(triangle: Triangle, sideCode0: SideCode, sidePoint0: Vector3, sideCode1: SideCode, sidePoint1: Vector3, insidePoint: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:125
Cuts out a rectangle (assuming one of the rectangle points is a base point between point0 and point1). See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode0 |
SideCode |
sidePoint0 |
Vector3 |
sideCode1 |
SideCode |
sidePoint1 |
Vector3 |
insidePoint |
Vector3 |
Returns: Triangle‹›[]
Static cutOutSharedPointQuadrangle
▸ cutOutSharedPointQuadrangle(triangle: Triangle, sideCode: SideCode, sideSharedPoint: Vector3, sideNotSharedPoint: Vector3, insidePointFromShared: Vector3, insidePointFromNotShared: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:398
Cuts out a quadrangle that shares a point with the triangle and goes like: sideSharedPoint --(on triangle side)-> sideNotSharedPoint -> insideFromNotShared -> insideFromShared -> sharedPoint See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sideSharedPoint |
Vector3 |
sideNotSharedPoint |
Vector3 |
insidePointFromShared |
Vector3 |
insidePointFromNotShared |
Vector3 |
Returns: Triangle‹›[]
an array consisting of the resulting two triangles that represent the quadrangle
Static cutOutSideTouchingTriangle
▸ cutOutSideTouchingTriangle(triangle: Triangle, sideCode: SideCode, sidePoint: Vector3, insidePoint0: Vector3, insidePoint1: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:841
Cuts out a triangle that is inside and only touches one side Expects the inner triangle to be described as CCW sidePoint -> insidePoint0 -> insidePoint1 -> sidePoint
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sidePoint |
Vector3 |
insidePoint0 |
Vector3 |
insidePoint1 |
Vector3 |
Returns: Triangle‹›
Static cutOutSlice
▸ cutOutSlice(triangle: Triangle, lines: [IStraightLine, IStraightLine]): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:486
Cuts out a slice of a triangle. A slice is the area between two lines going through the triangle. See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type | Description |
|---|---|---|
triangle |
Triangle | - |
lines |
[IStraightLine, IStraightLine] | - Array of two lines, each one being defined by {point0, sideCode0, point1, sideCode1} (If the point is one of the triangle's points, set sideCode to null) |
Returns: Triangle‹›[]
Static cutOutSliceWithPoint
▸ cutOutSliceWithPoint(triangle: Triangle, straightLine: IStraightLine, lineWithPoint: ILineWithPoint): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:592
Similar to cutOutSlice, but allows one line to have an additional in-between point (so lineWithPoint is expected to have point0, 1 and 2, with point1 being inside the triangle). The sides (= triangle side segment between straightLine and lineWithPoint starting/ending points) of the slice may be degenerated to points
see MeshModificator.cutOutSlice
See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
straightLine |
IStraightLine |
lineWithPoint |
ILineWithPoint |
Returns: Triangle‹›[]
Static cutSideContainedSharedPointTouchingTriangle
▸ cutSideContainedSharedPointTouchingTriangle(triangle: Triangle, sharedPoint: Vector3, notSharedPoint: Vector3, touchingSide: SideCode, touchingPoint: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:94
Divides the triangle into multiple triangles so that one of the resulting triangles resembles a triangle that shares part of a side + touching point on other side. Assumes the cut-out triangle shares one point with the side it is cut from
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sharedPoint |
Vector3 |
notSharedPoint |
Vector3 |
touchingSide |
SideCode |
touchingPoint |
Vector3 |
Returns: Triangle‹›
the triangle that resembles the cut out triangle
Static cutSideContainedSharedPointTriangle
▸ cutSideContainedSharedPointTriangle(triangle: Triangle, sideCode: SideCode, sharedPoint: Vector3, notSharedPoint: Vector3, insidePoint: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:68
Divides the triangle into multiple triangles so that one of the resulting triangles resembles a triangle that shares part of a side + inside point. Assumes the cut-out triangle shares one point with the side it is cut from. See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sharedPoint |
Vector3 |
notSharedPoint |
Vector3 |
insidePoint |
Vector3 |
Returns: Triangle‹›
the triangle that resembles the cut out triangle
Static cutSideContainedTouchingTriangle
▸ cutSideContainedTouchingTriangle(triangle: Triangle, sideCode: SideCode, sidePoint0: Vector3, sidePoint1: Vector3, touchingPoint: Vector3, touchedSide: SideCode): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1054
Divides the triangle into multiple triangles so that one of the resulting triangles resembles a triangle that shares part of a side + touching point on opposite side See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sidePoint0 |
Vector3 |
sidePoint1 |
Vector3 |
touchingPoint |
Vector3 |
touchedSide |
SideCode |
Returns: Triangle‹›
resulting triangle
Static cutSideContainedTriangle
▸ cutSideContainedTriangle(triangle: Triangle, sideCode: SideCode, sidePoint0: Vector3, sidePoint1: Vector3, insidePoint: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:38
Divides the triangle into multiple triangles so that one of the resulting triangles resembles a triangle that shares part of a side + inside point. See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
sidePoint0 |
Vector3 |
sidePoint1 |
Vector3 |
insidePoint |
Vector3 |
Returns: Triangle‹›
array of created triangles, with the first triangle being the one that resembles the specified triangle
Static cutThreePointLine
▸ cutThreePointLine(triangle: Triangle, insidePoint: Vector3, sidePoint0: Vector3, sidePoint1: Vector3): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:535
Cuts a line (with a point inside the triangle, thus three points) through the triangle. sidePoints may be corner points of the triangle
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
insidePoint |
Vector3 |
sidePoint0 |
Vector3 |
sidePoint1 |
Vector3 |
Returns: object
all created triangles on both sides of the line, since no notion of inside/outside is given
- array: Triangle‹›[] = all
Static cutThreeSideTouchingTriangle
▸ cutThreeSideTouchingTriangle(triangle: Triangle, pointAB: Vector3, pointBC: Vector3, pointCA: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:305
Just imagine a triforce: divides the triangle into 4 new triangles by cutting out a triangle in the middle that is built by the supplied side-dividing points
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
pointAB |
Vector3 |
pointBC |
Vector3 |
pointCA |
Vector3 |
Returns: Triangle‹›
the cut out triangle in the middle
Static cutTwoSideTouchingTriangle
▸ cutTwoSideTouchingTriangle(triangle: Triangle, sideCode0: SideCode, touchPoint0: Vector3, sideCode1: SideCode, touchPoint1: Vector3, insidePoint: Vector3): Triangle‹›
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:176
Cuts out a contained triangle that touches two sides with two of its points, with the third point being somewhere inside the containing triangle See MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode0 |
SideCode |
touchPoint0 |
Vector3 |
sideCode1 |
SideCode |
touchPoint1 |
Vector3 |
insidePoint |
Vector3 |
Returns: Triangle‹›
Static divideSide
▸ divideSide(triangle: Triangle, sideCode: SideCode, divisionPoint: Vector3): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:972
see TriangleMesh2D#divideSide
Also have see MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sideCode |
SideCode |
divisionPoint |
Vector3 |
Returns: object
-
array: [Triangle‹›, Triangle‹›] = [triangleLeft, triangleRight] as [Triangle, Triangle]
-
triangleLeft: Triangle‹›
-
triangleRight: Triangle‹›
Static divideSideTwice
▸ divideSideTwice(triangle: Triangle, sidePoint0: Vector3, sidePoint1: Vector3, sideCode: SideCode): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:1029
Divides a side twice, on sidePoint0 and sidePoint1. Returns left, middle and right resulting triangles ToDo: Unify parameters to match other functions: sideCode first, then points
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
sidePoint0 |
Vector3 |
sidePoint1 |
Vector3 |
sideCode |
SideCode |
Returns: object
Static tripleDivide
▸ tripleDivide(triangle: Triangle, divisionPoint: Vector3): object
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:964
see TriangleMesh2D#tripleDivide
Also see MeshModificatorIllustration.svg for example
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
divisionPoint |
Vector3 |
Returns: object
Static tripleDivideTwice
▸ tripleDivideTwice(triangle: Triangle, insidePoint0: Vector3, sidePoint0: Vector3, insidePoint1: Vector3, sidePoint1: Vector3): Triangle‹›[]
Defined in src/util/polygon/triangulatingClipper/MeshModificator.ts:359
Performs two tripleDivide operations. starting from insidePoint0 and insidePoint1. They are ordered so that the lines insidePoint0 -> sidePoint0 and insidePoint1 -> sidePoint1 are not intersected by triple divisions lines sidePoints may either be points on the side, or may be corner points of the triangle
Parameters:
| Name | Type |
|---|---|
triangle |
Triangle |
insidePoint0 |
Vector3 |
sidePoint0 |
Vector3 |
insidePoint1 |
Vector3 |
sidePoint1 |
Vector3 |
Returns: Triangle‹›[]