Files
loop/src/Dodge/Picture.hs
T

58 lines
1.6 KiB
Haskell

{- |
Compound, universal pictures.
Creates uniform sizes and commands for the Dodge modules. -}
module Dodge.Picture
where
import Geometry
import Geometry.Vector3D
import Geometry.Data
import Picture
-- {- |
-- Current thickness: 2 -}
-- thickLine :: [Point2] -> Picture
-- thickLine = lineOfThickness 2
{- |
Current thickness: 3 -}
vThickLine :: [Point2] -> Picture
vThickLine = lineOfThickness 3
{- |
Current thickness: 6 -}
vvThickLine :: [Point2] -> Picture
vvThickLine = lineOfThickness 6
-- shit this is ugly
lineOfThickness :: Float -> [Point2] -> Picture
lineOfThickness t = pictures . f
where
f (x:y:ys)
| x == y = f (x:ys)
| otherwise = polygon [x +.+ n x y, x -.- n x y, y -.- n x y, y +.+ n x y] : f (y:ys)
f _ = []
n a b = (t*0.5) *.* errorNormalizeV 42 (vNormal (a -.- b))
wedgeOfThickness :: Float -> Point2 -> Point2 -> Picture
wedgeOfThickness t x y
| x == y = blank
| otherwise = pictures
[uncurry translate x $ circleSolid (0.5*t)
,polygon [x +.+ n x y, x -.- n x y, y]
]
where
n a b = (t*0.5) *.* errorNormalizeV 4200 (vNormal (a -.- b))
verticalPipe :: Float -> Color -> Point2 -> Float -> Float -> Picture
verticalPipe w col (xx,xy) za zb = pictures $ map (poly3Col . f) ps
where
x = (xx,xy,0)
xs = map (\(a,b) -> x +.+.+ (a,b,za)) [(w,0),(0,w),(-w,0),(0,-w)]
ps = zip xs (tail xs ++ [head xs])
f (a,b) = map f' [a,b,g b,g a]
g :: Point3 -> Point3
g (a,b,_) = (a,b,zb)
f' a = (a,col)
expandLine :: Point3 -> Point3 -> Point3 -> [Point3]
expandLine v x y = [x -.-.- v, y -.-.- v, y +.+.+ v, x +.+.+ v]