Copyright  (c) 20112015 diagramslib team (see LICENSE) 

License  BSDstyle (see LICENSE) 
Maintainer  diagramsdiscuss@googlegroups.com 
Safe Haskell  None 
Language  Haskell2010 
Paths in two dimensions are special since we may stroke them to create a 2D diagram, and (eventually) perform operations such as intersection and union. They also have a trace, whereas paths in higher dimensions do not.
Synopsis
 stroke :: (InSpace V2 n t, ToPath t, TypeableFloat n, Renderable (Path V2 n) b) => t > QDiagram b V2 n Any
 stroke' :: (InSpace V2 n t, ToPath t, TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > t > QDiagram b V2 n Any
 strokePath :: (TypeableFloat n, Renderable (Path V2 n) b) => Path V2 n > QDiagram b V2 n Any
 strokeP :: (TypeableFloat n, Renderable (Path V2 n) b) => Path V2 n > QDiagram b V2 n Any
 strokePath' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Path V2 n > QDiagram b V2 n Any
 strokeP' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Path V2 n > QDiagram b V2 n Any
 strokeTrail :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail V2 n > QDiagram b V2 n Any
 strokeT :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail V2 n > QDiagram b V2 n Any
 strokeTrail' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Trail V2 n > QDiagram b V2 n Any
 strokeT' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Trail V2 n > QDiagram b V2 n Any
 strokeLine :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail' Line V2 n > QDiagram b V2 n Any
 strokeLoop :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail' Loop V2 n > QDiagram b V2 n Any
 strokeLocTrail :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail V2 n) > QDiagram b V2 n Any
 strokeLocT :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail V2 n) > QDiagram b V2 n Any
 strokeLocLine :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail' Line V2 n) > QDiagram b V2 n Any
 strokeLocLoop :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail' Loop V2 n) > QDiagram b V2 n Any
 data FillRule
 getFillRule :: FillRule > FillRule
 fillRule :: HasStyle a => FillRule > a > a
 _fillRule :: Lens' (Style V2 n) FillRule
 data StrokeOpts a = StrokeOpts {
 _vertexNames :: [[a]]
 _queryFillRule :: FillRule
 vertexNames :: Lens (StrokeOpts a) (StrokeOpts a') [[a]] [[a']]
 queryFillRule :: Lens' (StrokeOpts a) FillRule
 newtype Crossings = Crossings Int
 isInsideWinding :: HasQuery t Crossings => t > Point (V t) (N t) > Bool
 isInsideEvenOdd :: HasQuery t Crossings => t > Point (V t) (N t) > Bool
 newtype Clip n = Clip [Path V2 n]
 _Clip :: Iso (Clip n) (Clip n') [Path V2 n] [Path V2 n']
 _clip :: (Typeable n, OrderedField n) => Lens' (Style V2 n) [Path V2 n]
 clipBy :: (HasStyle a, V a ~ V2, N a ~ n, TypeableFloat n) => Path V2 n > a > a
 clipTo :: TypeableFloat n => Path V2 n > QDiagram b V2 n Any > QDiagram b V2 n Any
 clipped :: TypeableFloat n => Path V2 n > QDiagram b V2 n Any > QDiagram b V2 n Any
 intersectPoints :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => t > s > [P2 n]
 intersectPoints' :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => n > t > s > [P2 n]
 intersectPointsP :: OrderedField n => Path V2 n > Path V2 n > [P2 n]
 intersectPointsP' :: OrderedField n => n > Path V2 n > Path V2 n > [P2 n]
 intersectPointsT :: OrderedField n => Located (Trail V2 n) > Located (Trail V2 n) > [P2 n]
 intersectPointsT' :: OrderedField n => n > Located (Trail V2 n) > Located (Trail V2 n) > [P2 n]
Constructing pathbased diagrams
stroke :: (InSpace V2 n t, ToPath t, TypeableFloat n, Renderable (Path V2 n) b) => t > QDiagram b V2 n Any #
Convert a ToPath
object into a diagram. The resulting diagram has the
names 0, 1, ... assigned to each of the path's vertices.
See also stroke'
, which takes an extra options record allowing
its behaviour to be customized.
stroke
::Path
V2
Double
>Diagram
bstroke
::Located
(Trail
V2
Double
) >Diagram
bstroke
::Located
(Trail'
Loop
V2
Double
) >Diagram
bstroke
::Located
(Trail'
Line
V2
Double
) >Diagram
b
stroke' :: (InSpace V2 n t, ToPath t, TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > t > QDiagram b V2 n Any #
A variant of stroke
that takes an extra record of options to
customize its behaviour. In particular:
 Names can be assigned to the path's vertices
