packages feed

moonlight-triangulation-1.4.0.3: src-public/Moonlight/Triangulation.hs

-- | The public surface for Delaunay triangulations as values of finite
-- coordinate supports. Its exports are grouped by object, generation,
-- annotations, finite-set algebra, constraints, refinement, observations and
-- validation.
--
-- Geometry-only set laws are observed after erasing vertex annotations with
-- @mapVertices (const ())@ and applying 'canonicalize'. Successful construction
-- may retain schedule-dependent resident numbering, so structural 'Eq' compares
-- stored representations rather than silently normalizing them. Annotations may
-- change independently through 'mapVertices' and 'setVertexData'; they never
-- determine geometry.
--
-- The algebra is deliberately partial. Finite arena exhaustion is returned as
-- 'BuildError', while unrealizable constrained compositions return
-- 'ConstrainedUnionError'. These typed obstructions are why the surface exposes
-- explicit operations rather than total 'Semigroup' instances. Refinement then
-- composes over any admitted result without introducing a second mesh type.
module Moonlight.Triangulation
  ( -- * The object — a triangulation is a value of its site set
    Triangulation
  , DelaunayTriangulation
  , ConstrainedDelaunayTriangulation
  , ConstraintMode (..)
  , Point (..)
  , QueryPoint
  , queryPointValue
  , PointValidationError (..)
  , mkQueryPoint
  , HasPosition (..)
  , ElementDefaults (..)
  , unitElementDefaults
  , JoinSemilattice (..)
  , Coordinate2 (..)
  , mapCoordinate2
    -- | An identifier is admitted by the triangulation that issued it. The
    -- observations below index without a second bounds check, so the
    -- constructors are withheld and the projections are not: an identifier
    -- can be read, compared and carried, and can only be obtained from a mesh.
  , VertexId
  , unVertexId
  , FaceId
  , unFaceId
  , DirectedEdgeId
  , unDirectedEdgeId
  , UndirectedEdgeId
  , unUndirectedEdgeId
  , reverseEdge
  , asUndirected
  , normalizedDirected
  , reversedDirected
  , directedPair
  , isNormalized

    -- * Generation and editing — persistent verbs publish one new value;
    -- sessions compose many edits behind one sealed thaw/freeze boundary
  , empty
  , clear
  , delaunay
  , delaunayGeometry
  , DuplicatePayloadPolicy (..)
  , delaunayFromCoordinates
  , BuildResult
  , buildTriangulation
  , buildInputVertices
  , buildStats
  , BuildStats (..)
  , emptyBuildStats
  , InsertionDisposition (..)
  , InsertionResult
  , insertionTriangulation
  , insertionVertex
  , insertionDisposition
  , insertionStats
  , insert
  , insertAt
  , insertMany
  , RemovalOutcome (..)
  , RemovalResult (..)
  , removeVertex
  , locateAndRemove
  , Session
  , withSession
  , insertVertex
  , insertVertexAt
  , insertVertexAtNear
  , removeAt
  , removeAtNear
  , removeManyAt
  , removeManyAtNear
  , refuse
  , BuildError (..)
  , PublicationStats (..)
  , ValidationClosureStats (..)
  , CoordinateError (..)
  , NonFiniteValue (..)

    -- * The annotation functor — payloads annotate geometry, never author it;
    -- the mesh is the same mesh before and after
  , mapVertices
  , mapDirectedEdges
  , mapUndirectedEdges
  , mapFaces
  , imapUndirectedEdges
  , imapFaces
  , PayloadTraversal
  , vertexPayloads
  , directedPayloads
  , undirectedPayloads
  , facePayloads
  , overPayloads
  , foldPayloads
  , payloadList
  , geometryOnlyPublication
  , vertexData
  , directedEdgeData
  , undirectedEdgeData
  , faceData
  , setVertexData
  , setDirectedEdgeData
  , setUndirectedEdgeData
  , setFaceData

    -- * Finite-set algebra and its normal form — support order is observable,
    -- intersection can combine heterogeneous annotations, and each
    -- construction returns its obstruction rather than an instance that lies
  , canonicalize
  , SiteRelation (..)
  , siteRelation
  , union
  , unions
  , intersection
  , intersectionWith
  , difference
  , symmetricDifference

    -- * The constraint layer — 'constrainedDelaunay' is the partial map from
    -- (sites, segments), defined exactly on realizable segment sets and
    -- naming the corridor that blocked it where it is not
  , constrainedDelaunay
  , constrainedDelaunayMaximal
  , fromDelaunay
  , constraintEdges
  , isConstraintEdge
  , boundedRegionFaces
  , CdtError (..)
  , CorridorObstruction (..)
  , CanonicalSegment
  , segmentStart
  , segmentEnd
  , ConstraintConflict
  , conflictFirstSegment
  , conflictSecondSegment
  , ConstrainedUnionError (..)
  , ConstraintBatchResult
  , constraintBatchTriangulation
  , constraintBatchOutcomes
  , constraintBatchStats
  , ConstrainedExtensionResult
  , constrainedExtensionConstraintBatch
  , constrainedExtensionBuildStats
  , ConstraintRecoveryResult (..)
  , ConstraintResult
  , ConstraintOutcome (..)
  , ConstraintBatchStats (..)
  , ConstraintSplitBatchResult
  , CdtBuildResult (..)
  , ConstrainedSeamSide (..)
  , ConstrainedSeamFaceEvidence
  , constrainedSeamSourceFace
  , constrainedSeamTargetFace
  , constrainedSeamFaceFirstPoint
  , constrainedSeamFaceSecondPoint
  , constrainedSeamFaceThirdPoint
  , ConstrainedSeamResult
  , constrainedSeamResultTriangulation
  , constrainedSeamLeftFaceCount
  , constrainedSeamRightFaceEvidence
  , constrainedSeamJoinFaces
  , constrainedSeamLeftConstraintCount
  , constrainedSeamConstraintStats
  , constrainedSeamBuildStats
  , constrainedSeamPublicationStats
  , constrainedSeamCachedFrontierPointReads
  , constraintSegments
  , unionConstrainedWith
  , unionConstrained
  , joinSeparatedConstrained
  , extendConstrainedWith
  , constraintStorageBytes
  , existsConstraint
  , canAddConstraint
  , intersectsConstraint
  , getConflictingEdgesBetweenPoints
  , getConflictingEdgesBetweenVertices
  , recoverConstraints
  , addConstraintEdge
  , addConstraintEdges
  , addConstraintAndSplit
  , addConstraintsAndSplit
  , removeConstraintEdge
  , outerRegionFaces

    -- * Refinement — budget-bounded, composed after any operation above rather
    -- than configured into it; 'refinementComplete' reports sufficiency, not
    -- effort
  , refine
  , refineWithinDomain
  , validateRefinementParameters
  , RefinementParameters (..)
  , defaultRefinementParameters
  , RefinementReceipt
  , RefinementDomainResult
  , RefinementResult
  , refinementDomainResult
  , refinementDomainReceipt
  , refinedTriangulation
  , refinementStats
  , refinementVisitedJoinFaces
  , refinementVisitedProtectedFaces
  , refinementCreatedFaces
  , refinementFinalPermittedFaces
  , refinementFinalInterfaceIncidence
  , refinementTouchedEdges
  , refinementRemovedEdges
  , refinementInterfaceBoundaryReads
  , refinementAttemptedBoundaryCrossings
  , refinementPublicationStats
  , refinementValidationClosureStats
  , refinementAddedVertices
  , refinementExcludedFaces
  , refinementComplete
  , withMinimumAngle
  , radiusEdgeRatioForAngle

    -- * Observations — pure functions of the value: incidence, location,
    -- interpolation and barrier parity, none of which build a second mesh
  , numVertices
  , vertices
  , foldVertices'
  , vertexPoint
  , vertexPoints
  , numFaces
  , numInnerFaces
  , allFaces
  , innerFaces
  , foldAllFaces'
  , foldInnerFaces'
  , outerFace
  , adjacentEdge
  , faceDirectedEdges
  , faceVertices
  , innerFaceDirectedEdges
  , innerFaceVertices
  , innerFaceDirectedEdgeTriples
  , innerFaceVertexTriples
  , foldFaceDirectedEdges'
  , vertexOutEdge
  , vertexOutgoingEdges
  , foldVertexOutgoingEdges'
  , numDirectedEdges
  , directedEdges
  , foldDirectedEdges'
  , numUndirectedEdges
  , undirectedEdges
  , foldUndirectedEdges'
  , hullEdges
  , hullVertices
  , undirectedEndpoints
  , origin
  , destination
  , next
  , previous
  , clockwise
  , counterClockwise
  , incidentFace
  , isOuterDirectedEdge
  , isBoundaryEdge
  , numConstraints
  , locatePoint
  , locatePointWithHint
  , Location (..)
  , nearestNeighbor
  , NearestStats (..)
  , interpolateNearest
  , interpolateBarycentric
  , LocationHint (..)
  , LocationStats (..)
  , emptyLocationStats
  , Intersection (..)
  , lineIntersections
  , lineIntersectionsBetweenVertices
  , foldCorridorBetweenPoints
  , foldCorridorBetweenVertices
  , conflictingEdges
  , segmentIntersectsNonCollinear
  , DistanceMetric (..)
  , CircleMetric
  , CircleMetricError (..)
  , RectangleMetric
  , RectangleMetricError (..)
  , circleMetric
  , rectangleMetric
  , edgesInShape
  , verticesInShape
  , edgesInCircle
  , verticesInCircle
  , edgesInRectangle
  , verticesInRectangle
  , floodFillFaces
  , outerFaceFloodFill
  , facesAtEvenBarrierDepth

    -- ** Robust planar predicates and constructions
  , orient2d
  , sideQuery
  , inCircle
  , segmentRelation
  , segmentsProperlyCross
  , segmentsIntersect
  , squaredDistance
  , distance
  , midpoint
  , centroid
  , triangleArea
  , circumcenter
  , barycentricCoordinates

    -- ** Face regions and alpha filtration
  , FaceComponent
  , faceComponentFaces
  , BoundaryOrientation (..)
  , BoundaryLoop
  , boundaryLoopOrientation
  , boundaryLoopResidentVertices
  , boundaryLoopVertices
  , RegionBoundary
  , regionBoundaryOuterLoop
  , regionBoundaryHoleLoops
  , BoundaryObstruction (..)
  , faceComponents
  , faceComponentsBy
  , labelledRegionBoundaries
  , componentBoundaryLoops
  , componentBoundary
  , componentBoundaryForFaces
  , RadiusSquared
  , RadiusSquaredError (..)
  , mkRadiusSquared
  , radiusSquaredValue
  , AlphaBirth
  , alphaBirthNumerator
  , alphaBirthDenominator
  , alphaBirthToDouble
  , alphaBirthFromRadiusSquared
  , AlphaFiltration
  , AlphaFiltrationError (..)
  , alphaFiltration
  , alphaFiltrationCellSet
  , alphaVertexBirth
  , alphaEdgeBirth
  , alphaFaceBirth
  , alphaFiltrationCriticalBirths
  , alphaComplexAtBirth
  , alphaComplexAtRadius
  , alphaShapeContainsFace

    -- * Exact planar regions — authoritative rational geometry, labelled
    -- overlay, closed cell selections, valuations, and polygonal morphology
  , ExactRational
  , ExactArithmeticError (..)
  , exactRational
  , exactRationalNumerator
  , exactRationalDenominator
  , ExactPoint
  , exactPoint
  , exactPointCoordinates
  , exactPointCross
  , ExactVector (..)
  , exactVectorFromPoints
  , addExactVectors
  , exactCross
  , compareExactVectorAngle
  , translateExactPoint
  , ExactSegment
  , ExactGeometryError (..)
  , exactSegment
  , exactSegmentEndpoints
  , exactPointFromPoint
  , exactPointFromQueryPoint
  , exactPointToEmbeddingCandidate
  , exactOrient2d
  , exactOnClosedSegment
  , SegmentRelation (..)
  , allSegmentRelations
  , exactSegmentRelation
  , ExactIntersectionError (..)
  , exactLineIntersection
  , exactSupportingLineIntersection
  , ExactLoop
  , exactLoop
  , exactLoopPoints
  , PolygonComponent
  , polygonComponent
  , polygonOuterLoop
  , polygonHoleLoops
  , PlanarRegion
  , planarRegion
  , planarRegionComponents
  , emptyPlanarRegion
  , RegionPointLocation (..)
  , regionPointLocation
  , PlanarLayer
  , planarLayerOutsideLabel
  , planarLayerRegions
  , planarLayer
  , planarLayerLabelAt
  , RegionValidationError (..)
  , RegionPublicationError (..)
  , labelledPlanarLayer
  , ExactCellSet
  , CellSelectionError (..)
  , exactCellSet
  , closeFaceCellSet
  , exactCellSetVertexCount
  , exactCellSetEdgeCount
  , exactCellSetFaceCount
  , foldExactCellVertices
  , foldExactCellEdges
  , foldExactCellFaces
  , OverlayResult
  , OverlayReceipt (..)
  , OverlayError (..)
  , OverlaySelectionKind (..)
  , OverlaySelectionError (..)
  , overlayLayers
  , overlayEmbeddedTriangulation
  , overlayReceipt
  , overlayCells
  , overlayArrangementVertices
  , overlayArrangementEdges
  , overlayPlanarLayer
  , overlaySelectedRegion
  , overlayClosedUnion
  , overlayClosedIntersection
  , overlayRegularizedDifference
  , EulerCharacteristic
  , eulerCharacteristicValue
  , ExactArea
  , exactAreaValue
  , ExactLengthTerm
  , lengthCoefficient
  , squaredLength
  , ExactLengthExpression
  , exactLengthTerms
  , CertifiedInterval (..)
  , ExactLengthMeasurement
  , exactLengthExpression
  , exactLengthBounds
  , PlanarValuations
  , valuationEuler
  , valuationArea
  , valuationIntrinsic1
  , ValuationError (..)
  , cellValuations
  , regionValuations
  , planarValuationsPerimeter
  , cellSetPerimeter
  , regionPerimeter
  , ConvexPolygon
  , convexPolygon
  , convexPolygonPoints
  , StructuringElement
  , structuringElement
  , MinkowskiOperation (..)
  , MinkowskiError (..)
  , MinkowskiReceipt (..)
  , convexMinkowskiSum
  , minkowskiSum
  , erodeBy
  , openWith
  , closeWith
  , polygonOffset
  , polygonInset

    -- * Discharge — the invariants the constructors guarantee, checkable on a
    -- value built by any route; every violation is a value carrying its witness
  , validateTopology
  , validateDelaunay
  , validateTriangulation
  , triangulationIsValid
  , faceArea
  , faceMinimumAngleDegrees
  , InvariantViolation (..)
  ) where

