wumpus-core-0.30.0: Pure Haskell PostScript and SVG generation.

PortabilityGHC
Stabilityhighly unstable
MaintainerStephen Tetley <stephen.tetley@gmail.com>

Wumpus.Core.Picture

Contents

Description

Construction of pictures, paths and text labels.

Synopsis

Construction

frame :: (Real u, Floating u, FromPtSize u) => [Primitive u] -> Picture uSource

Lift a list of primitives to a composite picture.

The order of the list maps to the zorder - the front of the list is drawn at the top.

This function throws an error when supplied the empty list.

multi :: (Fractional u, Ord u) => [Picture u] -> Picture uSource

Place multiple pictures within the standard affine frame.

This function throws an error when supplied the empty list.

path :: Point2 u -> [PrimPathSegment u] -> PrimPath uSource

Create a Path from a start point and a list of PathSegments.

lineTo :: Point2 u -> PrimPathSegment uSource

Create a straight-line PathSegment.

curveTo :: Point2 u -> Point2 u -> Point2 u -> PrimPathSegment uSource

Create a curved PathSegment.

vertexPath :: [Point2 u] -> PrimPath uSource

Convert the list of vertices to a path of straight line segments.

curvedPath :: [Point2 u] -> PrimPath uSource

Convert a list of vertices to a path of curve segments. The first point in the list makes the start point, each curve segment thereafter takes 3 points. Spare points at the end are discarded.

Constructing primitives

class Stroke t whereSource

Create a open, stroked path (ostroke) or a closed, stroked path (cstroke).

ostroke and cstroke are overloaded to make attributing the path more convenient.

Methods

ostroke :: Num u => t -> PrimPath u -> Primitive uSource

cstroke :: Num u => t -> PrimPath u -> Primitive uSource

zostroke :: Num u => PrimPath u -> Primitive uSource

Create an open stoke coloured black.

zcstroke :: Num u => PrimPath u -> Primitive uSource

Create a closed stroke coloured black.

class Fill t whereSource

Create a filled path (fill). Fills only have one property - colour. But there are various representations of colour.

fill () will fill with the default colour - black.

Methods

fill :: Num u => t -> PrimPath u -> Primitive uSource

Instances

Fill () 
Fill RGBi 
Fill XLink 
Fill (RGBi, XLink) 

zfill :: Num u => PrimPath u -> Primitive uSource

Create a filled path coloured black.

class Ellipse t whereSource

Create an ellipse, the ellipse will be filled unless the supplied attributes imply a stroked ellipse, e.g.:

 ellipse (LineWidth 4) zeroPt 40 40 

Note - within Wumpus, ellipses are considered an unfortunate but useful optimization. Drawing good cicles with Beziers needs at least eight curves, but drawing them with PostScript's arc command is a single operation. For drawings with many dots (e.g. scatter plots) it seems sensible to employ this optimaztion.

A deficiency of Wumpus's ellipse is that (non-uniformly) scaling a stroked ellipse also (non-uniformly) scales the pen it is drawn with. Where the ellipse is wider, the pen stroke will be wider too.

Methods

ellipse :: Fractional u => t -> u -> u -> Point2 u -> Primitive uSource

zellipse :: Num u => u -> u -> Point2 u -> Primitive uSource

Create a black, filled ellipse.

clip :: (Num u, Ord u) => PrimPath u -> Picture u -> Picture uSource

Clip a picture with respect to the supplied path.

class TextLabel t whereSource

Create a text label. The string should not contain newline or tab characters. Use multilabel to create text with multiple lines.

textlabel is overloaded to make attributing the label more convenient.

Unless a FontAttr is specified, the label will use 14pt Courier.

The supplied point is is the bottom left corner.

Methods

textlabel :: Num u => t -> String -> Point2 u -> Primitive uSource

ztextlabel :: Num u => String -> Point2 u -> Primitive uSource

Create a label where the font is Courier, text size is 14pt and colour is black.

Operations

extendBoundary :: (Num u, Ord u) => u -> u -> Picture u -> Picture uSource

Extend the bounding box of a picture.

The bounding box is both horizontal directions by x and both vertical directions by y. x and y must be positive This function cannot be used to shrink a boundary.

Picture composition

picOver :: (Num u, Ord u) => Picture u -> Picture u -> Picture uSource

picOver : picture -> picture -> picture

Draw the first picture on top of the second picture - neither picture will be moved.

picMoveBy :: (Num u, Ord u) => Picture u -> Vec2 u -> Picture uSource

picMoveBy : picture -> vector -> picture

Move a picture by the supplied vector.

picBeside :: (Num u, Ord u) => Picture u -> Picture u -> Picture uSource

picBeside : picture -> picture -> picture

Move the second picture to sit at the right side of the first picture

Illustrating pictures and primitives

printPicture :: (Num u, PSUnit u) => Picture u -> IO ()Source

Print the syntax tree of a Picture to the console.

illustrateBounds :: (Real u, Floating u, FromPtSize u) => RGBi -> Picture u -> Picture uSource

illustrateBounds : colour -> picture -> picture

Draw the picture on top of an image of its bounding box. The bounding box image will be drawn in the supplied colour.

illustrateBoundsPrim :: (Real u, Floating u, FromPtSize u) => RGBi -> Primitive u -> Picture uSource

illustrateBoundsPrim : colour -> primitive -> picture

Draw the primitive on top of an image of its bounding box. The bounding box image will be drawn in the supplied colour.

The result will be lifted from Primitive to Picture.

illustrateControlPoints :: (Real u, Floating u, FromPtSize u) => RGBi -> Primitive u -> Picture uSource

Generate the control points illustrating the Bezier curves within a picture.

This has no effect on TextLabels.

Pseudo control points are generated for ellipses, although strictly speaking ellipses do not use Bezier curves - they are implemented with PostScript's arc command.