1 /*****************************************************************************
2 Major portions of this software are copyrighted by the Medical College
3 of Wisconsin, 1994-2000, and are released under the Gnu General Public
4 License, Version 2. See the file README.Copyright for details.
5 ******************************************************************************/
6
7 #include "mrilib.h"
8
9 /*-----------------------------------------------------------------------*/
10 /* a Tmask shows which 1D lines through a 3D volume have nonzero entries */
11 /*-----------------------------------------------------------------------*/
12
free_Tmask(Tmask * tm)13 void free_Tmask( Tmask * tm )
14 {
15 if( tm != NULL ){
16 free(tm->mask[0]) ; free(tm->mask[1]) ; free(tm->mask[2]) ; free(tm) ;
17 }
18 return ;
19 }
20
21 /*-----------------------------------------------------------------------*/
22
create_Tmask_byte(int nx,int ny,int nz,byte * vol)23 Tmask * create_Tmask_byte( int nx, int ny, int nz, byte * vol )
24 {
25 Tmask * tm ;
26 int ii,jj,kk,vv , nxy,nyz,nzx ;
27 byte * bz , *xym,*yzm,*zxm , *bxy,*byz,*bzx ;
28
29 tm = (Tmask *) malloc(sizeof(Tmask)) ;
30 tm->nmask[TM_IXY] = nxy = nx*ny ;
31 tm->nmask[TM_IYZ] = nyz = ny*nz ;
32 tm->nmask[TM_IZX] = nzx = nz*nx ;
33
34 tm->mask[TM_IXY] = xym = (byte *) calloc(1,sizeof(byte)*nxy) ;
35 tm->mask[TM_IYZ] = yzm = (byte *) calloc(1,sizeof(byte)*nyz) ;
36 tm->mask[TM_IZX] = zxm = (byte *) calloc(1,sizeof(byte)*nzx) ;
37
38 for( byz=yzm,kk=0 ; kk < nz ; kk++,byz+=ny ){
39 bz = vol + kk*nxy ;
40 for( bxy=xym,jj=0 ; jj < ny ; jj++,bz+=nx,bxy+=nx ){
41 for( bzx=zxm,ii=0 ; ii < nx ; ii++,bzx+=nz ){
42 if( bz[ii] ){ bxy[ii] = byz[jj] = bzx[kk] = 1 ; }
43 }
44 }
45 }
46
47 return tm ;
48 }
49
50 /*-----------------------------------------------------------------------*/
51
create_Tmask_rgba(int nx,int ny,int nz,rgba * vol)52 Tmask * create_Tmask_rgba( int nx, int ny, int nz, rgba * vol )
53 {
54 Tmask *tm ;
55 int ii,jj,kk,vv , nxy,nyz,nzx ;
56 byte *xym,*yzm,*zxm , *bxy,*byz,*bzx ;
57 rgba *bz ;
58
59 tm = (Tmask *) malloc(sizeof(Tmask)) ;
60 tm->nmask[TM_IXY] = nxy = nx*ny ;
61 tm->nmask[TM_IYZ] = nyz = ny*nz ;
62 tm->nmask[TM_IZX] = nzx = nz*nx ;
63
64 tm->mask[TM_IXY] = xym = (byte *) calloc(1,sizeof(byte)*nxy) ;
65 tm->mask[TM_IYZ] = yzm = (byte *) calloc(1,sizeof(byte)*nyz) ;
66 tm->mask[TM_IZX] = zxm = (byte *) calloc(1,sizeof(byte)*nzx) ;
67
68 for( byz=yzm,kk=0 ; kk < nz ; kk++,byz+=ny ){
69 bz = vol + kk*nxy ;
70 for( bxy=xym,jj=0 ; jj < ny ; jj++,bz+=nx,bxy+=nx ){
71 for( bzx=zxm,ii=0 ; ii < nx ; ii++,bzx+=nz ){
72 if( bz[ii].a ){ bxy[ii] = byz[jj] = bzx[kk] = 1 ; }
73 }
74 }
75 }
76
77 return tm ;
78 }
79