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

Copyright(c) 2013 diagrams-lib team (see LICENSE)
LicenseBSD-style (see LICENSE)
Maintainerdiagrams-discuss@googlegroups.com
Safe HaskellNone
LanguageHaskell2010

Diagrams.Envelope

Contents

Description

"Envelopes", aka functional bounding regions. See Diagrams.Core.Envelope for internal implementation details.

Synopsis

Types

data Envelope (v :: Type -> Type) n #

Instances
Show (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Ord n => Semigroup (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

(<>) :: Envelope v n -> Envelope v n -> Envelope v n Source #

sconcat :: NonEmpty (Envelope v n) -> Envelope v n Source #

stimes :: Integral b => b -> Envelope v n -> Envelope v n Source #

Ord n => Monoid (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

mempty :: Envelope v n Source #

mappend :: Envelope v n -> Envelope v n -> Envelope v n Source #

mconcat :: [Envelope v n] -> Envelope v n Source #

Wrapped (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Associated Types

type Unwrapped (Envelope v n) :: Type Source #

Methods

_Wrapped' :: Iso' (Envelope v n) (Unwrapped (Envelope v n)) Source #

(Metric v, OrderedField n) => Enveloped (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: Envelope v n -> Envelope (V (Envelope v n)) (N (Envelope v n))

(Metric v, Fractional n) => HasOrigin (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

moveOriginTo :: Point (V (Envelope v n)) (N (Envelope v n)) -> Envelope v n -> Envelope v n #

(Metric v, OrderedField n) => Juxtaposable (Envelope v n) 
Instance details

Defined in Diagrams.Core.Juxtapose

Methods

juxtapose :: Vn (Envelope v n) -> Envelope v n -> Envelope v n -> Envelope v n

(Metric v, Floating n) => Transformable (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

transform :: Transformation (V (Envelope v n)) (N (Envelope v n)) -> Envelope v n -> Envelope v n #

(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 #

Rewrapped (Envelope v n) (Envelope v' n') 
Instance details

Defined in Diagrams.Core.Envelope

type Unwrapped (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

type Unwrapped (Envelope v n) = Option (v n -> Max n)
type N (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

type N (Envelope v n) = n
type V (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

type V (Envelope v n) = v

class (Metric (V a), OrderedField (N a)) => Enveloped a #

Minimal complete definition

getEnvelope

Instances
Enveloped b => Enveloped [b] 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: [b] -> Envelope (V [b]) (N [b])

Enveloped b => Enveloped (Set b) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: Set b -> Envelope (V (Set b)) (N (Set b))

Enveloped t => Enveloped (TransInv t) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: TransInv t -> Envelope (V (TransInv t)) (N (TransInv t))

RealFloat n => Enveloped (CSG n) Source #

The Envelope for an Intersection or Difference is simply the Envelope of the Union. This is wrong but easy to implement.

Instance details

Defined in Diagrams.ThreeD.Shapes

Methods

getEnvelope :: CSG n -> Envelope (V (CSG n)) (N (CSG n))

(OrderedField n, RealFloat n) => Enveloped (Frustum n) Source # 
Instance details

Defined in Diagrams.ThreeD.Shapes

Methods

getEnvelope :: Frustum n -> Envelope (V (Frustum n)) (N (Frustum n))

OrderedField n => Enveloped (Box n) Source # 
Instance details

Defined in Diagrams.ThreeD.Shapes

Methods

getEnvelope :: Box n -> Envelope (V (Box n)) (N (Box n))

OrderedField n => Enveloped (Ellipsoid n) Source # 
Instance details

Defined in Diagrams.ThreeD.Shapes

Methods

getEnvelope :: Ellipsoid n -> Envelope (V (Ellipsoid n)) (N (Ellipsoid n))

Enveloped a => Enveloped (Located a) Source #

The envelope of a Located a is the envelope of the a, translated to the location.

Instance details

Defined in Diagrams.Located

Methods

getEnvelope :: Located a -> Envelope (V (Located a)) (N (Located a))

(Enveloped a, Enveloped b, V a ~ V b, N a ~ N b) => Enveloped (a, b) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: (a, b) -> Envelope (V (a, b)) (N (a, b))

Enveloped b => Enveloped (Map k b) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: Map k b -> Envelope (V (Map k b)) (N (Map k b))

(OrderedField n, Metric v) => Enveloped (Point v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: Point v n -> Envelope (V (Point v n)) (N (Point v n))

(Metric v, OrderedField n) => Enveloped (Envelope v n) 
Instance details

Defined in Diagrams.Core.Envelope

Methods

getEnvelope :: Envelope v n -> Envelope (V (Envelope v n)) (N (Envelope v n))

(Metric v, OrderedField n) => Enveloped (FixedSegment v n) Source # 
Instance details

Defined in Diagrams.Segment

Methods

getEnvelope :: FixedSegment v n -> Envelope (V (FixedSegment v n)) (N (FixedSegment v n))

(Metric v, OrderedField n) => Enveloped (Trail v n) Source # 
Instance details

Defined in Diagrams.Trail

Methods

getEnvelope :: Trail v n -> Envelope (V (Trail v n)) (N (Trail v n))

(Metric v, OrderedField n) => Enveloped (Path v n) Source # 
Instance details

Defined in Diagrams.Path

Methods

getEnvelope :: Path v n -> Envelope (V (Path v n)) (N (Path v n))

(Metric v, Traversable v, OrderedField n) => Enveloped (BoundingBox v n) Source # 
Instance details

Defined in Diagrams.BoundingBox

Methods

getEnvelope :: BoundingBox v n -> Envelope (V (BoundingBox v n)) (N (BoundingBox v n))

(Metric v, OrderedField n) => Enveloped (Segment Closed v n) Source #

The envelope for a segment is based at the segment's start.

Instance details

Defined in Diagrams.Segment

Methods

getEnvelope :: Segment Closed v n -> Envelope (V (Segment Closed v n)) (N (Segment Closed v n))

(Metric v, OrderedField n) => Enveloped (Trail' l v n) Source #

The envelope for a trail is based at the trail's start.

Instance details

Defined in Diagrams.Trail

Methods

getEnvelope :: Trail' l v n -> Envelope (V (Trail' l v n)) (N (Trail' l v n))

(Metric v, OrderedField n, Monoid' m) => Enveloped (QDiagram b v n m) 
Instance details

Defined in Diagrams.Core.Types

Methods

getEnvelope :: QDiagram b v n m -> Envelope (V (QDiagram b v n m)) (N (QDiagram b v n m))

(OrderedField n, Metric v, Monoid' m) => Enveloped (Subdiagram b v n m) 
Instance details

Defined in Diagrams.Core.Types

Methods

getEnvelope :: Subdiagram b v n m -> Envelope (V (Subdiagram b v n m)) (N (Subdiagram b v n m))

Diagram envelopes

envelope :: (OrderedField n, Metric v, Monoid' m) => Lens' (QDiagram b v n m) (Envelope v n) #

setEnvelope :: (OrderedField n, Metric v, Monoid' m) => Envelope v n -> QDiagram b v n m -> QDiagram b v n m #

withEnvelope :: (InSpace v n a, Monoid' m, Enveloped a) => a -> QDiagram b v n m -> QDiagram b v n m Source #

Use the envelope from some object as the envelope for a diagram, in place of the diagram's default envelope.

sqNewEnv =
    circle 1 # fc green
    |||
    (    c # dashingG [0.1,0.1] 0 # lc white
      <> square 2 # withEnvelope (c :: D V2 Double) # fc blue
    )
c = circle 0.8
withEnvelopeEx = sqNewEnv # centerXY # pad 1.5

phantom :: (InSpace v n a, Monoid' m, Enveloped a, Traced a) => a -> QDiagram b v n m Source #

phantom x produces a "phantom" diagram, which has the same envelope and trace as x but produces no output.

pad :: (Metric v, OrderedField n, Monoid' m) => n -> QDiagram b v n m -> QDiagram b v n m Source #

pad s "pads" a diagram, expanding its envelope by a factor of s (factors between 0 and 1 can be used to shrink the envelope). Note that the envelope will expand with respect to the local origin, so if the origin is not centered the padding may appear "uneven". If this is not desired, the origin can be centered (using, e.g., centerXY for 2D diagrams) before applying pad.

extrudeEnvelope :: (Metric v, OrderedField n, Monoid' m) => v n -> QDiagram b v n m -> QDiagram b v n m Source #

extrudeEnvelope v d asymmetrically "extrudes" the envelope of a diagram in the given direction. All parts of the envelope within 90 degrees of this direction are modified, offset outwards by the magnitude of the vector.

This works by offsetting the envelope distance proportionally to the cosine of the difference in angle, and leaving it unchanged when this factor is negative.

intrudeEnvelope :: (Metric v, OrderedField n, Monoid' m) => v n -> QDiagram b v n m -> QDiagram b v n m Source #

intrudeEnvelope v d asymmetrically "intrudes" the envelope of a diagram away from the given direction. All parts of the envelope within 90 degrees of this direction are modified, offset inwards by the magnitude of the vector.

Note that this could create strange inverted envelopes, where diameter v d < 0 .

Querying envelopes

envelopeVMay :: Enveloped a => Vn a -> a -> Maybe (Vn a) #

envelopeV :: Enveloped a => Vn a -> a -> Vn a #

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

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

diameter :: (V a ~ v, N a ~ n, Enveloped a) => v n -> a -> n #

radius :: (V a ~ v, N a ~ n, Enveloped a) => v n -> a -> n #