import Moonlight.Triangulation.BulkLoad
  ( DuplicatePayloadPolicy (..)
  , clear
  , delaunay
  , delaunayFromCoordinates
  , delaunayGeometry
  , empty
  , insert
  , insertAt
  , insertMany
  )
import Moonlight.Triangulation.CellSet
  ( CellSelectionError (..)
  , ExactCellSet
  , closeFaceCellSet
  , exactCellSet
  , exactCellSetEdgeCount
  , exactCellSetFaceCount
  , exactCellSetVertexCount
  , foldExactCellEdges
  , foldExactCellFaces
  , foldExactCellVertices
  )
import Moonlight.Triangulation.Dcel
  ( adjacentEdge
  , clockwise
  , counterClockwise
  , destination
  , directedEdgeData
  , faceData
  , faceDirectedEdges
  , faceVertices
  , foldFaceDirectedEdges'
  , foldVertexOutgoingEdges'
  , imapFaces
  , imapUndirectedEdges
  , innerFaceDirectedEdges
  , innerFaceDirectedEdgeTriples
  , innerFaceVertices
  , innerFaceVertexTriples
  , incidentFace
  , isBoundaryEdge
  , isConstraintEdge
  , isOuterDirectedEdge
  , next
  , numConstraints
  , numDirectedEdges
  , numFaces
  , numInnerFaces
  , numUndirectedEdges
  , numVertices
  , origin
  , outerFace
  , previous
  , setDirectedEdgeData
  , setFaceData
  , setUndirectedEdgeData
  , setVertexData
  , undirectedEdgeData
  , undirectedEndpoints
  , vertexData
  , vertexOutEdge
  , vertexOutgoingEdges
  , vertexPoint
  , vertexPoints
  )
