packages feed

Rasterific-0.5.0.1: exec-src/Sample.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeFamilies #-}
module Sample where

import Data.Monoid
import Codec.Picture
import Codec.Picture.Gif
import Graphics.Rasterific
import Graphics.Rasterific.Texture
import Graphics.Rasterific.Transformations

triangles :: IO ()
triangles =
    case writeGifImages "triangles.gif" LoopingForever images of
        Left err -> putStrLn err
        Right v -> v

  where
    frameCount = 140
    images = 
        [(greyPalette, 3, go (i * pi * 2 * (1 / frameCount)))
                | i <- [0 .. frameCount] ]
    go angle = renderDrawing 400 400 0 $
       mapM_ (render angle) [1 .. 25]

    render angle n =
      withTransformation
        ( translate (V2 200 180) <>
          scale (1 / n + 1) (1 / n + 1) <>
          rotate (angle + 0.1 * angle * n) ) $

         withTexture (uniformTexture (155 + 4 * floor n)) $
          stroke 2 (JoinMiter 0)
              (CapStraight 0, CapStraight 0)
              triangle


    triangle = pathToPrimitives $
        Path (V2 0 50) True
          [ PathLineTo (V2 50 (-30))
          , PathLineTo (V2 (-50) (-30))
          ]

main :: IO ()
main = do
  triangles