content: {-|
  Paths in 3D space.
  -}
  module Waterfall.Path
  ( Path
  , module Waterfall.Path.Common
  , fromPath2D
  -- $ reexports
  , line3D
  , lineTo3D
  , lineRelative3D
  , arcVia3D
  , arcViaTo3D
  , arcViaRelative3D
  , bezier3D
  , bezierTo3D
  , bezierRelative3D
  , pathFrom3D
  , pathFromTo3D
  , pathEndpoints3D
  , closeLoop3D
  , reversePath3D
  , splice3D
  , splitPath3D
  ) where
  
  import Waterfall.Internal.Path (Path(..))
  
  
  import Waterfall.Path.Common
  import Waterfall.TwoD.Internal.Path2D (Path2D (..))
  import Linear (V3)
  
  -- | convert a `Path2D` into a `Path` on the \( xy \) plane (with \( z = 0 \) )
  fromPath2D :: Path2D -> Path
  fromPath2D (Path2D raw) = Path raw
  
  -- $reexports
  --
  -- reexports from Waterfall.Path.Common, but monomorphised
  
  -- | `line`, with the type fixed to `Path`
  line3D :: V3 Double -> V3 Double -> Path
  line3D = line 
  
  -- | `lineTo`, with the type fixed to `Path`
  lineTo3D :: V3 Double -> V3 Double -> (V3 Double, Path)
  lineTo3D = lineTo
  
  -- | `lineRelative`, with the type fixed to `Path`
  lineRelative3D :: V3 Double -> V3 Double -> (V3 Double, Path)
  lineRelative3D = lineRelative
  
  -- | `arcVia`, with the type fixed to `Path`
  arcVia3D :: V3 Double -> V3 Double -> V3 Double -> Path
  arcVia3D = arcVia
  
  -- | `arcViaTo`, with the type fixed to `Path`
  arcViaTo3D :: V3 Double -> V3 Double -> V3 Double -> (V3 Double, Path)
  arcViaTo3D = arcViaTo
  
  -- | `arcViaRelative`, with the type fixed to `Path`
  arcViaRelative3D :: V3 Double -> V3 Double -> V3 Double -> (V3 Double, Path)
  arcViaRelative3D = arcViaRelative
  
  -- | `bezier`, with the type fixed to `Path`
  bezier3D :: V3 Double -> V3 Double -> V3 Double -> V3 Double ->  Path
  bezier3D = bezier
  
  -- | `bezierTo`, with the type fixed to `Path`
  bezierTo3D :: V3 Double -> V3 Double -> V3 Double -> V3 Double ->  (V3 Double, Path)
  bezierTo3D = bezierTo
  
  -- | `bezierRelative`, with the type fixed to `Path`
  bezierRelative3D :: V3 Double -> V3 Double -> V3 Double -> V3 Double ->  (V3 Double, Path)
  bezierRelative3D = bezierRelative
  
  -- | `pathFrom`, with the type fixed to `Path`
  pathFrom3D :: V3 Double -> [V3 Double -> (V3 Double, Path)] -> Path
  pathFrom3D = pathFrom
  
  -- | `pathFromTo`, with the type fixed to `Path`
  pathFromTo3D :: [V3 Double -> (V3 Double, Path)] -> V3 Double -> (V3 Double, Path)
  pathFromTo3D = pathFromTo
  
  -- | `pathEndpoints`, with the type fixed to `Path` 
  pathEndpoints3D :: Path -> Maybe (V3 Double, V3 Double)
  pathEndpoints3D = pathEndpoints
  
  -- | `closeLoop` with the type fixed to `Path`
  closeLoop3D :: Path -> Path
  closeLoop3D = closeLoop 
  
  -- | `reversePath` with the type fixed to `Path`
  reversePath3D :: Path -> Path
  reversePath3D = reversePath
  
  -- | `splice` with the type fixed to `Path`
  splice3D :: Path -> V3 Double -> (V3 Double, Path)
  splice3D = splice
  
  -- | `splitPath` with the type fixed to `Path`
  splitPath3D :: Path -> [Path]
  splitPath3D = splitPath