Doxygen Source Code Documentation
aren.h File Reference
#include "mrilib.h"
#include "volpack.h"
Go to the source code of this file.
Data Structures | |
struct | AREN_stuff |
struct | rgbvox |
Defines | |
#define | EIGHT_TO_FIVE(z) ((z) >> 3) |
#define | FIVE_TO_EIGHT(z) ((z) << 3) |
#define | FIVE_to_short(a, b, c) ((a)<<10 | (b)<<5 | (c)) |
#define | TFSINV 0.00390625 |
#define | TTINV 0.03125 |
#define | TFFINV (1.0/255.0) |
#define | TOINV (1.0/31.0) |
#define | SHORT_to_rrr(s) TT_TO_ZO( ((s) & 0x7c00) >> 10 ) |
#define | SHORT_to_ggg(s) TT_TO_ZO( ((s) & 0x03e0) >> 5 ) |
#define | SHORT_to_bbb(s) TT_TO_ZO( ((s) & 0x001f) ) |
#define | SHORT_isgray(s) |
#define | MAX_CDIM 32 |
#define | MAX_GRAYS 256 |
#define | MAX_COLORS 32768 |
#define | TOT_COLORS (MAX_COLORS+MAX_GRAYS) |
#define | AREN_TYPE 9707312 |
#define | ISVALID_AREN(ah) ( (ah) != NULL && (ah)->type == AREN_TYPE ) |
Functions | |
void * | new_AREN_renderer (void) |
void | destroy_AREN_renderer (void *) |
int | AREN_set_graybrick (void *, MRI_IMAGE *) |
int | AREN_set_opabrick (void *, MRI_IMAGE *) |
int | AREN_set_rgbbricks (void *, MRI_IMAGE *, MRI_IMAGE *, MRI_IMAGE *) |
void | AREN_set_viewpoint (void *, float, float) |
void | AREN_set_size (void *, float, float, float) |
MRI_IMAGE * | AREN_render (void *, int) |
void | AREN_be_verbose (void *) |
void | AREN_be_quiet (void *) |
void | init_AREN_colortable (void) |
Define Documentation
|
Definition at line 66 of file aren.h. Referenced by new_AREN_renderer(). |
|
Definition at line 40 of file aren.h. Referenced by AREN_set_rgbbricks(), and MREN_rgb_to_colorshorts(). |
|
|
|
Definition at line 43 of file aren.h. Referenced by AREN_set_rgbbricks(), and init_AREN_colortable(). |
|
Definition at line 81 of file aren.h. Referenced by AREN_be_quiet(), AREN_be_verbose(), AREN_render(), AREN_set_graybrick(), AREN_set_opabrick(), AREN_set_rgbbricks(), AREN_set_size(), AREN_set_viewpoint(), and destroy_AREN_renderer(). |
|
Definition at line 57 of file aren.h. Referenced by init_AREN_colortable(). |
|
|
|
Definition at line 58 of file aren.h. Referenced by AREN_render(), and init_AREN_colortable(). |
|
Value: ( ( ((s) & 0x7c00) >> 10 == ((s) & 0x03e0) >> 5 ) && \ ( ((s) & 0x03e0) >> 5 == ((s) & 0x001f) ) ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Function Documentation
|
Definition at line 166 of file aren.c. References ISVALID_AREN, and AREN_stuff::verbose.
00167 { 00168 AREN_stuff * ar = (AREN_stuff *) ah ; 00169 if( !ISVALID_AREN(ar) ) return ; 00170 ar->verbose = 0 ; return ; 00171 } |
|
Definition at line 159 of file aren.c. References ISVALID_AREN, and AREN_stuff::verbose. Referenced by main().
00160 { 00161 AREN_stuff * ar = (AREN_stuff *) ah ; 00162 if( !ISVALID_AREN(ar) ) return ; 00163 ar->verbose = 1 ; return ; 00164 } |
|
Definition at line 534 of file aren.c. References AREN_colortable, AREN_graytable, AREN_opatable, AREN_stuff::grim, ISVALID_AREN, MAX_GRAYS, MRI_BYTE_PTR, mri_free(), mri_new(), MRI_RGB_PTR, AREN_stuff::newdata, AREN_stuff::newvox, AREN_stuff::nx, AREN_stuff::ny, AREN_stuff::nz, AREN_stuff::opim, AREN_stuff::rim, AREN_stuff::verbose, AREN_stuff::vox, AREN_stuff::vpc, vpCreateMinMaxOctree(), vpRenderClassifiedVolume(), and vpRenderRawVolume(). Referenced by main().
00535 { 00536 AREN_stuff * ar = (AREN_stuff *) ah ; 00537 int isgray , isrgb ; 00538 MRI_IMAGE * im ; 00539 byte * imar ; 00540 vpResult fred ; 00541 00542 /*-- sanity checks --*/ 00543 00544 if( !ISVALID_AREN(ar) ) return NULL ; 00545 00546 if( npix < 16 ){ 00547 fprintf(stderr,"**AREN: attempt to render with less than 16 pixels!\n") ; 00548 return NULL ; 00549 } 00550 00551 isgray = (ar->grim != NULL) ; 00552 isrgb = (ar->rim != NULL) ; 00553 00554 if( isgray && isrgb ){ 00555 fprintf(stderr,"**AREN: attempt to render gray and color simultaneously?\n"); 00556 return NULL ; 00557 } 00558 00559 if( (!isgray && !isrgb) || ar->vox == NULL ){ 00560 fprintf(stderr,"**AREN: attempt to render without data being loaded!\n") ; 00561 return NULL ; 00562 } 00563 00564 if( ar->opim == NULL ){ 00565 fprintf(stderr,"**AREN: attempt to render without opacity being loaded!\n") ; 00566 return NULL ; 00567 } 00568 00569 if( ar->nx < 3 || ar->ny < 3 || ar->nz < 3 ){ 00570 fprintf(stderr,"**AREN: attempt to render without initialization!\n") ; 00571 return NULL ; 00572 } 00573 00574 /*-- if have new voxel array, must tell VolPack all about it --*/ 00575 00576 if( ar->newvox ){ 00577 int nvox = ar->nx * ar->ny * ar->nz ; 00578 rgbvox vv , *rv = &vv ; 00579 00580 if( ar->verbose ) 00581 fprintf(stderr,"--AREN: setting up new voxel array\n") ; 00582 00583 /* 3D dimensions */ 00584 00585 fred = vpSetVolumeSize( ar->vpc , ar->nx , ar->ny , ar->nz ) ; 00586 if( fred != VP_OK ){ 00587 fprintf(stderr,"**AREN: vpSetVolumeSize failed: code=%d\n",(int)fred) ; 00588 return NULL ; 00589 } 00590 00591 /* each voxel has 2 data fields; 1 for shading and 1 for opacity */ 00592 00593 fred = vpSetVoxelSize( ar->vpc , sizeof(rgbvox) , 2 , 1 , 1 ) ; 00594 if( fred != VP_OK ){ 00595 fprintf(stderr,"**AREN: vpSetVoxelSize failed: code=%d\n",(int)fred) ; 00596 return NULL ; 00597 } 00598 00599 /* gray scale input */ 00600 00601 if( isgray ){ 00602 00603 /* voxel field 0 (rgb) is an index into AREN_graytable */ 00604 00605 fred = vpSetVoxelField( ar->vpc, 0, sizeof(short), 00606 vpFieldOffset(rv,rgb), MAX_GRAYS-1 ); 00607 if( fred != VP_OK ){ 00608 fprintf(stderr,"**AREN: vpSetVoxelField(0) failed: code=%d\n",(int)fred) ; 00609 return NULL ; 00610 } 00611 00612 /* voxel field 1 (alpha) is an index into AREN_opatable */ 00613 00614 fred = vpSetVoxelField( ar->vpc, 1, sizeof(short), 00615 vpFieldOffset(rv,alpha), MAX_GRAYS-1 ); 00616 if( fred != VP_OK ){ 00617 fprintf(stderr,"**AREN: vpSetVoxelField(1) failed: code=%d\n",(int)fred) ; 00618 return NULL ; 00619 } 00620 00621 /* tell VolPack where the voxels are */ 00622 00623 fred = vpSetRawVoxels( ar->vpc , ar->vox , 00624 sizeof(rgbvox)*nvox , 00625 sizeof(rgbvox) , 00626 sizeof(rgbvox)*(ar->nx) , 00627 sizeof(rgbvox)*(ar->nx * ar->ny) ) ; 00628 if( fred != VP_OK ){ 00629 fprintf(stderr,"**AREN: vpSetRawVoxels failed: code=%d\n",(int)fred) ; 00630 return NULL ; 00631 } 00632 00633 #ifndef USE_CALLBACKS 00634 00635 /* voxel field 0 (rgb) is an index into AREN_graytable */ 00636 00637 fred = vpSetLookupShader( ar->vpc , 1 , 1 , 0 , 00638 AREN_graytable , sizeof(float)*MAX_GRAYS , 00639 0 , NULL , 0 ) ; 00640 if( fred != VP_OK ){ 00641 fprintf(stderr,"**AREN: vpSetLookupShader failed: code=%d\n",(int)fred) ; 00642 return NULL ; 00643 } 00644 #else 00645 fred = vpSetCallback( ar->vpc , VP_GRAY_SHADE_FUNC , AREN_grayfunc ) ; 00646 if( fred != VP_OK ){ 00647 fprintf(stderr,"**AREN: vpSetCallback(GRAY) failed: code=%d\n",(int)fred) ; 00648 return NULL ; 00649 } 00650 #endif 00651 00652 /* color input */ 00653 00654 } else if( isrgb ){ 00655 00656 /* voxel field 0 (rgb) is an index into AREN_colortable */ 00657 00658 fred = vpSetVoxelField( ar->vpc, 0, sizeof(short), 00659 vpFieldOffset(rv,rgb), TOT_COLORS-1 ); 00660 if( fred != VP_OK ){ 00661 fprintf(stderr,"**AREN: vpSetVoxelField(0) failed: code=%d\n",(int)fred) ; 00662 return NULL ; 00663 } 00664 00665 /* voxel field 1 (alpha) is an index into AREN_opatable */ 00666 00667 fred = vpSetVoxelField( ar->vpc, 1, sizeof(short) , 00668 vpFieldOffset(rv,alpha), MAX_GRAYS-1 ); 00669 if( fred != VP_OK ){ 00670 fprintf(stderr,"**AREN: vpSetVoxelField(1) failed: code=%d\n",(int)fred) ; 00671 return NULL ; 00672 } 00673 00674 /* tell VolPack where the voxels are */ 00675 00676 fred = vpSetRawVoxels( ar->vpc , ar->vox , 00677 sizeof(rgbvox)*nvox , 00678 sizeof(rgbvox) , 00679 sizeof(rgbvox)*(ar->nx) , 00680 sizeof(rgbvox)*(ar->nx * ar->ny) ) ; 00681 if( fred != VP_OK ){ 00682 fprintf(stderr,"**AREN: vpSetRawVoxels failed: code=%d\n",(int)fred) ; 00683 return NULL ; 00684 } 00685 00686 #ifndef USE_CALLBACKS 00687 00688 /* voxel field 0 (rgb) is an index into AREN_colortable */ 00689 00690 fred = vpSetLookupShader( ar->vpc , 3 , 1 , 0 , 00691 AREN_colortable , sizeof(float)*TOT_COLORS*3 , 00692 0 , NULL , 0 ) ; 00693 if( fred != VP_OK ){ 00694 fprintf(stderr,"**AREN: vpSetLookupShader failed: code=%d\n",(int)fred) ; 00695 return NULL ; 00696 } 00697 #else 00698 fred = vpSetCallback( ar->vpc , VP_RGB_SHADE_FUNC , AREN_colorfunc ) ; 00699 if( fred != VP_OK ){ 00700 fprintf(stderr,"**AREN: vpSetCallback(COLOR) failed: code=%d\n",(int)fred) ; 00701 return NULL ; 00702 } 00703 #endif 00704 } 00705 00706 /* voxel field 1 (alpha) is an index into AREN_opatable */ 00707 00708 fred = vpSetClassifierTable( ar->vpc, 0, 1, AREN_opatable, sizeof(float)*MAX_GRAYS ) ; 00709 if( fred != VP_OK ){ 00710 fprintf(stderr,"**AREN: vpSetClassifierTable failed: code=%d\n",(int)fred) ; 00711 return NULL ; 00712 } 00713 00714 /* threshold for octree bins: 12 = 5% of opacity range */ 00715 00716 fred = vpMinMaxOctreeThreshold( ar->vpc , 0 , 12 ) ; 00717 if( fred != VP_OK ){ 00718 fprintf(stderr,"**AREN: vpMinMaxOctreeThreshold failed: code=%d\n",(int)fred) ; 00719 return NULL ; 00720 } 00721 00722 ar->newvox = 0 ; 00723 } 00724 00725 /*-- if have new data in the voxel array, must recreate the octree --*/ 00726 00727 #if 1 00728 vpSetd( ar->vpc , VP_MAX_RAY_OPACITY , 0.95 ) ; 00729 vpSetd( ar->vpc , VP_MIN_VOXEL_OPACITY , 0.05 ) ; 00730 #endif 00731 00732 if( ar->newdata ){ 00733 00734 #undef USE_CLASSIFIED /* for using the "classified" volume feature of VolPack */ 00735 00736 #ifndef USE_CLASSIFIED 00737 if( ar->verbose ) 00738 fprintf(stderr,"--AREN: computing octree\n") ; 00739 00740 /* make octree, down to 4x4x4 voxel bins */ 00741 00742 fred = vpCreateMinMaxOctree( ar->vpc , 0 , 4 ) ; 00743 if( fred != VP_OK ){ 00744 fprintf(stderr,"**AREN: vpCreateMinMaxOctree failed: code=%d\n",(int)fred) ; 00745 return NULL ; 00746 } 00747 #else 00748 if( ar->verbose ) 00749 fprintf(stderr,"--AREN: computing classified volume\n") ; 00750 00751 /* classify volume (slower than octree-ifying) */ 00752 00753 fred = vpClassifyVolume( ar->vpc ) ; 00754 if( fred != VP_OK ){ 00755 fprintf(stderr,"**AREN: vpClassifyVolume failed: code=%d\n",(int)fred) ; 00756 return NULL ; 00757 } 00758 #endif 00759 00760 ar->newdata = 0 ; 00761 } 00762 00763 /*-- create the output image --*/ 00764 00765 #undef GET_ALPHA /* for debugging: compute the opacity image */ 00766 00767 if( isgray ){ 00768 im = mri_new( npix , npix , MRI_byte ) ; 00769 imar = MRI_BYTE_PTR(im) ; 00770 #ifndef GET_ALPHA 00771 vpSetImage( ar->vpc , imar , npix,npix,npix , VP_LUMINANCE ) ; 00772 #else 00773 vpSetImage( ar->vpc , imar , npix,npix,npix , VP_ALPHA ) ; 00774 #endif 00775 } else if( isrgb ){ 00776 #ifndef GET_ALPHA 00777 im = mri_new( npix , npix , MRI_rgb ) ; 00778 imar = MRI_RGB_PTR(im) ; 00779 vpSetImage( ar->vpc , imar , npix,npix,3*npix , VP_RGB ) ; 00780 #else 00781 im = mri_new( npix , npix , MRI_byte ) ; 00782 imar = MRI_BYTE_PTR(im) ; 00783 vpSetImage( ar->vpc , imar , npix,npix,npix , VP_ALPHA ) ; 00784 #endif 00785 } 00786 00787 if( ar->verbose ) 00788 fprintf(stderr,"--AREN: rendering image\n") ; 00789 00790 #ifdef USE_CLASSIFIED 00791 fred = vpRenderClassifiedVolume(ar->vpc) ; 00792 if( fred != VP_OK ){ 00793 fprintf(stderr,"**AREN: vpRenderClassifiedVolume failed: code=%d\n",(int)fred) ; 00794 mri_free(im) ; return NULL ; 00795 } 00796 #else 00797 fred = vpRenderRawVolume(ar->vpc) ; 00798 if( fred != VP_OK ){ 00799 fprintf(stderr,"**AREN: vpRenderRawVolume failed: code=%d\n",(int)fred) ; 00800 mri_free(im) ; return NULL ; 00801 } 00802 #endif 00803 00804 return im ; 00805 } |
|
Definition at line 180 of file aren.c. References AREN_stuff::bim, free, AREN_stuff::gim, AREN_stuff::grim, ISVALID_AREN, MRI_IMAGE::kind, malloc, MRI_BYTE_PTR, AREN_stuff::newdata, AREN_stuff::newvox, AREN_stuff::nx, MRI_IMAGE::nx, AREN_stuff::ny, MRI_IMAGE::ny, AREN_stuff::nz, MRI_IMAGE::nz, AREN_stuff::opim, rgbvox::rgb, AREN_stuff::rim, AREN_stuff::verbose, and AREN_stuff::vox. Referenced by main().
00181 { 00182 AREN_stuff * ar = (AREN_stuff *) ah ; 00183 int newvox=0 , nvox,ii ; 00184 byte * gar ; 00185 rgbvox * gvox ; 00186 byte gb ; 00187 00188 /*-- sanity checks --*/ 00189 00190 if( !ISVALID_AREN(ar) || grim == NULL || grim->kind != MRI_byte ) return -1 ; 00191 00192 if( grim->nx < 3 || grim->ny < 3 || grim->nz < 3 ){ 00193 fprintf(stderr,"**AREN: illegal dimensions for a gray brick\n") ; 00194 return -1 ; 00195 } 00196 00197 /*-- if had old color bricks, toss them (or their pointers) --*/ 00198 00199 if( ar->rim != NULL ){ 00200 ar->rim = ar->gim = ar->bim = NULL ; 00201 if( ar->verbose ) 00202 fprintf(stderr,"--AREN: switching from color bricks to gray brick\n") ; 00203 } else { 00204 if( ar->verbose ) 00205 fprintf(stderr,"--AREN: input a new gray brick\n") ; 00206 } 00207 00208 /*-- if have new dimensions, toss old stuff that doesn't match --*/ 00209 00210 if( ar->nx > 0 && 00211 ( ar->nx != grim->nx || ar->ny != grim->ny || ar->nz != grim->nz ) ){ 00212 00213 ar->opim = NULL ; 00214 if( ar->vox != NULL ){ free(ar->vox) ; ar->vox = NULL ; } 00215 00216 if( ar->verbose ) 00217 fprintf(stderr,"--AREN: new gray brick changes volume dimensions\n" 00218 " nx:%d->%d ny:%d->%d nz:%d->%d\n", 00219 ar->nx,grim->nx , ar->ny,grim->ny , ar->nz,grim->nz ) ; 00220 } 00221 00222 /*-- set dimensions --*/ 00223 00224 ar->grim = grim ; 00225 ar->nx = grim->nx ; 00226 ar->ny = grim->ny ; 00227 ar->nz = grim->nz ; nvox = ar->nx * ar->ny * ar->nz ; 00228 00229 /*-- if need be, allocate a voxel array to hold the data --*/ 00230 00231 if( ar->vox == NULL ){ 00232 ar->newvox = newvox = 1 ; 00233 ar->vox = (rgbvox *) malloc( sizeof(rgbvox) * nvox ) ; 00234 if( ar->vox == NULL ){ 00235 fprintf(stderr,"**AREN: can't malloc workspace with new gray brick\n") ; 00236 return -1 ; 00237 } else if( ar->verbose ){ 00238 fprintf(stderr,"--AREN: allocated new voxel array\n") ; 00239 } 00240 } 00241 00242 /*-- copy grayscale data into voxel array --*/ 00243 00244 gvox = ar->vox ; 00245 gar = MRI_BYTE_PTR(grim) ; 00246 for( ii=0 ; ii < nvox ; ii++ ) gvox[ii].rgb = (unsigned short) gar[ii] ; 00247 00248 ar->newdata = 1 ; 00249 return 0 ; 00250 } |
|
Definition at line 259 of file aren.c. References rgbvox::alpha, AREN_stuff::bim, free, AREN_stuff::gim, AREN_stuff::grim, ISVALID_AREN, MRI_IMAGE::kind, malloc, MRI_BYTE_PTR, AREN_stuff::newdata, AREN_stuff::newvox, AREN_stuff::nx, MRI_IMAGE::nx, AREN_stuff::ny, MRI_IMAGE::ny, AREN_stuff::nz, MRI_IMAGE::nz, AREN_stuff::opim, AREN_stuff::rim, AREN_stuff::verbose, and AREN_stuff::vox. Referenced by main().
00260 { 00261 AREN_stuff * ar = (AREN_stuff *) ah ; 00262 int nvox,ii , newvox ; 00263 byte * gar ; 00264 rgbvox * rvox ; 00265 00266 /*-- sanity checks --*/ 00267 00268 if( !ISVALID_AREN(ar) || opim == NULL || opim->kind != MRI_byte ) return -1 ; 00269 00270 if( opim->nx < 3 || opim->ny < 3 || opim->nz < 3 ){ 00271 fprintf(stderr,"**AREN: illegal dimensions for an opacity brick\n") ; 00272 return -1 ; 00273 } 00274 00275 /*-- if have new dimensions, toss old stuff that doesn't match --*/ 00276 00277 if( ar->nx > 0 && 00278 ( ar->nx != opim->nx || ar->ny != opim->ny || ar->nz != opim->nz ) ){ 00279 00280 ar->grim = ar->rim = ar->gim = ar->bim = NULL ; 00281 if( ar->vox != NULL ){ free(ar->vox) ; ar->vox = NULL ; } 00282 00283 if( ar->verbose ) 00284 fprintf(stderr,"--AREN: new opacity brick changes volume dimensions\n" 00285 " nx:%d->%d ny:%d->%d nz:%d->%d\n", 00286 ar->nx,opim->nx , ar->ny,opim->ny , ar->nz,opim->nz ) ; 00287 } else { 00288 if( ar->verbose ) 00289 fprintf(stderr,"--AREN: new opacity brick\n") ; 00290 } 00291 00292 /*-- set dimensions --*/ 00293 00294 ar->opim = opim ; 00295 ar->nx = opim->nx ; 00296 ar->ny = opim->ny ; 00297 ar->nz = opim->nz ; nvox = ar->nx * ar->ny * ar->nz ; 00298 00299 /*-- if need be, allocate a voxel array to hold the data --*/ 00300 00301 if( ar->vox == NULL ){ 00302 ar->newvox = newvox = 1 ; 00303 ar->vox = (rgbvox *) malloc( sizeof(rgbvox) * nvox ) ; 00304 if( ar->vox == NULL ){ 00305 fprintf(stderr,"**AREN: can't malloc workspace with new opacity brick\n") ; 00306 return -1 ; 00307 } else if( ar->verbose ){ 00308 fprintf(stderr,"--AREN: allocated new voxel array\n") ; 00309 } 00310 } 00311 00312 /*-- load the opacity into voxel array --*/ 00313 00314 gar = MRI_BYTE_PTR(ar->opim) ; 00315 rvox = ar->vox ; 00316 for( ii=0 ; ii < nvox ; ii++ ) rvox[ii].alpha = (unsigned short) gar[ii] ; 00317 00318 ar->newdata = 1 ; 00319 return 0 ; 00320 } |
|
Definition at line 329 of file aren.c. References AREN_stuff::bim, EIGHT_TO_FIVE, FIVE_to_short, free, AREN_stuff::gim, AREN_stuff::grim, ISVALID_AREN, MRI_IMAGE::kind, malloc, MRI_BYTE_PTR, AREN_stuff::newdata, AREN_stuff::newvox, AREN_stuff::nx, MRI_IMAGE::nx, AREN_stuff::ny, MRI_IMAGE::ny, AREN_stuff::nz, MRI_IMAGE::nz, AREN_stuff::opim, rgbvox::rgb, AREN_stuff::rim, AREN_stuff::verbose, and AREN_stuff::vox. Referenced by main().
00330 { 00331 AREN_stuff * ar = (AREN_stuff *) ah ; 00332 int newvox=0 , nvox,ii ; 00333 byte * rar , * gar , * bar ; 00334 rgbvox * rvox ; 00335 byte rb,gb,bb ; 00336 00337 /*-- sanity checks --*/ 00338 00339 if( rim == NULL || rim->kind != MRI_byte || 00340 gim == NULL || gim->kind != MRI_byte || 00341 bim == NULL || bim->kind != MRI_byte || !ISVALID_AREN(ar) ) return -1 ; 00342 00343 if( rim->nx < 3 || rim->ny < 3 || rim->nz < 3 ){ 00344 fprintf(stderr,"**AREN: illegal dimensions for a color brick\n") ; return -1 ; 00345 } 00346 00347 if( gim->nx != rim->nx || gim->ny != rim->ny || gim->nz != rim->nz ){ 00348 fprintf(stderr,"**AREN: green & red rgb bricks don't match\n") ; return -1 ; 00349 } 00350 00351 if( bim->nx != rim->nx || bim->ny != rim->ny || bim->nz != rim->nz ){ 00352 fprintf(stderr,"**AREN: blue & red rgb bricks don't match\n") ; return -1 ; 00353 } 00354 00355 /*-- if had an old gray brick, toss it (or at least its pointer) --*/ 00356 00357 if( ar->grim != NULL ){ 00358 ar->grim = NULL ; 00359 if( ar->verbose ) 00360 fprintf(stderr,"--AREN: switching from gray brick to color bricks\n") ; 00361 } else { 00362 if( ar->verbose ) 00363 fprintf(stderr,"--AREN: input new color bricks\n") ; 00364 } 00365 00366 /*-- if have new dimensions, toss old stuff that doesn't match --*/ 00367 00368 if( ar->nx > 0 && 00369 ( ar->nx != rim->nx || ar->ny != rim->ny || ar->nz != rim->nz ) ){ 00370 00371 ar->opim = NULL ; 00372 if( ar->vox != NULL ){ free(ar->vox) ; ar->vox = NULL ; } 00373 00374 if( ar->verbose ) 00375 fprintf(stderr,"--AREN: new color bricks change volume dimensions\n" 00376 " nx:%d->%d ny:%d->%d nz:%d->%d\n", 00377 ar->nx,rim->nx , ar->ny,rim->ny , ar->nz,rim->nz ) ; 00378 } 00379 00380 /*-- set dimensions --*/ 00381 00382 ar->rim = rim ; ar->gim = gim ; ar->bim = bim ; 00383 ar->nx = rim->nx ; 00384 ar->ny = rim->ny ; 00385 ar->nz = rim->nz ; nvox = ar->nx * ar->ny * ar->nz ; 00386 00387 /*-- if need be, allocate a voxel array to hold the data --*/ 00388 00389 if( ar->vox == NULL ){ 00390 ar->newvox = newvox = 1 ; 00391 ar->vox = (rgbvox *) malloc( sizeof(rgbvox) * nvox ) ; 00392 if( ar->vox == NULL ){ 00393 fprintf(stderr,"**AREN: can't malloc workspace with new color bricks\n") ; 00394 return -1 ; 00395 } else if( ar->verbose ){ 00396 fprintf(stderr,"--AREN: allocated new voxel array\n") ; 00397 } 00398 } 00399 00400 /*-- copy color data into voxel array --*/ 00401 00402 rvox = ar->vox ; 00403 rar = MRI_BYTE_PTR(rim) ; 00404 gar = MRI_BYTE_PTR(gim) ; 00405 bar = MRI_BYTE_PTR(bim) ; 00406 for( ii=0 ; ii < nvox ; ii++ ){ 00407 rb = EIGHT_TO_FIVE(rar[ii]) ; 00408 gb = EIGHT_TO_FIVE(gar[ii]) ; 00409 bb = EIGHT_TO_FIVE(bar[ii]) ; 00410 00411 if( rb == gb && rb == bb ){ 00412 rvox[ii].rgb = MAX_COLORS + rar[ii] ; /* index into grayscale */ 00413 } else { 00414 rvox[ii].rgb = FIVE_to_short( rb , gb, bb ) ; /* index into color cube */ 00415 } 00416 } 00417 00418 ar->newdata = 1 ; 00419 return 0 ; 00420 } |
|
Definition at line 454 of file aren.c. References ISVALID_AREN, mmm, AREN_stuff::sx, AREN_stuff::sy, AREN_stuff::sz, AREN_stuff::verbose, and AREN_stuff::vpc. Referenced by main().
00455 { 00456 #if 0 00457 AREN_stuff * ar = (AREN_stuff *) ah ; 00458 float mmm ; 00459 00460 if( !ISVALID_AREN(ar) ) return ; 00461 00462 sx = fabs(sx) ; if( sx == 0.0 ) sx = 1.0 ; /* don't allow non-positive sizes */ 00463 sy = fabs(sy) ; if( sy == 0.0 ) sy = 1.0 ; 00464 sz = fabs(sz) ; if( sz == 0.0 ) sz = 1.0 ; 00465 00466 mmm = sx ; 00467 if( mmm < sy ) mmm = sy ; 00468 if( mmm < sz ) mmm = sz ; /* mmm = maximum size */ 00469 00470 ar->sx = sx / mmm ; /* scale factors are <= 1.0 */ 00471 ar->sy = sy / mmm ; 00472 ar->sz = sz / mmm ; 00473 00474 vpCurrentMatrix( ar->vpc , VP_MODEL ) ; /* scale model to world */ 00475 vpIdentityMatrix( ar->vpc ) ; 00476 vpScale( ar->vpc , sx , sy , sz ) ; 00477 00478 if( ar->verbose ) 00479 fprintf(stderr,"--AREN: set scale factors = %f %f %f\n",ar->sx,ar->sy,ar->sz) ; 00480 #endif 00481 00482 return ; 00483 } |
|
Definition at line 426 of file aren.c. References ISVALID_AREN, AREN_stuff::phi, AREN_stuff::theta, AREN_stuff::verbose, and AREN_stuff::vpc. Referenced by main().
00427 { 00428 AREN_stuff * ar = (AREN_stuff *) ah ; 00429 00430 if( !ISVALID_AREN(ar) ) return ; 00431 00432 ar->theta = theta ; ar->phi = phi ; 00433 00434 vpCurrentMatrix( ar->vpc , VP_VIEW ) ; 00435 vpIdentityMatrix( ar->vpc ) ; 00436 vpRotate( ar->vpc , VP_Y_AXIS , theta ) ; 00437 vpRotate( ar->vpc , VP_X_AXIS , phi ) ; 00438 00439 if( ar->verbose ) 00440 fprintf(stderr,"--AREN: set theta=%f phi=%f\n",theta,phi) ; 00441 00442 return ; 00443 } |
|
Definition at line 143 of file aren.c. References free, ISVALID_AREN, AREN_stuff::vox, and AREN_stuff::vpc.
00144 { 00145 AREN_stuff * ar = (AREN_stuff *) ah ; 00146 00147 if( !ISVALID_AREN(ar) ) return ; 00148 00149 if( ar->vox != NULL ) free(ar->vox) ; 00150 vpDestroyContext( ar->vpc ) ; 00151 free(ar) ; 00152 return ; 00153 } |
|
Definition at line 39 of file aren.c. References AREN_colortable, AREN_graytable, AREN_opatable, FIVE_to_short, malloc, MAX_CDIM, and MAX_GRAYS. Referenced by new_AREN_renderer().
00040 { 00041 static int been_here = 0 ; 00042 int ii , rr,gg,bb , ss ; 00043 00044 if( been_here ) return ; /* done that */ 00045 00046 AREN_colortable = (float *) malloc( sizeof(float) * TOT_COLORS * 3 ) ; 00047 AREN_graytable = (float *) malloc( sizeof(float) * MAX_GRAYS ) ; 00048 AREN_opatable = (float *) malloc( sizeof(float) * MAX_GRAYS ) ; 00049 00050 /*-- load linear ramp for grayscale and opacity --*/ 00051 00052 for( ii=0 ; ii < MAX_GRAYS ; ii++ ){ 00053 AREN_graytable[ii] = ii ; 00054 AREN_opatable[ii] = ii / 255.0 ; 00055 } 00056 00057 /*-- load a 32 x 32 x 32 color cube --*/ 00058 00059 for( rr=0 ; rr < MAX_CDIM ; rr++ ){ 00060 for( gg=0 ; gg < MAX_CDIM ; gg++ ){ 00061 for( bb=0 ; bb < MAX_CDIM ; bb++ ){ 00062 00063 ss = FIVE_to_short(rr,gg,bb) ; /* color index */ 00064 00065 AREN_colortable[3*ss ] = (rr * 255.0) / 31.0 ; 00066 AREN_colortable[3*ss+1] = (gg * 255.0) / 31.0 ; 00067 AREN_colortable[3*ss+2] = (bb * 255.0) / 31.0 ; 00068 } 00069 } 00070 } 00071 00072 /*-- at the end, add the pure grays (at a higher resolution) --*/ 00073 00074 ss = 3 * MAX_COLORS ; 00075 for( ii=0 ; ii < MAX_GRAYS ; ii++ ){ 00076 AREN_colortable[ss++] = ii ; 00077 AREN_colortable[ss++] = ii ; 00078 AREN_colortable[ss++] = ii ; 00079 } 00080 00081 been_here = 1 ; 00082 return ; 00083 } |
|
Definition at line 93 of file aren.c. References AREN_TYPE, AREN_stuff::bim, DEFAULT_PHI, DEFAULT_THETA, AREN_stuff::gim, AREN_stuff::grim, init_AREN_colortable(), malloc, AREN_stuff::newdata, AREN_stuff::newvox, AREN_stuff::nx, AREN_stuff::ny, AREN_stuff::nz, AREN_stuff::opim, AREN_stuff::phi, AREN_stuff::rim, AREN_stuff::sx, AREN_stuff::sy, AREN_stuff::sz, AREN_stuff::theta, AREN_stuff::type, AREN_stuff::verbose, AREN_stuff::vox, and AREN_stuff::vpc. Referenced by main().
00094 { 00095 AREN_stuff * ar ; 00096 00097 ar = (AREN_stuff *) malloc( sizeof(AREN_stuff) ) ; 00098 ar->type = AREN_TYPE ; 00099 00100 init_AREN_colortable() ; /* only does something 1st time in */ 00101 00102 /*-- initialize VolPack --*/ 00103 00104 ar->vpc = vpCreateContext() ; 00105 00106 vpSeti( ar->vpc , VP_CONCAT_MODE , VP_CONCAT_LEFT ) ; 00107 00108 vpCurrentMatrix( ar->vpc , VP_MODEL ) ; 00109 vpIdentityMatrix( ar->vpc ) ; 00110 00111 vpCurrentMatrix( ar->vpc , VP_VIEW ) ; 00112 vpIdentityMatrix( ar->vpc ) ; 00113 vpRotate( ar->vpc , VP_Y_AXIS , DEFAULT_THETA ) ; 00114 vpRotate( ar->vpc , VP_X_AXIS , DEFAULT_PHI ) ; 00115 00116 #undef USE_CUEING 00117 #ifdef USE_CUEING 00118 vpSetDepthCueing( ar->vpc , 1.0 , 0.5 ) ; 00119 vpEnable( ar->vpc , VP_DEPTH_CUE , 1 ) ; 00120 #endif 00121 00122 vpCurrentMatrix( ar->vpc , VP_PROJECT ) ; 00123 vpIdentityMatrix( ar->vpc ) ; 00124 vpWindow( ar->vpc , VP_PARALLEL , -0.5,0.5 , -0.5,0.5 , -0.5,0.5 ) ; 00125 00126 /*-- initialize the rest of the data --*/ 00127 00128 ar->nx = ar->ny = ar->nz = ar->verbose = ar->newdata = ar->newvox = 0 ; 00129 ar->sx = ar->sy = ar->sz = 1.0 ; 00130 00131 ar->theta = DEFAULT_THETA ; 00132 ar->phi = DEFAULT_PHI ; 00133 ar->grim = ar->rim = ar->gim = ar->bim = ar->opim = NULL ; 00134 ar->vox = NULL ; 00135 00136 return (void *) ar ; 00137 } |