43 lines
1.1 KiB
Haskell
43 lines
1.1 KiB
Haskell
{- |
|
|
Compound, universal pictures.
|
|
Creates uniform sizes and commands for the Dodge modules. -}
|
|
module Dodge.Picture
|
|
where
|
|
import Geometry
|
|
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))
|