{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRep.Tool
( curve
, curveParamFirst
, curveParamLast
) where

import qualified OpenCascade.Geom as Geom
import qualified OpenCascade.TopoDS as TopoDS
import OpenCascade.Handle (Handle)
import OpenCascade.Geom.Internal.Destructors (deleteHandleCurve)
import Foreign.Ptr
import Foreign.C
import Data.Coerce
import Data.Acquire
import qualified Data.Acquire as Data

foreign import capi unsafe "hs_BRep_Tool.h hs_BRep_Tool_curve" rawCurve :: Ptr (TopoDS.Edge) -> IO(Ptr (Handle Geom.Curve))

curve :: Ptr TopoDS.Edge -> Data.Acquire (Ptr (Handle Geom.Curve))
curve :: Ptr Edge -> Acquire (Ptr (Handle Curve))
curve Ptr Edge
edge = IO (Ptr (Handle Curve))
-> (Ptr (Handle Curve) -> IO ()) -> Acquire (Ptr (Handle Curve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Edge -> IO (Ptr (Handle Curve))
rawCurve Ptr Edge
edge) Ptr (Handle Curve) -> IO ()
deleteHandleCurve

foreign import capi unsafe "hs_BRep_Tool.h hs_BRep_Tool_curveParamFirst" rawCurveParamFirst :: Ptr (TopoDS.Edge) -> IO(CDouble)

curveParamFirst :: Ptr TopoDS.Edge -> IO Double 
curveParamFirst :: Ptr Edge -> IO Double
curveParamFirst = (Ptr Edge -> IO CDouble) -> Ptr Edge -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr Edge -> IO CDouble
rawCurveParamFirst

foreign import capi unsafe "hs_BRep_Tool.h hs_BRep_Tool_curveParamLast" rawCurveParamLast :: Ptr (TopoDS.Edge) -> IO(CDouble)

curveParamLast :: Ptr TopoDS.Edge -> IO Double 
curveParamLast :: Ptr Edge -> IO Double
curveParamLast = (Ptr Edge -> IO CDouble) -> Ptr Edge -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr Edge -> IO CDouble
rawCurveParamLast