StrokeOpts
is an instance of Default
, so stroke' (
syntax may be used.with
&
... )
strokePath :: (TypeableFloat n, Renderable (Path V2 n) b) => Path V2 n > QDiagram b V2 n Any #
strokePath' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Path V2 n > QDiagram b V2 n Any #
strokeP' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Path V2 n > QDiagram b V2 n Any #
strokeTrail :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail V2 n > QDiagram b V2 n Any #
strokeTrail' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Trail V2 n > QDiagram b V2 n Any #
A composition of stroke'
and pathFromTrail
for conveniently
converting a trail directly into a diagram.
strokeT' :: (TypeableFloat n, Renderable (Path V2 n) b, IsName a) => StrokeOpts a > Trail V2 n > QDiagram b V2 n Any #
Deprecated synonym for strokeTrail'
.
strokeLine :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail' Line V2 n > QDiagram b V2 n Any #
strokeLoop :: (TypeableFloat n, Renderable (Path V2 n) b) => Trail' Loop V2 n > QDiagram b V2 n Any #
strokeLocTrail :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail V2 n) > QDiagram b V2 n Any #
A convenience function for converting a Located Trail
directly
into a diagram; strokeLocTrail = stroke . trailLike
.
strokeLocT :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail V2 n) > QDiagram b V2 n Any #
Deprecated synonym for strokeLocTrail
.
strokeLocLine :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail' Line V2 n) > QDiagram b V2 n Any #
A convenience function for converting a Located
line directly
into a diagram; strokeLocLine = stroke . trailLike . mapLoc wrapLine
.
strokeLocLoop :: (TypeableFloat n, Renderable (Path V2 n) b) => Located (Trail' Loop V2 n) > QDiagram b V2 n Any #
A convenience function for converting a Located
loop directly
into a diagram; strokeLocLoop = stroke . trailLike . mapLoc wrapLoop
.
Stroke options
Enumeration of algorithms or "rules" for determining which points lie in the interior of a (possibly selfintersecting) path.
Winding  Interior points are those with a nonzero winding number. See http://en.wikipedia.org/wiki/Nonzerorule. 
EvenOdd  Interior points are those where a ray extended infinitely in a particular direction crosses the path an odd number of times. See http://en.wikipedia.org/wiki/Evenodd_rule. 
getFillRule :: FillRule > FillRule #
Extract the fill rule from a FillRuleA
attribute.
fillRule :: HasStyle a => FillRule > a > a #
Specify the fill rule that should be used for determining which points are inside a path.
data StrokeOpts a #
A record of options that control how a path is stroked.
StrokeOpts
is an instance of Default
, so a StrokeOpts
records can be created using
notation.with
{ ... }
StrokeOpts  

Instances
Default (StrokeOpts a) #  
Defined in Diagrams.TwoD.Path def :: StrokeOpts a # 
vertexNames :: Lens (StrokeOpts a) (StrokeOpts a') [[a]] [[a']] #
Atomic names that should be assigned to the vertices of the path so that they can be referenced later. If there are not enough names, the extra vertices are not assigned names; if there are too many, the extra names are ignored. Note that this is a list of lists of names, since paths can consist of multiple trails. The first list of names are assigned to the vertices of the first trail, the second list to the second trail, and so on.
The default value is the empty list.
queryFillRule :: Lens' (StrokeOpts a) FillRule #
Inside/outside testing
The sum of signed crossings of a path as we travel in the positive x direction from a given point.
 A point is filled according to the
