packages feed

waterfall-cad-examples-0.7.0.0: src/BoundingBoxExample.hs

{-|
<<models/bounding-boxes.glb>>
-}
module BoundingBoxExample
( boundingBoxExample
) where

import Data.Function ((&))
import qualified Waterfall.Solids as Solids
import qualified Waterfall.BoundingBox.Oriented as OBB
import qualified Waterfall.BoundingBox.AxisAligned as AABB
import qualified Waterfall.Transforms as Transforms
import qualified Waterfall.Colour as Colour
import Linear (V3 (..), unit, _y, _z, (^*))

boundingBoxExample :: Solids.Solid
boundingBoxExample = 
    let shape = Solids.unitSphere 
            & Transforms.scale (V3 0.5 3 5) 
            & Transforms.rotate (unit _z) 1 
            & Transforms.rotate (unit _y) 0.5
            & Solids.colourSolid Colour.red
        obb = OBB.orientedBoundingBox shape 
            & maybe Solids.emptySolid OBB.obbToSolid
            & Solids.colourSolid Colour.aqua
        aabb = AABB.axisAlignedBoundingBox shape 
            & maybe Solids.emptySolid AABB.aabbToSolid
            & Solids.colourSolid Colour.lime
        in mconcat 
            [ Transforms.translate (unit _y ^* (-5)) shape
            , obb
            , Transforms.translate (unit _y ^* 5) aabb
            ]