content: {-# LANGUAGE CApiFFI #-}
  module OpenCascade.GP.Trsf
  ( Trsf
  , new
  , fromTrsf2d
  , setMirrorAboutPnt
  , setMirrorAboutAx1
  , setMirrorAboutAx2
  , setRotationAboutAxisAngle
  , setScale
  , setTranslation
  , setDisplacement
  , setScaleFactor
  , setTranslationPart
  , setValues
  , isNegative
  , scaleFactor
  , value
  , invert
  , inverted
  , multiply
  , multiplied
  , preMultiply
  , power
  , powered
  ) where
  
  import OpenCascade.GP.Types
  import OpenCascade.GP.Internal.Destructors
  import Foreign.C
  import Foreign.Ptr
  import Data.Coerce (coerce)
  import Data.Acquire 
  
  
  -- new
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_new_gp_Trsf" rawNew ::IO (Ptr Trsf)
  
  new :: Acquire (Ptr Trsf)
  new = mkAcquire rawNew deleteTrsf
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_new_gp_Trsf_fromTrsf2d" rawFromTrsf2d :: Ptr Trsf2d -> IO (Ptr Trsf)
  
  fromTrsf2d :: Ptr Trsf2d -> Acquire (Ptr Trsf)
  fromTrsf2d t = mkAcquire (rawFromTrsf2d t) deleteTrsf
  
  -- mirror 
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetMirrorAboutPnt" setMirrorAboutPnt :: Ptr Trsf -> Ptr Pnt -> IO ()
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetMirrorAboutAx1" setMirrorAboutAx1 :: Ptr Trsf -> Ptr Ax1 -> IO ()
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetMirrorAboutAx2" setMirrorAboutAx2 :: Ptr Trsf -> Ptr Ax2 -> IO ()
  
  -- rotate
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetRotationAboutAxisAngle" rawSetRotationAboutAxisAngle :: Ptr Trsf -> Ptr Ax1 -> CDouble -> IO ()
  
  setRotationAboutAxisAngle :: Ptr Trsf -> Ptr Ax1 -> Double -> IO ()
  setRotationAboutAxisAngle = coerce rawSetRotationAboutAxisAngle
  
  -- scale
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetScale" rawSetScale :: Ptr Trsf -> Ptr Pnt -> CDouble -> IO ()
  
  setScale :: Ptr Trsf -> Ptr Pnt -> Double -> IO ()
  setScale = coerce rawSetScale
  
  -- translation
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetTranslation" setTranslation :: Ptr Trsf -> Ptr Vec -> IO ()
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetTranslationPart" setTranslationPart :: Ptr Trsf -> Ptr Vec -> IO ()
  
  -- setDisplacement
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetDisplacement" setDisplacement :: Ptr Trsf -> Ptr Ax3 -> Ptr Ax3 -> IO ()
  
  -- scaleFactor
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetScaleFactor" rawSetScaleFactor :: Ptr Trsf -> CDouble -> IO ()
  
  setScaleFactor :: Ptr Trsf -> Double -> IO ()
  setScaleFactor = coerce rawSetScaleFactor
  
  -- setValues
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_SetValues" rawSetValues :: Ptr Trsf -> CDouble -> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble-> CDouble -> IO ()
  
  setValues :: Ptr Trsf -> Double -> Double-> Double-> Double-> Double-> Double-> Double-> Double-> Double-> Double-> Double-> Double -> IO ()
  setValues = coerce rawSetValues
  
  -- tests 
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_IsNegative" rawIsNegative :: Ptr Trsf -> IO CBool
  
  isNegative :: Ptr Trsf -> IO Bool
  isNegative = fmap (/= 0) . rawIsNegative
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_ScaleFactor" rawScaleFactor :: Ptr Trsf -> IO CDouble
  
  scaleFactor :: Ptr Trsf -> IO Double
  scaleFactor = coerce rawScaleFactor
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Value" rawValue :: Ptr Trsf -> CInt -> CInt -> IO CDouble
  
  value :: Ptr Trsf -> Int -> Int -> IO Double
  value t row col = coerce $ rawValue t (fromIntegral row) (fromIntegral col)
  
  -- invert/inverted
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Invert" invert :: Ptr Trsf-> IO ()
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Inverted" rawInverted :: Ptr Trsf-> IO (Ptr Trsf)
  
  inverted :: Ptr Trsf -> Acquire (Ptr Trsf)
  inverted t = mkAcquire (rawInverted t) deleteTrsf
  
  -- multiply/multiplied
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Multiply" multiply :: Ptr Trsf -> Ptr Trsf -> IO ()
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Multiplied" rawMultiplied :: Ptr Trsf -> Ptr Trsf -> IO (Ptr Trsf)
  
  multiplied :: Ptr Trsf -> Ptr Trsf -> Acquire (Ptr Trsf)
  multiplied a b = mkAcquire (rawMultiplied a b) deleteTrsf
  
  -- PreMultiply
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_PreMultiply" preMultiply :: Ptr Trsf -> Ptr Trsf -> IO ()
  
  -- power/powered
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Power" rawPower :: Ptr Trsf -> CInt -> IO ()
  
  power :: Ptr Trsf -> Int -> IO ()
  power trsf times = rawPower trsf (fromIntegral times)
  
  foreign import capi unsafe "hs_gp_Trsf.h hs_gp_Trsf_Powered" rawPowered :: Ptr Trsf -> CInt -> IO (Ptr Trsf)
  
  powered :: Ptr Trsf -> Int -> Acquire (Ptr Trsf)
  powered trsf times = mkAcquire (rawPowered trsf (fromIntegral times)) deleteTrsf
  