/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
/*-----------------------------------------------------------------------*/
/* a Tmask shows which 1D lines through a 3D volume have nonzero entries */
/*-----------------------------------------------------------------------*/
void free_Tmask( Tmask * tm )
{
if( tm != NULL ){
free(tm->mask[0]) ; free(tm->mask[1]) ; free(tm->mask[2]) ; free(tm) ;
}
return ;
}
/*-----------------------------------------------------------------------*/
Tmask * create_Tmask_byte( int nx, int ny, int nz, byte * vol )
{
Tmask * tm ;
int ii,jj,kk,vv , nxy,nyz,nzx ;
byte * bz , *xym,*yzm,*zxm , *bxy,*byz,*bzx ;
tm = (Tmask *) malloc(sizeof(Tmask)) ;
tm->nmask[TM_IXY] = nxy = nx*ny ;
tm->nmask[TM_IYZ] = nyz = ny*nz ;
tm->nmask[TM_IZX] = nzx = nz*nx ;
tm->mask[TM_IXY] = xym = (byte *) calloc(1,sizeof(byte)*nxy) ;
tm->mask[TM_IYZ] = yzm = (byte *) calloc(1,sizeof(byte)*nyz) ;
tm->mask[TM_IZX] = zxm = (byte *) calloc(1,sizeof(byte)*nzx) ;
for( byz=yzm,kk=0 ; kk < nz ; kk++,byz+=ny ){
bz = vol + kk*nxy ;
for( bxy=xym,jj=0 ; jj < ny ; jj++,bz+=nx,bxy+=nx ){
for( bzx=zxm,ii=0 ; ii < nx ; ii++,bzx+=nz ){
if( bz[ii] ){ bxy[ii] = byz[jj] = bzx[kk] = 1 ; }
}
}
}
return tm ;
}
/*-----------------------------------------------------------------------*/
Tmask * create_Tmask_rgba( int nx, int ny, int nz, rgba * vol )
{
Tmask *tm ;
int ii,jj,kk,vv , nxy,nyz,nzx ;
byte *xym,*yzm,*zxm , *bxy,*byz,*bzx ;
rgba *bz ;
tm = (Tmask *) malloc(sizeof(Tmask)) ;
tm->nmask[TM_IXY] = nxy = nx*ny ;
tm->nmask[TM_IYZ] = nyz = ny*nz ;
tm->nmask[TM_IZX] = nzx = nz*nx ;
tm->mask[TM_IXY] = xym = (byte *) calloc(1,sizeof(byte)*nxy) ;
tm->mask[TM_IYZ] = yzm = (byte *) calloc(1,sizeof(byte)*nyz) ;
tm->mask[TM_IZX] = zxm = (byte *) calloc(1,sizeof(byte)*nzx) ;
for( byz=yzm,kk=0 ; kk < nz ; kk++,byz+=ny ){
bz = vol + kk*nxy ;
for( bxy=xym,jj=0 ; jj < ny ; jj++,bz+=nx,bxy+=nx ){
for( bzx=zxm,ii=0 ; ii < nx ; ii++,bzx+=nz ){
if( bz[ii].a ){ bxy[ii] = byz[jj] = bzx[kk] = 1 ; }
}
}
}
return tm ;
}
syntax highlighted by Code2HTML, v. 0.9.1