{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepPrimAPI.MakeBox
( fromPnts
, solid
, shell
) where

import OpenCascade.BRepPrimAPI.Types (MakeBox)
import OpenCascade.BRepPrimAPI.Internal.Destructors (deleteMakeBox)
import qualified OpenCascade.TopoDS as TopoDS
import OpenCascade.TopoDS.Internal.Destructors (deleteShape)
import qualified OpenCascade.GP as GP
import Foreign.Ptr
import Data.Acquire

-- new

foreign import capi unsafe "hs_BRepPrimAPI_MakeBox.h hs_new_BRepPrimAPI_MakeBox_fromPnts" rawFromPnts :: Ptr GP.Pnt -> Ptr GP.Pnt ->  IO (Ptr MakeBox)

fromPnts :: Ptr GP.Pnt -> Ptr GP.Pnt -> Acquire (Ptr MakeBox)
fromPnts :: Ptr Pnt -> Ptr Pnt -> Acquire (Ptr MakeBox)
fromPnts Ptr Pnt
a Ptr Pnt
b = IO (Ptr MakeBox) -> (Ptr MakeBox -> IO ()) -> Acquire (Ptr MakeBox)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Pnt -> Ptr Pnt -> IO (Ptr MakeBox)
rawFromPnts Ptr Pnt
a Ptr Pnt
b) Ptr MakeBox -> IO ()
deleteMakeBox

-- solid 


foreign import capi unsafe "hs_BRepPrimAPI_MakeBox.h hs_BRepPrimAPI_MakeBox_Solid" rawSolid :: Ptr MakeBox ->  IO (Ptr TopoDS.Solid)

solid :: Ptr MakeBox -> Acquire (Ptr TopoDS.Solid)
solid :: Ptr MakeBox -> Acquire (Ptr Solid)
solid Ptr MakeBox
builder = IO (Ptr Solid) -> (Ptr Solid -> IO ()) -> Acquire (Ptr Solid)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeBox -> IO (Ptr Solid)
rawSolid Ptr MakeBox
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. Ptr a -> Ptr b
castPtr)

-- shell

foreign import capi unsafe "hs_BRepPrimAPI_MakeBox.h hs_BRepPrimAPI_MakeBox_Shell" rawShell :: Ptr MakeBox ->  IO (Ptr TopoDS.Shell)

shell:: Ptr MakeBox -> Acquire (Ptr TopoDS.Shell)
shell :: Ptr MakeBox -> Acquire (Ptr Shell)
shell Ptr MakeBox
builder = IO (Ptr Shell) -> (Ptr Shell -> IO ()) -> Acquire (Ptr Shell)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeBox -> IO (Ptr Shell)
rawShell Ptr MakeBox
builder) (Ptr Shape -> IO ()
deleteShape (Ptr Shape -> IO ())
-> (Ptr Shell -> Ptr Shape) -> Ptr Shell -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr Shell -> Ptr Shape
forall a b. Ptr a -> Ptr b
castPtr)