module Waterfall.Internal.FromOpenCascade
( gpPntToV3
, gpVecToV3
, gpXYZToV3
) where

import qualified OpenCascade.GP.Pnt as GP.Pnt
import qualified OpenCascade.GP.Vec as GP.Vec
import qualified OpenCascade.GP.XYZ as GP.XYZ
import qualified OpenCascade.GP as GP
import Linear (V3 (..))
import Foreign.Ptr
    
gpPntToV3 :: Ptr GP.Pnt -> IO (V3 Double)
gpPntToV3 :: Ptr Pnt -> IO (V3 Double)
gpPntToV3 Ptr Pnt
pnt = Double -> Double -> Double -> V3 Double
forall a. a -> a -> a -> V3 a
V3 (Double -> Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> Double -> V3 Double)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Pnt -> IO Double
GP.Pnt.getX Ptr Pnt
pnt IO (Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Pnt -> IO Double
GP.Pnt.getY Ptr Pnt
pnt IO (Double -> V3 Double) -> IO Double -> IO (V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Pnt -> IO Double
GP.Pnt.getZ Ptr Pnt
pnt

gpVecToV3 :: Ptr GP.Vec -> IO (V3 Double)
gpVecToV3 :: Ptr Vec -> IO (V3 Double)
gpVecToV3 Ptr Vec
vec = Double -> Double -> Double -> V3 Double
forall a. a -> a -> a -> V3 a
V3 (Double -> Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> Double -> V3 Double)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr Vec -> IO Double
GP.Vec.getX Ptr Vec
vec IO (Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Vec -> IO Double
GP.Vec.getY Ptr Vec
vec IO (Double -> V3 Double) -> IO Double -> IO (V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr Vec -> IO Double
GP.Vec.getZ Ptr Vec
vec

gpXYZToV3 :: Ptr GP.XYZ -> IO (V3 Double)
gpXYZToV3 :: Ptr XYZ -> IO (V3 Double)
gpXYZToV3 Ptr XYZ
xyz = Double -> Double -> Double -> V3 Double
forall a. a -> a -> a -> V3 a
V3 (Double -> Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> Double -> V3 Double)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr XYZ -> IO Double
GP.XYZ.x Ptr XYZ
xyz IO (Double -> Double -> V3 Double)
-> IO Double -> IO (Double -> V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr XYZ -> IO Double
GP.XYZ.y Ptr XYZ
xyz IO (Double -> V3 Double) -> IO Double -> IO (V3 Double)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr XYZ -> IO Double
GP.XYZ.z Ptr XYZ
xyz