import Moonlight.Triangulation.Alpha
  ( AlphaBirth
  , AlphaFiltration
  , AlphaFiltrationError (..)
  , alphaBirthDenominator
  , alphaBirthFromRadiusSquared
  , alphaBirthNumerator
  , alphaBirthToDouble
  , alphaComplexAtBirth
  , alphaComplexAtRadius
  , alphaEdgeBirth
  , alphaFaceBirth
  , alphaFiltration
  , alphaFiltrationCellSet
  , alphaFiltrationCriticalBirths
  , alphaShapeContainsFace
  , alphaVertexBirth
  )
import Moonlight.Triangulation.FloodFillIterator
  ( BoundaryLoop
  , BoundaryObstruction (..)
  , BoundaryOrientation (..)
  , CircleMetric
  , CircleMetricError (..)
  , DistanceMetric (..)
  , FaceComponent
  , RectangleMetric
  , RectangleMetricError (..)
  , RegionBoundary
  , boundaryLoopOrientation
  , boundaryLoopResidentVertices
  , boundaryLoopVertices
  , circleMetric
  , componentBoundary
  , componentBoundaryLoops
  , componentBoundaryForFaces
  , edgesInCircle
  , edgesInRectangle
  , edgesInShape
  , faceComponentFaces
  , faceComponents
  , faceComponentsBy
  , facesAtEvenBarrierDepth
  , floodFillFaces
  , labelledRegionBoundaries
  , outerFaceFloodFill
  , rectangleMetric
  , regionBoundaryHoleLoops
  , regionBoundaryOuterLoop
  , verticesInCircle
  , verticesInRectangle
  , verticesInShape
  )
