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

Copyright | (c) 2011-2013 diagrams-lib team (see LICENSE)
License | BSD-style (see LICENSE)
Maintainer | diagrams-discuss@googlegroups.com
Safe Haskell | Safe-Inferred
Language | Haskell2010

Diagrams.Align

Contents

- Alignable class
- General alignment functions

Description

The alignment of an object refers to the position of its local origin with respect to its envelope. This module defines the `Alignable` class for things which can be aligned, as well as a default implementation in terms of `HasOrigin` and `Enveloped`, along with several utility methods for alignment.

Synopsis

- class Alignable a where
  - alignBy' :: (InSpace v n a, Fractional n, HasOrigin a) => (v n -> a -> Point v n) -> v n -> n -> a -> a
  - defaultBoundary :: (V a ~ v, N a ~ n) => v n -> a -> Point v n
  - alignBy :: (InSpace v n a, Fractional n, HasOrigin a) => v n -> n -> a -> a
- alignBy'Default :: (InSpace v n a, Fractional n, HasOrigin a) => (v n -> a -> Point v n) -> v n -> n -> a -> a
- envelopeBoundary :: (V a ~ v, N a ~ n, Enveloped a) => v n -> a -> Point v n
- traceBoundary :: (V a ~ v, N a ~ n, Num n, Traced a) => v n -> a -> Point v n
- align :: (InSpace v n a, Fractional n, Alignable a, HasOrigin a) => v n -> a -> a
- snug :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> a -> a
- centerV :: (InSpace v n a, Fractional n, Alignable a, HasOrigin a) => v n -> a -> a
- center :: (InSpace v n a, Fractional n, Traversable v, Alignable a, HasOrigin a) => a -> a
- snugBy :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> n -> a -> a
- snugCenterV :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> a -> a
- snugCenter :: (InSpace v n a, Traversable v, Fractional n, Alignable a, HasOrigin a, Traced a) => a -> a

# Alignable class

class Alignable a where Source #

Class of things which can be aligned.

Minimal complete definition

defaultBoundary

Methods

alignBy' :: (InSpace v n a, Fractional n, HasOrigin a) => (v n -> a -> Point v n) -> v n -> n -> a -> a Source #

`alignBy v d a` moves the origin of `a` along the vector `v`. If `d = 1`, the origin is moved to the edge of the boundary in the direction of `v`; if `d = -1`, it moves to the edge of the boundary in the direction of the negation of `v`. Other values of `d` interpolate linearly (so for example, `d = 0` centers the origin along the direction of `v`).

defaultBoundary :: (V a ~ v, N a ~ n) => v n -> a -> Point v n Source #

alignBy :: (InSpace v n a, Fractional n, HasOrigin a) => v n -> n -> a -> a Source #

#### Instances

Instances details

(V b ~ v, N b ~ n, Metric v, OrderedField n, Alignable b) => Alignable (Set b) Source # |
Instance details Defined in Diagrams.Align Methods alignBy' :: (InSpace v n (Set b), Fractional n, HasOrigin (Set b)) => (v n -> Set b -> Point v n) -> v n -> n -> Set b -> Set b Source # defaultBoundary :: (V (Set b) ~ v, N (Set b) ~ n) => v n -> Set b -> Point v n Source # alignBy :: (InSpace v n (Set b), Fractional n, HasOrigin (Set b)) => v n -> n -> Set b -> Set b Source #
Alignable a => Alignable (Located a) Source # |

Instance details

Defined in Diagrams.Located

Methods

alignBy' :: (InSpace v n (Located a), Fractional n, HasOrigin (Located a)) => (v n -> Located a -> Point v n) -> v n -> n -> Located a -> Located a Source #

defaultBoundary :: (V (Located a) ~ v, N (Located a) ~ n) => v n -> Located a -> Point v n Source #

alignBy :: (InSpace v n (Located a), Fractional n, HasOrigin (Located a)) => v n -> n -> Located a -> Located a Source #

