packages feed

wumpus-core-0.18.0: demo/LabelPic.hs

{-# OPTIONS -Wall #-}

module LabelPic where

import Wumpus.Core
import Wumpus.Extra.PictureLanguage

import System.Directory

--------------------------------------------------------------------------------



drawBounds :: (Fractional u, Floating u, Ord u) => Picture u -> Picture u
drawBounds p        = p `over` (frame $ cstroke () ph) 
  where
    ph            = vertexPath $ [bl,br,tr,tl]
    (bl,br,tr,tl) = corners $ boundary p

--------------------------------------------------------------------------------


peru :: PSRgb
peru = RGB3 0.804  0.522  0.247

plum :: PSRgb
plum = RGB3 0.867  0.627  0.867

black :: PSRgb
black = RGB3 0 0 0 



lbl1 :: Picture Double
lbl1 = line1 -//- line2 where
  line1 = frame (textlabel attrs "Hello" zeroPt)
  line2 = frame (textlabel attrs "World" zeroPt)
  attrs = (peru, FontAttr "Helvetica" "Helvetica" SVG_REGULAR 12) 


demo01 :: IO ()
demo01 = do 
    writeEPS_latin1 "./out/label01.eps" lbl1
    writeSVG_latin1 "./out/label01.svg" lbl1

demo02 :: IO ()
demo02 = do 
    writeEPS_latin1 "./out/label02.eps" p1
    writeSVG_latin1 "./out/label02.svg" p1
  where
    p1 = lbl1 ->- lbl1 ->- (rotateAbout (pi/4) (center lbl1) lbl1) ->- lbl1

demo03 :: IO ()
demo03 = do 
    writeEPS_latin1 "./out/label03.eps" p1
    writeSVG_latin1 "./out/label03.svg" p1
  where
    p1 = (drawBounds lbl1) ->- 
         (drawBounds lbl1) ->- 
         (drawBounds $ rotateAbout (pi/4) (center lbl1) lbl1) ->- 
         (drawBounds lbl1)



demo04 :: IO ()
demo04 = do
    writeEPS_latin1 "./out/label04.eps" p1
    writeSVG_latin1 "./out/label04.svg" p1
  where
    p1 =        (drawBounds lbl1) 
         `over` (drawBounds $ scale 2 2 lbl1)
         `over` (drawBounds $ scale 3 3 lbl1)




bigA, bigB, bigT :: Picture Double
bigA = bigLetter black 'A'
bigB = bigLetter peru  'B'
bigT = bigLetter plum  'T'

bigLetter :: PSRgb -> Char -> Picture Double
bigLetter col ch = uniformScale 5 $ frame $ textlabel attrs [ch] zeroPt
  where
    attrs = (col, FontAttr "Helvetica" "Helvetica" SVG_REGULAR 12) 


-- | A should be above B, above T
demo05 :: IO ()
demo05 = do 
    writeEPS_latin1 "./out/label05.eps" p1
    writeSVG_latin1 "./out/label05.svg" p1
  where
    p1 = uniformScale 10 $ stackOntoCenter [bigA, bigB] bigT


demo06 :: IO ()
demo06 = do 
    writeEPS_latin1 "./out/label06.eps" p1
    writeSVG_latin1 "./out/label06.svg" p1
  where
    p1 = hsep 20 (fn 'a') (map fn "abcdefg")
    fn = drawBounds . bigLetter peru


demo07 :: IO ()
demo07 = do 
    writeEPS_latin1 "./out/label07.eps" p1
    writeSVG_latin1 "./out/label07.svg" p1
  where
    p1 = pA ->- pB ->- pC ->- pA
    
    pA = drawBounds bigA
    pB = drawBounds $ uniformScale 2 bigB
    pC = drawBounds $ move 0 10 $ bigLetter peru 'C'


demo08 :: IO ()
demo08 = do 
    writeEPS_latin1 "./out/label08.eps" p1
    writeSVG_latin1 "./out/label08.svg" p1
  where
    p1 = hcat pA [pA, pB, pC]
    
    pA = drawBounds bigA
    pB = drawBounds $ uniformScale 2 bigB
    pC = drawBounds $ move 0 10 $ bigLetter peru 'C'

demo09 :: IO ()
demo09 = do 
    writeEPS_latin1 "./out/label09.eps" p1
    writeSVG_latin1 "./out/label09.svg" p1
  where
    p1 = (bigA `above` bigB) ->- (bigA `below` bigB) 
    
demo10 :: IO ()
demo10 = do 
    writeEPS_latin1 "./out/label10.eps" p1
    writeSVG_latin1 "./out/label10.svg" p1
  where
    p1 :: Picture Double
    p1 = frame $ textlabel () "myst&#egrave;re" zeroPt

demo11 :: IO ()
demo11 = do
    writeEPS_latin1 "./out/label11.eps" pic
    writeSVG_latin1 "./out/label11.svg" pic
  where
    pic :: Picture Double
    pic = p1 `over` p2
    p1  = multilabel plum 3 VLeft ["Hello", "from", "Wumpus"] (P2 50 50)
    p2  = bigA `at` P2 50 50


main :: IO ()
main = do 
  createDirectoryIfMissing True "./out/"
  sequence_ [ demo01, demo02, demo03, demo04, demo05
            , demo06, demo07, demo08, demo09, demo10
            , demo11 ]