packages feed

implicit-0.4.0.0: Examples/example17.hs

{- ORMOLU_DISABLE -}
-- Example 17, pulled from our benchmarking suite.
import Control.Applicative (pure)
import Prelude ((<$>), ($), zipWith3, fmap, fromIntegral, (*), (/), Bool(..))
import Graphics.Implicit (cube, union, translate, writeSTL, V3(..))
import Graphics.Implicit.Definitions (Fastℕ, ℝ, ℝ3, SymbolicObj3)

default (Fastℕ, ℝ)

object2 :: SymbolicObj3
object2 = squarePipe (pure 10) 1 100
    where
      squarePipe :: ℝ3 -> ℝ -> ℝ -> SymbolicObj3
      squarePipe (V3 x y z) diameter precision =
            union
            ((\start -> translate start
               $ cube True (pure diameter)
             )
             <$>
              zipWith3
                V3
                (fmap (\n -> (fromIntegral n / precision) * x) [0..100])
                (fmap (\n -> (fromIntegral n / precision) * y) [0..100])
                (fmap (\n -> (fromIntegral n / precision) * z) [0..100]))

main = writeSTL 1 "example17.stl" object2