{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepOffsetAPI.MakePipe 
( MakePipe
, fromWireAndShape
, fromWireShapeTrihedronModeAndForceC1
) where

import OpenCascade.BRepOffsetAPI.Types (MakePipe)
import OpenCascade.BRepOffsetAPI.Internal.Destructors (deleteMakePipe)
import qualified OpenCascade.TopoDS as TopoDS
import qualified OpenCascade.GeomFill as GeomFill
import Foreign.Ptr
import Foreign.C (CBool (..), CInt (..))
import OpenCascade.Internal.Bool (boolToCBool)
import Data.Acquire

foreign import capi unsafe "hs_BRepOffsetAPI_MakePipe.h hs_new_BRepOffsetAPI_MakePipe_fromWireAndShape" rawFromWireAndShape :: Ptr TopoDS.Wire -> Ptr TopoDS.Shape -> IO (Ptr MakePipe)

fromWireAndShape :: Ptr TopoDS.Wire -> Ptr TopoDS.Shape -> Acquire (Ptr MakePipe)
fromWireAndShape :: Ptr Wire -> Ptr Shape -> Acquire (Ptr MakePipe)
fromWireAndShape Ptr Wire
wire Ptr Shape
profile = IO (Ptr MakePipe)
-> (Ptr MakePipe -> IO ()) -> Acquire (Ptr MakePipe)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Wire -> Ptr Shape -> IO (Ptr MakePipe)
rawFromWireAndShape Ptr Wire
wire Ptr Shape
profile) Ptr MakePipe -> IO ()
deleteMakePipe

foreign import capi unsafe "hs_BRepOffsetAPI_MakePipe.h hs_new_BRepOffsetAPI_MakePipe_fromWireShapeTrihedronModeAndForceC1" rawFromWireShapeTrihedronModeAndForceC1 :: Ptr TopoDS.Wire -> Ptr TopoDS.Shape -> CInt -> CBool -> IO (Ptr MakePipe)
fromWireShapeTrihedronModeAndForceC1 :: Ptr TopoDS.Wire -> Ptr TopoDS.Shape -> GeomFill.Trihedron -> Bool -> Acquire (Ptr MakePipe)
fromWireShapeTrihedronModeAndForceC1 :: Ptr Wire
-> Ptr Shape -> Trihedron -> Bool -> Acquire (Ptr MakePipe)
fromWireShapeTrihedronModeAndForceC1 Ptr Wire
wire Ptr Shape
profile Trihedron
trihedronMode Bool
forceC1 =
     IO (Ptr MakePipe)
-> (Ptr MakePipe -> IO ()) -> Acquire (Ptr MakePipe)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Wire -> Ptr Shape -> CInt -> CBool -> IO (Ptr MakePipe)
rawFromWireShapeTrihedronModeAndForceC1 Ptr Wire
wire Ptr Shape
profile ((Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (Trihedron -> Int) -> Trihedron -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Trihedron -> Int
forall a. Enum a => a -> Int
fromEnum (Trihedron -> CInt) -> Trihedron -> CInt
forall a b. (a -> b) -> a -> b
$ Trihedron
trihedronMode)) (Bool -> CBool
boolToCBool Bool
forceC1)) Ptr MakePipe -> IO ()
deleteMakePipe