import Moonlight.Triangulation.Exact
  ( ExactGeometryError (..)
  , ExactIntersectionError (..)
  , ExactPoint
  , ExactSegment
  , ExactVector (..)
  , SegmentRelation (..)
  , addExactVectors
  , allSegmentRelations
  , compareExactVectorAngle
  , exactCross
  , exactLineIntersection
  , exactOnClosedSegment
  , exactOrient2d
  , exactPoint
  , exactPointCoordinates
  , exactPointCross
  , exactPointFromPoint
  , exactPointFromQueryPoint
  , exactPointToEmbeddingCandidate
  , exactSegment
  , exactSegmentEndpoints
  , exactSegmentRelation
  , exactSupportingLineIntersection
  , exactVectorFromPoints
  , translateExactPoint
  )
import Moonlight.Triangulation.Handles.HandleDefs
  ( DirectedEdgeId
  , FaceId
  , UndirectedEdgeId
  , VertexId
  , asUndirected
  , directedPair
  , isNormalized
  , normalizedDirected
  , reverseEdge
  , reversedDirected
  , unDirectedEdgeId
  , unFaceId
  , unUndirectedEdgeId
  , unVertexId
  )
import Moonlight.Triangulation.Handles.Iterators.FixedIterators
  ( allFaces
  , directedEdges
  , foldAllFaces'
  , foldDirectedEdges'
  , foldInnerFaces'
  , foldUndirectedEdges'
  , foldVertices'
  , innerFaces
  , undirectedEdges
  , vertices
  )
