Skip to content

editorGlobalsMeshModificator

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

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


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


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‹›[]