(V b ~ v, N b ~ n, Metric v, OrderedField n, Alignable b) => Alignable [b] Source # |
Instance details Defined in Diagrams.Align Methods alignBy' :: (InSpace v n [b], Fractional n, HasOrigin [b]) => (v n -> [b] -> Point v n) -> v n -> n -> [b] -> [b] Source # defaultBoundary :: (V [b] ~ v, N [b] ~ n) => v n -> [b] -> Point v n Source # alignBy :: (InSpace v n [b], Fractional n, HasOrigin [b]) => v n -> n -> [b] -> [b] Source #
(V b ~ v, N b ~ n, Metric v, OrderedField n, Alignable b) => Alignable (Map k b) Source # |

Instance details

Defined in Diagrams.Align

Methods

alignBy' :: (InSpace v n (Map k b), Fractional n, HasOrigin (Map k b)) => (v n -> Map k b -> Point v n) -> v n -> n -> Map k b -> Map k b Source #

defaultBoundary :: (V (Map k b) ~ v, N (Map k b) ~ n) => v n -> Map k b -> Point v n Source #

alignBy :: (InSpace v n (Map k b), Fractional n, HasOrigin (Map k b)) => v n -> n -> Map k b -> Map k b Source #

(Metric v, OrderedField n) => Alignable (Envelope v n) Source # |

Instance details

Defined in Diagrams.Align

Methods

alignBy' :: (InSpace v0 n0 (Envelope v n), Fractional n0, HasOrigin (Envelope v n)) => (v0 n0 -> Envelope v n -> Point v0 n0) -> v0 n0 -> n0 -> Envelope v n -> Envelope v n Source #

defaultBoundary :: (V (Envelope v n) ~ v0, N (Envelope v n) ~ n0) => v0 n0 -> Envelope v n -> Point v0 n0 Source #

alignBy :: (InSpace v0 n0 (Envelope v n), Fractional n0, HasOrigin (Envelope v n)) => v0 n0 -> n0 -> Envelope v n -> Envelope v n Source #

(Metric v, OrderedField n) => Alignable (Trace v n) Source # |

Instance details

Defined in Diagrams.Align

Methods

alignBy' :: (InSpace v0 n0 (Trace v n), Fractional n0, HasOrigin (Trace v n)) => (v0 n0 -> Trace v n -> Point v0 n0) -> v0 n0 -> n0 -> Trace v n -> Trace v n Source #

defaultBoundary :: (V (Trace v n) ~ v0, N (Trace v n) ~ n0) => v0 n0 -> Trace v n -> Point v0 n0 Source #

alignBy :: (InSpace v0 n0 (Trace v n), Fractional n0, HasOrigin (Trace v n)) => v0 n0 -> n0 -> Trace v n -> Trace v n Source #

(Metric v, Traversable v, OrderedField n) => Alignable (BoundingBox v n) Source # |

Instance details

Defined in Diagrams.BoundingBox

Methods

alignBy' :: (InSpace v0 n0 (BoundingBox v n), Fractional n0, HasOrigin (BoundingBox v n)) => (v0 n0 -> BoundingBox v n -> Point v0 n0) -> v0 n0 -> n0 -> BoundingBox v n -> BoundingBox v n Source #

defaultBoundary :: (V (BoundingBox v n) ~ v0, N (BoundingBox v n) ~ n0) => v0 n0 -> BoundingBox v n -> Point v0 n0 Source #

alignBy :: (InSpace v0 n0 (BoundingBox v n), Fractional n0, HasOrigin (BoundingBox v n)) => v0 n0 -> n0 -> BoundingBox v n -> BoundingBox v n Source #

(Metric v, OrderedField n) => Alignable (Path v n) Source # |

Instance details

Defined in Diagrams.Path

Methods

alignBy' :: (InSpace v0 n0 (Path v n), Fractional n0, HasOrigin (Path v n)) => (v0 n0 -> Path v n -> Point v0 n0) -> v0 n0 -> n0 -> Path v n -> Path v n Source #

