]> gitweb.michael.orlitzky.com - spline3.git/blobdiff - src/Values.hs
Bump dependencies, and move some Arbitrary code from Values.hs to Grid.hs to avoid...
[spline3.git] / src / Values.hs
index 10d7fb90c4752e873bba501e49c5382c034ebdee..7fc577529f9ccdd2ce0fe1fc85cf14d8744e1e21 100644 (file)
@@ -1,24 +1,61 @@
-module Values
+{-# LANGUAGE FlexibleInstances #-}
+
+module Values (
+  Values,
+  Values2D,
+  Values3D,
+  dims,
+  empty3d,
+  idx,
+  zoom_shape
+  )
 where
 
 import Data.Array.Repa (
-  Array,
-  DIM1,
+  Array, U,
+  Z(..),
+  (:.)(..),
+  DIM2,
   DIM3,
-  reshape,
+  extent,
+  fromListUnboxed,
+  unsafeIndex,
   )
 
-import Data.Array.Repa.IO.Vector (readVectorFromTextFile)
 import System.FilePath ()
 
+import ScaleFactor (ScaleFactor)
+
+
+type Values sh = Array U sh Double
+type Values2D  = Values DIM2
+type Values3D  = Values DIM3
+
+
+empty3d :: Values3D
+empty3d = Data.Array.Repa.fromListUnboxed (Z :. 0 :. 0 :. 0) []
+
+
+dims :: Values3D -> (Int, Int, Int)
+dims v3d =
+    let (Z :. x :. y :. z) = extent v3d
+    in
+      (x,y,z)
+
 
-type Values1D = Array DIM1 Double
-type Values3D = Array DIM3 Double
+idx :: Values3D -> Int -> Int -> Int -> Double
+idx v3d i j k =
+    unsafeIndex v3d shape
+    where
+      shape :: DIM3
+      shape = (Z :. i :. j :. k)
 
-read_values_1d :: FilePath -> IO Values1D
-read_values_1d path = readVectorFromTextFile path
 
-read_values_3d :: DIM3 -> FilePath -> IO Values3D
-read_values_3d sh path = do
-  one_d <- read_values_1d path
-  return $ reshape sh one_d
+zoom_shape :: ScaleFactor -> DIM3 -> DIM3
+zoom_shape (sfx, sfy, sfz) sh =
+    let (Z :. x :. y :. z) = sh
+        x' = x * sfx
+        y' = y * sfy
+        z' = z * sfz
+    in
+      (Z :. x' :. y' :. z')