diagrams-lib-0.7.1.1: Embedded domain-specific language for declarative graphics

Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | None

Diagrams.TwoD.Size

Contents

- Size and extent of diagrams in R2
  - Computing sizes
  - Specifying sizes
  - Changing the size of things

Description

Utilities for working with sizes of two-dimensional objects.

Synopsis

- width :: (Enveloped a, V a ~ R2) => a -> Double
- height :: (Enveloped a, V a ~ R2) => a -> Double
- size2D :: (Enveloped a, V a ~ R2) => a -> (Double, Double)
- sizeSpec2D :: (Enveloped a, V a ~ R2) => a -> SizeSpec2D
- extentX :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double)
- extentY :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double)
- center2D :: (Enveloped a, V a ~ R2) => a -> P2
- data SizeSpec2D
  - = Width Double
  - | Height Double
  - | Dims Double Double
  - | Absolute
- mkSizeSpec :: Maybe Double -> Maybe Double -> SizeSpec2D
- requiredScaleT :: SizeSpec2D -> (Double, Double) -> Transformation R2
- requiredScale :: SizeSpec2D -> (Double, Double) -> Double
- sized :: (Transformable a, Enveloped a, V a ~ R2) => SizeSpec2D -> a -> a
- sizedAs :: (Transformable a, Enveloped a, V a ~ R2, Enveloped b, V b ~ R2) => b -> a -> a

# Size and extent of diagrams in R2

## Computing sizes

width :: (Enveloped a, V a ~ R2) => a -> Double Source

Compute the width of an enveloped object.

height :: (Enveloped a, V a ~ R2) => a -> Double Source

Compute the height of an enveloped object.

size2D :: (Enveloped a, V a ~ R2) => a -> (Double, Double)Source

Compute the width and height of an enveloped object.

sizeSpec2D :: (Enveloped a, V a ~ R2) => a -> SizeSpec2D Source

Compute the size of an enveloped object as a `SizeSpec2D` value.

extentX :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double)Source

Compute the absolute x-coordinate range of an enveloped object in R2, in the form (lo,hi). Return `Nothing` for objects with an empty envelope.

extentY :: (Enveloped a, V a ~ R2) => a -> Maybe (Double, Double)Source

Compute the absolute y-coordinate range of an enveloped object in R2, in the form (lo,hi).

center2D :: (Enveloped a, V a ~ R2) => a -> P2 Source

Compute the point at the center (in the x- and y-directions) of a enveloped object. Return the origin for objects with an empty envelope.

## Specifying sizes

data SizeSpec2D Source

A specification of a (requested) rectangular size.

Constructors

Width Double | Specify an explicit width. The height should be determined automatically (so as to preserve aspect ratio).
Height Double | Specify an explicit height. The width should be determined automatically (so as to preserve aspect ratio).
Dims Double Double | An explicit specification of a width and height.
Absolute | Absolute size: use whatever size an object already has; do not rescale.

Instances

Eq SizeSpec2D |
Ord SizeSpec2D |
Show SizeSpec2D |

mkSizeSpec :: Maybe Double -> Maybe Double -> SizeSpec2D Source

Create a size specification from a possibly-specified width and height.

requiredScaleT :: SizeSpec2D -> (Double, Double) -> Transformation R2 Source

`requiredScaleT spec sz` returns a transformation (a uniform scale) which can be applied to something of size `sz` to make it fit the requested size `spec`, without changing the aspect ratio.

requiredScale :: SizeSpec2D -> (Double, Double) -> Double Source

`requiredScale spec sz` returns a scaling factor necessary to make something of size `sz` fit the requested size `spec`, without changing the aspect ratio. Hence an explicit specification of both dimensions may not be honored if the aspect ratios do not match; in that case the scaling will be as large as possible so that the object still fits within the requested size.

## Changing the size of things

sized :: (Transformable a, Enveloped a, V a ~ R2) => SizeSpec2D -> a -> aSource

Uniformly scale any enveloped object so that it fits within the given size.

sizedAs :: (Transformable a, Enveloped a, V a ~ R2, Enveloped b, V b ~ R2) => b -> a -> aSource

Uniformly scale an enveloped object so that it "has the same size as" (fits within the width and height of) some other object.