{-# LANGUAGE TypeFamilies #-}
module Diagrams.TwoD.Path.Metafont.Combinators
(
(.-), (-.), (.--.)
, endpt, cyclePath
, simpleJoin
, tension, tensions, controls
, leaving, arriving
) where
import Diagrams.Prelude
import Diagrams.TwoD.Path.Metafont.Types
type Join n = PathJoin (Maybe (PathDir n)) (Maybe (BasicJoin n))
(.-) :: P2 n -> MFPathData J n -> MFPathData P n
.- :: forall n. P2 n -> MFPathData J n -> MFPathData P n
(.-) = forall n. P2 n -> MFPathData J n -> MFPathData P n
MFPathPt
(-.) :: Join n -> MFPathData P n -> MFPathData J n
-. :: forall n. Join n -> MFPathData P n -> MFPathData J n
(-.) = forall n. Join n -> MFPathData P n -> MFPathData J n
MFPathJoin
infixr 5 .-
infixr 5 -.
endpt :: P2 n -> MFPathData P n
endpt :: forall n. P2 n -> MFPathData P n
endpt = forall n. P2 n -> MFPathData P n
MFPathEnd
cyclePath :: MFPathData P n
cyclePath :: forall n. MFPathData P n
cyclePath = forall n. MFPathData P n
MFPathCycle
(.--.) :: P2 n -> MFPathData P n -> MFPathData P n
P2 n
p .--. :: forall n. P2 n -> MFPathData P n -> MFPathData P n
.--. MFPathData P n
q = P2 n
p forall n. P2 n -> MFPathData J n -> MFPathData P n
.- forall a. Monoid a => a
mempty forall n. Join n -> MFPathData P n -> MFPathData J n
-. MFPathData P n
q
infixr 5 .--.
simpleJoin :: Join n
simpleJoin :: forall n. Join n
simpleJoin = forall a. Monoid a => a
mempty
tension :: n -> Join n
tension :: forall n. n -> Join n
tension n
t = forall d j. d -> j -> d -> PathJoin d j
PJ forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall n. Tension n -> Tension n -> TensionJoin n
TJ (forall n. n -> Tension n
TensionAmt n
t) (forall n. n -> Tension n
TensionAmt n
t)) forall a. Maybe a
Nothing
tensions :: n -> n -> Join n
tensions :: forall n. n -> n -> Join n
tensions n
tl n
tr = forall d j. d -> j -> d -> PathJoin d j
PJ forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall n. Tension n -> Tension n -> TensionJoin n
TJ (forall n. n -> Tension n
TensionAmt n
tl) (forall n. n -> Tension n
TensionAmt n
tr)) forall a. Maybe a
Nothing
controls :: P2 n -> P2 n -> Join n
controls :: forall n. P2 n -> P2 n -> Join n
controls P2 n
u P2 n
v = forall n. Join n
simpleJoin forall a b. a -> (a -> b) -> b
& forall d j1 j2. Lens (PathJoin d j1) (PathJoin d j2) j1 j2
jforall s t a b. ASetter s t a b -> b -> s -> t
.~ (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall n. P2 n -> P2 n -> ControlJoin n
CJ P2 n
u P2 n
v)
leaving :: V2 n -> Join n
leaving :: forall n. V2 n -> Join n
leaving V2 n
d = forall a. Monoid a => a
mempty forall a b. a -> (a -> b) -> b
& forall d j. Lens' (PathJoin d j) d
d1forall s t a b. ASetter s t a b -> b -> s -> t
.~ (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall n. Dir n -> PathDir n
PathDirDir forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) n. v n -> Direction v n
direction forall a b. (a -> b) -> a -> b
$ V2 n
d)
arriving :: V2 n -> Join n
arriving :: forall n. V2 n -> Join n
arriving V2 n
d = forall a. Monoid a => a
mempty forall a b. a -> (a -> b) -> b
& forall d j. Lens' (PathJoin d j) d
d2forall s t a b. ASetter s t a b -> b -> s -> t
.~ (forall a. a -> Maybe a
Just forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall n. Dir n -> PathDir n
PathDirDir forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (v :: * -> *) n. v n -> Direction v n
direction forall a b. (a -> b) -> a -> b
$ V2 n
d)