lp-diagrams-2.0: An EDSL for diagrams based based on linear constraints

Safe HaskellNone
LanguageHaskell2010

Graphics.Diagrams.Object

Synopsis

Documentation

data Anchor Source #

Constructors

Center 
N 
NW 
W 
SW 
S 
SE 
E 
NE 
BaseW 
Base 
BaseE 

Instances

type Box = Object Source #

Box-shaped object. (a subtype)

(#) :: Object -> Anchor -> Point infix 8 Source #

hdist :: Object -> Object -> Expr Source #

Horizontal distance between objects

vdist :: Object -> Object -> Expr Source #

Vertical distance between objects

extend :: Expr -> Object -> Object Source #

Move the anchors (NSEW) by the given delta, outwards.

shiftInDir :: Anchor -> Expr -> Point Source #

Makes a shift of size d in the given direction.

label :: Monad m => String -> lab -> Diagram lab m Box Source #

Make a label object. This is the text surrounded by 4 points of blank and a rectangle outline.

pathObject :: Monad m => Object -> Diagram lab m Object Source #

Internal use.

labelAt :: Monad m => String -> lab -> Anchor -> Point -> Diagram lab m Box Source #

Label a point by a given TeX expression, at the given anchor.

point :: Monad m => String -> Diagram lab m Object Source #

A free point

box :: Monad m => String -> Diagram lab m Object Source #

A box. Anchors are aligned along a grid.

vrule :: Monad m => String -> Diagram lab m Object Source #

A box of zero width

hrule :: Monad m => String -> Diagram lab m Object Source #

A box of zero height

fitsIn :: Monad m => Object -> Object -> Diagram lab m () Source #

Make one object fit (snugly) in the other.

fitsHorizontallyIn :: Monad m => Object -> Object -> Diagram lab m () Source #

Make one object fit (snugly) in the other.

fitsVerticallyIn :: Monad m => Object -> Object -> Diagram lab m () Source #

Make one object fit (snugly) in the other.

circle :: Monad m => String -> Diagram lab m Object Source #

A circle

traceBox :: Monad m => Color -> Object -> Diagram lab m () Source #

rawLabel :: Monad m => String -> lab -> Diagram lab m Object Source #

Typeset a piece of text and return its bounding box as an object. Probably, use label instead.

data OVector Source #

A vector with an origin

Constructors

OVector 

turn180 :: OVector -> OVector Source #

Turn the orientation by 180 degrees

data FList xs a where Source #

Constructors

NIL :: FList '[] a 
(:%>) :: Functor t => t a -> FList fs a -> FList ((:) t fs) a infixr 9 

Instances

Functor (FList xs) Source # 

Methods

fmap :: (a -> b) -> FList xs a -> FList xs b #

(<$) :: a -> FList xs b -> FList xs a #

edge :: Monad m => Object -> Object -> Diagram lab m OVector Source #

Traces a straight edge between two objects. A vector originated at the midpoint and pointing perpendicular to the edge is returned.

(.<.) :: Monad m => Point -> Point -> Diagram lab m () Source #

insideBox :: Monad m => Point -> Object -> Diagram lab m () Source #

Forces the point to be inside the (bounding box) of the object.

autoLabelObj :: Monad m => Box -> OVector -> Diagram lab m () Source #

autoLabel o i Layouts the label object o at the given incidence vector.

autoLabel :: Monad m => String -> lab -> OVector -> Diagram lab m Object Source #

autoLabel o i Layouts the label object o at the given incidence vector.

labeledEdge :: Monad m => Object -> Object -> Box -> Diagram lab m () Source #

labeledEdge label source target

leftOf :: Monad m => Object -> Object -> Diagram lab m () Source #

topOf :: Monad m => Object -> Object -> Diagram lab m () Source #

spread :: Monad m => (t -> t -> Expr) -> Expr -> [t] -> Diagram lab m () Source #

Spread a number of objects by *minimum* a given distance. example: spread hdist 30 ps

node :: Monad m => String -> lab -> Diagram lab m Object Source #

A node: a labeled circle

arrow :: Monad m => Object -> Object -> Diagram lab m OVector Source #

Draw an arrow between two objects

boundingBox :: Monad m => [Object] -> Diagram lab m Object Source #

Bounding box of a number of anchored values