{-# OPTIONS -Wall #-}
module Connectors where
import Wumpus.Drawing.Colour.SVGColours
import Wumpus.Drawing.Connectors
import qualified Wumpus.Drawing.Connectors.ConnectorPaths as C
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 $ tableGraphic conntable
conntable :: [(String, ConnectorPathSpec Double)]
conntable =
[ ("conn_line", C.conn_line)
, ("conna_arc", C.conna_arc)
, ("connb_arc", C.connb_arc)
, ("conn_hdiagh", C.conn_hdiagh)
, ("conn_vdiagv", C.conn_vdiagv)
, ("conn_diagh", C.conn_diagh)
, ("conn_diagv", C.conn_diagv)
, ("conn_hdiag", C.conn_hdiag)
, ("conn_vdiag", C.conn_vdiag)
, ("conna_bar", C.conna_bar)
, ("connb_bar", C.connb_bar)
, ("conna_flam", C.conna_flam)
, ("connb_flam", C.connb_flam)
, ("conna_orthohbar", C.conna_orthohbar)
, ("connb_orthohbar", C.connb_orthohbar)
, ("conna_orthovbar", C.conna_orthovbar)
, ("connb_orthovbar", C.connb_orthovbar)
, ("conna_right", C.conna_right)
, ("connb_right", C.connb_right)
, ("conn_hrr", C.conn_hrr )
, ("conn_rrh", C.conn_rrh)
, ("conn_vrr", C.conn_vrr)
, ("conn_rrv", C.conn_rrv)
, ("conna_loop", C.conna_loop)
, ("connb_loop", C.connb_loop)
, ("conn_hbezier", C.conn_hbezier)
, ("conn_vbezier", C.conn_vbezier)
]
props :: ConnectorProps
props = default_connector_props { conn_src_arm = 1
, conn_dst_arm = 1.5
, conn_src_space = 0.5
, conn_dst_space = 0.5 }
tableGraphic :: [(String, ConnectorPathSpec Double)] -> TraceDrawing Double ()
tableGraphic conns =
drawl start $ distribColumnwiseTable 6 (200,80) $ map makeConnDrawing conns
where
start = P2 0 520
std_ctx :: DrawingContext
std_ctx = fill_colour peru $ standardContext 18
makeConnDrawing :: (String, ConnectorPathSpec Double) -> DLocGraphic
makeConnDrawing (ss,conn) =
promoteLoc $ \p0 -> fn p0 (displace (vec 72 42) p0)
where
fn p0 p1 = mconcat [disk p0, disk p1, dcon p0 p1, lbl p1]
disk pt = localize (fill_colour red) $ dcDisk DRAW_FILL 2 `at` pt
dcon p0 p1 = ignoreAns $ connect biarrow p0 p1
lbl pt = ignoreAns $ textline WW ss `at` (displace (V2 10 (-10)) pt)
biarrow = renderConnectorConfig props conf
conf = ConnectorConfig { conn_arrowl = Just curveTip
, conn_arrowr = Just curveTip
, conn_path_spec = conn
}