packages feed

waterfall-cad-examples-0.6.3.0: src/CsgExample.hs

{-|
<<models/csg.glb>>
-}
module CsgExample
( csgExample
) where 

import qualified Waterfall.Solids as Solids
import qualified Waterfall.Transforms as Transforms
import Waterfall.Booleans ( union, intersection, difference )
import Linear (V3 (..), unit, _x, _y )
import Data.Function ((&))

csgExample :: Solids.Solid
csgExample = let 
    sphere = Solids.unitSphere
    cube = Transforms.uScale 1.5 Solids.centeredCube
    cylinder = Solids.centeredCylinder
         & Transforms.scale (V3 0.55 0.55 4) 
    cylinderA = Transforms.rotate (unit _x) (pi/2) cylinder
    cylinderB = Transforms.rotate (unit _y) (pi/2) cylinder
  in (cube `intersection` sphere) `difference` (cylinder `union` cylinderA `union` cylinderB)