{-# LANGUAGE CApiFFI #-} module OpenCascade.GeomConvert.ApproxCurve ( ApproxCurve , fromCurveToleranceOrderSegmentsAndDegree , curve , isDone , hasResult ) where import OpenCascade.GeomConvert.Types (ApproxCurve) import OpenCascade.GeomConvert.Internal.Destructors (deleteApproxCurve) import OpenCascade.Geom.Internal.Destructors (deleteHandleBSplineCurve) import qualified OpenCascade.GeomAbs.Shape as GeomAbs.Shape import Foreign.Ptr (Ptr) import Foreign.C (CInt (..), CDouble (..), CBool (..)) import Data.Coerce (coerce) import Data.Acquire (Acquire, mkAcquire) import OpenCascade.Handle (Handle) import OpenCascade.Geom.Types as Geom import OpenCascade.Internal.Bool (cBoolToBool) foreign import capi unsafe "hs_GeomConvert_ApproxCurve.h hs_new_GeomConvert_ApproxCurve_fromCurveToleranceOrderSegmentsAndDegree" rawFromCurveToleranceOrderSegmentsAndDegree :: Ptr (Handle Geom.Curve) -> CDouble -> CInt -> CInt -> CInt -> IO (Ptr ApproxCurve) fromCurveToleranceOrderSegmentsAndDegree :: Ptr (Handle Geom.Curve) -> Double -> GeomAbs.Shape.Shape -> Int -> Int -> Acquire (Ptr ApproxCurve) fromCurveToleranceOrderSegmentsAndDegree :: Ptr (Handle Curve) -> Double -> Shape -> Int -> Int -> Acquire (Ptr ApproxCurve) fromCurveToleranceOrderSegmentsAndDegree Ptr (Handle Curve) theCurve Double tolerance Shape order Int maxSegments Int maxDegree = IO (Ptr ApproxCurve) -> (Ptr ApproxCurve -> IO ()) -> Acquire (Ptr ApproxCurve) forall a. IO a -> (a -> IO ()) -> Acquire a mkAcquire (Ptr (Handle Curve) -> CDouble -> CInt -> CInt -> CInt -> IO (Ptr ApproxCurve) rawFromCurveToleranceOrderSegmentsAndDegree Ptr (Handle Curve) theCurve (Double -> CDouble forall a b. Coercible a b => a -> b coerce Double tolerance) (Int -> CInt forall a b. (Integral a, Num b) => a -> b fromIntegral (Int -> CInt) -> (Shape -> Int) -> Shape -> CInt forall b c a. (b -> c) -> (a -> b) -> a -> c . Shape -> Int forall a. Enum a => a -> Int fromEnum (Shape -> CInt) -> Shape -> CInt forall a b. (a -> b) -> a -> b $ Shape order) (Int -> CInt forall a b. (Integral a, Num b) => a -> b fromIntegral Int maxSegments) (Int -> CInt forall a b. (Integral a, Num b) => a -> b fromIntegral Int maxDegree)) Ptr ApproxCurve -> IO () deleteApproxCurve foreign import capi unsafe "hs_GeomConvert_ApproxCurve.h hs_GeomConvert_ApproxCurve_curve" rawCurve :: Ptr ApproxCurve -> IO (Ptr (Handle Geom.BSplineCurve)) curve :: Ptr ApproxCurve -> Acquire (Ptr (Handle Geom.BSplineCurve)) curve :: Ptr ApproxCurve -> Acquire (Ptr (Handle BSplineCurve)) curve Ptr ApproxCurve approxCurve = IO (Ptr (Handle BSplineCurve)) -> (Ptr (Handle BSplineCurve) -> IO ()) -> Acquire (Ptr (Handle BSplineCurve)) forall a. IO a -> (a -> IO ()) -> Acquire a mkAcquire (Ptr ApproxCurve -> IO (Ptr (Handle BSplineCurve)) rawCurve Ptr ApproxCurve approxCurve) Ptr (Handle BSplineCurve) -> IO () deleteHandleBSplineCurve foreign import capi unsafe "hs_GeomConvert_ApproxCurve.h hs_GeomConvert_ApproxCurve_isDone" rawIsDone :: Ptr ApproxCurve -> IO (CBool) isDone :: Ptr ApproxCurve -> IO Bool isDone :: Ptr ApproxCurve -> IO Bool isDone Ptr ApproxCurve approxCurve = CBool -> Bool cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Ptr ApproxCurve -> IO CBool rawIsDone Ptr ApproxCurve approxCurve foreign import capi unsafe "hs_GeomConvert_ApproxCurve.h hs_GeomConvert_ApproxCurve_hasResult" rawHasResult :: Ptr ApproxCurve -> IO (CBool) hasResult :: Ptr ApproxCurve -> IO Bool hasResult :: Ptr ApproxCurve -> IO Bool hasResult Ptr ApproxCurve approxCurve = CBool -> Bool cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Ptr ApproxCurve -> IO CBool rawHasResult Ptr ApproxCurve approxCurve