Doxygen Source Code Documentation
thd_editdaxes.c File Reference
#include "mrilib.h"#include "thd.h"Go to the source code of this file.
Functions | |
| void | THD_edit_dataxes (float resam, THD_dataxes *daxes, THD_dataxes *wod_daxes) |
Function Documentation
|
||||||||||||||||
|
Definition at line 15 of file thd_editdaxes.c. References ISVALID_DATAXES, THD_dataxes::nxx, THD_dataxes::nyy, THD_dataxes::nzz, THD_dataxes::xxdel, THD_dataxes::xxmax, THD_dataxes::xxmin, THD_dataxes::xxorg, THD_dataxes::yydel, THD_dataxes::yymax, THD_dataxes::yymin, THD_dataxes::yyorg, THD_dataxes::zzdel, THD_dataxes::zzmax, THD_dataxes::zzmin, and THD_dataxes::zzorg. Referenced by AFNI_do_many_writes(), AFNI_setup_viewing(), AFNI_write_dataset_CB(), and main().
00017 {
00018 float lxx , lyy , lzz ;
00019 float rex , rey , rez ;
00020
00021 if( ! ISVALID_DATAXES(daxes) || ! ISVALID_DATAXES(wod_daxes) ) return ;
00022
00023 *wod_daxes = *daxes ; /* copy insides, then edit them */
00024
00025 if( resam <= 0.0 ) return ; /* error */
00026
00027 rex = (daxes->xxdel > 0) ? resam : -resam ; /* signed resampled */
00028 rey = (daxes->yydel > 0) ? resam : -resam ; /* voxel sizes */
00029 rez = (daxes->zzdel > 0) ? resam : -resam ;
00030
00031 lxx = daxes->nxx * daxes->xxdel ; /* signed lengths of data box */
00032 lyy = daxes->nyy * daxes->yydel ;
00033 lzz = daxes->nzz * daxes->zzdel ;
00034
00035 wod_daxes->nxx = (int)( lxx/rex + 0.499 ) ; /* new dimensions */
00036 wod_daxes->nyy = (int)( lyy/rey + 0.499 ) ; /* (will be > 0) */
00037 wod_daxes->nzz = (int)( lzz/rez + 0.499 ) ;
00038
00039 /* go to old middle, then back out to get new edge */
00040
00041 wod_daxes->xxorg = daxes->xxorg + 0.5*(lxx - daxes->xxdel)
00042 - 0.5*(wod_daxes->nxx - 1)*rex ;
00043
00044 wod_daxes->yyorg = daxes->yyorg + 0.5*(lyy - daxes->yydel)
00045 - 0.5*(wod_daxes->nyy - 1)*rey ;
00046
00047 wod_daxes->zzorg = daxes->zzorg + 0.5*(lzz - daxes->zzdel)
00048 - 0.5*(wod_daxes->nzz - 1)*rez ;
00049
00050 /* new dimensions of the voxels */
00051
00052 wod_daxes->xxdel = rex ;
00053 wod_daxes->yydel = rey ;
00054 wod_daxes->zzdel = rez ;
00055
00056 /* do the bounding box thing again */
00057
00058 wod_daxes->xxmin = wod_daxes->xxorg ;
00059 wod_daxes->xxmax = wod_daxes->xxorg + (wod_daxes->nxx-1)*wod_daxes->xxdel ;
00060 if( wod_daxes->xxmin > wod_daxes->xxmax ){
00061 float temp = wod_daxes->xxmin ;
00062 wod_daxes->xxmin = wod_daxes->xxmax ; wod_daxes->xxmax = temp ;
00063 }
00064
00065 wod_daxes->yymin = wod_daxes->yyorg ;
00066 wod_daxes->yymax = wod_daxes->yyorg + (wod_daxes->nyy-1)*wod_daxes->yydel ;
00067 if( wod_daxes->yymin > wod_daxes->yymax ){
00068 float temp = wod_daxes->yymin ;
00069 wod_daxes->yymin = wod_daxes->yymax ; wod_daxes->yymax = temp ;
00070 }
00071
00072 wod_daxes->zzmin = wod_daxes->zzorg ;
00073 wod_daxes->zzmax = wod_daxes->zzorg + (wod_daxes->nzz-1)*wod_daxes->zzdel ;
00074 if( wod_daxes->zzmin > wod_daxes->zzmax ){
00075 float temp = wod_daxes->zzmin ;
00076 wod_daxes->zzmin = wod_daxes->zzmax ; wod_daxes->zzmax = temp ;
00077 }
00078
00079 #ifdef EXTEND_BBOX
00080 wod_daxes->xxmin -= 0.5 * wod_daxes->xxdel ;
00081 wod_daxes->xxmax += 0.5 * wod_daxes->xxdel ;
00082 wod_daxes->yymin -= 0.5 * wod_daxes->yydel ;
00083 wod_daxes->yymax += 0.5 * wod_daxes->yydel ;
00084 wod_daxes->zzmin -= 0.5 * wod_daxes->zzdel ;
00085 wod_daxes->zzmax += 0.5 * wod_daxes->zzdel ;
00086 #endif
00087
00088 return ;
00089 }
|