{-# 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