import Moonlight.Triangulation.Handles.Iterators.HullIterator
  ( hullEdges
  , hullVertices
  )
import Moonlight.Triangulation.Canonical (canonicalize)
import Moonlight.Triangulation.Cdt
  ( CanonicalSegment
  , CdtBuildResult (..)
  , CdtError (..)
  , ConstrainedExtensionResult
  , ConstrainedSeamFaceEvidence
  , ConstrainedSeamResult
  , ConstrainedSeamSide (..)
  , ConstrainedUnionError (..)
  , ConstraintBatchStats (..)
  , ConstraintBatchResult
  , ConstraintConflict
  , ConstraintOutcome (..)
  , ConstraintRecoveryResult (..)
  , ConstraintResult
  , ConstraintSplitBatchResult
  , CorridorObstruction (..)
  , addConstraintAndSplit
  , addConstraintEdge
  , addConstraintEdges
  , addConstraintsAndSplit
  , boundedRegionFaces
  , canAddConstraint
  , constrainedDelaunay
  , constrainedDelaunayMaximal
  , constrainedExtensionBuildStats
  , constrainedExtensionConstraintBatch
  , constraintEdges
  , constraintBatchOutcomes
  , constraintBatchStats
  , constraintBatchTriangulation
  , constraintSegments
  , constraintStorageBytes
  , constrainedSeamBuildStats
  , constrainedSeamConstraintStats
  , constrainedSeamCachedFrontierPointReads
  , constrainedSeamFaceFirstPoint
  , constrainedSeamFaceSecondPoint
  , constrainedSeamFaceThirdPoint
  , constrainedSeamLeftConstraintCount
  , constrainedSeamLeftFaceCount
  , constrainedSeamJoinFaces
  , constrainedSeamPublicationStats
  , constrainedSeamResultTriangulation
  , constrainedSeamRightFaceEvidence
  , constrainedSeamSourceFace
  , constrainedSeamTargetFace
  , conflictFirstSegment
  , conflictSecondSegment
  , existsConstraint
  , extendConstrainedWith
  , fromDelaunay
  , getConflictingEdgesBetweenPoints
  , getConflictingEdgesBetweenVertices
  , intersectsConstraint
  , joinSeparatedConstrained
  , outerRegionFaces
  , recoverConstraints
  , removeConstraintEdge
  , segmentEnd
  , segmentStart
  , unionConstrained
  , unionConstrainedWith
  )
