- val[0] = *cellptr;
- val[1] = *(cellptr + 1);
- val[2] = *(cellptr + 1 + ms->res[0]);
- val[3] = *(cellptr + ms->res[0]);
- cellptr += slice_size;
- val[4] = *cellptr;
- val[5] = *(cellptr + 1);
- val[6] = *(cellptr + 1 + ms->res[0]);
- val[7] = *(cellptr + ms->res[0]);
- cellptr -= slice_size;
+#define GRIDOFFS(x, y, z) ((z) * slice_size + (y) * ms->res[0] + (x))
+
+ for(i=0; i<8; i++) {
+ val[i] = cellptr[GRIDOFFS(offs[i][0], offs[i][1], offs[i][2])];
+ }