{-# LANGUAGE CApiFFI #-}
module OpenCascade.Bnd.OBB
( OBB
, new
, center
, xDirection, yDirection, zDirection
, xHSize, yHSize, zHSize
, position
) where

import OpenCascade.Bnd.Types
import OpenCascade.Bnd.Internal.Destructors (deleteOBB)
import OpenCascade.GP.Types (XYZ, Ax3)
import OpenCascade.GP.Internal.Destructors (deleteXYZ, deleteAx3)
import Data.Acquire (Acquire, mkAcquire)
import Foreign.Ptr (Ptr)
import Foreign.C (CDouble (..))
import Data.Coerce (coerce)

foreign import capi unsafe "hs_Bnd_OBB.h hs_new_Bnd_OBB" rawNew ::  IO (Ptr OBB)

new :: Acquire (Ptr OBB)
new :: Acquire (Ptr OBB)
new = IO (Ptr OBB) -> (Ptr OBB -> IO ()) -> Acquire (Ptr OBB)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr OBB)
rawNew Ptr OBB -> IO ()
deleteOBB

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_center" rawCenter :: Ptr OBB -> IO (Ptr XYZ)

center :: Ptr OBB -> Acquire (Ptr XYZ)
center :: Ptr OBB -> Acquire (Ptr XYZ)
center Ptr OBB
obb = IO (Ptr XYZ) -> (Ptr XYZ -> IO ()) -> Acquire (Ptr XYZ)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr OBB -> IO (Ptr XYZ)
rawCenter Ptr OBB
obb) Ptr XYZ -> IO ()
deleteXYZ

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_xDirection" rawXDirection :: Ptr OBB -> IO (Ptr XYZ)

xDirection :: Ptr OBB -> Acquire (Ptr XYZ)
xDirection :: Ptr OBB -> Acquire (Ptr XYZ)
xDirection Ptr OBB
obb = IO (Ptr XYZ) -> (Ptr XYZ -> IO ()) -> Acquire (Ptr XYZ)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr OBB -> IO (Ptr XYZ)
rawXDirection Ptr OBB
obb) Ptr XYZ -> IO ()
deleteXYZ

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_yDirection" rawYDirection :: Ptr OBB -> IO (Ptr XYZ)

yDirection :: Ptr OBB -> Acquire (Ptr XYZ)
yDirection :: Ptr OBB -> Acquire (Ptr XYZ)
yDirection Ptr OBB
obb = IO (Ptr XYZ) -> (Ptr XYZ -> IO ()) -> Acquire (Ptr XYZ)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr OBB -> IO (Ptr XYZ)
rawYDirection Ptr OBB
obb) Ptr XYZ -> IO ()
deleteXYZ

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_zDirection" rawZDirection :: Ptr OBB -> IO (Ptr XYZ)

zDirection :: Ptr OBB -> Acquire (Ptr XYZ)
zDirection :: Ptr OBB -> Acquire (Ptr XYZ)
zDirection Ptr OBB
obb = IO (Ptr XYZ) -> (Ptr XYZ -> IO ()) -> Acquire (Ptr XYZ)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr OBB -> IO (Ptr XYZ)
rawZDirection Ptr OBB
obb) Ptr XYZ -> IO ()
deleteXYZ

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_xHSize" rawXHSize :: Ptr OBB -> IO (CDouble)

xHSize :: Ptr OBB -> IO Double 
xHSize :: Ptr OBB -> IO Double
xHSize = (Ptr OBB -> IO CDouble) -> Ptr OBB -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr OBB -> IO CDouble
rawXHSize

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_yHSize" rawYHSize :: Ptr OBB -> IO (CDouble)

yHSize :: Ptr OBB -> IO Double 
yHSize :: Ptr OBB -> IO Double
yHSize = (Ptr OBB -> IO CDouble) -> Ptr OBB -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr OBB -> IO CDouble
rawYHSize

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_zHSize" rawZHSize :: Ptr OBB -> IO (CDouble)

zHSize :: Ptr OBB -> IO Double 
zHSize :: Ptr OBB -> IO Double
zHSize = (Ptr OBB -> IO CDouble) -> Ptr OBB -> IO Double
forall a b. Coercible a b => a -> b
coerce Ptr OBB -> IO CDouble
rawZHSize 

foreign import capi unsafe "hs_Bnd_OBB.h hs_Bnd_OBB_position" rawPosition :: Ptr OBB -> IO (Ptr Ax3)

position :: Ptr OBB -> Acquire (Ptr Ax3)
position :: Ptr OBB -> Acquire (Ptr Ax3)
position Ptr OBB
obb = IO (Ptr Ax3) -> (Ptr Ax3 -> IO ()) -> Acquire (Ptr Ax3)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr OBB -> IO (Ptr Ax3)
rawPosition Ptr OBB
obb) Ptr Ax3 -> IO ()
deleteAx3