{-# LANGUAGE CApiFFI #-}
module OpenCascade.Poly.Triangulation 
(Triangulation
, new
, nbNodes
, nbTriangles
, node 
, setNode
, triangle
, setTriangle
) where

import OpenCascade.Poly.Types (Triangle, Triangulation)
import OpenCascade.Poly.Internal.Destructors (deleteHandleTriangulation, deleteTriangle)
import OpenCascade.GP.Types as GP
import OpenCascade.GP.Internal.Destructors (deletePnt)
import OpenCascade.Handle (Handle)
import Foreign.Ptr (Ptr)
import Foreign.C (CInt (..), CBool (..))
import OpenCascade.Internal.Bool (boolToCBool)
import Data.Acquire (Acquire, mkAcquire)

foreign import capi unsafe "hs_Poly_Triangulation.h hs_new_Poly_Triangulation" rawNew :: CInt -> CInt -> CBool -> CBool -> IO (Ptr (Handle Triangulation))

new :: Int -> Int -> Bool -> Bool -> Acquire (Ptr (Handle Triangulation))
new :: Int -> Int -> Bool -> Bool -> Acquire (Ptr (Handle Triangulation))
new Int
nNodes Int
nTriangles Bool
hasUVNodes Bool
hasNormals = IO (Ptr (Handle Triangulation))
-> (Ptr (Handle Triangulation) -> IO ())
-> Acquire (Ptr (Handle Triangulation))
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (CInt -> CInt -> CBool -> CBool -> IO (Ptr (Handle Triangulation))
rawNew (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
nNodes) (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
nTriangles) (Bool -> CBool
boolToCBool Bool
hasUVNodes) (Bool -> CBool
boolToCBool Bool
hasNormals)) Ptr (Handle Triangulation) -> IO ()
deleteHandleTriangulation

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_nbNodes" rawNbNodes :: Ptr (Handle Triangulation) -> IO CInt

nbNodes :: Ptr (Handle Triangulation) -> IO Int
nbNodes :: Ptr (Handle Triangulation) -> IO Int
nbNodes Ptr (Handle Triangulation)
tri = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (Handle Triangulation) -> IO CInt
rawNbNodes Ptr (Handle Triangulation)
tri

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_nbTriangles" rawNbTriangles :: Ptr (Handle Triangulation) -> IO CInt

nbTriangles :: Ptr (Handle Triangulation) -> IO Int
nbTriangles :: Ptr (Handle Triangulation) -> IO Int
nbTriangles Ptr (Handle Triangulation)
tri = CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> Int) -> IO CInt -> IO Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (Handle Triangulation) -> IO CInt
rawNbTriangles Ptr (Handle Triangulation)
tri

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_node" rawNode :: Ptr (Handle Triangulation) -> CInt -> IO (Ptr GP.Pnt)

node :: Ptr (Handle Triangulation) -> Int -> Acquire (Ptr GP.Pnt)
node :: Ptr (Handle Triangulation) -> Int -> Acquire (Ptr Pnt)
node Ptr (Handle Triangulation)
tri Int
index = IO (Ptr Pnt) -> (Ptr Pnt -> IO ()) -> Acquire (Ptr Pnt)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Triangulation) -> CInt -> IO (Ptr Pnt)
rawNode Ptr (Handle Triangulation)
tri (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index)) Ptr Pnt -> IO ()
deletePnt

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_setNode" rawSetNode :: Ptr (Handle Triangulation) -> CInt -> Ptr GP.Pnt -> IO()

setNode :: Ptr (Handle Triangulation) -> Int -> Ptr GP.Pnt -> IO ()
setNode :: Ptr (Handle Triangulation) -> Int -> Ptr Pnt -> IO ()
setNode Ptr (Handle Triangulation)
tri Int
index Ptr Pnt
pnt = Ptr (Handle Triangulation) -> CInt -> Ptr Pnt -> IO ()
rawSetNode Ptr (Handle Triangulation)
tri (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index) Ptr Pnt
pnt

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_triangle" rawTriangle :: Ptr (Handle Triangulation) -> CInt -> IO (Ptr Triangle)

triangle :: Ptr (Handle Triangulation) -> Int -> Acquire (Ptr Triangle)
triangle :: Ptr (Handle Triangulation) -> Int -> Acquire (Ptr Triangle)
triangle Ptr (Handle Triangulation)
tri Int
index = IO (Ptr Triangle)
-> (Ptr Triangle -> IO ()) -> Acquire (Ptr Triangle)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Triangulation) -> CInt -> IO (Ptr Triangle)
rawTriangle Ptr (Handle Triangulation)
tri (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index)) Ptr Triangle -> IO ()
deleteTriangle

foreign import capi unsafe "hs_Poly_Triangulation.h hs_Poly_Triangulation_setTriangle" rawSetTriangle :: Ptr (Handle Triangulation) -> CInt -> Ptr Triangle -> IO ()

setTriangle :: Ptr (Handle Triangulation) -> Int -> Ptr Triangle -> IO ()
setTriangle :: Ptr (Handle Triangulation) -> Int -> Ptr Triangle -> IO ()
setTriangle Ptr (Handle Triangulation)
tri Int
index Ptr Triangle
theTriangle = Ptr (Handle Triangulation) -> CInt -> Ptr Triangle -> IO ()
rawSetTriangle Ptr (Handle Triangulation)
tri (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
index) Ptr Triangle
theTriangle