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_ :: Float -> Float -> Float -> [Transformed a] -> Transformed a translate_ Float x Float y Float z = Transform -> [Transformed a] -> Transformed a 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_ :: Vec3 -> [Transformed a] -> Transformed a translateV_ Vec3 xyz = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a rotateX_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a rotateY_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a rotateZ_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Quaternion -> [Transformed a] -> Transformed a rotateQ_ Quaternion rot = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a scale_ Float x = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a scaleX_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a scaleY_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> [Transformed a] -> Transformed a scaleZ_ Float rads = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> Float -> [Transformed a] -> Transformed a scaleXY_ Float x Float y = Transform -> [Transformed a] -> Transformed a 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_ :: Float -> Float -> Float -> [Transformed a] -> Transformed a scale3_ Float x Float y Float z = Transform -> [Transformed a] -> Transformed a 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)