{-# LANGUAGE CApiFFI #-} 
module OpenCascade.BRepAdaptor.Curve
( Curve
, fromEdge
, curveType
, bezier
, bspline
, curve
, firstParameter
, lastParameter
) where
 
import OpenCascade.BRepAdaptor.Types (Curve)
import OpenCascade.BRepAdaptor.Internal.Destructors (deleteCurve)
import OpenCascade.Geom.Internal.Destructors (deleteHandleBezierCurve, deleteHandleBSplineCurve)
import qualified OpenCascade.Geom.Types as Geom
import OpenCascade.GeomAbs.CurveType (CurveType)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.Ptr (Ptr)
import Foreign.C (CInt (..), CDouble (..))
import Data.Acquire (Acquire, mkAcquire)
import OpenCascade.Handle (Handle)
import Data.Coerce (coerce)
import qualified OpenCascade.GeomAdaptor.Types as GeomAdaptor
import qualified OpenCascade.GeomAdaptor.Internal.Destructors as GeomAdaptor.Destructors

foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_new_BRepAdaptor_Curve_fromEdge" rawFromEdge :: Ptr TopoDS.Edge -> IO (Ptr Curve)

fromEdge :: Ptr TopoDS.Edge -> Acquire (Ptr Curve)
fromEdge :: Ptr Edge -> Acquire (Ptr Curve)
fromEdge Ptr Edge
e = IO (Ptr Curve) -> (Ptr Curve -> IO ()) -> Acquire (Ptr Curve)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Edge -> IO (Ptr Curve)
rawFromEdge Ptr Edge
e) Ptr Curve -> IO ()
deleteCurve


foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_curveType" rawCurveType :: Ptr Curve -> IO (CInt)

curveType :: Ptr Curve -> IO CurveType
curveType :: Ptr Curve -> IO CurveType
curveType Ptr Curve
c = Int -> CurveType
forall a. Enum a => Int -> a
toEnum (Int -> CurveType) -> (CInt -> Int) -> CInt -> CurveType
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> CurveType) -> IO CInt -> IO CurveType
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Curve -> IO CInt
rawCurveType Ptr Curve
c

foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_bezier" rawBezier :: Ptr Curve -> IO (Ptr (Handle (Geom.BezierCurve)))

bezier :: Ptr Curve -> Acquire (Ptr (Handle Geom.BezierCurve))
bezier :: Ptr Curve -> Acquire (Ptr (Handle BezierCurve))
bezier Ptr Curve
theCurve = IO (Ptr (Handle BezierCurve))
-> (Ptr (Handle BezierCurve) -> IO ())
-> Acquire (Ptr (Handle BezierCurve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Curve -> IO (Ptr (Handle BezierCurve))
rawBezier Ptr Curve
theCurve) Ptr (Handle BezierCurve) -> IO ()
deleteHandleBezierCurve

foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_bspline" rawBSpline :: Ptr Curve -> IO (Ptr (Handle (Geom.BSplineCurve)))

bspline :: Ptr Curve -> Acquire (Ptr (Handle Geom.BSplineCurve))
bspline :: Ptr Curve -> Acquire (Ptr (Handle BSplineCurve))
bspline Ptr Curve
theCurve = IO (Ptr (Handle BSplineCurve))
-> (Ptr (Handle BSplineCurve) -> IO ())
-> Acquire (Ptr (Handle BSplineCurve))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Curve -> IO (Ptr (Handle BSplineCurve))
rawBSpline Ptr Curve
theCurve) Ptr (Handle BSplineCurve) -> IO ()
deleteHandleBSplineCurve


foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_curve" rawCurve :: Ptr Curve -> IO (Ptr GeomAdaptor.Curve)

curve :: Ptr Curve -> Acquire (Ptr GeomAdaptor.Curve)
curve :: Ptr Curve -> Acquire (Ptr Curve)
curve Ptr Curve
theCurve = IO (Ptr Curve) -> (Ptr Curve -> IO ()) -> Acquire (Ptr Curve)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Curve -> IO (Ptr Curve)
rawCurve Ptr Curve
theCurve) Ptr Curve -> IO ()
GeomAdaptor.Destructors.deleteCurve

foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_firstParameter" rawFirstParameter :: Ptr Curve -> IO CDouble

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

foreign import capi unsafe "hs_BRepAdaptor_Curve.h hs_BRepAdaptor_Curve_lastParameter" rawLastParameter :: Ptr Curve -> IO CDouble

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