First implementation of quadratic bezier curve shader
This commit is contained in:
+8
-34
@@ -8,13 +8,17 @@ import Geometry
|
||||
import Data.Bifunctor
|
||||
import Data.List
|
||||
|
||||
-- todo: refactor out the layer check somehow
|
||||
-- consider generalising to alternative rather than using LTree
|
||||
picToLTree :: Maybe Int -> Picture -> LTree RenderType
|
||||
{-# INLINE picToLTree #-}
|
||||
picToLTree mx (Polygon i ps)
|
||||
= filtB mx i $ LLeaf $ RenderPoly $ zip (map zeroZ $ polyToTris ps) $ repeat black
|
||||
picToLTree mx (PolygonCol i vs) =
|
||||
filtB mx i $ LLeaf $ RenderPoly $ zip (map zeroZ $ polyToTris ps) $ polyToTris cs
|
||||
picToLTree mx (PolygonCol i vs)
|
||||
= filtB mx i $ LLeaf $ RenderPoly $ zip (map zeroZ $ polyToTris ps) $ polyToTris cs
|
||||
where (ps,cs) = unzip vs
|
||||
picToLTree mx (BezierQuad i ps)
|
||||
= filtB mx i $ LLeaf $ RenderBezQ $ zip (map zeroZ $ ps) $ repeat black
|
||||
picToLTree mx (Circle i colC colE r)
|
||||
= filtB mx i $ LLeaf $ RenderEllipse [( (-r, r,0), colC)
|
||||
,( (-r,-r,0), colE)
|
||||
@@ -64,6 +68,7 @@ scaleT (x,y) (a,b,(o,s,t)) = (a,b,(o,s*x,t*y))
|
||||
overPos :: (Point3 -> Point3) -> RenderType -> RenderType
|
||||
{-# INLINE overPos #-}
|
||||
overPos f (RenderPoly vs) = RenderPoly $ map (first $ f) vs
|
||||
overPos f (RenderBezQ vs) = RenderBezQ $ map (first $ f) vs
|
||||
overPos f (RenderLine vs) = RenderLine $ map (first $ f) vs
|
||||
overPos f (RenderText vs) = RenderText $ map (\(a,b,c) -> (f a,b,c)) vs
|
||||
overPos f (RenderEllipse vs) = RenderEllipse $ map (first f) vs
|
||||
@@ -77,6 +82,7 @@ overRot _ ren = ren
|
||||
overCol :: (Point4 -> Point4) -> RenderType -> RenderType
|
||||
{-# INLINE overCol #-}
|
||||
overCol f (RenderPoly vs) = RenderPoly $ map (second $ f) vs
|
||||
overCol f (RenderBezQ vs) = RenderBezQ $ map (second $ f) vs
|
||||
overCol f (RenderLine vs) = RenderLine $ map (second $ f) vs
|
||||
overCol f (RenderEllipse vs) = RenderEllipse $ map (second $ f) vs
|
||||
overCol f (RenderText vs) = RenderText $ map (\(a,b,c) -> (a,f b,c)) vs
|
||||
@@ -112,35 +118,3 @@ rotate3 :: Float -> Point3 -> Point3
|
||||
rotate3 a (x,y,z) = (x',y',z)
|
||||
where (x',y') = rotateV a (x,y)
|
||||
|
||||
--picToAlt :: (Ap.Alternative f, Monoid (f RenderType)) => Int -> Picture -> f RenderType
|
||||
--{-# INLINE picToAlt #-}
|
||||
--picToAlt x (Polygon i ps)
|
||||
-- | i == x = Ap.pure $ RenderPoly $ zip (map zeroZ $ polyToTris ps) $ repeat black
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt x (PolygonCol i vs)
|
||||
-- | i /= x = Ap.empty
|
||||
-- | otherwise =
|
||||
-- let (ps,cs) = unzip vs
|
||||
-- in Ap.pure $ RenderPoly $ zip (map zeroZ $ polyToTris ps) $ polyToTris cs
|
||||
--picToAlt x (Circle i r)
|
||||
-- | i == x = Ap.pure $ RenderCirc $ ((0,0,0),black,r)
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt x (Ellipse i (ax,ay) (bx,by) r)
|
||||
-- | i == x = Ap.pure $ RenderEllipse [((ax,ay+r,0),black)
|
||||
-- ,((ax,ay-r,0),black)
|
||||
-- ,((bx,by-r,0),black)
|
||||
-- ]
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt x (ThickArc i startA endA rad wdth)
|
||||
-- | i == x = Ap.pure $ RenderArc $ ((0,0,0),black,(startA,endA,rad,wdth))
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt x (Line i ps)
|
||||
-- | i == x = Ap.pure $ RenderLine $ zip (map zeroZ $ doubleLine ps) $ repeat white
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt x (Text i s)
|
||||
-- | i == x = Ap.pure $ RenderText $ stringToList s
|
||||
-- | otherwise = Ap.empty
|
||||
--picToAlt j Blank = Ap.empty
|
||||
--picToAlt j (Pictures pics) = mconcat $ fmap (picToAlt j) pics
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user