packages feed

opencascade-hs-0.6.3.0: src/OpenCascade/Poly/Triangle.hs

{-# LANGUAGE CApiFFI #-}
module OpenCascade.Poly.Triangle 
( Triangle
, fromIndices
, value
, setValue
) where

import OpenCascade.Poly.Types (Triangle)
import OpenCascade.Poly.Internal.Destructors (deleteTriangle)
import OpenCascade.Internal.Exception (wrapException)
import Foreign.C (CInt (..))
import Foreign.Ptr (Ptr)
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_Poly_Triangle.h hs_new_Poly_Triangle_fromIndices" rawFromIndices :: CInt -> CInt -> CInt -> IO (Ptr Triangle)

fromIndices :: Int -> Int -> Int -> Acquire (Ptr Triangle)
fromIndices n1 n2 n3 = mkAcquire (rawFromIndices (fromIntegral n1) (fromIntegral n2) (fromIntegral n3)) deleteTriangle

foreign import capi unsafe "hs_Poly_Triangle.h hs_Poly_Triangle_value" rawValue
    :: Ptr Triangle
    -> CInt
    -> Ptr CInt
    -> Ptr (Ptr ())
    -> IO CInt

value :: Ptr Triangle -> Int -> IO Int
value tri index = fromIntegral <$> wrapException (rawValue tri (fromIntegral index))

foreign import capi unsafe "hs_Poly_Triangle.h hs_Poly_Triangle_setValue" rawSetValue
    :: Ptr Triangle
    -> CInt
    -> CInt
    -> Ptr CInt
    -> Ptr (Ptr ())
    -> IO ()

setValue :: Ptr Triangle -> Int -> Int -> IO ()
setValue tri index node = wrapException $ rawSetValue tri (fromIntegral index) (fromIntegral node)