{-# LANGUAGE UndecidableInstances #-}
module HGeometry.BezierSpline
( BezierSplineF(.., Bezier2, Bezier3)
, BezierSpline
, QuadraticBezier
, CubicBezier
) where
import Control.DeepSeq (NFData)
import Control.Lens
import Data.Functor.Classes
import Data.Semigroup.Foldable
import Data.Vector.NonEmpty.Internal (NonEmptyVector(..))
import GHC.Generics
import HGeometry.Box
import HGeometry.Point
import HGeometry.Properties
import HGeometry.Transformation
import HGeometry.Vector
import HGeometry.Vector.NonEmpty.Util ()
import Hiraffe.Graph
import Data.Kind (Type)
type BezierSplineF :: (Type -> Type) -> Type -> Type
newtype BezierSplineF f point = BezierSpline (f point)
deriving stock ((forall x. BezierSplineF f point -> Rep (BezierSplineF f point) x)
-> (forall x.
Rep (BezierSplineF f point) x -> BezierSplineF f point)
-> Generic (BezierSplineF f point)
forall x. Rep (BezierSplineF f point) x -> BezierSplineF f point
forall x. BezierSplineF f point -> Rep (BezierSplineF f point) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (f :: * -> *) point x.
Rep (BezierSplineF f point) x -> BezierSplineF f point
forall (f :: * -> *) point x.
BezierSplineF f point -> Rep (BezierSplineF f point) x
$cfrom :: forall (f :: * -> *) point x.
BezierSplineF f point -> Rep (BezierSplineF f point) x
from :: forall x. BezierSplineF f point -> Rep (BezierSplineF f point) x
$cto :: forall (f :: * -> *) point x.
Rep (BezierSplineF f point) x -> BezierSplineF f point
to :: forall x. Rep (BezierSplineF f point) x -> BezierSplineF f point
Generic,Int -> BezierSplineF f point -> ShowS
[BezierSplineF f point] -> ShowS
BezierSplineF f point -> String
(Int -> BezierSplineF f point -> ShowS)
-> (BezierSplineF f point -> String)
-> ([BezierSplineF f point] -> ShowS)
-> Show (BezierSplineF f point)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (f :: * -> *) point.
Show (f point) =>
Int -> BezierSplineF f point -> ShowS
forall (f :: * -> *) point.
Show (f point) =>
[BezierSplineF f point] -> ShowS
forall (f :: * -> *) point.
Show (f point) =>
BezierSplineF f point -> String
$cshowsPrec :: forall (f :: * -> *) point.
Show (f point) =>
Int -> BezierSplineF f point -> ShowS
showsPrec :: Int -> BezierSplineF f point -> ShowS
$cshow :: forall (f :: * -> *) point.
Show (f point) =>
BezierSplineF f point -> String
show :: BezierSplineF f point -> String
$cshowList :: forall (f :: * -> *) point.
Show (f point) =>
[BezierSplineF f point] -> ShowS
showList :: [BezierSplineF f point] -> ShowS
Show)
deriving newtype (BezierSplineF f point -> ()
(BezierSplineF f point -> ()) -> NFData (BezierSplineF f point)
forall a. (a -> ()) -> NFData a
forall (f :: * -> *) point.
NFData (f point) =>
BezierSplineF f point -> ()
$crnf :: forall (f :: * -> *) point.
NFData (f point) =>
BezierSplineF f point -> ()
rnf :: BezierSplineF f point -> ()
NFData,(forall a b. (a -> b) -> BezierSplineF f a -> BezierSplineF f b)
-> (forall a b. a -> BezierSplineF f b -> BezierSplineF f a)
-> Functor (BezierSplineF f)
forall a b. a -> BezierSplineF f b -> BezierSplineF f a
forall a b. (a -> b) -> BezierSplineF f a -> BezierSplineF f b
forall (f :: * -> *) a b.
Functor f =>
a -> BezierSplineF f b -> BezierSplineF f a
forall (f :: * -> *) a b.
Functor f =>
(a -> b) -> BezierSplineF f a -> BezierSplineF f b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
$cfmap :: forall (f :: * -> *) a b.
Functor f =>
(a -> b) -> BezierSplineF f a -> BezierSplineF f b
fmap :: forall a b. (a -> b) -> BezierSplineF f a -> BezierSplineF f b
$c<$ :: forall (f :: * -> *) a b.
Functor f =>
a -> BezierSplineF f b -> BezierSplineF f a
<$ :: forall a b. a -> BezierSplineF f b -> BezierSplineF f a
Functor,(forall m. Monoid m => BezierSplineF f m -> m)
-> (forall m a. Monoid m => (a -> m) -> BezierSplineF f a -> m)
-> (forall m a. Monoid m => (a -> m) -> BezierSplineF f a -> m)
-> (forall a b. (a -> b -> b) -> b -> BezierSplineF f a -> b)
-> (forall a b. (a -> b -> b) -> b -> BezierSplineF f a -> b)
-> (forall b a. (b -> a -> b) -> b -> BezierSplineF f a -> b)
-> (forall b a. (b -> a -> b) -> b -> BezierSplineF f a -> b)
-> (forall a. (a -> a -> a) -> BezierSplineF f a -> a)
-> (forall a. (a -> a -> a) -> BezierSplineF f a -> a)
-> (forall a. BezierSplineF f a -> [a])
-> (forall a. BezierSplineF f a -> Bool)
-> (forall a. BezierSplineF f a -> Int)
-> (forall a. Eq a => a -> BezierSplineF f a -> Bool)
-> (forall a. Ord a => BezierSplineF f a -> a)
-> (forall a. Ord a => BezierSplineF f a -> a)
-> (forall a. Num a => BezierSplineF f a -> a)
-> (forall a. Num a => BezierSplineF f a -> a)
-> Foldable (BezierSplineF f)
forall a. Eq a => a -> BezierSplineF f a -> Bool
forall a. Num a => BezierSplineF f a -> a
forall a. Ord a => BezierSplineF f a -> a
forall m. Monoid m => BezierSplineF f m -> m
forall a. BezierSplineF f a -> Bool
forall a. BezierSplineF f a -> Int
forall a. BezierSplineF f a -> [a]
forall a. (a -> a -> a) -> BezierSplineF f a -> a
forall m a. Monoid m => (a -> m) -> BezierSplineF f a -> m
forall b a. (b -> a -> b) -> b -> BezierSplineF f a -> b
forall a b. (a -> b -> b) -> b -> BezierSplineF f a -> b
forall (f :: * -> *) a.
(Foldable f, Eq a) =>
a -> BezierSplineF f a -> Bool
forall (f :: * -> *) a.
(Foldable f, Num a) =>
BezierSplineF f a -> a
forall (f :: * -> *) a.
(Foldable f, Ord a) =>
BezierSplineF f a -> a
forall (f :: * -> *) m.
(Foldable f, Monoid m) =>
BezierSplineF f m -> m
forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> Bool
forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> Int
forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> [a]
forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> BezierSplineF f a -> a
forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> BezierSplineF f a -> m
forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> BezierSplineF f a -> b
forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> BezierSplineF f a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
$cfold :: forall (f :: * -> *) m.
(Foldable f, Monoid m) =>
BezierSplineF f m -> m
fold :: forall m. Monoid m => BezierSplineF f m -> m
$cfoldMap :: forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> BezierSplineF f a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> BezierSplineF f a -> m
$cfoldMap' :: forall (f :: * -> *) m a.
(Foldable f, Monoid m) =>
(a -> m) -> BezierSplineF f a -> m
foldMap' :: forall m a. Monoid m => (a -> m) -> BezierSplineF f a -> m
$cfoldr :: forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> BezierSplineF f a -> b
foldr :: forall a b. (a -> b -> b) -> b -> BezierSplineF f a -> b
$cfoldr' :: forall (f :: * -> *) a b.
Foldable f =>
(a -> b -> b) -> b -> BezierSplineF f a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> BezierSplineF f a -> b
$cfoldl :: forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> BezierSplineF f a -> b
foldl :: forall b a. (b -> a -> b) -> b -> BezierSplineF f a -> b
$cfoldl' :: forall (f :: * -> *) b a.
Foldable f =>
(b -> a -> b) -> b -> BezierSplineF f a -> b
foldl' :: forall b a. (b -> a -> b) -> b -> BezierSplineF f a -> b
$cfoldr1 :: forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> BezierSplineF f a -> a
foldr1 :: forall a. (a -> a -> a) -> BezierSplineF f a -> a
$cfoldl1 :: forall (f :: * -> *) a.
Foldable f =>
(a -> a -> a) -> BezierSplineF f a -> a
foldl1 :: forall a. (a -> a -> a) -> BezierSplineF f a -> a
$ctoList :: forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> [a]
toList :: forall a. BezierSplineF f a -> [a]
$cnull :: forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> Bool
null :: forall a. BezierSplineF f a -> Bool
$clength :: forall (f :: * -> *) a. Foldable f => BezierSplineF f a -> Int
length :: forall a. BezierSplineF f a -> Int
$celem :: forall (f :: * -> *) a.
(Foldable f, Eq a) =>
a -> BezierSplineF f a -> Bool
elem :: forall a. Eq a => a -> BezierSplineF f a -> Bool
$cmaximum :: forall (f :: * -> *) a.
(Foldable f, Ord a) =>
BezierSplineF f a -> a
maximum :: forall a. Ord a => BezierSplineF f a -> a
$cminimum :: forall (f :: * -> *) a.
(Foldable f, Ord a) =>
BezierSplineF f a -> a
minimum :: forall a. Ord a => BezierSplineF f a -> a
$csum :: forall (f :: * -> *) a.
(Foldable f, Num a) =>
BezierSplineF f a -> a
sum :: forall a. Num a => BezierSplineF f a -> a
$cproduct :: forall (f :: * -> *) a.
(Foldable f, Num a) =>
BezierSplineF f a -> a
product :: forall a. Num a => BezierSplineF f a -> a
Foldable,Foldable (BezierSplineF f)
Foldable (BezierSplineF f) =>
(forall m. Semigroup m => BezierSplineF f m -> m)
-> (forall m a. Semigroup m => (a -> m) -> BezierSplineF f a -> m)
-> (forall m a. Semigroup m => (a -> m) -> BezierSplineF f a -> m)
-> (forall a. BezierSplineF f a -> NonEmpty a)
-> (forall a. Ord a => BezierSplineF f a -> a)
-> (forall a. Ord a => BezierSplineF f a -> a)
-> (forall a. BezierSplineF f a -> a)
-> (forall a. BezierSplineF f a -> a)
-> (forall a b.
(a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b)
-> (forall a b.
(a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b)
-> (forall a b.
(a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b)
-> (forall a b.
(a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b)
-> Foldable1 (BezierSplineF f)
forall a. Ord a => BezierSplineF f a -> a
forall m. Semigroup m => BezierSplineF f m -> m
forall a. BezierSplineF f a -> a
forall a. BezierSplineF f a -> NonEmpty a
forall m a. Semigroup m => (a -> m) -> BezierSplineF f a -> m
forall a b. (a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
forall a b. (a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
forall (t :: * -> *).
Foldable t =>
(forall m. Semigroup m => t m -> m)
-> (forall m a. Semigroup m => (a -> m) -> t a -> m)
-> (forall m a. Semigroup m => (a -> m) -> t a -> m)
-> (forall a. t a -> NonEmpty a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. t a -> a)
-> (forall a. t a -> a)
-> (forall a b. (a -> b) -> (a -> b -> b) -> t a -> b)
-> (forall a b. (a -> b) -> (b -> a -> b) -> t a -> b)
-> (forall a b. (a -> b) -> (b -> a -> b) -> t a -> b)
-> (forall a b. (a -> b) -> (a -> b -> b) -> t a -> b)
-> Foldable1 t
forall (f :: * -> *). Foldable1 f => Foldable (BezierSplineF f)
forall (f :: * -> *) a.
(Foldable1 f, Ord a) =>
BezierSplineF f a -> a
forall (f :: * -> *) m.
(Foldable1 f, Semigroup m) =>
BezierSplineF f m -> m
forall (f :: * -> *) a. Foldable1 f => BezierSplineF f a -> a
forall (f :: * -> *) a.
Foldable1 f =>
BezierSplineF f a -> NonEmpty a
forall (f :: * -> *) m a.
(Foldable1 f, Semigroup m) =>
(a -> m) -> BezierSplineF f a -> m
forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
$cfold1 :: forall (f :: * -> *) m.
(Foldable1 f, Semigroup m) =>
BezierSplineF f m -> m
fold1 :: forall m. Semigroup m => BezierSplineF f m -> m
$cfoldMap1 :: forall (f :: * -> *) m a.
(Foldable1 f, Semigroup m) =>
(a -> m) -> BezierSplineF f a -> m
foldMap1 :: forall m a. Semigroup m => (a -> m) -> BezierSplineF f a -> m
$cfoldMap1' :: forall (f :: * -> *) m a.
(Foldable1 f, Semigroup m) =>
(a -> m) -> BezierSplineF f a -> m
foldMap1' :: forall m a. Semigroup m => (a -> m) -> BezierSplineF f a -> m
$ctoNonEmpty :: forall (f :: * -> *) a.
Foldable1 f =>
BezierSplineF f a -> NonEmpty a
toNonEmpty :: forall a. BezierSplineF f a -> NonEmpty a
$cmaximum :: forall (f :: * -> *) a.
(Foldable1 f, Ord a) =>
BezierSplineF f a -> a
maximum :: forall a. Ord a => BezierSplineF f a -> a
$cminimum :: forall (f :: * -> *) a.
(Foldable1 f, Ord a) =>
BezierSplineF f a -> a
minimum :: forall a. Ord a => BezierSplineF f a -> a
$chead :: forall (f :: * -> *) a. Foldable1 f => BezierSplineF f a -> a
head :: forall a. BezierSplineF f a -> a
$clast :: forall (f :: * -> *) a. Foldable1 f => BezierSplineF f a -> a
last :: forall a. BezierSplineF f a -> a
$cfoldrMap1 :: forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
foldrMap1 :: forall a b. (a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
$cfoldlMap1' :: forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
foldlMap1' :: forall a b. (a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
$cfoldlMap1 :: forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
foldlMap1 :: forall a b. (a -> b) -> (b -> a -> b) -> BezierSplineF f a -> b
$cfoldrMap1' :: forall (f :: * -> *) a b.
Foldable1 f =>
(a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
foldrMap1' :: forall a b. (a -> b) -> (a -> b -> b) -> BezierSplineF f a -> b
Foldable1,BezierSplineF f point -> BezierSplineF f point -> Bool
(BezierSplineF f point -> BezierSplineF f point -> Bool)
-> (BezierSplineF f point -> BezierSplineF f point -> Bool)
-> Eq (BezierSplineF f point)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (f :: * -> *) point.
Eq (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
$c== :: forall (f :: * -> *) point.
Eq (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
== :: BezierSplineF f point -> BezierSplineF f point -> Bool
$c/= :: forall (f :: * -> *) point.
Eq (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
/= :: BezierSplineF f point -> BezierSplineF f point -> Bool
Eq,Eq (BezierSplineF f point)
Eq (BezierSplineF f point) =>
(BezierSplineF f point -> BezierSplineF f point -> Ordering)
-> (BezierSplineF f point -> BezierSplineF f point -> Bool)
-> (BezierSplineF f point -> BezierSplineF f point -> Bool)
-> (BezierSplineF f point -> BezierSplineF f point -> Bool)
-> (BezierSplineF f point -> BezierSplineF f point -> Bool)
-> (BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point)
-> (BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point)
-> Ord (BezierSplineF f point)
BezierSplineF f point -> BezierSplineF f point -> Bool
BezierSplineF f point -> BezierSplineF f point -> Ordering
BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall (f :: * -> *) point.
Ord (f point) =>
Eq (BezierSplineF f point)
forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Ordering
forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
$ccompare :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Ordering
compare :: BezierSplineF f point -> BezierSplineF f point -> Ordering
$c< :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
< :: BezierSplineF f point -> BezierSplineF f point -> Bool
$c<= :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
<= :: BezierSplineF f point -> BezierSplineF f point -> Bool
$c> :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
> :: BezierSplineF f point -> BezierSplineF f point -> Bool
$c>= :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point -> BezierSplineF f point -> Bool
>= :: BezierSplineF f point -> BezierSplineF f point -> Bool
$cmax :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
max :: BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
$cmin :: forall (f :: * -> *) point.
Ord (f point) =>
BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
min :: BezierSplineF f point
-> BezierSplineF f point -> BezierSplineF f point
Ord,(forall a. Eq a => Eq (BezierSplineF f a)) =>
(forall a b.
(a -> b -> Bool) -> BezierSplineF f a -> BezierSplineF f b -> Bool)
-> Eq1 (BezierSplineF f)
forall a. Eq a => Eq (BezierSplineF f a)
forall a b.
(a -> b -> Bool) -> BezierSplineF f a -> BezierSplineF f b -> Bool
forall (f :: * -> *) a. (Eq1 f, Eq a) => Eq (BezierSplineF f a)
forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> BezierSplineF f a -> BezierSplineF f b -> Bool
forall (f :: * -> *).
(forall a. Eq a => Eq (f a)) =>
(forall a b. (a -> b -> Bool) -> f a -> f b -> Bool) -> Eq1 f
$cliftEq :: forall (f :: * -> *) a b.
Eq1 f =>
(a -> b -> Bool) -> BezierSplineF f a -> BezierSplineF f b -> Bool
liftEq :: forall a b.
(a -> b -> Bool) -> BezierSplineF f a -> BezierSplineF f b -> Bool
Eq1,Eq1 (BezierSplineF f)
(Eq1 (BezierSplineF f),
forall a. Ord a => Ord (BezierSplineF f a)) =>
(forall a b.
(a -> b -> Ordering)
-> BezierSplineF f a -> BezierSplineF f b -> Ordering)
-> Ord1 (BezierSplineF f)
forall a. Ord a => Ord (BezierSplineF f a)
forall a b.
(a -> b -> Ordering)
-> BezierSplineF f a -> BezierSplineF f b -> Ordering
forall (f :: * -> *). Ord1 f => Eq1 (BezierSplineF f)
forall (f :: * -> *) a. (Ord1 f, Ord a) => Ord (BezierSplineF f a)
forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering)
-> BezierSplineF f a -> BezierSplineF f b -> Ordering
forall (f :: * -> *).
(Eq1 f, forall a. Ord a => Ord (f a)) =>
(forall a b. (a -> b -> Ordering) -> f a -> f b -> Ordering)
-> Ord1 f
$cliftCompare :: forall (f :: * -> *) a b.
Ord1 f =>
(a -> b -> Ordering)
-> BezierSplineF f a -> BezierSplineF f b -> Ordering
liftCompare :: forall a b.
(a -> b -> Ordering)
-> BezierSplineF f a -> BezierSplineF f b -> Ordering
Ord1)
type BezierSpline = BezierSplineF NonEmptyVector
type QuadraticBezier = BezierSplineF (Vector 3)
type CubicBezier = BezierSplineF (Vector 4)
type instance Dimension (BezierSplineF f point) = 2
type instance NumType (BezierSplineF f point) = NumType point
pattern Bezier2 :: point -> point -> point -> QuadraticBezier point
pattern $bBezier2 :: forall point. point -> point -> point -> QuadraticBezier point
$mBezier2 :: forall {r} {point}.
QuadraticBezier point
-> (point -> point -> point -> r) -> ((# #) -> r) -> r
Bezier2 p q r = BezierSpline (Vector3 p q r)
{-# COMPLETE Bezier2 #-}
pattern Bezier3 :: point -> point -> point -> point -> CubicBezier point
pattern $bBezier3 :: forall point. point -> point -> point -> point -> CubicBezier point
$mBezier3 :: forall {r} {point}.
CubicBezier point
-> (point -> point -> point -> point -> r) -> ((# #) -> r) -> r
Bezier3 p q r s = BezierSpline (Vector4 p q r s)
{-# COMPLETE Bezier3 #-}
_BezierSplineF :: Iso (BezierSplineF f point) (BezierSplineF f' point')
(f point) (f' point' )
_BezierSplineF :: forall (f :: * -> *) point (f' :: * -> *) point' (p :: * -> * -> *)
(f :: * -> *).
(Profunctor p, Functor f) =>
p (f point) (f (f' point'))
-> p (BezierSplineF f point) (f (BezierSplineF f' point'))
_BezierSplineF = (BezierSplineF f point -> f point)
-> (f' point' -> BezierSplineF f' point')
-> Iso
(BezierSplineF f point)
(BezierSplineF f' point')
(f point)
(f' point')
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (\(BezierSpline f point
vs) -> f point
vs) f' point' -> BezierSplineF f' point'
forall (f :: * -> *) point. f point -> BezierSplineF f point
BezierSpline
instance Traversable f => Traversable (BezierSplineF f) where
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> BezierSplineF f a -> f (BezierSplineF f b)
traverse a -> f b
f (BezierSpline f a
vs) = f b -> BezierSplineF f b
forall (f :: * -> *) point. f point -> BezierSplineF f point
BezierSpline (f b -> BezierSplineF f b) -> f (f b) -> f (BezierSplineF f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> f b) -> f a -> f (f b)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> f a -> f (f b)
traverse a -> f b
f f a
vs
instance Traversable1 f => Traversable1 (BezierSplineF f) where
traverse1 :: forall (f :: * -> *) a b.
Apply f =>
(a -> f b) -> BezierSplineF f a -> f (BezierSplineF f b)
traverse1 a -> f b
f (BezierSpline f a
vs) = f b -> BezierSplineF f b
forall (f :: * -> *) point. f point -> BezierSplineF f point
BezierSpline (f b -> BezierSplineF f b) -> f (f b) -> f (BezierSplineF f b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (a -> f b) -> f a -> f (f b)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable1 t, Apply f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b. Apply f => (a -> f b) -> f a -> f (f b)
traverse1 a -> f b
f f a
vs
instance ( Traversable1 f
, IxValue (f point) ~ point
, Index (f point) ~ Int
, Ixed (f point)
) => HasVertices (BezierSplineF f point) (BezierSplineF f point') where
vertices :: IndexedTraversal1
(VertexIx (BezierSplineF f point))
(BezierSplineF f point)
(BezierSplineF f point')
(Vertex (BezierSplineF f point))
(Vertex (BezierSplineF f point'))
vertices = (f point -> f (f point'))
-> BezierSplineF f point -> f (BezierSplineF f point')
forall (f :: * -> *) point (f' :: * -> *) point' (p :: * -> * -> *)
(f :: * -> *).
(Profunctor p, Functor f) =>
p (f point) (f (f' point'))
-> p (BezierSplineF f point) (f (BezierSplineF f' point'))
_BezierSplineF ((f point -> f (f point'))
-> BezierSplineF f point -> f (BezierSplineF f point'))
-> (p point (f point') -> f point -> f (f point'))
-> p point (f point')
-> BezierSplineF f point
-> f (BezierSplineF f point')
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p point (f point') -> f point -> f (f point')
forall (f :: * -> *) a b.
Traversable1 f =>
IndexedTraversal1 Int (f a) (f b) a b
IndexedTraversal1 Int (f point) (f point') point point'
traversed1
instance ( Traversable1 f
, IxValue (f point) ~ point
, Index (f point) ~ Int
, Ixed (f point)
) => HasPoints (BezierSplineF f point) (BezierSplineF f point') point point' where
allPoints :: forall (d :: Nat) r r'.
(Point_ point d r, Point_ point' d r',
NumType (BezierSplineF f point) ~ r,
NumType (BezierSplineF f point') ~ r',
Dimension (BezierSplineF f point) ~ d,
Dimension (BezierSplineF f point') ~ d) =>
Traversal1
(BezierSplineF f point) (BezierSplineF f point') point point'
allPoints = (f point -> f (f point'))
-> BezierSplineF f point -> f (BezierSplineF f point')
forall (f :: * -> *) point (f' :: * -> *) point' (p :: * -> * -> *)
(f :: * -> *).
(Profunctor p, Functor f) =>
p (f point) (f (f' point'))
-> p (BezierSplineF f point) (f (BezierSplineF f' point'))
_BezierSplineF ((f point -> f (f point'))
-> BezierSplineF f point -> f (BezierSplineF f point'))
-> ((point -> f point') -> f point -> f (f point'))
-> (point -> f point')
-> BezierSplineF f point
-> f (BezierSplineF f point')
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (point -> f point') -> f point -> f (f point')
forall (f :: * -> *) a b.
Traversable1 f =>
IndexedTraversal1 Int (f a) (f b) a b
IndexedTraversal1 Int (f point) (f point') point point'
traversed1
instance ( Traversable1 f
, IxValue (f point) ~ point
, Index (f point) ~ Int
, Ixed (f point)
, DefaultTransformByConstraints (BezierSplineF f point) 2 r
, Point_ point 2 r
) => IsTransformable (BezierSplineF f point)
instance ( Traversable1 f
, IxValue (f point) ~ point
, Index (f point) ~ Int
, Ixed (f point)
, Point_ point 2 r
) => IsBoxable (BezierSplineF f point)
instance ( Traversable1 f
, Ixed (f point)
, IxValue (f point) ~ point
, Index (f point) ~ Int
) => HasVertices' (BezierSplineF f point) where
type Vertex (BezierSplineF f point) = point
type VertexIx (BezierSplineF f point) = Int
vertexAt :: VertexIx (BezierSplineF f point)
-> IndexedTraversal'
(VertexIx (BezierSplineF f point))
(BezierSplineF f point)
(Vertex (BezierSplineF f point))
vertexAt VertexIx (BezierSplineF f point)
i = (f point -> f (f point))
-> BezierSplineF f point -> f (BezierSplineF f point)
forall (f :: * -> *) point (f' :: * -> *) point' (p :: * -> * -> *)
(f :: * -> *).
(Profunctor p, Functor f) =>
p (f point) (f (f' point'))
-> p (BezierSplineF f point) (f (BezierSplineF f' point'))
_BezierSplineF ((f point -> f (f point))
-> BezierSplineF f point -> f (BezierSplineF f point))
-> (p point (f point) -> f point -> f (f point))
-> p point (f point)
-> BezierSplineF f point
-> f (BezierSplineF f point)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Index (f point)
-> IndexedTraversal'
(Index (f point)) (f point) (IxValue (f point))
forall m.
Ixed m =>
Index m -> IndexedTraversal' (Index m) m (IxValue m)
iix VertexIx (BezierSplineF f point)
Index (f point)
i