module TerraHS.TerraLib.TeGeometryAlgorithms
(
tedistance, telength, tearea, TeCentroid (..), setPrecision, tebufferregion
)
where
import Foreign
import Foreign.C.String
import qualified Foreign.Ptr (Ptr)
--locais
import TerraHS.Misc.Object
import TerraHS.TerraLib.TeGeometry
import TerraHS.TerraLib.TePoint
import TerraHS.TerraLib.TeLine2D
import TerraHS.TerraLib.TeCell
import TerraHS.TerraLib.TeBox
import TerraHS.TerraLib.TePolygon
class TeCentroid a where
tecentroid :: a -> TePoint
instance TeCentroid TePointSet where
tecentroid ps = unsafePerformIO ( ( TerraHS.Misc.Object.new ps ) >>= tepointset_tefindcentroid >>= fromPointer >>= return )
instance TeCentroid TeLineSet where
tecentroid ls = unsafePerformIO ( ( TerraHS.Misc.Object.new ls ) >>= telineset_tefindcentroid >>= fromPointer >>= return )
instance TeCentroid TePolygonSet where
tecentroid pols = unsafePerformIO ( ( TerraHS.Misc.Object.new pols ) >>= tepolygonset_tefindcentroid >>= fromPointer >>= return )
instance TeCentroid TePolygon where
tecentroid pols = unsafePerformIO ( ( TerraHS.Misc.Object.new pols ) >>= tepolygon_tefindcentroid >>= fromPointer >>= return )
tedistance pt1 pt2 = ( unsafePerformIO (applyf pt1 toTE pt2 toTE tepoint_tedistance))
where
toTE tx = TerraHS.Misc.Object.new tx
telength :: TeLine2D -> Double
telength l = ( unsafePerformIO (TerraHS.Misc.Object.new l >>= h_telength >>= return ))
tearea :: TePolygon -> Double
tearea p = ( unsafePerformIO (TerraHS.Misc.Object.new p >>= tegeometryarea >>= return ))
applyf ea fab ec fcd fbde = fab ea >>= \eb -> fcd ec >>= \ed -> fbde eb ed >>= return
tebufferregion :: TePolygon -> Double -> Int -> [TeGeometry]
tebufferregion pol distance npoints = unsafePerformIO (tebufferregion')
where
tebufferregion' = do
ptrpol <- (TerraHS.Misc.Object.new pol)
ptrpolset <- (h_tebufferregion ptrpol distance npoints)
(polset2geoset ptrpolset)
polset2geoset gs = size gs >>= (polygonset2geometryset gs 0)
foreign import stdcall unsafe "c_tepoint_tedistance" tepoint_tedistance :: TePointPtr -> TePointPtr -> Prelude.IO Double
foreign import stdcall unsafe "c_telength" h_telength :: TeLine2DPtr -> Prelude.IO Double
foreign import stdcall unsafe "c_tegeometryarea" tegeometryarea :: TePolygonPtr -> Prelude.IO Double
foreign import stdcall unsafe "c_tepointset_tefindcentroid" tepointset_tefindcentroid :: TePointSetPtr -> Prelude.IO TePointPtr
foreign import stdcall unsafe "c_tepolygonset_tefindcentroid" tepolygonset_tefindcentroid :: TePolygonSetPtr -> Prelude.IO TePointPtr
foreign import stdcall unsafe "c_telineset_tefindcentroid" telineset_tefindcentroid :: TeLineSetPtr -> Prelude.IO TePointPtr
foreign import stdcall unsafe "c_tepolygon_tefindcentroid" tepolygon_tefindcentroid :: TePolygonPtr -> Prelude.IO TePointPtr
foreign import stdcall unsafe "c_set_precision" setPrecision :: Double -> Prelude.IO ()
foreign import stdcall unsafe "c_tebufferregion" h_tebufferregion :: TePolygonPtr -> Double -> Int -> Prelude.IO TePolygonSetPtr