module Graphics.Rendering.Plot.Light.Internal.Types where
data FigureData a =
FigData {
_width :: a
, _height :: a
, _xmin :: a
, _xmax :: a
, _ymin :: a
, _ymax :: a
} deriving (Eq, Show)
data Point a = Point { _px :: a, _py :: a} deriving (Eq, Show)
mkPoint :: a -> a -> Point a
mkPoint = Point
setPointCoord :: Axis -> a -> Point a -> Point a
setPointCoord axis c (Point x y)
| axis == X = Point c y
| otherwise = Point x c
setPointX, setPointY :: a -> Point a -> Point a
setPointX = setPointCoord X
setPointY = setPointCoord Y
data LabeledPoint l a =
LabeledPoint {
_lp :: Point a,
_lplabel :: l
} deriving (Eq, Show)
moveLabeledPoint :: (Point a -> Point b) -> LabeledPoint l a -> LabeledPoint l b
moveLabeledPoint f (LabeledPoint p l) = LabeledPoint (f p) l
data Frame a = Frame {
_fpmin :: Point a,
_fpmax :: Point a
} deriving (Eq, Show)
xmin, xmax, ymin, ymax :: Frame a -> a
xmin = _px . _fpmin
xmax = _px . _fpmax
ymin = _py . _fpmin
ymax = _py . _fpmax
width, height :: Num a => Frame a -> a
width f = xmax f xmin f
height f = ymax f ymin f
data Axis = X | Y deriving (Eq, Show, Enum)
otherAxis :: Axis -> Axis
otherAxis X = Y
otherAxis _ = X