import Moonlight.Triangulation.Internal.Paged (PublicationStats (..))
import Moonlight.Triangulation.Internal.ExactRational
  ( ExactArithmeticError (..)
  , ExactRational
  , exactRational
  , exactRationalDenominator
  , exactRationalNumerator
  )
import Moonlight.Triangulation.Internal.Representation (geometryOnlyPublication)
import Moonlight.Triangulation.Interop
  ( Coordinate2 (..)
  , mapCoordinate2
  )
import Moonlight.Triangulation.IntersectionIterator
  ( Intersection (..)
  , conflictingEdges
  , foldCorridorBetweenPoints
  , foldCorridorBetweenVertices
  , lineIntersections
  , lineIntersectionsBetweenVertices
  , segmentIntersectsNonCollinear
  )
import Moonlight.Triangulation.Types
  ( BuildError (..)
  , BuildResult
  , BuildStats (..)
  , ConstrainedDelaunayTriangulation
  , ConstraintMode (..)
  , CoordinateError (..)
  , DelaunayTriangulation
  , ElementDefaults (..)
  , HasPosition (..)
  , InsertionDisposition (..)
  , InsertionResult
  , InvariantViolation (..)
  , Location (..)
  , LocationHint (..)
  , LocationStats (..)
  , NearestStats (..)
  , NonFiniteValue (..)
  , Point (..)
  , PointValidationError (..)
  , QueryPoint
  , RadiusSquared
  , RadiusSquaredError (..)
  , RefinementDomainResult
  , RefinementParameters (..)
  , RefinementReceipt
  , RefinementResult
  , SiteRelation (..)
  , Triangulation
  , ValidationClosureStats (..)
  , buildInputVertices
  , buildStats
  , buildTriangulation
  , defaultRefinementParameters
  , emptyBuildStats
  , emptyLocationStats
  , insertionDisposition
  , insertionStats
  , insertionTriangulation
  , insertionVertex
  , mkRadiusSquared
  , queryPointValue
  , radiusSquaredValue
  , refinedTriangulation
  , refinementAddedVertices
  , refinementAttemptedBoundaryCrossings
  , refinementComplete
  , refinementCreatedFaces
  , refinementDomainReceipt
  , refinementDomainResult
  , refinementExcludedFaces
  , refinementFinalInterfaceIncidence
  , refinementFinalPermittedFaces
  , refinementInterfaceBoundaryReads
  , refinementPublicationStats
  , refinementRemovedEdges
  , refinementStats
  , refinementTouchedEdges
  , refinementValidationClosureStats
  , refinementVisitedJoinFaces
  , refinementVisitedProtectedFaces
  , unitElementDefaults
  )
import Moonlight.Triangulation.Interpolation
  ( interpolateBarycentric
  , interpolateNearest
  , nearestNeighbor
  )
