packages feed

opencascade-hs-0.0.0.1: src/OpenCascade/STEPControl/Writer.hs

{-# LANGUAGE CApiFFI #-}
module OpenCascade.STEPControl.Writer
( new
, setTolerance
, unsetTolerance
, transfer
, write
) where

import OpenCascade.STEPControl.Types (Writer)
import OpenCascade.STEPControl.Internal.Destructors (deleteWriter)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.C
import Foreign.Ptr
import Data.Acquire
import OpenCascade.Internal.Bool (boolToCBool)
import qualified OpenCascade.IFSelect.ReturnStatus as IFSelect.ReturnStatus
import OpenCascade.STEPControl.StepModelType (StepModelType)
import Data.Coerce (coerce)

foreign import capi unsafe "hs_STEPControl_Writer.h hs_new_STEPControl_Writer" rawNew :: IO (Ptr Writer)

new :: Acquire (Ptr Writer)
new = mkAcquire rawNew deleteWriter

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_setTolerance" rawSetTolerance :: Ptr Writer -> CDouble -> IO ()

setTolerance :: Ptr Writer -> Double -> IO ()
setTolerance = coerce rawSetTolerance 

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_unsetTolerance" unsetTolerance :: Ptr Writer -> IO ()

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_transfer" rawTransfer :: Ptr Writer -> Ptr TopoDS.Shape -> CInt -> CBool -> IO CInt

transfer :: Ptr Writer -> Ptr TopoDS.Shape -> StepModelType -> Bool -> IO IFSelect.ReturnStatus.ReturnStatus
transfer writer shape mode compgraph = toEnum . fromIntegral <$> rawTransfer writer shape (fromIntegral . fromEnum $ mode) (boolToCBool compgraph)

foreign import capi unsafe "hs_STEPControl_Writer.h hs_STEPControl_Writer_write" rawWrite :: Ptr Writer -> CString -> IO CInt

write :: Ptr Writer -> String -> IO IFSelect.ReturnStatus.ReturnStatus
write writer filename = toEnum . fromIntegral <$> withCString filename (rawWrite writer)