{-# LANGUAGE CApiFFI #-}
module OpenCascade.GeomConvert.BSplineCurveToBezierCurve
( BSplineCurveToBezierCurve
, fromHandle 
, fromHandleParametersAndTolerance
, nbArcs
, arc
) where

import OpenCascade.GeomConvert.Types (BSplineCurveToBezierCurve)
import OpenCascade.GeomConvert.Internal.Destructors (deleteBSplineCurveToBezierCurve)
import OpenCascade.Geom.Internal.Destructors (deleteHandleBezierCurve)
import qualified OpenCascade.Geom.Types as Geom
import OpenCascade.Handle (Handle)
import Foreign.Ptr (Ptr)
import Foreign.C (CInt (..), CDouble (..))
import Data.Coerce (coerce)
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_GeomConvert_BSplineCurveToBezierCurve.h hs_new_GeomConvert_BSplineCurveToBezierCurve_fromHandle" rawFromHandle :: Ptr (Handle Geom.BSplineCurve) -> IO(Ptr BSplineCurveToBezierCurve)

fromHandle :: Ptr (Handle Geom.BSplineCurve) -> Acquire (Ptr BSplineCurveToBezierCurve)
fromHandle :: Ptr (Handle BSplineCurve)
-> Acquire (Ptr BSplineCurveToBezierCurve)
fromHandle Ptr (Handle BSplineCurve)
h = IO (Ptr BSplineCurveToBezierCurve)
-> (Ptr BSplineCurveToBezierCurve -> IO ())
-> Acquire (Ptr BSplineCurveToBezierCurve)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle BSplineCurve) -> IO (Ptr BSplineCurveToBezierCurve)
rawFromHandle Ptr (Handle BSplineCurve)
h) (Ptr BSplineCurveToBezierCurve -> IO ()
deleteBSplineCurveToBezierCurve)

foreign import capi unsafe "hs_GeomConvert_BSplineCurveToBezierCurve.h hs_new_GeomConvert_BSplineCurveToBezierCurve_fromHandleParametersAndTolerance" rawFromHandleParametersAndTolerance :: Ptr (Handle Geom.BSplineCurve) -> CDouble -> CDouble -> CDouble -> IO(Ptr BSplineCurveToBezierCurve)

fromHandleParametersAndTolerance :: Ptr (Handle Geom.BSplineCurve) -> Double -> Double -> Double -> Acquire (Ptr BSplineCurveToBezierCurve)
fromHandleParametersAndTolerance :: Ptr (Handle BSplineCurve)
-> Double
-> Double
-> Double
-> Acquire (Ptr BSplineCurveToBezierCurve)
fromHandleParametersAndTolerance Ptr (Handle BSplineCurve)
h Double
firstParam Double
secondParam Double
tolerance= IO (Ptr BSplineCurveToBezierCurve)
-> (Ptr BSplineCurveToBezierCurve -> IO ())
-> Acquire (Ptr BSplineCurveToBezierCurve)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle BSplineCurve)
-> CDouble
-> CDouble
-> CDouble
-> IO (Ptr BSplineCurveToBezierCurve)
rawFromHandleParametersAndTolerance Ptr (Handle BSplineCurve)
h (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
firstParam) (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
secondParam) (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
tolerance)) (Ptr BSplineCurveToBezierCurve -> IO ()
deleteBSplineCurveToBezierCurve)

foreign import capi unsafe "hs_GeomConvert_BSplineCurveToBezierCurve.h hs_GeomConvert_BSplineCurveToBezierCurve_nbArcs" rawNbArcs :: Ptr (BSplineCurveToBezierCurve) -> IO CInt

nbArcs :: Ptr BSplineCurveToBezierCurve -> IO Int
nbArcs :: Ptr BSplineCurveToBezierCurve -> IO Int
nbArcs Ptr BSplineCurveToBezierCurve
p = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr BSplineCurveToBezierCurve -> IO CInt
rawNbArcs Ptr BSplineCurveToBezierCurve
p

foreign import capi unsafe "hs_GeomConvert_BSplineCurveToBezierCurve.h hs_GeomConvert_BSplineCurveToBezierCurve_arc" rawArc :: Ptr (BSplineCurveToBezierCurve) -> CInt -> IO (Ptr (Handle Geom.BezierCurve))

arc :: Ptr BSplineCurveToBezierCurve -> Int -> Acquire (Ptr (Handle Geom.BezierCurve))
arc :: Ptr BSplineCurveToBezierCurve
-> Int -> Acquire (Ptr (Handle BezierCurve))
arc Ptr BSplineCurveToBezierCurve
p Int
n = IO (Ptr (Handle BezierCurve))
-> (Ptr (Handle BezierCurve) -> IO ())
-> Acquire (Ptr (Handle BezierCurve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr BSplineCurveToBezierCurve
-> CInt -> IO (Ptr (Handle BezierCurve))
rawArc Ptr BSplineCurveToBezierCurve
p (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
n)) Ptr (Handle BezierCurve) -> IO ()
deleteHandleBezierCurve