{
switch(inside) {
case MSURF_GREATER:
- msurf_disable(ms, MSURF_FLIP);
+ msurf_enable(ms, MSURF_FLIP);
break;
case MSURF_LESS:
- msurf_enable(ms, MSURF_FLIP);
+ msurf_disable(ms, MSURF_FLIP);
break;
default:
slice_size = ms->res[0] * ms->res[1];
cellptr = ms->voxels + slice_size * zcell + ms->res[0] * ycell + xcell;
- 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])];
+ }
code = mc_bitcode(val, ms->thres);
if(ms->flags & MSURF_FLIP) {
/* calculate normals at the 8 corners */
for(i=0; i<8; i++) {
- float *ptr = cellptr + offs[i][2] * slice_size + offs[i][1] * ms->res[0] + offs[i][0];
+ float *ptr = cellptr + GRIDOFFS(offs[i][0], offs[i][1], offs[i][2]);
if(xcell < ms->res[0] - 1) {
- dfdx[i] = *(ptr + 1) - *ptr;
+ dfdx[i] = ptr[GRIDOFFS(1, 0, 0)] - *ptr;
} else {
- dfdx[i] = *ptr - *(ptr - 1);
+ dfdx[i] = *ptr - ptr[GRIDOFFS(-1, 0, 0)];
}
if(ycell < ms->res[1] - 1) {
- dfdy[i] = *(ptr + ms->res[0]) - *ptr;
+ dfdy[i] = ptr[GRIDOFFS(0, 1, 0)] - *ptr;
} else {
- dfdy[i] = *ptr - *(ptr - ms->res[0]);
+ dfdy[i] = *ptr - ptr[GRIDOFFS(0, -1, 0)];
}
if(zcell < ms->res[2] - 1) {
- dfdz[i] = *(ptr + slice_size) - *ptr;
+ dfdz[i] = ptr[GRIDOFFS(0, 0, 1)] - *ptr;
} else {
- dfdz[i] = *ptr - *(ptr - slice_size);
+ dfdz[i] = *ptr - ptr[GRIDOFFS(0, 0, -1)];
}
}