{-# LANGUAGE CApiFFI #-}
module OpenCascade.XCAFDoc.ShapeTool
( ShapeTool
, addShape
) where

import OpenCascade.XCAFDoc.Types (ShapeTool)
import qualified OpenCascade.TopoDS.Types as TopoDS
import OpenCascade.Handle (Handle)
import OpenCascade.TDF.Types (Label)
import OpenCascade.TDF.Internal.Destructors (deleteLabel)
import OpenCascade.Internal.Bool (boolToCBool)
import Data.Acquire (Acquire, mkAcquire)
import Foreign.C (CBool (..))
import Foreign.Ptr (Ptr)

foreign import capi unsafe "hs_XCAFDoc_ShapeTool.h hs_XCAFDoc_ShapeTool_addShape" rawAddShape :: Ptr (Handle ShapeTool) -> Ptr TopoDS.Shape -> CBool -> CBool -> IO (Ptr Label)

addShape :: Ptr (Handle ShapeTool) -> Ptr TopoDS.Shape -> Bool -> Bool -> Acquire (Ptr Label)
addShape :: Ptr (Handle ShapeTool)
-> Ptr Shape -> Bool -> Bool -> Acquire (Ptr Label)
addShape Ptr (Handle ShapeTool)
tool Ptr Shape
shape Bool
makeAssembly Bool
makePrepare = IO (Ptr Label) -> (Ptr Label -> IO ()) -> Acquire (Ptr Label)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle ShapeTool)
-> Ptr Shape -> CBool -> CBool -> IO (Ptr Label)
rawAddShape Ptr (Handle ShapeTool)
tool Ptr Shape
shape (Bool -> CBool
boolToCBool Bool
makeAssembly) (Bool -> CBool
boolToCBool Bool
makePrepare)) Ptr Label -> IO ()
deleteLabel