{-# OPTIONS -Wall #-}
module Connectors where
import Wumpus.Drawing.Colour.SVGColours
import Wumpus.Drawing.Connectors
import Wumpus.Drawing.Text.DirectionZero
import Wumpus.Drawing.Text.StandardFontDefs
import Wumpus.Basic.Kernel -- package: wumpus-basic
import Wumpus.Basic.System.FontLoader
import Wumpus.Core -- package: wumpus-core
import Data.Monoid
import System.Directory
main :: IO ()
main = simpleFontLoader main1 >> return ()
main1 :: FontLoader -> IO ()
main1 loader = do
createDirectoryIfMissing True "./out/"
base_metrics <- loader [ Left helvetica ]
printLoadErrors base_metrics
let pic1 = runCtxPictureU (makeCtx base_metrics) conn_pic
writeEPS "./out/connectors.eps" pic1
writeSVG "./out/connectors.svg" pic1
makeCtx :: FontLoadResult -> DrawingContext
makeCtx = set_font helvetica . metricsContext 11
conn_pic :: CtxPicture
conn_pic = drawTracing $ localize (dest_arm_len (0.75::Em))
$ tableGraphic conntable
conntable :: [(String, Connector Double)]
conntable =
[ ("connline", connline)
, ("connarc", connarc)
, ("connhdiagh", connhdiagh)
, ("connvdiagv", connvdiagv)
, ("conndiagh", conndiagh)
, ("conndiagv", conndiagv)
, ("connhdiag", connhdiag)
, ("connvdiag", connvdiag)
, ("connabar", connabar)
, ("connbbar", connbbar)
, ("connaright", connaright)
, ("connbright", connbright)
, ("connhrr", connhrr)
, ("connrrh", connrrh)
, ("connvrr", connvrr)
, ("connrrv", connrrv)
, ("connaloop", connaloop)
, ("connbloop", connbloop)
, ("connhbezier", connhbezier)
, ("connvbezier", connvbezier)
]
tableGraphic :: [(String, Connector Double)] -> TraceDrawing Double ()
tableGraphic conns =
draw $ chain_ chn_alg (map makeConnDrawing conns) `at` start
where
chn_alg = tableDown 8 (180,64)
start = P2 0 520
std_ctx :: DrawingContext
std_ctx = fill_colour peru $ standardContext 18
makeConnDrawing :: (String, Connector Double) -> DLocGraphic
makeConnDrawing (ss,conn) =
promoteLoc $ \p0 -> fn p0 (displace (vec 60 40) p0)
where
fn p0 p1 = mconcat [disk p0, disk p1, dcon p0 p1, lbl p1]
disk pt = localize (fill_colour red) $ dcDisk FILL 2 `at` pt
dcon p0 p1 = ignoreAns $ connect p0 p1 (uniformArrow curveTip conn)
lbl pt = ignoreAns $ textline ss WW `at` (displace (hvec 10) pt)