changeset 977:af4ed077889f

check_in_all
author david <david>
date Mon, 15 Jan 1996 17:37:54 +0000
parents 2239c8884db6
children c9f0a10621a3
files volume_io/Volumes/evaluate.c
diffstat 1 files changed, 24 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/volume_io/Volumes/evaluate.c
+++ b/volume_io/Volumes/evaluate.c
@@ -15,7 +15,7 @@
 #include  <internal_volume_io.h>
 
 #ifndef lint
-static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/evaluate.c,v 1.27 1996-01-12 19:23:18 david Exp $";
+static char rcsid[] = "$Header: /private-cvsroot/minc/volume_io/Volumes/evaluate.c,v 1.28 1996-01-15 17:37:54 david Exp $";
 #endif
 
 /* ----------------------------- MNI Header -----------------------------------
@@ -243,7 +243,7 @@
     Real   coefs[2][2][2];
     Real   c000, c001, c010, c011, c100, c101, c110, c111;
     Real   du00, du01, du10, du11, c00, c01, c10, c11, c0, c1, du0, du1;
-    Real   dv0, dv1, dw;
+    Real   dv0, dv1, dw, scale_factor;
 
     get_volume_sizes( volume, sizes );
 
@@ -259,14 +259,14 @@
         j = (int) y;
         k = (int) z;
 
-        GET_VALUE_3D( c000, volume, i  , j  , k );
-        GET_VALUE_3D( c001, volume, i  , j  , k+1 );
-        GET_VALUE_3D( c010, volume, i  , j+1, k );
-        GET_VALUE_3D( c011, volume, i  , j+1, k+1 );
-        GET_VALUE_3D( c100, volume, i+1, j  , k );
-        GET_VALUE_3D( c101, volume, i+1, j  , k+1 );
-        GET_VALUE_3D( c110, volume, i+1, j+1, k );
-        GET_VALUE_3D( c111, volume, i+1, j+1, k+1 );
+        GET_VOXEL_3D( c000, volume, i  , j  , k );
+        GET_VOXEL_3D( c001, volume, i  , j  , k+1 );
+        GET_VOXEL_3D( c010, volume, i  , j+1, k );
+        GET_VOXEL_3D( c011, volume, i  , j+1, k+1 );
+        GET_VOXEL_3D( c100, volume, i+1, j  , k );
+        GET_VOXEL_3D( c101, volume, i+1, j  , k+1 );
+        GET_VOXEL_3D( c110, volume, i+1, j+1, k );
+        GET_VOXEL_3D( c111, volume, i+1, j+1, k+1 );
     }
     else
     {
@@ -274,6 +274,8 @@
         j = FLOOR( y );
         k = FLOOR( z );
 
+        outside_value = convert_value_to_voxel( volume, outside_value );
+
         for_less( dx, 0, 2 )
         for_less( dy, 0, 2 )
         for_less( dz, 0, 2 )
@@ -282,7 +284,7 @@
                 j + dy >= 0 && j + dy < sizes[1] &&
                 k + dz >= 0 && k + dz < sizes[2] )
             {
-                GET_VALUE_3D( coefs[dx][dy][dz], volume, i+dx, j+dy, k+dz );
+                GET_VOXEL_3D( coefs[dx][dy][dz], volume, i+dx, j+dy, k+dz );
             }
             else
                 coefs[dx][dy][dz] = outside_value;
@@ -333,12 +335,19 @@
     /*--- if the value is desired, interpolate in 1D to get the value */
 
     if( value != NULL )
-        *value = c0 + w * dw;
+    {
+        *value = convert_voxel_to_value( volume, c0 + w * dw );
+    }
 
     /*--- if the derivatives are desired, compute them */
 
     if( derivs != NULL )
     {
+        if( volume->real_range_set )
+            scale_factor = volume->real_value_scale;
+        else
+            scale_factor = 1.0;
+
         /*--- reduce the 2D u derivs to 1D */
 
         du0 = INTERPOLATE( v, du00, du10 );
@@ -346,9 +355,9 @@
 
         /*--- interpolate the 1D problems in w, or for Z deriv, just use dw */
 
-        derivs[X] = INTERPOLATE( w, du0, du1 );
-        derivs[Y] = INTERPOLATE( w, dv0, dv1 );
-        derivs[Z] = dw;
+        derivs[X] = scale_factor * INTERPOLATE( w, du0, du1 );
+        derivs[Y] = scale_factor * INTERPOLATE( w, dv0, dv1 );
+        derivs[Z] = scale_factor * dw;
     }
 }