moonlight-triangulation-0.1.0.0: src-build/Moonlight/Triangulation/Internal/Join/Rebuild.hs
{-# LANGUAGE DataKinds #-}
-- | Canonical publication of an exact site section through the existing bulk
-- loader. Join, finite-set algebra, and constrained union share this boundary;
-- none owns a private point/payload carrier or a second constructor.
module Moonlight.Triangulation.Internal.Join.Rebuild
( rebuildCanonicalSiteSet
) where
import qualified Data.Vector as V
import Moonlight.Triangulation.BulkLoad
( DuplicatePayloadPolicy (KeepFirstPayload)
, delaunayFromCoordinates
)
import Moonlight.Triangulation.Internal.Canonical (canonicalize)
import Moonlight.Triangulation.Internal.Join.SiteSet (SiteSet, siteSetAssocs)
import Moonlight.Triangulation.Internal.Representation
( BuildResult (buildTriangulation)
, Triangulation
)
import Moonlight.Triangulation.Internal.Types
( BuildError
, ConstraintMode (Unconstrained)
, unitElementDefaults
)
rebuildCanonicalSiteSet
:: SiteSet annotation
-> Either BuildError (Triangulation 'Unconstrained annotation () () ())
rebuildCanonicalSiteSet sites = do
built <-
delaunayFromCoordinates
unitElementDefaults
(V.fromList (fmap fst associations))
(V.fromList (fmap snd associations))
KeepFirstPayload
canonicalize (buildTriangulation built)
where
associations = siteSetAssocs sites