{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepBuilderAPI.MakeSolid
( MakeSolid
, new
, add
, solid
) where
import OpenCascade.BRepBuilderAPI.Types
import OpenCascade.BRepBuilderAPI.Internal.Destructors
import qualified OpenCascade.TopoDS as TopoDS
import OpenCascade.Inheritance (upcast)
import OpenCascade.TopoDS.Internal.Destructors (deleteShape)
import Foreign.Ptr
import Data.Acquire 

-- new

foreign import capi unsafe "hs_BRepBuilderAPI_MakeSolid.h hs_new_BRepBuilderAPI_MakeSolid" rawNew :: IO (Ptr MakeSolid)

new :: Acquire (Ptr MakeSolid)
new :: Acquire (Ptr MakeSolid)
new = IO (Ptr MakeSolid)
-> (Ptr MakeSolid -> IO ()) -> Acquire (Ptr MakeSolid)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr MakeSolid)
rawNew Ptr MakeSolid -> IO ()
deleteMakeSolid

-- add 
foreign import capi unsafe "hs_BRepBuilderAPI_MakeSolid.h hs_BRepBuilderAPI_MakeSolid_add" add :: Ptr MakeSolid -> Ptr TopoDS.Shell -> IO ()

foreign import capi unsafe "hs_BRepBuilderAPI_MakeSolid.h hs_BRepBuilderAPI_MakeSolid_solid" rawSolid :: Ptr MakeSolid -> IO (Ptr TopoDS.Solid)

solid :: Ptr MakeSolid -> Acquire (Ptr TopoDS.Solid)
solid :: Ptr MakeSolid -> Acquire (Ptr Solid)
solid Ptr MakeSolid
builder = IO (Ptr Solid) -> (Ptr Solid -> IO ()) -> Acquire (Ptr Solid)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeSolid -> IO (Ptr Solid)
rawSolid Ptr MakeSolid
builder) (Ptr Shape -> IO ()
deleteShape (Ptr Shape -> IO ())
-> (Ptr Solid -> Ptr Shape) -> Ptr Solid -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr Solid -> Ptr Shape
forall a b. SubTypeOf a b => Ptr b -> Ptr a
upcast)