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

Graphics.Gloss.Data.Extent

Description

Represents a rectangular area of the 2D plane. The bounds are represented as integers so that we can compare extents for equality.

Synopsis

Documentation

data Extent Source

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

Instances

type Coord = (Int, Int)Source

An integral coordinate.

makeExtentSource

Arguments

:: 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 -> ExtentSource

A square extent of a given size.

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

Get the width and height of an extent.

isUnitExtent :: Extent -> BoolSource

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

coordInExtent :: Extent -> Coord -> BoolSource

Check whether a coordinate lies inside an extent.

pointInExtent :: Extent -> Point -> BoolSource

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 -> ExtentSource

Cut one quadrant out of an extent.

quadOfCoord :: Extent -> Coord -> Maybe QuadSource

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 PointSource

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.

                   P2
                  /
            ----/-
            | /  |
            +    |
           /------
         / 
        P1

touchesSegExtent :: Point -> Point -> Extent -> BoolSource

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