packages feed

waterfall-cad-examples-0.5.0.0: src/SVG/ReadFileExample.hs

module SVG.ReadFileExample 
( readFileExample 
) where

import qualified Waterfall.SVG
import qualified Waterfall.Solids as Solids
import qualified Waterfall.TwoD.Shape as Shape
import qualified Waterfall.Transforms as Transforms
import qualified Waterfall.Booleans as Booleans
import Linear (V3 (..))

readFileExample :: FilePath -> IO Solids.Solid
readFileExample filepath =
    let expandVertically = Transforms.translate (V3 0 0 (-0.5)) . Transforms.scale (V3 1 1 2)
        xor a b = (a `Booleans.difference` expandVertically b) <> (b `Booleans.difference` expandVertically a)
        solidify = foldr xor Solids.nowhere . fmap (Solids.prism 1 . Shape.makeShape)
    in either (error . show) solidify <$> Waterfall.SVG.readSVG filepath