packages feed

geomancy-0.4.0.0: src/Geomancy/DTransform/Tree.hs

module Geomancy.DTransform.Tree
  ( Transformed
  , apply
  , node_
  , leaf_
  , collect_

  , translate_
  , translateV_

  , rotateX_
  , rotateY_
  , rotateZ_
  , rotateQ_

  , scale_
  , scaleX_
  , scaleY_
  , scaleZ_
  , scaleXY_
  , scale3_
  ) where

import Geomancy.DQuaternion (DQuaternion)
import Geomancy.DTransform (DTransform)
import Geomancy.Tree (Tree, apply, node_, leaf_, collect_)
import Geomancy.DVec3 (DVec3)

import qualified Geomancy.DTransform as DTransform

type Transformed a = Tree (DTransform, Maybe a)

{-# INLINE translate_ #-}
translate_
  :: Double
  -> Double
  -> Double
  -> [Transformed a]
  -> Transformed a
translate_ x y z =
  node_ (DTransform.translate x y z)

{-# INLINE translateV_ #-}
translateV_
  :: DVec3
  -> [Transformed a]
  -> Transformed a
translateV_ xyz =
  node_ (DTransform.translateV xyz)

{-# INLINE rotateX_ #-}
rotateX_
  :: Double
  -> [Transformed a]
  -> Transformed a
rotateX_ rads =
  node_ (DTransform.rotateX rads)

{-# INLINE rotateY_ #-}
rotateY_
  :: Double
  -> [Transformed a]
  -> Transformed a
rotateY_ rads =
  node_ (DTransform.rotateY rads)

{-# INLINE rotateZ_ #-}
rotateZ_
  :: Double
  -> [Transformed a]
  -> Transformed a
rotateZ_ rads =
  node_ (DTransform.rotateZ rads)

{-# INLINE rotateQ_ #-}
rotateQ_
  :: DQuaternion
  -> [Transformed a]
  -> Transformed a
rotateQ_ rot =
  node_ (DTransform.rotateQ rot)

{-# INLINE scale_ #-}
scale_
  :: Double
  -> [Transformed a]
  -> Transformed a
scale_ x =
  node_ (DTransform.scale x)

{-# INLINE scaleX_ #-}
scaleX_
  :: Double
  -> [Transformed a]
  -> Transformed a
scaleX_ rads =
  node_ (DTransform.scaleX rads)

{-# INLINE scaleY_ #-}
scaleY_
  :: Double
  -> [Transformed a]
  -> Transformed a
scaleY_ rads =
  node_ (DTransform.scaleY rads)

{-# INLINE scaleZ_ #-}
scaleZ_
  :: Double
  -> [Transformed a]
  -> Transformed a
scaleZ_ rads =
  node_ (DTransform.scaleZ rads)

{-# INLINE scaleXY_ #-}
scaleXY_
  :: Double
  -> Double
  -> [Transformed a]
  -> Transformed a
scaleXY_ x y =
  node_ (DTransform.scaleXY x y)

{-# INLINE scale3_ #-}
scale3_
  :: Double
  -> Double
  -> Double
  -> [Transformed a]
  -> Transformed a
scale3_ x y z =
  node_ (DTransform.scale3 x y z)