{-# LINE 1 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

{-# LINE 2 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

{-# LINE 3 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

-- | <http://gts.sourceforge.net/reference/gts-surfaces.html>

module Bindings.Gts.GeometricalObjectHierarchy.Surfaces where
import Bindings.GLib
import Bindings.Gts.Types
import Foreign.Ptr (Ptr,FunPtr,plusPtr)
import Foreign.Ptr (wordPtrToPtr,castPtrToFunPtr)
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String (CString,CStringLen,CWString,CWStringLen)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Marshal.Array (peekArray,pokeArray)
import Data.Int
import Data.Word

{-# LINE 10 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

foreign import ccall "inline_GTS_SURFACE_CLASS" c'GTS_SURFACE_CLASS
  :: Ptr a -> Ptr C'GtsSurfaceClass

{-# LINE 12 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "inline_GTS_SURFACE" c'GTS_SURFACE
  :: Ptr a -> Ptr C'GtsSurface

{-# LINE 13 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "inline_GTS_IS_SURFACE" c'GTS_IS_SURFACE
  :: Ptr a -> Ptr C'gboolean

{-# LINE 14 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

foreign import ccall "gts_surface_class" c'gts_surface_class
  :: IO (Ptr C'GtsSurfaceClass)
foreign import ccall "&gts_surface_class" p'gts_surface_class
  :: FunPtr (IO (Ptr C'GtsSurfaceClass))

{-# LINE 16 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_new" c'gts_surface_new
  :: Ptr C'GtsSurfaceClass -> Ptr C'GtsFaceClass -> Ptr C'GtsEdgeClass -> Ptr C'GtsVertexClass -> IO (Ptr C'GtsSurface)
foreign import ccall "&gts_surface_new" p'gts_surface_new
  :: FunPtr (Ptr C'GtsSurfaceClass -> Ptr C'GtsFaceClass -> Ptr C'GtsEdgeClass -> Ptr C'GtsVertexClass -> IO (Ptr C'GtsSurface))

{-# LINE 17 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_add_face" c'gts_surface_add_face
  :: Ptr C'GtsSurface -> Ptr C'GtsFace -> IO ()
foreign import ccall "&gts_surface_add_face" p'gts_surface_add_face
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsFace -> IO ())

{-# LINE 18 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_remove_face" c'gts_surface_remove_face
  :: Ptr C'GtsSurface -> Ptr C'GtsFace -> IO ()
foreign import ccall "&gts_surface_remove_face" p'gts_surface_remove_face
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsFace -> IO ())

{-# LINE 19 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_copy" c'gts_surface_copy
  :: Ptr C'GtsSurface -> Ptr C'GtsSurface -> IO (Ptr C'GtsSurface)
foreign import ccall "&gts_surface_copy" p'gts_surface_copy
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsSurface -> IO (Ptr C'GtsSurface))

{-# LINE 20 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_merge" c'gts_surface_merge
  :: Ptr C'GtsSurface -> Ptr C'GtsSurface -> IO ()
foreign import ccall "&gts_surface_merge" p'gts_surface_merge
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsSurface -> IO ())

{-# LINE 21 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_read" c'gts_surface_read
  :: Ptr C'GtsSurface -> Ptr C'GtsFile -> IO C'guint
foreign import ccall "&gts_surface_read" p'gts_surface_read
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsFile -> IO C'guint)

{-# LINE 22 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_is_manifold" c'gts_surface_is_manifold
  :: Ptr C'GtsSurface -> IO C'gboolean
foreign import ccall "&gts_surface_is_manifold" p'gts_surface_is_manifold
  :: FunPtr (Ptr C'GtsSurface -> IO C'gboolean)

{-# LINE 23 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_is_orientable" c'gts_surface_is_orientable
  :: Ptr C'GtsSurface -> IO C'gboolean
foreign import ccall "&gts_surface_is_orientable" p'gts_surface_is_orientable
  :: FunPtr (Ptr C'GtsSurface -> IO C'gboolean)

{-# LINE 24 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_is_closed" c'gts_surface_is_closed
  :: Ptr C'GtsSurface -> IO C'gboolean
foreign import ccall "&gts_surface_is_closed" p'gts_surface_is_closed
  :: FunPtr (Ptr C'GtsSurface -> IO C'gboolean)

{-# LINE 25 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_vertex_number" c'gts_surface_vertex_number
  :: Ptr C'GtsSurface -> IO C'guint
foreign import ccall "&gts_surface_vertex_number" p'gts_surface_vertex_number
  :: FunPtr (Ptr C'GtsSurface -> IO C'guint)

{-# LINE 26 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_edge_number" c'gts_surface_edge_number
  :: Ptr C'GtsSurface -> IO C'guint
foreign import ccall "&gts_surface_edge_number" p'gts_surface_edge_number
  :: FunPtr (Ptr C'GtsSurface -> IO C'guint)

{-# LINE 27 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_face_number" c'gts_surface_face_number
  :: Ptr C'GtsSurface -> IO C'guint
foreign import ccall "&gts_surface_face_number" p'gts_surface_face_number
  :: FunPtr (Ptr C'GtsSurface -> IO C'guint)

{-# LINE 28 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_boundary" c'gts_surface_boundary
  :: Ptr C'GtsSurface -> IO (Ptr C'GSList)
foreign import ccall "&gts_surface_boundary" p'gts_surface_boundary
  :: FunPtr (Ptr C'GtsSurface -> IO (Ptr C'GSList))

{-# LINE 29 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_area" c'gts_surface_area
  :: Ptr C'GtsSurface -> IO C'gdouble
foreign import ccall "&gts_surface_area" p'gts_surface_area
  :: FunPtr (Ptr C'GtsSurface -> IO C'gdouble)

{-# LINE 30 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_volume" c'gts_surface_volume
  :: Ptr C'GtsSurface -> IO C'gdouble
foreign import ccall "&gts_surface_volume" p'gts_surface_volume
  :: FunPtr (Ptr C'GtsSurface -> IO C'gdouble)

{-# LINE 31 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_center_of_mass" c'gts_surface_center_of_mass
  :: Ptr C'GtsSurface -> C'GtsVector -> IO C'gdouble
foreign import ccall "&gts_surface_center_of_mass" p'gts_surface_center_of_mass
  :: FunPtr (Ptr C'GtsSurface -> C'GtsVector -> IO C'gdouble)

{-# LINE 32 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_center_of_area" c'gts_surface_center_of_area
  :: Ptr C'GtsSurface -> C'GtsVector -> IO C'gdouble
foreign import ccall "&gts_surface_center_of_area" p'gts_surface_center_of_area
  :: FunPtr (Ptr C'GtsSurface -> C'GtsVector -> IO C'gdouble)

{-# LINE 33 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

foreign import ccall "gts_surface_stats" c'gts_surface_stats
  :: Ptr C'GtsSurface -> Ptr C'GtsSurfaceStats -> IO ()
foreign import ccall "&gts_surface_stats" p'gts_surface_stats
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsSurfaceStats -> IO ())

{-# LINE 35 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_quality_stats" c'gts_surface_quality_stats
  :: Ptr C'GtsSurface -> Ptr C'GtsSurfaceQualityStats -> IO ()
foreign import ccall "&gts_surface_quality_stats" p'gts_surface_quality_stats
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsSurfaceQualityStats -> IO ())

{-# LINE 36 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_print_stats" c'gts_surface_print_stats
  :: Ptr C'GtsSurface -> Ptr CFile -> IO ()
foreign import ccall "&gts_surface_print_stats" p'gts_surface_print_stats
  :: FunPtr (Ptr C'GtsSurface -> Ptr CFile -> IO ())

{-# LINE 37 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_write" c'gts_surface_write
  :: Ptr C'GtsSurface -> Ptr CFile -> IO ()
foreign import ccall "&gts_surface_write" p'gts_surface_write
  :: FunPtr (Ptr C'GtsSurface -> Ptr CFile -> IO ())

{-# LINE 38 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_write_oogl" c'gts_surface_write_oogl
  :: Ptr C'GtsSurface -> Ptr CFile -> IO ()
foreign import ccall "&gts_surface_write_oogl" p'gts_surface_write_oogl
  :: FunPtr (Ptr C'GtsSurface -> Ptr CFile -> IO ())

{-# LINE 39 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_write_oogl_boundary" c'gts_surface_write_oogl_boundary
  :: Ptr C'GtsSurface -> Ptr CFile -> IO ()
foreign import ccall "&gts_surface_write_oogl_boundary" p'gts_surface_write_oogl_boundary
  :: FunPtr (Ptr C'GtsSurface -> Ptr CFile -> IO ())

{-# LINE 40 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_write_vtk" c'gts_surface_write_vtk
  :: Ptr C'GtsSurface -> Ptr CFile -> IO ()
foreign import ccall "&gts_surface_write_vtk" p'gts_surface_write_vtk
  :: FunPtr (Ptr C'GtsSurface -> Ptr CFile -> IO ())

{-# LINE 41 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

foreign import ccall "gts_surface_foreach_vertex" c'gts_surface_foreach_vertex
  :: Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_surface_foreach_vertex" p'gts_surface_foreach_vertex
  :: FunPtr (Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 43 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_foreach_edge" c'gts_surface_foreach_edge
  :: Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_surface_foreach_edge" p'gts_surface_foreach_edge
  :: FunPtr (Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 44 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_foreach_face" c'gts_surface_foreach_face
  :: Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_surface_foreach_face" p'gts_surface_foreach_face
  :: FunPtr (Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO ())

{-# LINE 45 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_foreach_face_remove" c'gts_surface_foreach_face_remove
  :: Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO C'guint
foreign import ccall "&gts_surface_foreach_face_remove" p'gts_surface_foreach_face_remove
  :: FunPtr (Ptr C'GtsSurface -> C'GtsFunc -> C'gpointer -> IO C'guint)

{-# LINE 46 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_foreach_intersecting_face" c'gts_surface_foreach_intersecting_face
  :: Ptr C'GtsSurface -> C'GtsBBTreeTraverseFunc -> C'gpointer -> IO C'gboolean
foreign import ccall "&gts_surface_foreach_intersecting_face" p'gts_surface_foreach_intersecting_face
  :: FunPtr (Ptr C'GtsSurface -> C'GtsBBTreeTraverseFunc -> C'gpointer -> IO C'gboolean)

{-# LINE 47 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}

foreign import ccall "gts_surface_traverse_new" c'gts_surface_traverse_new
  :: Ptr C'GtsSurface -> Ptr C'GtsFace -> IO (Ptr C'GtsSurfaceTraverse)
foreign import ccall "&gts_surface_traverse_new" p'gts_surface_traverse_new
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsFace -> IO (Ptr C'GtsSurfaceTraverse))

{-# LINE 49 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_traverse_next" c'gts_surface_traverse_next
  :: Ptr C'GtsSurfaceTraverse -> Ptr C'guint -> IO (Ptr C'GtsFace)
foreign import ccall "&gts_surface_traverse_next" p'gts_surface_traverse_next
  :: FunPtr (Ptr C'GtsSurfaceTraverse -> Ptr C'guint -> IO (Ptr C'GtsFace))

{-# LINE 50 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_traverse_destroy" c'gts_surface_traverse_destroy
  :: Ptr C'GtsSurfaceTraverse -> IO ()
foreign import ccall "&gts_surface_traverse_destroy" p'gts_surface_traverse_destroy
  :: FunPtr (Ptr C'GtsSurfaceTraverse -> IO ())

{-# LINE 51 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_distance" c'gts_surface_distance
  :: Ptr C'GtsSurface -> Ptr C'GtsSurface -> C'gdouble -> Ptr C'GtsRange -> Ptr C'GtsRange -> IO ()
foreign import ccall "&gts_surface_distance" p'gts_surface_distance
  :: FunPtr (Ptr C'GtsSurface -> Ptr C'GtsSurface -> C'gdouble -> Ptr C'GtsRange -> Ptr C'GtsRange -> IO ())

{-# LINE 52 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_strip" c'gts_surface_strip
  :: Ptr C'GtsSurface -> IO (Ptr C'GSList)
foreign import ccall "&gts_surface_strip" p'gts_surface_strip
  :: FunPtr (Ptr C'GtsSurface -> IO (Ptr C'GSList))

{-# LINE 53 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_tessellate" c'gts_surface_tessellate
  :: Ptr C'GtsSurface -> C'GtsRefineFunc -> C'gpointer -> IO ()
foreign import ccall "&gts_surface_tessellate" p'gts_surface_tessellate
  :: FunPtr (Ptr C'GtsSurface -> C'GtsRefineFunc -> C'gpointer -> IO ())

{-# LINE 54 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_generate_sphere" c'gts_surface_generate_sphere
  :: Ptr C'GtsSurface -> C'guint -> IO (Ptr C'GtsSurface)
foreign import ccall "&gts_surface_generate_sphere" p'gts_surface_generate_sphere
  :: FunPtr (Ptr C'GtsSurface -> C'guint -> IO (Ptr C'GtsSurface))

{-# LINE 55 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}
foreign import ccall "gts_surface_split" c'gts_surface_split
  :: Ptr C'GtsSurface -> IO (Ptr C'GSList)
foreign import ccall "&gts_surface_split" p'gts_surface_split
  :: FunPtr (Ptr C'GtsSurface -> IO (Ptr C'GSList))

{-# LINE 56 "src/Bindings/Gts/GeometricalObjectHierarchy/Surfaces.hsc" #-}