packages feed

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

{-# LANGUAGE CApiFFI #-}
module OpenCascade.StlAPI.Writer
( new
, setAsciiMode
, write
) where

import OpenCascade.StlAPI.Types (Writer)
import OpenCascade.StlAPI.Internal.Destructors (deleteWriter)
import qualified OpenCascade.TopoDS as TopoDS
import Foreign.C
import Foreign.Ptr
import Data.Acquire
import OpenCascade.Internal.Bool (boolToCBool, cBoolToBool)

foreign import capi unsafe "hs_StlAPI_Writer.h hs_new_StlAPI_Writer" rawNew :: IO (Ptr Writer)

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

foreign import capi unsafe "hs_StlAPI_Writer.h hs_StlAPI_Writer_setAsciiMode" rawSetAsciiMode :: Ptr Writer -> CBool -> IO ()

setAsciiMode :: Ptr Writer -> Bool -> IO ()
setAsciiMode writer mode = rawSetAsciiMode writer (boolToCBool mode)


foreign import capi unsafe "hs_StlAPI_Writer.h hs_StlAPI_Writer_write" rawWrite :: Ptr Writer -> Ptr TopoDS.Shape -> CString -> IO (CBool)

write :: Ptr Writer -> Ptr TopoDS.Shape -> String -> IO (Bool)
write writer shape filename = cBoolToBool <$> withCString filename (rawWrite writer shape)