Picture types

Picture is a leaf attributed tree - where attributes are
colour, line-width etc. It is parametric on the unit type
of points (typically Double).

Wumpus's leaf attributed tree, is not directly matched to
PostScript's picture representation, which might be
considered a node attributed tree (if you consider graphics
state changes less imperatively - setting attributes rather
than global state change).

Considered as a node-attributed tree PostScript precolates
graphics state updates downwards in the tree (vis-a-vis
inherited attributes in an attibute grammar), where a
graphics state change deeper in the tree overrides a higher
one.

Wumpus on the other hand, simply labels each leaf with its
drawing attributes - there is no attribute inheritance.
When it draws the PostScript picture it does some
optimization to avoid generating excessive graphics state
changes in the PostScript code.

Wumpus's drawings are built from two fundamental
primitives: paths (straight line segments and Bezier curves)
and labels (single lines of text).

Ellipses are a included as a primitive only for optimization
- drawing a reasonable circle with Bezier curves needs at
least eight curves. This is inconvenient for drawing dots
which can otherwise be drawn with a single arc command.

Wumpus does not follow PostScript employing arc as a general
path primitive - arcs are used only to draw ellipses. This
is because arcs do not enjoy the nice properties of Bezier
curves, whereby the affine transformation of a Bezier curve
can simply be achieved by the affine transformation of it's
control points.

Ellipses are represented by their center, half-width and
half-height. Half-width and half-height are used so the
bounding box can be calculated using only multiplication, and
thus initially only obliging a Num constraint on the unit.
Though typically for affine transformations a Fractional
constraint is also obliged.

To represent XLink hyperlinks, Primitives can be annotated
with some a hyperlink (similarly a a font change for better
SVG code generation) and grouped - a hyperlinked arrow would
want the tip and the arrow body both to be incorporated in the
link even though they are two drawings.

This means that Primitives aren't strictly primitive as
the actual implementation is a tree.