module Brillo.Data.Picture (
Picture (..),
Point,
Vector,
Path,
lineLoop,
lineLoopAliased,
circleSolid,
circleSolidAliased,
arcSolid,
arcSolidAliased,
sectorWire,
sectorWireAliased,
rectanglePath,
rectangleWire,
rectangleWireAliased,
rectangleSolid,
rectangleSolidAliased,
rectangleUpperPath,
rectangleUpperWire,
rectangleUpperWireAliased,
rectangleUpperSolid,
rectangleUpperSolidAliased,
)
where
import Brillo.Geometry.Angle
import Brillo.Rendering
lineLoop :: Path -> Picture
lineLoop :: Path -> Picture
lineLoop [] = Path -> Picture
Line []
lineLoop (Point
x : Path
xs) = Path -> Picture
Line ((Point
x Point -> Path -> Path
forall a. a -> [a] -> [a]
: Path
xs) Path -> Path -> Path
forall a. [a] -> [a] -> [a]
++ [Point
x])
lineLoopAliased :: Path -> Picture
lineLoopAliased :: Path -> Picture
lineLoopAliased [] = Path -> Picture
LineAliased []
lineLoopAliased (Point
x : Path
xs) = Path -> Picture
LineAliased ((Point
x Point -> Path -> Path
forall a. a -> [a] -> [a]
: Path
xs) Path -> Path -> Path
forall a. [a] -> [a] -> [a]
++ [Point
x])
circleSolid :: Float -> Picture
circleSolid :: Float -> Picture
circleSolid Float
r =
Float -> Float -> Picture
ThickCircle (Float
r Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2) Float
r
circleSolidAliased :: Float -> Picture
circleSolidAliased :: Float -> Picture
circleSolidAliased Float
r =
Float -> Float -> Picture
ThickCircleAliased (Float
r Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2) Float
r
arcSolid :: Float -> Float -> Float -> Picture
arcSolid :: Float -> Float -> Float -> Picture
arcSolid Float
a1 Float
a2 Float
r =
Float -> Float -> Float -> Float -> Picture
ThickArc Float
a1 Float
a2 (Float
r Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2) Float
r
arcSolidAliased :: Float -> Float -> Float -> Picture
arcSolidAliased :: Float -> Float -> Float -> Picture
arcSolidAliased Float
a1 Float
a2 Float
r =
Float -> Float -> Float -> Float -> Picture
ThickArcAliased Float
a1 Float
a2 (Float
r Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2) Float
r
sectorWire :: Float -> Float -> Float -> Picture
sectorWire :: Float -> Float -> Float -> Picture
sectorWire Float
a1 Float
a2 Float
r_ =
let r :: Float
r = Float -> Float
forall a. Num a => a -> a
abs Float
r_
in [Picture] -> Picture
Pictures
[ Float -> Float -> Float -> Picture
Arc Float
a1 Float
a2 Float
r
, Path -> Picture
Line [(Float
0, Float
0), (Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float -> Float
degToRad Float
a1), Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float -> Float
degToRad Float
a1))]
, Path -> Picture
Line [(Float
0, Float
0), (Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float -> Float
degToRad Float
a2), Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float -> Float
degToRad Float
a2))]
]
sectorWireAliased :: Float -> Float -> Float -> Picture
sectorWireAliased :: Float -> Float -> Float -> Picture
sectorWireAliased Float
a1 Float
a2 Float
r_ =
let r :: Float
r = Float -> Float
forall a. Num a => a -> a
abs Float
r_
in [Picture] -> Picture
Pictures
[ Float -> Float -> Float -> Picture
ArcAliased Float
a1 Float
a2 Float
r
, Path -> Picture
LineAliased [(Float
0, Float
0), (Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float -> Float
degToRad Float
a1), Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float -> Float
degToRad Float
a1))]
, Path -> Picture
LineAliased [(Float
0, Float
0), (Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
cos (Float -> Float
degToRad Float
a2), Float
r Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float -> Float
forall a. Floating a => a -> a
sin (Float -> Float
degToRad Float
a2))]
]
rectanglePath ::
Float ->
Float ->
Path
rectanglePath :: Float -> Float -> Path
rectanglePath Float
sizeX Float
sizeY =
let sx :: Float
sx = Float
sizeX Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2
sy :: Float
sy = Float
sizeY Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2
in [(-Float
sx, -Float
sy), (-Float
sx, Float
sy), (Float
sx, Float
sy), (Float
sx, -Float
sy)]
rectangleWire :: Float -> Float -> Picture
rectangleWire :: Float -> Float -> Picture
rectangleWire Float
sizeX Float
sizeY =
Path -> Picture
lineLoop (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectanglePath Float
sizeX Float
sizeY
rectangleWireAliased :: Float -> Float -> Picture
rectangleWireAliased :: Float -> Float -> Picture
rectangleWireAliased Float
sizeX Float
sizeY =
Path -> Picture
lineLoopAliased (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectanglePath Float
sizeX Float
sizeY
rectangleUpperWire :: Float -> Float -> Picture
rectangleUpperWire :: Float -> Float -> Picture
rectangleUpperWire Float
sizeX Float
sizeY =
Path -> Picture
lineLoop (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectangleUpperPath Float
sizeX Float
sizeY
rectangleUpperWireAliased :: Float -> Float -> Picture
rectangleUpperWireAliased :: Float -> Float -> Picture
rectangleUpperWireAliased Float
sizeX Float
sizeY =
Path -> Picture
lineLoopAliased (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectangleUpperPath Float
sizeX Float
sizeY
rectangleUpperPath :: Float -> Float -> Path
rectangleUpperPath :: Float -> Float -> Path
rectangleUpperPath Float
sizeX Float
sy =
let sx :: Float
sx = Float
sizeX Float -> Float -> Float
forall a. Fractional a => a -> a -> a
/ Float
2
in [(-Float
sx, Float
0), (-Float
sx, Float
sy), (Float
sx, Float
sy), (Float
sx, Float
0)]
rectangleSolid :: Float -> Float -> Picture
rectangleSolid :: Float -> Float -> Picture
rectangleSolid Float
sizeX Float
sizeY =
Path -> Picture
Polygon (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectanglePath Float
sizeX Float
sizeY
rectangleSolidAliased :: Float -> Float -> Picture
rectangleSolidAliased :: Float -> Float -> Picture
rectangleSolidAliased Float
sizeX Float
sizeY =
Path -> Picture
PolygonAliased (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectanglePath Float
sizeX Float
sizeY
rectangleUpperSolid :: Float -> Float -> Picture
rectangleUpperSolid :: Float -> Float -> Picture
rectangleUpperSolid Float
sizeX Float
sizeY =
Path -> Picture
Polygon (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectangleUpperPath Float
sizeX Float
sizeY
rectangleUpperSolidAliased :: Float -> Float -> Picture
rectangleUpperSolidAliased :: Float -> Float -> Picture
rectangleUpperSolidAliased Float
sizeX Float
sizeY =
Path -> Picture
PolygonAliased (Path -> Picture) -> Path -> Picture
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Path
rectangleUpperPath Float
sizeX Float
sizeY