{-# LANGUAGE CApiFFI #-}
module OpenCascade.BRepBuilderAPI.MakeFace 
( MakeFace
, new
, face
, fromFace
, fromSurface
, fromSurfaceAndBounds
, fromSurfaceAndWire
, fromWire
, add
, isDone
, error
) where

import Prelude hiding (error)
import OpenCascade.BRepBuilderAPI.Types
import OpenCascade.BRepBuilderAPI.Internal.Destructors
import OpenCascade.Handle
import OpenCascade.Internal.Bool
import qualified OpenCascade.TopoDS as TopoDS
import OpenCascade.TopoDS.Internal.Destructors (deleteShape)
import OpenCascade.Inheritance (upcast)
import qualified OpenCascade.Geom as Geom
import OpenCascade.BRepBuilderAPI.FaceError (FaceError)
import Foreign.C
import Foreign.Ptr
import Data.Acquire 

-- new

foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace" rawNew :: IO (Ptr MakeFace)

new :: Acquire (Ptr MakeFace)
new :: Acquire (Ptr MakeFace)
new = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire IO (Ptr MakeFace)
rawNew Ptr MakeFace -> IO ()
deleteMakeFace

-- fromFace

foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace_fromFace" rawFromFace :: Ptr TopoDS.Face ->  IO (Ptr MakeFace)

fromFace :: Ptr TopoDS.Face -> Acquire (Ptr MakeFace)
fromFace :: Ptr Face -> Acquire (Ptr MakeFace)
fromFace Ptr Face
theFace = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Face -> IO (Ptr MakeFace)
rawFromFace Ptr Face
theFace) Ptr MakeFace -> IO ()
deleteMakeFace

-- fromSurface

foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace_fromSurface" rawFromSurface :: Ptr (Handle (Geom.Surface)) -> CDouble -> IO (Ptr MakeFace)

fromSurface :: Ptr (Handle Geom.Surface) -> Double -> Acquire (Ptr MakeFace)
fromSurface :: Ptr (Handle Surface) -> Double -> Acquire (Ptr MakeFace)
fromSurface Ptr (Handle Surface)
surf Double
tolerance = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Surface) -> CDouble -> IO (Ptr MakeFace)
rawFromSurface Ptr (Handle Surface)
surf (Double -> CDouble
CDouble Double
tolerance)) Ptr MakeFace -> IO ()
deleteMakeFace

-- fromSurfaceAndBounds

foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace_fromSurfaceAndBounds" rawFromSurfaceAndBounds :: Ptr (Handle (Geom.Surface)) -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr MakeFace)

fromSurfaceAndBounds :: Ptr (Handle Geom.Surface) -> Double -> Double -> Double -> Double -> Double -> Acquire (Ptr MakeFace)
fromSurfaceAndBounds :: Ptr (Handle Surface)
-> Double
-> Double
-> Double
-> Double
-> Double
-> Acquire (Ptr MakeFace)
fromSurfaceAndBounds Ptr (Handle Surface)
surf Double
uMin Double
uMax Double
vMin Double
vMax Double
tolerance = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Surface)
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO (Ptr MakeFace)
rawFromSurfaceAndBounds Ptr (Handle Surface)
surf (Double -> CDouble
CDouble Double
uMin) (Double -> CDouble
CDouble Double
uMax) (Double -> CDouble
CDouble Double
vMin) (Double -> CDouble
CDouble Double
vMax) (Double -> CDouble
CDouble Double
tolerance)) Ptr MakeFace -> IO ()
deleteMakeFace

-- fromSurfaceAndWire
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace_fromSurfaceAndWire" rawFromSurfaceAndWire :: Ptr (Handle (Geom.Surface)) -> Ptr TopoDS.Wire -> CBool -> IO (Ptr MakeFace)

fromSurfaceAndWire :: Ptr (Handle Geom.Surface) -> Ptr TopoDS.Wire -> Bool -> Acquire (Ptr MakeFace)
fromSurfaceAndWire :: Ptr (Handle Surface) -> Ptr Wire -> Bool -> Acquire (Ptr MakeFace)
fromSurfaceAndWire Ptr (Handle Surface)
surf Ptr Wire
wire Bool
inside = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr (Handle Surface) -> Ptr Wire -> CBool -> IO (Ptr MakeFace)
rawFromSurfaceAndWire Ptr (Handle Surface)
surf Ptr Wire
wire (Bool -> CBool
boolToCBool Bool
inside)) Ptr MakeFace -> IO ()
deleteMakeFace

-- fromWire

foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_new_BRepBuilderAPI_MakeFace_fromWire" rawFromWire :: Ptr TopoDS.Wire -> CBool ->  IO (Ptr MakeFace)

fromWire :: Ptr TopoDS.Wire -> Bool -> Acquire (Ptr MakeFace)
fromWire :: Ptr Wire -> Bool -> Acquire (Ptr MakeFace)
fromWire Ptr Wire
wire Bool
onlyPlane = IO (Ptr MakeFace)
-> (Ptr MakeFace -> IO ()) -> Acquire (Ptr MakeFace)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr Wire -> CBool -> IO (Ptr MakeFace)
rawFromWire Ptr Wire
wire (Bool -> CBool
boolToCBool Bool
onlyPlane)) Ptr MakeFace -> IO ()
deleteMakeFace

-- add 
foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_BRepBuilderAPI_MakeFace_Add" add :: Ptr MakeFace -> Ptr TopoDS.Wire -> IO ()

-- isDone
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_BRepBuilderAPI_MakeFace_IsDone" rawIsDone :: Ptr MakeFace -> IO (CBool)

isDone :: Ptr MakeFace -> IO Bool
isDone :: Ptr MakeFace -> IO Bool
isDone Ptr MakeFace
p = CBool -> Bool
cBoolToBool (CBool -> Bool) -> IO CBool -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr MakeFace -> IO CBool
rawIsDone Ptr MakeFace
p

-- error
--
foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_BRepBuilderAPI_MakeFace_Error" rawError :: Ptr MakeFace -> IO (CInt)

error :: Ptr MakeFace -> IO FaceError 
error :: Ptr MakeFace -> IO FaceError
error Ptr MakeFace
p = Int -> FaceError
forall a. Enum a => Int -> a
toEnum (Int -> FaceError) -> (CInt -> Int) -> CInt -> FaceError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (CInt -> FaceError) -> IO CInt -> IO FaceError
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr MakeFace -> IO CInt
rawError Ptr MakeFace
p


foreign import capi unsafe "hs_BRepBuilderAPI_MakeFace.h hs_BRepBuilderAPI_MakeFace_Face" rawFace :: Ptr MakeFace ->  IO (Ptr TopoDS.Face)

face :: Ptr MakeFace -> Acquire (Ptr TopoDS.Face)
face :: Ptr MakeFace -> Acquire (Ptr Face)
face Ptr MakeFace
builder = IO (Ptr Face) -> (Ptr Face -> IO ()) -> Acquire (Ptr Face)
forall a. IO a -> (a -> IO ()) -> Acquire a
mkAcquire (Ptr MakeFace -> IO (Ptr Face)
rawFace Ptr MakeFace
builder) (Ptr Shape -> IO ()
deleteShape (Ptr Shape -> IO ())
-> (Ptr Face -> Ptr Shape) -> Ptr Face -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr Face -> Ptr Shape
forall a b. SubTypeOf a b => Ptr b -> Ptr a
upcast)