Safe Haskell | None |
---|---|
Language | Haskell2010 |
Paths in 2D space.
Synopsis
- data Path2D
- data Sense
- module Waterfall.Path.Common
- arc :: Sense -> Double -> V2 Double -> V2 Double -> Path2D
- arcTo :: Sense -> Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- arcRelative :: Sense -> Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- repeatLooping :: Path2D -> Path2D
- closeLoop :: Path2D -> Path2D
- line2D :: V2 Double -> V2 Double -> Path2D
- lineTo2D :: V2 Double -> V2 Double -> (V2 Double, Path2D)
- lineRelative2D :: V2 Double -> V2 Double -> (V2 Double, Path2D)
- arcVia2D :: V2 Double -> V2 Double -> V2 Double -> Path2D
- arcViaTo2D :: V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- arcViaRelative2D :: V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- bezier2D :: V2 Double -> V2 Double -> V2 Double -> V2 Double -> Path2D
- bezierTo2D :: V2 Double -> V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- bezierRelative2D :: V2 Double -> V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D)
- pathFrom2D :: V2 Double -> [V2 Double -> (V2 Double, Path2D)] -> Path2D
- pathFromTo2D :: [V2 Double -> (V2 Double, Path2D)] -> V2 Double -> (V2 Double, Path2D)
Documentation
A Path in 2D Space
Under the hood, this is represented by an OpenCascade Wire
, constrained to the plane \(z=0\).
Please feel free to report a bug if you're able to construct a Path2D
which does not lie on this plane (without using Internal functions).
Instances
Monoid Path2D Source # | |
Semigroup Path2D Source # | The Semigroup for Attempts to combine paths that do not share a common endpoint currently in an error case that is not currently handled gracefully. |
Transformable2D Path2D Source # | |
AnyPath (V2 Double) Path2D Source # | |
module Waterfall.Path.Common
arc :: Sense -> Double -> V2 Double -> V2 Double -> Path2D Source #
Section of a circle, with a given radius, that lies between two points.
This may fail, if the radius is less than half of the distance between the points.
In general, arcVia
is the "safer" way to construct an arc.
arc
is not polymorphic, as it would not be possible to define an arc in 3D space in this way.
repeatLooping :: Path2D -> Path2D Source #
Given a Path where both endpoints are equidistant from the origin.
And which subtends an angle \( φ \) from the origin that evenly divides a complete revolution, such that \(n φ = 2 π \).
Replicates the path \( n \) times, rotating it by \( φ \), until the resulting path completes one revolution around the origin.
This can be used to construct paths with rotational symmetry, such as regular polygons, or gears.
closeLoop :: Path2D -> Path2D Source #
Given a path, return a new path with the endpoints joined by a straight line.
lineRelative2D :: V2 Double -> V2 Double -> (V2 Double, Path2D) Source #
lineRelative
, with the type fixed to Path2D
arcViaRelative2D :: V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D) Source #
arcViaRelative
, with the type fixed to Path2D
bezierRelative2D :: V2 Double -> V2 Double -> V2 Double -> V2 Double -> (V2 Double, Path2D) Source #
bezierRelative
, with the type fixed to Path2D