{-# LANGUAGE CApiFFI #-}
module OpenCascade.TopoDS.Builder 
( Builder 
, new
, makeWire
, makeShell
, makeSolid
, makeCompSolid
, makeCompound
, add
, remove
) where

import OpenCascade.TopoDS.Types 
import OpenCascade.TopoDS.Internal.Destructors (deleteBuilder)
import Foreign.Ptr (Ptr)
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_TopoDS_Builder.h hs_new_TopoDS_Builder" rawNew :: IO (Ptr Builder)

new :: Acquire (Ptr Builder)
new :: Acquire (Ptr Builder)
new = IO (Ptr Builder) -> (Ptr Builder -> IO ()) -> Acquire (Ptr Builder)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr Builder)
rawNew Ptr Builder -> IO ()
deleteBuilder

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_makeWire" makeWire :: Ptr Builder -> Ptr Wire -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_makeShell" makeShell :: Ptr Builder -> Ptr Shell -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_makeSolid" makeSolid :: Ptr Builder -> Ptr Solid -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_makeCompSolid" makeCompSolid :: Ptr Builder -> Ptr CompSolid -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_makeCompound" makeCompound :: Ptr Builder -> Ptr Compound -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_add" add :: Ptr Builder -> Ptr Shape -> Ptr Shape -> IO ()

foreign import capi unsafe "hs_TopoDS_Builder.h hs_TopoDS_Builder_remove" remove :: Ptr Builder -> Ptr Shape -> Ptr Shape -> IO ()