| Copyright | (c) 2014 Dominic Steinitz |
|---|---|
| License | BSD-style (see LICENSE) |
| Maintainer | dominic@steinitz.org |
| Safe Haskell | None |
| Language | Haskell2010 |
Diagrams.TwoD.Grid
Contents
Description
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 Double) b, Renderable (Path V2 Double) b) =>
Int -> Int -> QDiagram b V2 Double Any
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 (Path V2 n) b, TypeableFloat n) => Int -> Int -> QDiagram b V2 n Any
- gridWithHalves' :: (Renderable (Path V2 n) b, TypeableFloat n) => GridOpts n -> Int -> Int -> QDiagram b V2 n Any
- annotate :: (Floating n, Ord n, Typeable n) => String -> (String -> QDiagram b V2 n Any) -> Colour Double -> Int -> Int -> QDiagram b V2 n Any -> QDiagram b V2 n Any
- gridLine :: (IsName a, IsName b, Renderable (Path V2 n) c, TypeableFloat n) => a -> b -> QDiagram c V2 n Any -> QDiagram c V2 n Any
- gridLine' :: (IsName a, IsName b, Renderable (Path V2 n) c, TypeableFloat n) => HighlightLineOpts n -> a -> b -> QDiagram c V2 n Any -> QDiagram c V2 n Any
- gridLines :: (Renderable (Path V2 n) c, TypeableFloat n, IsName a, IsName b) => [(a, b)] -> QDiagram c V2 n Any -> QDiagram c V2 n Any
- placeDiagramOnGrid :: (IsName nm, Floating n, Ord n) => QDiagram b V2 n Any -> [nm] -> QDiagram b V2 n Any -> QDiagram b V2 n Any
- data GridOpts n = GridOpts {
- _gridLineWidth :: Measure n
- _gridYColour :: Colour Double
- _gridXColour :: Colour Double
- _gridLL :: V2 n
- _gridLR :: V2 n
- _gridUL :: V2 n
- gridLineWidth :: forall n. Lens' (GridOpts n) (Measure n)
- gridYColour :: forall n. Lens' (GridOpts n) (Colour Double)
- gridXColour :: forall n. Lens' (GridOpts n) (Colour Double)
- gridLL :: forall n. Lens' (GridOpts n) (V2 n)
- gridLR :: forall n. Lens' (GridOpts n) (V2 n)
- gridUL :: forall n. Lens' (GridOpts n) (V2 n)
- data HighlightLineOpts n = HighlightLineOpts {}
- highLightLineColour :: forall n. Lens' (HighlightLineOpts n) (Colour Double)
- highLightLineWidth :: forall n. Lens' (HighlightLineOpts n) (Measure n)
- highLightLineDashingOnOff :: forall n. Lens' (HighlightLineOpts n) [Measure n]
- highLightLineDashingOffset :: forall n. Lens' (HighlightLineOpts n) (Measure n)
Documentation
gridWithHalves :: (Renderable (Path V2 n) b, TypeableFloat n) => Int -> Int -> QDiagram b V2 n Any Source #
gridWithHalves' with default opts.
gridWithHalves' :: (Renderable (Path V2 n) b, TypeableFloat n) => GridOpts n -> Int -> Int -> QDiagram b V2 n Any Source #
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 :: (Floating n, Ord n, Typeable n) => String -> (String -> QDiagram b V2 n Any) -> Colour Double -> Int -> Int -> QDiagram b V2 n Any -> QDiagram b V2 n Any Source #
gridLine :: (IsName a, IsName b, Renderable (Path V2 n) c, TypeableFloat n) => a -> b -> QDiagram c V2 n Any -> QDiagram c V2 n Any Source #
Draw a line between two named points on the grid.
gridLine' :: (IsName a, IsName b, Renderable (Path V2 n) c, TypeableFloat n) => HighlightLineOpts n -> a -> b -> QDiagram c V2 n Any -> QDiagram c V2 n Any Source #
Draw a line between two named points on the grid.
gridLines :: (Renderable (Path V2 n) c, TypeableFloat n, IsName a, IsName b) => [(a, b)] -> QDiagram c V2 n Any -> QDiagram c V2 n Any Source #
Draw lines between a list of pairs of named points on the grid.
placeDiagramOnGrid :: (IsName nm, Floating n, Ord n) => QDiagram b V2 n Any -> [nm] -> QDiagram b V2 n Any -> QDiagram b V2 n Any Source #
Place a diagram on a grid (which is itself a diagram) at all the co-ordinates specified.
Options
Constructors
| GridOpts | |
Fields
| |
data HighlightLineOpts n Source #
Constructors
| HighlightLineOpts | |
Fields | |
highLightLineColour :: forall n. Lens' (HighlightLineOpts n) (Colour Double) Source #
highLightLineWidth :: forall n. Lens' (HighlightLineOpts n) (Measure n) Source #
highLightLineDashingOnOff :: forall n. Lens' (HighlightLineOpts n) [Measure n] Source #
highLightLineDashingOffset :: forall n. Lens' (HighlightLineOpts n) (Measure n) Source #