packages feed

reanimate-0.2.0.0: examples/polyshape_test1.hs

#!/usr/bin/env stack
-- stack runghc --package reanimate
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where

import           Control.Lens        ()
import           Data.List
import qualified Geom2D.CubicBezier  as G
import           Reanimate
import           Reanimate.PolyShape


polygonTest :: Animation
polygonTest = animate $ \_ ->
    std $ gridLayout $ transpose
      [ test0, test1, test2, test3, test4, test5 ]
  where
    test0 = column ppA poly1
    test1 = column ppA poly2
    test2 = column ppA poly3
    test3 = column ppA poly4
    test4 = column ppB [boxPolyShape]
    test5 = column ppB [starPolyShape]

    column pp poly = map pp
      [ poly
      , map plFromPolygon $ plDecompose' 0.05 poly
      , map plFromPolygon $ plDecompose poly ]


    poly1 =
      svgToPolyShapes $ lowerTransformations $
      center $ scale 3 $
      latex "$\\Phi$"
    poly2 =
      svgToPolyShapes $ lowerTransformations $
      center $ scale 3 $
      latex "$\\vartheta$"
    poly3 =
      svgToPolyShapes $ lowerTransformations $
      center $ scale 3 $
      latex "$\\Xi$"
    poly4 =
      svgToPolyShapes $ lowerTransformations $
      center $ scale 3 $
      latex "$\\Theta$"

    ppA = renderPolyShapes
    ppB = lowerTransformations . scale 0.6 . center . renderPolyShapes
    std =
      withFillOpacity 1 .
      withFillColor "blue" .
      withStrokeWidth 0.01 .
      withStrokeColor "white"


boxPolyShape :: PolyShape
boxPolyShape = PolyShape $ G.ClosedPath
  [(G.Point 0 0, G.JoinLine)
  ,(G.Point 0 3, G.JoinLine)
  ,(G.Point 1 3, G.JoinLine)
  ,(G.Point 1 1, G.JoinLine)
  ,(G.Point 2 1, G.JoinLine)
  ,(G.Point 2 2, G.JoinLine)
  ,(G.Point 0 2, G.JoinLine)
  ,(G.Point 0 3, G.JoinLine)
  ,(G.Point 3 3, G.JoinLine)
  ,(G.Point 3 0, G.JoinLine)
  ]

{-
squarePolyShape :: PolyShape
squarePolyShape = PolyShape $ G.ClosedPath
  [(G.Point 0 0, G.JoinLine)
  ,(G.Point 1 0, G.JoinLine)
  ,(G.Point 1 1, G.JoinLine)
  ,(G.Point 0 1, G.JoinLine)]
-}

starPolyShape :: PolyShape
starPolyShape = PolyShape $ G.ClosedPath
  [(G.Point 0 0, G.JoinLine)
  ,(G.Point 1 2, G.JoinLine)
  ,(G.Point 2 0, G.JoinLine)
  ,(G.Point 0 1, G.JoinLine)
  ,(G.Point 2 1, G.JoinLine)
  ]

main :: IO ()
main = reanimate $ bg `parA` polygonTest
  where
    bg = animate $ const $ mkBackground "black"