defaultBoundary :: (V (Path v n) ~ v0, N (Path v n) ~ n0) => v0 n0 -> Path v n -> Point v0 n0 Source #

alignBy :: (InSpace v0 n0 (Path v n), Fractional n0, HasOrigin (Path v n)) => v0 n0 -> n0 -> Path v n -> Path v n Source #

(InSpace v n a, HasOrigin a, Alignable a) => Alignable (b -> a) Source # | Although the `alignBy` method for the `(b -> a)` instance is sensible, there is no good implementation for `defaultBoundary`. Instead, we provide a total method, but one that is not sensible. This should not present a serious problem as long as your use of `Alignable` happens through `alignBy`.
Instance details Defined in Diagrams.Align Methods alignBy' :: (InSpace v n (b -> a), Fractional n, HasOrigin (b -> a)) => (v n -> (b -> a) -> Point v n) -> v n -> n -> (b -> a) -> b -> a Source # defaultBoundary :: (V (b -> a) ~ v, N (b -> a) ~ n) => v n -> (b -> a) -> Point v n Source # alignBy :: (InSpace v n (b -> a), Fractional n, HasOrigin (b -> a)) => v n -> n -> (b -> a) -> b -> a Source #
(Metric v, OrderedField n, Monoid' m) => Alignable (QDiagram b v n m) Source # |

Instance details

Defined in Diagrams.Align

Methods

alignBy' :: (InSpace v0 n0 (QDiagram b v n m), Fractional n0, HasOrigin (QDiagram b v n m)) => (v0 n0 -> QDiagram b v n m -> Point v0 n0) -> v0 n0 -> n0 -> QDiagram b v n m -> QDiagram b v n m Source #

defaultBoundary :: (V (QDiagram b v n m) ~ v0, N (QDiagram b v n m) ~ n0) => v0 n0 -> QDiagram b v n m -> Point v0 n0 Source #

alignBy :: (InSpace v0 n0 (QDiagram b v n m), Fractional n0, HasOrigin (QDiagram b v n m)) => v0 n0 -> n0 -> QDiagram b v n m -> QDiagram b v n m Source #

alignBy'Default :: (InSpace v n a, Fractional n, HasOrigin a) => (v n -> a -> Point v n) -> v n -> n -> a -> a Source #

Default implementation of `alignBy` for types with `HasOrigin` and `AdditiveGroup` instances.

envelopeBoundary :: (V a ~ v, N a ~ n, Enveloped a) => v n -> a -> Point v n Source #

Some standard functions which can be used as the `boundary` argument to `alignBy'`.

traceBoundary :: (V a ~ v, N a ~ n, Num n, Traced a) => v n -> a -> Point v n Source #

# General alignment functions

align :: (InSpace v n a, Fractional n, Alignable a, HasOrigin a) => v n -> a -> a Source #

`align v` aligns an enveloped object along the edge in the direction of `v`. That is, it moves the local origin in the direction of `v` until it is on the edge of the envelope. (Note that if the local origin is outside the envelope to begin with, it may have to move "backwards".)

snug :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> a -> a Source #

Like align but uses trace.

centerV :: (InSpace v n a, Fractional n, Alignable a, HasOrigin a) => v n -> a -> a Source #

`centerV v` centers an enveloped object along the direction of `v`.

center :: (InSpace v n a, Fractional n, Traversable v, Alignable a, HasOrigin a) => a -> a Source #

`center` centers an enveloped object along all of its basis vectors.

snugBy :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> n -> a -> a Source #

Version of `alignBy` specialized to use `traceBoundary`

snugCenterV :: (InSpace v n a, Fractional n, Alignable a, Traced a, HasOrigin a) => v n -> a -> a Source #

Like `centerV` using trace.

snugCenter :: (InSpace v n a, Traversable v, Fractional n, Alignable a, HasOrigin a, Traced a) => a -> a Source #

Like `center` using trace.