import Moonlight.Triangulation.Minkowski
  ( ConvexPolygon
  , MinkowskiError (..)
  , MinkowskiOperation (..)
  , MinkowskiReceipt (..)
  , StructuringElement
  , closeWith
  , convexMinkowskiSum
  , convexPolygon
  , convexPolygonPoints
  , erodeBy
  , minkowskiSum
  , openWith
  , polygonInset
  , polygonOffset
  , structuringElement
  )
import Moonlight.Triangulation.Math
  ( barycentricCoordinates
  , centroid
  , circumcenter
  , distance
  , inCircle
  , midpoint
  , mkQueryPoint
  , orient2d
  , segmentRelation
  , segmentsIntersect
  , segmentsProperlyCross
  , sideQuery
  , squaredDistance
  , triangleArea
  )
import Moonlight.Triangulation.Overlay
  ( OverlayError (..)
  , OverlayReceipt (..)
  , OverlayResult
  , OverlaySelectionError (..)
  , OverlaySelectionKind (..)
  , overlayArrangementEdges
  , overlayArrangementVertices
  , overlayCells
  , overlayClosedIntersection
  , overlayClosedUnion
  , overlayEmbeddedTriangulation
  , overlayLayers
  , overlayPlanarLayer
  , overlayReceipt
  , overlayRegularizedDifference
  , overlaySelectedRegion
  )
import Moonlight.Triangulation.Payload
  ( PayloadTraversal
  , directedPayloads
  , facePayloads
  , foldPayloads
  , mapDirectedEdges
  , mapFaces
  , mapUndirectedEdges
  , mapVertices
  , overPayloads
  , payloadList
  , undirectedPayloads
  , vertexPayloads
  )
import Moonlight.Triangulation.PointLocation
  ( locatePoint
  , locatePointWithHint
  )
import Moonlight.Triangulation.Removal
  ( RemovalOutcome (..)
  , RemovalResult (..)
  , locateAndRemove
  , removeVertex
  )
import Moonlight.Triangulation.JoinSemilattice (JoinSemilattice (..))
import Moonlight.Triangulation.Refinement
  ( radiusEdgeRatioForAngle
  , refine
  , refineWithinDomain
  , validateRefinementParameters
  , withMinimumAngle
  )
import Moonlight.Triangulation.Region
  ( ExactLoop
  , PlanarLayer
  , PlanarRegion
  , PolygonComponent
  , RegionPointLocation (..)
  , RegionPublicationError (..)
  , RegionValidationError (..)
  , emptyPlanarRegion
  , exactLoop
  , exactLoopPoints
  , labelledPlanarLayer
  , planarLayer
  , planarLayerLabelAt
  , planarLayerOutsideLabel
  , planarLayerRegions
  , planarRegion
  , planarRegionComponents
  , polygonComponent
  , polygonHoleLoops
  , polygonOuterLoop
  , regionPointLocation
  )
import Moonlight.Triangulation.SetAlgebra
  ( difference
  , intersection
  , intersectionWith
  , siteRelation
  , symmetricDifference
  , union
  , unions
  )
import Moonlight.Triangulation.Session
  ( Session
  , insertVertex
  , insertVertexAt
  , insertVertexAtNear
  , refuse
  , removeAt
  , removeAtNear
  , removeManyAt
  , removeManyAtNear
  , withSession
  )
import Moonlight.Triangulation.Validation
  ( faceArea
  , faceMinimumAngleDegrees
  , triangulationIsValid
  , validateDelaunay
  , validateTopology
  , validateTriangulation
  )
import Moonlight.Triangulation.Valuation
  ( CertifiedInterval (..)
  , EulerCharacteristic
  , ExactArea
  , ExactLengthExpression
  , ExactLengthMeasurement
  , ExactLengthTerm
  , PlanarValuations
  , ValuationError (..)
  , cellSetPerimeter
  , cellValuations
  , eulerCharacteristicValue
  , exactAreaValue
  , exactLengthBounds
  , exactLengthExpression
  , exactLengthTerms
  , lengthCoefficient
  , planarValuationsPerimeter
  , regionPerimeter
  , regionValuations
  , squaredLength
  , valuationArea
  , valuationEuler
  , valuationIntrinsic1
  )