diagrams-contrib-1.3.0.4: Collection of user contributions to diagrams EDSL

Copyright(c) 2011 Michael Sloan
LicenseBSD-style (see LICENSE)
MaintainerMichael Sloan <mgsloan at gmail>, Deepak Jois <deepak.jois@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Diagrams.TwoD.Path.Turtle.Internal

Contents

Description

Authors : Michael Sloan at gmail, Deepak Jois deepak.jois@gmail.com

A module consisting of core types and functions to represent and operate on a "turtle".

More info about turtle graphics: http://en.wikipedia.org/wiki/Turtle_graphics

Synopsis

Turtle data types and accessors

data TurtleState n Source

Core turtle data type. A turtle needs to keep track of its current position, like its position, heading etc., and all the paths that it has traversed so far.

We need to record a new path, everytime an attribute like style, pen position etc changes, so that we can separately track styles for each portion of the eventual path that the turtle took.

Constructors

TurtleState 

Fields

isPenDown :: Bool

State of the pen. False means that turtle movements will not draw anything

penPos :: P2 n

Current position. This is updated everytime the turtle moves

heading :: Angle n

Orientation of the turtle in 2D space, given in degrees

currTrail :: Located (Trail' Line V2 n)

Path traversed by the turtle so far, without any style or pen attributes changing

currPenStyle :: PenStyle n

Current style of the pen

paths :: [TurtlePath n]

List of paths along with style information, traversed by the turtle previously

Instances

data TurtlePath n Source

Turtle path type that captures a list of paths and the style attributes associated with them

Constructors

TurtlePath 

Fields

penStyle :: PenStyle n

Style

turtleTrail :: Located (Trail V2 n)

Path

Instances

data PenStyle n Source

Style attributes associated with the turtle pen

Constructors

PenStyle 

Fields

penWidth :: n

Width of pen. Default is 1.0

penColor :: Colour Double

Color of pen. Default is black

Instances

Motion commands

forward Source

Arguments

:: (Floating n, Ord n) 
=> n

Distance to move

-> TurtleState n

Turtle to move

-> TurtleState n

Resulting turtle

Move the turtle forward by x units

backward Source

Arguments

:: (Floating n, Ord n) 
=> n

Distance to move

-> TurtleState n

Turtle to move

-> TurtleState n

Resulting turtle

Move the turtle backward by x units

left Source

Arguments

:: (Floating n, Ord n) 
=> n

Degree of turn

-> TurtleState n

Turtle to turn

-> TurtleState n

Resulting turtle

Turn the turtle anti-clockwise (left)

right Source

Arguments

:: (Floating n, Ord n) 
=> n

Degree of turn

-> TurtleState n

Turtle to turn

-> TurtleState n

Resulting turtle

Turn the turtle clockwise (right)

Pen style commands

setPenColor Source

Arguments

:: (Ord n, Floating n) 
=> Colour Double

Width of Pen

-> TurtleState n

Turtle to change

-> TurtleState n

Resulting Turtle

alias of setPenColour

setPenColour Source

Arguments

:: (Ord n, Floating n) 
=> Colour Double

Width of Pen

-> TurtleState n

Turtle to change

-> TurtleState n

Resulting Turtle

Set a new pen color for turtle.

If pen is down, this adds the current trail to paths and starts a new empty trail.

setPenWidth Source

Arguments

:: (Ord n, Floating n) 
=> n

Width of Pen

-> TurtleState n

Turtle to change

-> TurtleState n

Resulting Turtle

Set a new pen width for turtle.

If pen is down, this adds the current trail to paths and starts a new empty trail.

State setters

startTurtle :: (Floating n, Ord n) => TurtleState n Source

The initial state of turtle. The turtle is located at the origin, at an orientation of 0 degrees with its pen position down. The pen style is defaultPenStyle.

setHeading Source

Arguments

:: (Floating n, Ord n) 
=> n

Degree of orientation

-> TurtleState n

Turtle to orient

-> TurtleState n

Resulting turtle

Turn the turtle to the given orientation, in degrees

towards Source

Arguments

:: RealFloat n 
=> P2 n

Point to orient turtle towards

-> TurtleState n

Turtle to orient

-> TurtleState n

Resulting turtle

Sets the turtle orientation towards a given location.

setPenPos Source

Arguments

:: (Ord n, Floating n) 
=> P2 n

Position to place true

-> TurtleState n

Turtle to position

-> TurtleState n

Resulting turtle

Set the turtle X/Y position.

If pen is down and the current trail is non-empty, this will also add the current trail to the paths field.

Drawing control

penUp Source

Arguments

:: (Ord n, Floating n) 
=> TurtleState n

Turtle to modify

-> TurtleState n

Resulting turtle

Puts the turtle pen in “Up” mode. Turtle movements will not draw anything

Does nothing if the pen was already up. Otherwise, it creates a turtle with the current trail added to paths.

penDown Source

Arguments

:: (Ord n, Floating n) 
=> TurtleState n

Turtle to modify

-> TurtleState n

Resulting turtle

Puts the turtle pen in “Down” mode. Turtle movements will cause drawing to happen

Does nothing if the pen was already down. Otherwise, starts a new trail starting at the current position.

Debugging

traceTurtle :: Show n => TurtleState n -> TurtleState n Source

Prints out turtle representation and returns it. Use for debugging

Diagram related

getTurtleDiagram :: (Renderable (Path V2 n) b, TypeableFloat n) => TurtleState n -> QDiagram b V2 n Any Source

Creates a diagram from a turtle

Applies the styles to each trails in paths separately and combines them into a single diagram

getTurtlePath :: (Floating n, Ord n) => TurtleState n -> Path V2 n Source

Creates a path from a turtle, ignoring the styles.