Skip to content

Instantly share code, notes, and snippets.

import qualified Waterfall
import Linear
import Data.Maybe (fromMaybe)
outerBoundingBox :: (V3 Double, V3 Double) -> (V3 Double, V3 Double)
outerBoundingBox (lo, hi) = let b = 2 in ( lo - V3 b b 0, hi + V3 50 b 0)
innerBoundingBox :: (V3 Double, V3 Double) -> (V3 Double, V3 Double)
innerBoundingBox (lo, hi) = let b = 1 in ( lo - V3 b b (-1), hi + V3 60 b 1)
import qualified Waterfall
import qualified Waterfall.TwoD.Shape as Shape
import Waterfall.Internal.Solid (debug)
import Linear
import Control.Lens ((^.))
import Data.Monoid (Endo (..))
tSlotCrossSection :: Waterfall.Path2D
tSlotCrossSection =
let oneQuarter =
import qualified Waterfall
import qualified Waterfall.TwoD.Shape as Shape
import Waterfall.Internal.Solid (debug)
import Linear
import Control.Lens ((^.))
pathFactor :: Double
pathFactor = 12.5
heartPath :: Waterfall.Path
import qualified Waterfall.TwoD.Path2D as Path2D
import qualified Waterfall.TwoD.Shape as Shape
import qualified Waterfall.Path as Path
import qualified Waterfall.Solids as Solids
import qualified Waterfall.Transforms as Transforms
import Waterfall.Booleans
import Waterfall.Sweep (sweep)
import Waterfall.IO (writeSTL)
import Linear
footR = 20
import qualified Waterfall
import Linear
import Algebra.Lattice
import Algebra.Lattice.Dropped
intersection :: (Functor f, Foldable f) => f Waterfall.Solid -> Waterfall.Solid
intersection = foldDropped Waterfall.nowhere id . meets . fmap Drop
cubes :: Waterfall.Solid
cubes =
import qualified Waterfall
import Linear
slotT :: Double
slotT = 36
tableMount :: Waterfall.Solid
tableMount =
let tableR = 120 / (sqrt 2)
tableD = 18
import qualified Waterfall
import Linear
shaft :: Waterfall.Solid
shaft =
let r = 3
h = 20
cutOff = 2
in (Waterfall.scale (V3 r r h) Waterfall.unitCylinder) `Waterfall.difference`
#!/usr/bin/env stack
{- stack script --resolver lts-21.13
--package linear
--package lens
--package waterfall-cad
--extra-dep waterfall-cad-0.1.1.1
--extra-dep opencascade-hs-0.1.1.1
-}
import qualified Waterfall
import qualified Waterfall.TwoD.Shape as Shape
import Codec.Picture
import Codec.Picture.Types
import qualified Codec.Picture.Png (writeDynamicPng)
import Control.Lens
import Control.Monad (forM_)
transformImage :: Image PixelYCbCr8 -> Image PixelYCbCr8
transformImage img = img -- Transform the image here
transformRGBImage :: Image PixelRGB8 -> Image PixelRGB8
transformRGBImage img = img -- Transform the RGB image here
{-# Language FlexibleInstances #-}
module SillyVersion where
import Data.Ratio
data SillyVersion = SillyVersion Integer Integer Integer
display :: (() -> SillyVersion) -> String
display f = let SillyVersion maj min pat = f ()
in show maj <> "." <> show min <> "." <> show pat