{-# LANGUAGE CApiFFI #-}
module OpenCascade.Geom.Curve 
( value
, firstParameter
, lastParameter
, dn
, reversedParameter
, reversed
) where
import Foreign.Ptr
import Foreign.C
import Data.Coerce
import Data.Acquire
import OpenCascade.Geom.Types (Curve)
import OpenCascade.GP (Pnt, Vec)
import OpenCascade.GP.Internal.Destructors (deletePnt, deleteVec)
import OpenCascade.Geom.Internal.Destructors (deleteHandleCurve)
import OpenCascade.Handle (Handle)

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_value" rawValue :: Ptr (Handle Curve) -> CDouble -> IO(Ptr Pnt)

value :: Ptr (Handle Curve) -> Double -> Acquire (Ptr Pnt)
value :: Ptr (Handle Curve) -> Double -> Acquire (Ptr Pnt)
value Ptr (Handle Curve)
curve Double
u = IO (Ptr Pnt) -> (Ptr Pnt -> IO ()) -> Acquire (Ptr Pnt)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> CDouble -> IO (Ptr Pnt)
rawValue Ptr (Handle Curve)
curve (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
u)) Ptr Pnt -> IO ()
deletePnt

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_firstParameter" rawFirstParameter :: Ptr (Handle Curve)-> IO (CDouble)

firstParameter :: Ptr (Handle Curve) -> IO Double
firstParameter :: Ptr (Handle Curve) -> IO Double
firstParameter = (Ptr (Handle Curve) -> IO CDouble)
-> Ptr (Handle Curve) -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr (Handle Curve) -> IO CDouble
rawFirstParameter

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_lastParameter" rawLastParameter :: Ptr (Handle Curve)-> IO (CDouble)

lastParameter :: Ptr (Handle Curve) -> IO Double
lastParameter :: Ptr (Handle Curve) -> IO Double
lastParameter = (Ptr (Handle Curve) -> IO CDouble)
-> Ptr (Handle Curve) -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr (Handle Curve) -> IO CDouble
rawLastParameter

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_dn" rawDN :: Ptr (Handle Curve) -> CDouble -> CInt -> IO (Ptr Vec)

dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
dn :: Ptr (Handle Curve) -> Double -> Int -> Acquire (Ptr Vec)
dn Ptr (Handle Curve)
curve Double
u Int
n = IO (Ptr Vec) -> (Ptr Vec -> IO ()) -> Acquire (Ptr Vec)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> CDouble -> CInt -> IO (Ptr Vec)
rawDN Ptr (Handle Curve)
curve (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
u) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)) Ptr Vec -> IO ()
deleteVec

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_reversedParameter" rawReversedParameter :: Ptr (Handle Curve) -> CDouble -> IO CDouble

reversedParameter :: Ptr (Handle Curve) -> Double -> IO Double
reversedParameter :: Ptr (Handle Curve) -> Double -> IO Double
reversedParameter = (Ptr (Handle Curve) -> CDouble -> IO CDouble)
-> Ptr (Handle Curve) -> Double -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr (Handle Curve) -> CDouble -> IO CDouble
rawReversedParameter

foreign import capi unsafe "hs_Geom_Curve.h hs_Geom_Curve_reversed" rawReversed :: Ptr (Handle Curve) -> IO (Ptr (Handle Curve))

reversed :: Ptr (Handle Curve) -> Acquire (Ptr (Handle Curve))
reversed :: Ptr (Handle Curve) -> Acquire (Ptr (Handle Curve))
reversed Ptr (Handle Curve)
c = IO (Ptr (Handle Curve))
-> (Ptr (Handle Curve) -> IO ()) -> Acquire (Ptr (Handle Curve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Curve) -> IO (Ptr (Handle Curve))
rawReversed Ptr (Handle Curve)
c) Ptr (Handle Curve) -> IO ()
deleteHandleCurve