module Geomancy.Transform.Tree ( Transformed , apply , node_ , leaf_ , collect_ , translate_ , translateV_ , rotateX_ , rotateY_ , rotateZ_ , rotateQ_ , scale_ , scaleX_ , scaleY_ , scaleZ_ , scaleXY_ , scale3_ ) where import Geomancy.Quaternion (Quaternion) import Geomancy.Transform (Transform) import Geomancy.Tree (Tree, apply, node_, leaf_, collect_) import Geomancy.Vec3 (Vec3) import qualified Geomancy.Transform as Transform type Transformed a = Tree (Transform, Maybe a) {-# INLINE translate_ #-} translate_ :: Float -> Float -> Float -> [Transformed a] -> Transformed a translate_ :: forall a. Float -> Float -> Float -> [Transformed a] -> Transformed a translate_ Float x Float y Float z = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Float -> Float -> Transform Transform.translate Float x Float y Float z) {-# INLINE translateV_ #-} translateV_ :: Vec3 -> [Transformed a] -> Transformed a translateV_ :: forall a. Vec3 -> [Transformed a] -> Transformed a translateV_ Vec3 xyz = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Vec3 -> Transform Transform.translateV Vec3 xyz) {-# INLINE rotateX_ #-} rotateX_ :: Float -> [Transformed a] -> Transformed a rotateX_ :: forall a. Float -> [Transformed a] -> Transformed a rotateX_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.rotateX Float rads) {-# INLINE rotateY_ #-} rotateY_ :: Float -> [Transformed a] -> Transformed a rotateY_ :: forall a. Float -> [Transformed a] -> Transformed a rotateY_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.rotateY Float rads) {-# INLINE rotateZ_ #-} rotateZ_ :: Float -> [Transformed a] -> Transformed a rotateZ_ :: forall a. Float -> [Transformed a] -> Transformed a rotateZ_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.rotateZ Float rads) {-# INLINE rotateQ_ #-} rotateQ_ :: Quaternion -> [Transformed a] -> Transformed a rotateQ_ :: forall a. Quaternion -> [Transformed a] -> Transformed a rotateQ_ Quaternion rot = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Quaternion -> Transform Transform.rotateQ Quaternion rot) {-# INLINE scale_ #-} scale_ :: Float -> [Transformed a] -> Transformed a scale_ :: forall a. Float -> [Transformed a] -> Transformed a scale_ Float x = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.scale Float x) {-# INLINE scaleX_ #-} scaleX_ :: Float -> [Transformed a] -> Transformed a scaleX_ :: forall a. Float -> [Transformed a] -> Transformed a scaleX_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.scaleX Float rads) {-# INLINE scaleY_ #-} scaleY_ :: Float -> [Transformed a] -> Transformed a scaleY_ :: forall a. Float -> [Transformed a] -> Transformed a scaleY_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.scaleY Float rads) {-# INLINE scaleZ_ #-} scaleZ_ :: Float -> [Transformed a] -> Transformed a scaleZ_ :: forall a. Float -> [Transformed a] -> Transformed a scaleZ_ Float rads = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Transform Transform.scaleZ Float rads) {-# INLINE scaleXY_ #-} scaleXY_ :: Float -> Float -> [Transformed a] -> Transformed a scaleXY_ :: forall a. Float -> Float -> [Transformed a] -> Transformed a scaleXY_ Float x Float y = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Float -> Transform Transform.scaleXY Float x Float y) {-# INLINE scale3_ #-} scale3_ :: Float -> Float -> Float -> [Transformed a] -> Transformed a scale3_ :: forall a. Float -> Float -> Float -> [Transformed a] -> Transformed a scale3_ Float x Float y Float z = forall ann a. ann -> [Tree (ann, Maybe a)] -> Tree (ann, Maybe a) node_ (Float -> Float -> Float -> Transform Transform.scale3 Float x Float y Float z)