Maintainer | dominic@steinitz.org |
---|---|
Safe Haskell | None |
The example above is created by the code below which generates a grid, puts points on the interior and the boundary, draws dashed lines around the points to which we wish to draw attention and annotates the points of interest with some text.
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} import Diagrams.TwoD.Grid import Diagrams.TwoD.Text example :: (Renderable Text b, Renderable (Path R2) b, Backend b R2) => Int -> Int -> Diagram b R2 example n m = (gridWithHalves n m) # -- Put points on the boundary bndPts [ (1 :: Int, m + 1 ) | m <- [0,2..2 * m] ] # bndPts [ (n + 1, 1 :: Int ) | n <- [0,2..2 * n] ] # bndPts [ (2 * n + 1, m + 1 ) | m <- [0,2..2 * m] ] # bndPts [ (n + 1, 2 * m + 1 ) | n <- [0,2..2 * n] ] # intPts [ (n + 1, m + 1) | n <- [2,4..2 * n - 1] :: [Int] , m <- [2,4..2 * m - 1] :: [Int] ] # selectedLines (2 * n - 3) (3 :: Int) # ann (2 * n - 1) (1 :: Int) red # ann (2 * n + 1) (3 :: Int) red # ann (2 * n - 1) (3 :: Int) blue # ann (2 * n - 3) (3 :: Int) blue # ann (2 * n - 1) (5 :: Int) blue where ann n m c = annotate ("u_" ++ show (n `div` 2) ++ show (m `div` 2)) txtPt c n m selectedLines n m = gridLines $ selectedPairs n m selectedPairs n m = let pts = selectedList n m in zip pts (tail pts) selectedList n m = [ (n - 1, m - 1) , (n - 1, m + 1) , (n + 1, m + 1) , (n + 1, m + 3) , (n + 3, m + 3) , (n + 3, m + 1) , (n + 5, m + 1) , (n + 5, m - 1) , (n + 3, m - 1) , (n + 3, m - 3) , (n + 1, m - 3) , (n + 1, m - 1) , (n - 1, m - 1) ] txtPt t = circle cSize # opacity 0.0 # lw none === text t # fontSize (Local 0.06) intPts = placeDiagramOnGrid (circle (cSize / 2) # fc blue # opacity 0.5 # lw none) bndPts = placeDiagramOnGrid (circle (cSize / 2) # fc red # opacity 0.5 # lw none) cSize :: Double cSize = 0.03 example1 = example 5 5
- gridWithHalves :: (Renderable Text b, Renderable (Path R2) b, Backend b R2) => Int -> Int -> Diagram b R2
- gridWithHalves' :: (Renderable Text b, Renderable (Path R2) b, Backend b R2) => GridOpts -> Int -> Int -> Diagram b R2
- annotate :: (Renderable Text b, Renderable (Path R2) b) => String -> (String -> Diagram b R2) -> Colour Double -> Int -> Int -> Diagram b R2 -> Diagram b R2
- gridLine :: (IsName a, IsName b, Renderable Text c, Renderable (Path R2) c) => a -> b -> Diagram c R2 -> Diagram c R2
- gridLines :: (Renderable Text c, Renderable (Path R2) c, IsName a, IsName b) => [(a, b)] -> Diagram c R2 -> Diagram c R2
- placeDiagramOnGrid :: (IsName n, Renderable Text b, Renderable (Path R2) b) => Diagram b R2 -> [n] -> Diagram b R2 -> Diagram b R2
Documentation
gridWithHalves :: (Renderable Text b, Renderable (Path R2) b, Backend b R2) => Int -> Int -> Diagram b R2Source
gridWithHalves
with default opts.
gridWithHalves' :: (Renderable Text b, Renderable (Path R2) b, Backend b R2) => GridOpts -> Int -> Int -> Diagram b R2Source
Create a n by m grid. Diagrams can be placed on either the grid points themselves or on points half way between grid points. The latter includes points a half grid length outside of the grid itself.
annotate :: (Renderable Text b, Renderable (Path R2) b) => String -> (String -> Diagram b R2) -> Colour Double -> Int -> Int -> Diagram b R2 -> Diagram b R2Source
gridLine :: (IsName a, IsName b, Renderable Text c, Renderable (Path R2) c) => a -> b -> Diagram c R2 -> Diagram c R2Source
Draw a line between two named points on the grid.
gridLines :: (Renderable Text c, Renderable (Path R2) c, IsName a, IsName b) => [(a, b)] -> Diagram c R2 -> Diagram c R2Source
Draw lines between a list of pairs of named points on the grid.
placeDiagramOnGrid :: (IsName n, Renderable Text b, Renderable (Path R2) b) => Diagram b R2 -> [n] -> Diagram b R2 -> Diagram b R2Source
Place a diagram on a grid (which is itself a diagram) at all the co-ordinates specified.