packages feed

wumpus-basic-0.16.0: demo/SimplePosImage.hs

{-# OPTIONS -Wall #-}


module SimplePosImage where

import Wumpus.Basic.Kernel

import Wumpus.Core                      -- package: wumpus-core
import Wumpus.Core.Colour ( red )

import System.Directory

main :: IO ()
main = do 
    createDirectoryIfMissing True "./out/"
    let pic1 = runCtxPictureU std_attr drawing01
    writeEPS "./out/simple_pos_image01.eps" pic1
    writeSVG "./out/simple_pos_image01.svg" pic1


std_attr :: DrawingContext
std_attr = standardContext 24


drawing01 :: DCtxPicture
drawing01 = drawTracing $ localize (fillColour red) $ mf 


mf :: (Floating u, FromPtSize u) => TraceDrawing u ()
mf = do
    draw $ testDrawMinor NN     `at` (P2   0 300)
    draw $ testDrawMinor SS     `at` (P2  75 300)
    draw $ testDrawMinor EE     `at` (P2 150 300)
    draw $ testDrawMinor WW     `at` (P2 225 300)
    draw $ testDrawMinor NE     `at` (P2   0 225)
    draw $ testDrawMinor SE     `at` (P2  75 225)
    draw $ testDrawMinor SW     `at` (P2 150 225)
    draw $ testDrawMinor NW     `at` (P2 225 225)
    draw $ testDrawMinor CENTER `at` (P2   0 150)
    draw $ testDrawBl    CENTER `at` (P2 225 150)
    draw $ testDrawBl    NN     `at` (P2   0 75)
    draw $ testDrawBl    SS     `at` (P2  75 75)
    draw $ testDrawBl    EE     `at` (P2 150 75)
    draw $ testDrawBl    WW     `at` (P2 225 75)
    draw $ testDrawBl    NE     `at` (P2   0 0)
    draw $ testDrawBl    SE     `at` (P2  75 0)
    draw $ testDrawBl    SW     `at` (P2 150 0)
    draw $ testDrawBl    NW     `at` (P2 225 0)
    

testDrawBl :: Floating u => RectPosition -> LocGraphic u
testDrawBl rpos = filledDisk 2 `oplus` (rectBl `startPos` rpos)

rectBl :: Floating u => PosGraphic u 
rectBl = makePosImage opos (mkRectBl w h)
  where
    w    = 40 
    h    = 20
    opos = ObjectPos { op_x_minor = 0
                     , op_x_major = w
                     , op_y_minor = 0
                     , op_y_major = h }
 

-- start-point - bottom left
mkRectBl :: Floating u => u -> u -> LocGraphic u
mkRectBl w h = promoteR1 $ \bl -> 
    let br = displaceH w bl
        tr = displaceV h br
        tl = displaceV h bl
    in closedStroke $ vertexPath [bl, br, tr, tl]



testDrawMinor :: Floating u => RectPosition -> LocGraphic u
testDrawMinor rpos = filledDisk 2 `oplus` (rectMinor `startPos` rpos)

rectMinor :: Floating u => PosGraphic u 
rectMinor = makePosImage opos (mkRectMinor m w h)
  where
    m    = 10
    w    = 40 
    h    = 20
    opos = ObjectPos { op_x_minor = m
                     , op_x_major = (w-m)
                     , op_y_minor = m
                     , op_y_major = (h-m) }
 

-- start-point - +10 +10
mkRectMinor :: Floating u => u -> u -> u -> LocGraphic u
mkRectMinor m w h = promoteR1 $ \pt -> 
    let bl = displaceVec (vec (-m) (-m)) pt
        br = displaceH w bl
        tr = displaceV h br
        tl = displaceV h bl
    in closedStroke $ vertexPath [bl, br, tr, tl]