{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepBuilderAPI.MakeVertex
( MakeVertex
, fromPnt
, vertex
) where

import OpenCascade.BRepBuilderAPI.Types (MakeVertex)
import OpenCascade.BRepBuilderAPI.Internal.Destructors (deleteMakeVertex)
import qualified OpenCascade.GP as GP
import qualified OpenCascade.TopoDS as TopoDS
import qualified OpenCascade.TopoDS.Internal.Destructors as TopoDS.Destructors
import Foreign.Ptr (Ptr)
import Data.Acquire (Acquire, mkAcquire)
import OpenCascade.Inheritance (upcast)

foreign import capi unsafe "hs_BRepBuilderAPI_MakeVertex.h hs_new_BRepBuilderAPI_MakeVertex_fromPnt" rawFromPnt :: Ptr GP.Pnt -> IO (Ptr MakeVertex)

fromPnt :: Ptr GP.Pnt -> Acquire (Ptr MakeVertex)
fromPnt :: Ptr Pnt -> Acquire (Ptr MakeVertex)
fromPnt Ptr Pnt
pnt = IO (Ptr MakeVertex)
-> (Ptr MakeVertex -> IO ()) -> Acquire (Ptr MakeVertex)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Pnt -> IO (Ptr MakeVertex)
rawFromPnt Ptr Pnt
pnt) (Ptr MakeVertex -> IO ()
deleteMakeVertex)


foreign import capi unsafe "hs_BRepBuilderAPI_MakeVertex.h hs_BRepBuilderAPI_MakeVertex_vertex" rawVertex :: Ptr MakeVertex -> IO (Ptr TopoDS.Vertex)

vertex :: Ptr MakeVertex -> Acquire (Ptr TopoDS.Vertex)
vertex :: Ptr MakeVertex -> Acquire (Ptr Vertex)
vertex Ptr MakeVertex
builder = IO (Ptr Vertex) -> (Ptr Vertex -> IO ()) -> Acquire (Ptr Vertex)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeVertex -> IO (Ptr Vertex)
rawVertex Ptr MakeVertex
builder) (Ptr Shape -> IO ()
TopoDS.Destructors.deleteShape (Ptr Shape -> IO ())
-> (Ptr Vertex -> Ptr Shape) -> Ptr Vertex -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr Vertex -> Ptr Shape
forall a b. SubTypeOf a b => Ptr b -> Ptr a
upcast)