{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepOffsetAPI.MakeOffsetShape 
( MakeOffsetShape 
, new
, performBySimple
, performByJoin
) where

import OpenCascade.BRepOffsetAPI.Types (MakeOffsetShape)
import Data.Acquire
import OpenCascade.BRepOffsetAPI.Internal.Destructors (deleteMakeOffsetShape)
import Foreign (Ptr)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.C
import Data.Coerce (coerce)
import qualified OpenCascade.BRepOffset.Mode as BRepOffset.Mode
import qualified OpenCascade.GeomAbs.JoinType as GeomAbs.JoinType
import OpenCascade.Internal.Bool (boolToCBool)

foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_new_BRepOffsetAPI_MakeOffsetShape" rawNew :: IO (Ptr MakeOffsetShape)

new :: Acquire (Ptr MakeOffsetShape)
new :: Acquire (Ptr MakeOffsetShape)
new = IO (Ptr MakeOffsetShape)
-> (Ptr MakeOffsetShape -> IO ()) -> Acquire (Ptr MakeOffsetShape)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr MakeOffsetShape)
rawNew Ptr MakeOffsetShape -> IO ()
deleteMakeOffsetShape

foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_BRepOffsetAPI_MakeOffsetShape_performBySimple" rawPerformBySimple :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> CDouble -> IO ()
 
performBySimple :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> Double -> IO ()
performBySimple :: Ptr MakeOffsetShape -> Ptr Shape -> Double -> IO ()
performBySimple = (Ptr MakeOffsetShape -> Ptr Shape -> CDouble -> IO ())
-> Ptr MakeOffsetShape -> Ptr Shape -> Double -> IO ()
forall a b. Coercible a b => a -> b
coerce Ptr MakeOffsetShape -> Ptr Shape -> CDouble -> IO ()
rawPerformBySimple


foreign import capi unsafe "hs_BRepOffsetAPI_MakeOffsetShape.h hs_BRepOffsetAPI_MakeOffsetShape_performByJoin" rawPerformByJoin :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> CDouble -> CDouble -> CInt -> CBool -> CBool -> CInt -> CBool -> IO ()

-- |  builder, shape, value, tol, mode intersection, selfInter, join, removeIntEdges
performByJoin :: Ptr MakeOffsetShape -> Ptr TopoDS.Shape -> Double -> Double -> BRepOffset.Mode.Mode -> Bool -> Bool -> GeomAbs.JoinType.JoinType -> Bool -> IO ()
performByJoin :: Ptr MakeOffsetShape
-> Ptr Shape
-> Double
-> Double
-> Mode
-> Bool
-> Bool
-> JoinType
-> Bool
-> IO ()
performByJoin Ptr MakeOffsetShape
builder Ptr Shape
shape Double
value Double
tol Mode
mode Bool
intersection Bool
selfInter JoinType
join Bool
removeIntEdges =
    Ptr MakeOffsetShape
-> Ptr Shape
-> CDouble
-> CDouble
-> CInt
-> CBool
-> CBool
-> CInt
-> CBool
-> IO ()
rawPerformByJoin Ptr MakeOffsetShape
builder Ptr Shape
shape (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
value) (Double -> CDouble
forall a b. Coercible a b => a -> b
coerce Double
tol) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> Int -> CInt
forall a b. (a -> b) -> a -> b
$ Mode -> Int
forall a. Enum a => a -> Int
fromEnum Mode
mode) (Bool -> CBool
boolToCBool Bool
intersection) (Bool -> CBool
boolToCBool Bool
selfInter) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (JoinType -> Int) -> JoinType -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. JoinType -> Int
forall a. Enum a => a -> Int
fromEnum (JoinType -> CInt) -> JoinType -> CInt
forall a b. (a -> b) -> a -> b
$ JoinType
join) (Bool -> CBool
boolToCBool Bool
removeIntEdges)