diagrams-lib-1.1.0.7: Embedded domain-specific language for declarative graphics

Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellNone

Diagrams.TwoD.Arrow

Contents

Description

Drawing arrows in two dimensions. For a tutorial on drawing arrows using this module, see the diagrams website: http://projects.haskell.org/diagrams/doc/arrow.html.

Synopsis

Examples

Example 1

 -- Connecting two diagrams at their origins.

 sq = square 2 # showOrigin # lc darkgray # lw 0.07
 ds = (sq # named "left") ||| strutX 3 ||| (sq # named "right")

 shaft  = cubicSpline False ( map p2 [(0, 0), (1, 0), (1, 0.2), (2, 0.2)])

 example1 = ds # connect' (with & arrowHead .~ dart & headSize .~ 0.6
                                & tailSize .~ 0.5 & arrowTail .~ quill
                                & shaftStyle %~ lw 0.02 & arrowShaft .~ shaft)
                                "left" "right" # pad 1.1

Example 2

 -- Comparing connect, connectPerim, and arrowAt.

 oct  = octagon 1 # lc darkgray # lw 0.10 # showOrigin
 dias = oct # named "first" ||| strut 3 ||| oct # named "second"

 -- Connect two diagrams and two points on their trails.
 ex12 = dias # connect "first" "second"
             # connectPerim "first" "second" (15/16 \@\@ turn) (9/16 \@\@ turn)

 -- Place an arrow at (0,0) the size and direction of (0,1).
 ex3 = arrowAt origin unit_Y

 example2 = (ex12 <> ex3) # centerXY # pad 1.1

Creating arrows

arrowV :: Renderable (Path R2) b => R2 -> Diagram b R2Source

arrowV v creates an arrow with the direction and magnitude of the vector v (with its tail at the origin), using default parameters.

arrowV' :: Renderable (Path R2) b => ArrowOpts -> R2 -> Diagram b R2Source

arrowV' v creates an arrow with the direction and magnitude of the vector v (with its tail at the origin).

arrowAt :: Renderable (Path R2) b => P2 -> R2 -> Diagram b R2Source

Create an arrow starting at s with length and direction determined by the vector v.

arrowBetween :: Renderable (Path R2) b => P2 -> P2 -> Diagram b R2Source

arrowBetween s e creates an arrow pointing from s to e with default parameters.

arrowBetween' :: Renderable (Path R2) b => ArrowOpts -> P2 -> P2 -> Diagram b R2Source

arrowBetween' opts s e creates an arrow pointing from s to e using the given options. In particular, it scales and rotates arrowShaft to go between s and e, taking head, tail, and gaps into account.

connect :: (Renderable (Path R2) b, IsName n1, IsName n2) => n1 -> n2 -> Diagram b R2 -> Diagram b R2Source

Connect two diagrams with a straight arrow.

connect' :: (Renderable (Path R2) b, IsName n1, IsName n2) => ArrowOpts -> n1 -> n2 -> Diagram b R2 -> Diagram b R2Source

Connect two diagrams with an arbitrary arrow.

connectPerim :: (Renderable (Path R2) b, IsName n1, IsName n2) => n1 -> n2 -> Angle -> Angle -> Diagram b R2 -> Diagram b R2Source

Connect two diagrams at point on the perimeter of the diagrams, choosen by angle.

connectPerim' :: (Renderable (Path R2) b, IsName n1, IsName n2) => ArrowOpts -> n1 -> n2 -> Angle -> Angle -> Diagram b R2 -> Diagram b R2Source

connectOutside :: (Renderable (Path R2) b, IsName n1, IsName n2) => n1 -> n2 -> Diagram b R2 -> Diagram b R2Source

Draw an arrow from diagram named n1 to diagram named n2. The arrow lies on the line between the centres of the diagrams, but is drawn so that it stops at the boundaries of the diagrams, using traces to find the intersection points.

connectOutside' :: (Renderable (Path R2) b, IsName n1, IsName n2) => ArrowOpts -> n1 -> n2 -> Diagram b R2 -> Diagram b R2Source

arrow :: Renderable (Path R2) b => Double -> Diagram b R2Source

arrow len creates an arrow of length len with default parameters, starting at the origin and ending at the point (len,0).

arrow' :: Renderable (Path R2) b => ArrowOpts -> Double -> Diagram b R2Source

arrow' opts len creates an arrow of length len using the given options, starting at the origin and ending at the point (len,0). In particular, it scales the given arrowShaft so that the entire arrow has length len.

Options

arrowHead :: Lens' ArrowOpts ArrowHTSource

A shape to place at the head of the arrow.

arrowTail :: Lens' ArrowOpts ArrowHTSource

A shape to place at the tail of the arrow.

arrowShaft :: Lens' ArrowOpts (Trail R2)Source

The trail to use for the arrow shaft.

headSize :: Lens' ArrowOpts DoubleSource

Radius of a circumcircle around the head.

tailSize :: Lens' ArrowOpts DoubleSource

Radius of a circumcircle around the tail.

headGap :: Lens' ArrowOpts DoubleSource

Distance to leave between the head and the target point.

tailGap :: Lens' ArrowOpts DoubleSource

Distance to leave between the starting point and the tail.

headColor :: Color c => Setter' ArrowOpts cSource

A lens for setting or modifying the color of an arrowhead. For example, one may write ... (with & headColor .~ blue) to get an arrow with a blue head, or ... (with & headColor %~ blend 0.5 white) to make an arrow's head a lighter color. For more general control over the style of arrowheads, see headStyle.

Note that the most general type of headColor would be

   (Color c, Color c') => Setter ArrowOpts ArrowOpts c c'

but that can cause problems for type inference when setting the color. However, using it at that more general type may occasionally be useful, for example, if you want to apply some opacity to a color, as in ... (with & headColor %~ (`withOpacity` 0.5)). If you want the more general type, you can use headStyle . styleFillColor in place of headColor.

headStyle :: Lens' ArrowOpts (Style R2)Source

Style to apply to the head. headStyle is modified by using the lens combinator %~ to change the current style. For example, to change an opaque black arrowhead to translucent orange: (with & headStyle %~ fc orange . opacity 0.75).

tailColor :: Color c => Setter' ArrowOpts cSource

A lens for setting or modifying the color of an arrow tail. See headColor.

tailStyle :: Lens' ArrowOpts (Style R2)Source

Style to apply to the tail. See headStyle.

shaftColor :: Color c => Setter' ArrowOpts cSource

A lens for setting or modifying the color of an arrow shaft. See headColor.

shaftStyle :: Lens' ArrowOpts (Style R2)Source

Style to apply to the shaft. See headStyle.

straightShaft :: Trail R2Source

Straight line arrow shaft.

See Diagrams.TwoD.Arrowheads for a list of standard arrowheads and help creating your own.