Winding
fill rule, if the number ofCrossings
is nonzero (seeisInsideWinding
).  A point is filled according to the
EvenOdd
fill rule, if the number ofCrossings
is odd (seeisInsideEvenOdd
).
This is the HasQuery
result for Path
s, Located
Trail
s and
Located
Loops
.
sample
::Path
V2
Double
>Point
V2
Double
>Crossings
sample
::Located
(Trail
V2
Double
) >Point
V2
Double
>Crossings
sample
::Located
(Trail'
Loop
V2
Double
) >Point
V2
Double
>Crossings
Note that Line
s have no inside or outside, so don't contribute
crossings
Instances
Enum Crossings #  
Defined in Diagrams.TwoD.Path succ :: Crossings > Crossings # pred :: Crossings > Crossings # fromEnum :: Crossings > Int # enumFrom :: Crossings > [Crossings] # enumFromThen :: Crossings > Crossings > [Crossings] # enumFromTo :: Crossings > Crossings > [Crossings] # enumFromThenTo :: Crossings > Crossings > Crossings > [Crossings] #  
Eq Crossings #  
Integral Crossings #  
Defined in Diagrams.TwoD.Path  
Num Crossings #  
Ord Crossings #  
Defined in Diagrams.TwoD.Path  
Real Crossings #  
Defined in Diagrams.TwoD.Path toRational :: Crossings > Rational #  
Show Crossings #  
Semigroup Crossings #  
Monoid Crossings #  
RealFloat n => HasQuery (Located (Trail V2 n)) Crossings #  
RealFloat n => HasQuery (Located (Trail' l V2 n)) Crossings #  
RealFloat n => HasQuery (Path V2 n) Crossings #  
isInsideWinding :: HasQuery t Crossings => t > Point (V t) (N t) > Bool #
Test whether the given point is inside the given path,
by testing whether the point's winding number is nonzero. Note
that False
is always returned for paths consisting of lines
(as opposed to loops), regardless of the winding number.
isInsideWinding
::Path
V2
Double
>Point
V2
Double
>Bool
isInsideWinding
::Located
(Trail
V2
Double
) >Point
V2
Double
>Bool
isInsideWinding
::Located
(Trail'
Loop
V2
Double
) >Point
V2
Double
>Bool
isInsideEvenOdd :: HasQuery t Crossings => t > Point (V t) (N t) > Bool #
Test whether the given point is inside the given path,
by testing whether a ray extending from the point in the positive
x direction crosses the path an even (outside) or odd (inside)
number of times. Note that False
is always returned for
paths consisting of lines (as opposed to loops), regardless of
the number of crossings.
isInsideEvenOdd
::Path
V2
Double
>Point
V2
Double
>Bool
isInsideEvenOdd
::Located
(Trail
V2
Double
) >Point
V2
Double
>Bool
isInsideEvenOdd
::Located
(Trail'
Loop
V2
Double
) >Point
V2
Double
>Bool
Clipping
Clip
tracks the accumulated clipping paths applied to a
diagram. Note that the semigroup structure on Clip
is list
concatenation, so applying multiple clipping paths is sensible.
The clipping region is the intersection of all the applied
clipping paths.
Instances
Semigroup (Clip n) #  
Typeable n => AttributeClass (Clip n) #  
Defined in Diagrams.TwoD.Path  
OrderedField n => Transformable (Clip n) #  
Defined in Diagrams.TwoD.Path  
Wrapped (Clip n) #  
AsEmpty (Clip n) #  
Defined in Diagrams.TwoD.Path  
Clip n1 ~ t => Rewrapped (Clip n2) t #  
Defined in Diagrams.TwoD.Path  
RealFloat n => HasQuery (Clip n) All #  A point inside a clip if the point is in 
type V (Clip n) #  
Defined in Diagrams.TwoD.Path  
type N (Clip n) #  
Defined in Diagrams.TwoD.Path  
type Unwrapped (Clip n) #  
Defined in Diagrams.TwoD.Path 
_clip :: (Typeable n, OrderedField n) => Lens' (Style V2 n) [Path V2 n] #
Lens onto the Clip in a style. An empty list means no clipping.
clipBy :: (HasStyle a, V a ~ V2, N a ~ n, TypeableFloat n) => Path V2 n > a > a #
Clip a diagram by the given path:
 Only the parts of the diagram which lie in the interior of the path will be drawn.
 The envelope of the diagram is unaffected.
clipTo :: TypeableFloat n => Path V2 n > QDiagram b V2 n Any > QDiagram b V2 n Any #
Clip a diagram to the given path setting its envelope to the pointwise minimum of the envelopes of the diagram and path. The trace consists of those parts of the original diagram's trace which fall within the clipping path, or parts of the path's trace within the original diagram.
clipped :: TypeableFloat n => Path V2 n > QDiagram b V2 n Any > QDiagram b V2 n Any #
Clip a diagram to the clip path taking the envelope and trace of the clip path.
Intersections
intersectPoints :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => t > s > [P2 n] #
Find the intersect points of two objects that can be converted to a path.
intersectPoints' :: (InSpace V2 n t, SameSpace t s, ToPath t, ToPath s, OrderedField n) => n > t > s > [P2 n] #
Find the intersect points of two objects that can be converted to a path within the given tolerance.
intersectPointsP :: OrderedField n => Path V2 n > Path V2 n > [P2 n] #
Compute the intersect points between two paths.
intersectPointsP' :: OrderedField n => n > Path V2 n > Path V2 n > [P2 n] #
Compute the intersect points between two paths within given tolerance.
intersectPointsT :: OrderedField n => Located (Trail V2 n) > Located (Trail V2 n) > [P2 n] #
Compute the intersect points between two located trails.
intersectPointsT' :: OrderedField n => n > Located (Trail V2 n) > Located (Trail V2 n) > [P2 n] #
Compute the intersect points between two located trails within the given tolerance.
Orphan instances
RealFloat n => HasQuery (Located (Trail V2 n)) Crossings #  
RealFloat n => HasQuery (Located (Trail' l V2 n)) Crossings #  
RealFloat n => Traced (Trail V2 n) #  
RealFloat n => Traced (Path V2 n) #  
RealFloat n => HasQuery (Path V2 n) Crossings #  
(TypeableFloat n, Renderable (Path V2 n) b) => TrailLike (QDiagram b V2 n Any) #  