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





Bounding box with no notion of 'empty'.

Empty pictures cannot be created with Wumpus. This greatly simplifies the implementation of pictures and bounding boxes.



data BoundingBox u Source

Bounding box of a picture, represented by the lower left and upper right corners.

We cannot construct empty pictures - so bounding boxes are spared the obligation to be empty. BoundingBox is an instance of the Semigroup class where append is the union operation.




ll_corner :: Point2 u
ur_corner :: Point2 u


Eq u => Eq (BoundingBox u) 
Show u => Show (BoundingBox u) 
Ord u => Semigroup (BoundingBox u) 
PSUnit u => Format (BoundingBox u) 
(Num u, Ord u) => Translate (BoundingBox u) 
(Num u, Ord u) => Scale (BoundingBox u) 
(Real u, Floating u) => RotateAbout (BoundingBox u) 
(Real u, Floating u) => Rotate (BoundingBox u) 
(Num u, Ord u) => Transform (BoundingBox u) 

Type class

class Boundary t whereSource

Type class extracting the bounding box of an object - Picture, Path etc.


boundary :: u ~ DUnit t => t -> BoundingBox uSource


bbox :: Ord u => Point2 u -> Point2 u -> BoundingBox uSource

Contruct a bounding box, vis the BBox constructor with range checking on the corner points.

bbox throws an error if the width or height of the constructed bounding box is negative.

obbox :: Num u => u -> u -> BoundingBox uSource

Create a BoundingBox with bottom left corner at the origin, and dimensions w and h.

destBoundingBox :: BoundingBox u -> (u, u, u, u)Source

Destructor for BoundingBox.

Assembles a four-tuple (ll_x, ll_y, ur_x, ur_y) .

Arguably this is easier to pattern match upon as it removes a layer of nesting.

boundaryUnion :: Ord u => BoundingBox u -> BoundingBox u -> BoundingBox uSource

The union of two bounding boxes. This is also the append of BoundingBox's Semigroup instance.

traceBoundary :: (Num u, Ord u) => [Point2 u] -> BoundingBox uSource

Trace a list of points, retuning the BoundingBox that includes them.

trace throws a run-time error when supplied with the empty list.

retraceBoundary :: (Num u, Ord u) => (Point2 u -> Point2 u) -> BoundingBox u -> BoundingBox uSource

Perform the supplied transformation on the four corners of the bounding box. Trace the new corners to calculate the resulting bounding box.

This helper function can be used to re-calculate a bounding box after a rotation for example.

boundaryCorners :: BoundingBox u -> (Point2 u, Point2 u, Point2 u, Point2 u)Source

Generate all the corners of a bounding box, counter-clock wise from the bottom left, i.e. (bl, br, tr, tl).

withinBoundary :: Ord u => Point2 u -> BoundingBox u -> BoolSource

Within test - is the supplied point within the bounding box?

boundaryWidth :: Num u => BoundingBox u -> uSource

Extract the width of a bounding box.

boundaryHeight :: Num u => BoundingBox u -> uSource

Extract the height of a bounding box.