gloss- Painless 2D vector graphics, animations and simulations.

Safe HaskellSafe-Inferred



Represents an integral rectangular area of the 2D plane. Using Ints (instead of Floats) for the bounds means we can safely compare extents for equality.



data Extent Source

A rectangular area of the 2D plane. We keep the type abstract to ensure that invalid extents cannot be constructed.


type Coord = (Int, Int) Source

An integral coordinate.

makeExtent Source


:: Int

y max (north)

-> Int

y min (south)

-> Int

x max (east)

-> Int

x min (west)

-> Extent 

Construct an extent. The north value must be > south, and east > west, else error.

takeExtent :: Extent -> (Int, Int, Int, Int) Source

Take the NSEW components of an extent.

squareExtent :: Int -> Extent Source

A square extent of a given size.

sizeOfExtent :: Extent -> (Int, Int) Source

Get the width and height of an extent.

isUnitExtent :: Extent -> Bool Source

Check if an extent is a square with a width and height of 1.

coordInExtent :: Extent -> Coord -> Bool Source

Check whether a coordinate lies inside an extent.

pointInExtent :: Extent -> Point -> Bool Source

Check whether a point lies inside an extent.

centerCoordOfExtent :: Extent -> (Int, Int) Source

Get the coordinate that lies at the center of an extent.

cutQuadOfExtent :: Quad -> Extent -> Extent Source

Cut one quadrant out of an extent.

quadOfCoord :: Extent -> Coord -> Maybe Quad Source

Get the quadrant that this coordinate lies in, if any.

pathToCoord :: Extent -> Coord -> Maybe [Quad] Source

Constuct a path to a particular coordinate in an extent.

intersectSegExtent :: Point -> Point -> Extent -> Maybe Point Source

If a line segment (P1-P2) intersects the outer edge of an extent then return the intersection point, that is closest to P1, if any. If P1 is inside the extent then Nothing.

           | /  |
           +    |

touchesSegExtent :: Point -> Point -> Extent -> Bool Source

Check whether a line segment's endpoints are inside an extent, or if it intersects with the boundary.