Doxygen Source Code Documentation
plug_nudge.c File Reference
#include "vecmat.h"
#include "afni.h"
Go to the source code of this file.
Defines | |
#define | EPS 0.005 |
#define | NRESAM 7 |
#define | NYESNO 2 |
#define | SEP_HOR(ww) |
#define | SEP_VER(ww) |
#define | NACT 8 |
#define | BCLIP(x) if((x)<0.0f)(x)=0.0f; else if((x)>255.0)(x)=255.0 |
Functions | |
char * | NUD_main (PLUGIN_interface *) |
void | NUD_make_widgets (void) |
void | NUD_nudge_CB (Widget, XtPointer, XtPointer) |
void | NUD_clear_CB (Widget, XtPointer, XtPointer) |
void | NUD_undo_CB (Widget, XtPointer, XtPointer) |
void | NUD_redo_CB (Widget, XtPointer, XtPointer) |
void | NUD_help_CB (Widget, XtPointer, XtPointer) |
void | NUD_quit_CB (Widget, XtPointer, XtPointer) |
void | NUD_doall_CB (Widget, XtPointer, XtPointer) |
void | NUD_choose_CB (Widget, XtPointer, XtPointer) |
void | NUD_print_CB (Widget, XtPointer, XtPointer) |
void | NUD_finalize_dset_CB (Widget, XtPointer, MCW_choose_cbs *) |
void | NUD_brick_av_CB (MCW_arrowval *, XtPointer) |
void | NUD_undopush (void) |
void | NUD_setcumlab (void) |
void | NUD_rotate (MRI_IMAGE *im) |
void | NUD_update_base (Widget) |
DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * | PLUGIN_init (int ncall) |
char * | NUD_threestring (float a, float b, float c, char ca, char cb, char cc) |
char * | NUD_3string (float a, float b, float c, char ca, char cb, char cc) |
THD_dmat33 | rotmatrix (double th1, double th2, double th3) |
void | rotangles (THD_dmat33 rm, double *th1, double *th2, double *th3) |
THD_dfvec3 | shiftvec (double dx, double dy, double dz) |
void | shiftdeltas (THD_dfvec3 sv, double *d1, double *d2, double *d3) |
char * | NUD_brick_av_label_CB (MCW_arrowval *av, XtPointer cd) |
Variables | |
PLUGIN_interface * | plint = NULL |
Widget | shell = NULL |
Widget | rowcol |
Widget | info_lab |
Widget | choose_pb |
Widget | nudge_pb |
Widget | clear_pb |
Widget | undo_pb |
Widget | redo_pb |
Widget | help_pb |
Widget | quit_pb |
Widget | doall_pb |
Widget | print_pb |
MCW_arrowval * | roll_av |
MCW_arrowval * | pitch_av |
MCW_arrowval * | yaw_av |
MCW_arrowval * | dS_av |
MCW_arrowval * | dL_av |
MCW_arrowval * | dP_av |
MCW_arrowval * | brick_av |
Widget | angle_cum_lab |
Widget | shift_cum_lab |
MCW_arrowval * | interp_av |
MCW_arrowval * | clip_av |
int | nudger_open = 0 |
MCW_DC * | dc |
Three_D_View * | im3d |
THD_3dim_dataset * | dset |
MCW_idcode | dset_idc |
int | new_dset = 0 |
int | dset_ival = 0 |
char | dset_title [THD_MAX_NAME] |
char * | NUD_dummy_av_label [2] = { "[Nothing At All]", "[Nothing At All]" } |
int | iha = 1 |
int | ax1 = 0 |
int | ax2 = 1 |
int | ax3 = 2 |
int | hax1 = 1 |
int | hax2 = 2 |
int | hax3 = 3 |
int | adx = 1 |
int | ady = 2 |
int | adz = 3 |
int | undo_nall |
int | undo_nuse |
int | undo_ntop |
THD_dmat33 * | undo_rmat = NULL |
THD_dfvec3 * | undo_svec = NULL |
THD_dmat33 | rmat |
THD_dfvec3 | svec |
char * | REG_resam_strings [NRESAM] |
char * | REG_resam_options [NRESAM] |
int | REG_resam_ints [NRESAM] |
char * | YESNO_strings [NYESNO] = { "No" , "Yes" } |
MRI_IMAGE * | imbase = NULL |
MCW_action_item | NUD_actor [NACT] |
int | ndsl = 0 |
PLUGIN_dataset_link * | dsl = NULL |
Define Documentation
|
|
|
Definition at line 76 of file plug_nudge.c. Referenced by NUD_3string(), NUD_rotate(), and NUD_threestring(). |
|
Definition at line 258 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 135 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 136 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Value: XtVaCreateManagedWidget( \
"AFNI" , xmSeparatorWidgetClass , (ww) , \
XmNseparatorType , XmSINGLE_LINE , \
XmNinitialResourcesPersistent , False , \
NULL ) Definition at line 243 of file plug_nudge.c. |
|
Value: XtVaCreateManagedWidget( \
"AFNI" , xmSeparatorWidgetClass , (ww) , \
XmNseparatorType , XmDOUBLE_LINE , \
XmNorientation , XmVERTICAL , \
XmNinitialResourcesPersistent , False , \
NULL ) Definition at line 249 of file plug_nudge.c. |
Function Documentation
|
Definition at line 88 of file plug_nudge.c. Referenced by NUD_print_CB().
|
|
Definition at line 1320 of file plug_nudge.c. References MCW_DC::display, dset_ival, and MCW_arrowval::ival. Referenced by NUD_make_widgets().
|
|
Definition at line 1189 of file plug_nudge.c. References DSET_BRICK_LABEL, DSET_NVALS, ISVALID_3DIM_DATASET, and MCW_arrowval::ival. Referenced by NUD_finalize_dset_CB().
01190 { 01191 static char blab[32] ; 01192 THD_3dim_dataset * dset = (THD_3dim_dataset *) cd ; 01193 static char *lfmt[3] = { "#%1d %-14.14s", "#%2d %-14.14s", "#%3d %-14.14s" }; 01194 static char *rfmt[3] = { "%-14.14s #%1d", "%-14.14s #%2d", "%-14.14s #%3d" }; 01195 01196 if( ISVALID_3DIM_DATASET(dset) ){ 01197 01198 #ifdef USE_RIGHT_BUCK_LABELS 01199 if( DSET_NVALS(dset) < 10 ) 01200 sprintf(blab, rfmt[0] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ; 01201 else if( DSET_NVALS(dset) < 100 ) 01202 sprintf(blab, rfmt[1] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ; 01203 else 01204 sprintf(blab, rfmt[2] , DSET_BRICK_LABEL(dset,av->ival) , av->ival ) ; 01205 #else 01206 if( DSET_NVALS(dset) < 10 ) 01207 sprintf(blab, lfmt[0] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ; 01208 else if( DSET_NVALS(dset) < 100 ) 01209 sprintf(blab, lfmt[1] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ; 01210 else 01211 sprintf(blab, lfmt[2] , av->ival , DSET_BRICK_LABEL(dset,av->ival) ) ; 01212 #endif 01213 } 01214 else 01215 sprintf(blab," #%d ",av->ival) ; /* should not happen! */ 01216 01217 return blab ; 01218 } |
|
Definition at line 1068 of file plug_nudge.c. References choose_pb, client_data, MCW_DC::display, DSET_BRICK_TYPE, DSET_COMPRESSED, DSET_INMEMORY, DSET_NUM_TIMES, DSET_NVALS, dsl, THD_session::dsset, THD_3dim_dataset::func_type, ISANAT, ISANATBUCKET, ISFUNCBUCKET, ISVALID_DSET, make_PLUGIN_dataset_link(), MAX, MCW_choose_strlist(), MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, ndsl, NUD_finalize_dset_CB(), THD_session::num_dsset, PLUTO_find_dset(), POPDOWN_strlist_chooser, Three_D_View::ss_now, THD_MAX_NAME, undo_nuse, AFNI_view_info::view_type, Three_D_View::vinfo, and XtRealloc. Referenced by NUD_make_widgets().
01069 { 01070 THD_session * ss = im3d->ss_now ; /* current session */ 01071 int vv = im3d->vinfo->view_type ; /* view type */ 01072 THD_3dim_dataset * qset ; 01073 int id , ltop , llen ; 01074 char qnam[THD_MAX_NAME] , label[THD_MAX_NAME] ; 01075 static char ** strlist = NULL ; 01076 01077 /* can't do this if a dataset is already active and changed */ 01078 01079 if( dset != NULL && undo_nuse > 1 ){ 01080 (void) MCW_popup_message( choose_pb , 01081 "Can't change datasets until\n" 01082 "you save the changes you've\n" 01083 "already made. Or you could\n" 01084 "'Quit' and re-start the Editor" , 01085 MCW_USER_KILL | MCW_TIMER_KILL ) ; 01086 XBell( dc->display , 100 ) ; 01087 return ; 01088 } 01089 01090 /* initialize */ 01091 01092 ndsl = 0 ; 01093 01094 /* scan datasets */ 01095 01096 for( id=0 ; id < ss->num_dsset ; id++ ){ 01097 qset = ss->dsset[id][vv] ; 01098 01099 if( ! ISVALID_DSET (qset) ) continue ; /* skip */ 01100 if( ! DSET_INMEMORY(qset) ) continue ; 01101 if( DSET_BRICK_TYPE(qset,0) == MRI_complex ) continue ; 01102 01103 ndsl++ ; 01104 dsl = (PLUGIN_dataset_link *) 01105 XtRealloc( (char *) dsl , sizeof(PLUGIN_dataset_link)*ndsl ) ; 01106 01107 make_PLUGIN_dataset_link( qset , dsl + (ndsl-1) ) ; 01108 } 01109 01110 /* found nothing? exit */ 01111 01112 if( ndsl < 1 ){ 01113 (void) MCW_popup_message( choose_pb , 01114 " \nDidn't find any datasets to edit!\n" , 01115 MCW_USER_KILL | MCW_TIMER_KILL ) ; 01116 XBell( dc->display , 100 ) ; 01117 return ; 01118 } 01119 01120 /*--- 23 Nov 1996: loop over dataset links and patch their titles 01121 to include an indicator of the dataset type ---*/ 01122 01123 ltop = 4 ; 01124 for( id=0 ; id < ndsl ; id++ ){ 01125 llen = strlen(dsl[id].title) ; 01126 ltop = MAX(ltop,llen) ; 01127 } 01128 01129 for( id=0 ; id < ndsl ; id++ ){ 01130 qset = PLUTO_find_dset( &(dsl[id].idcode) ) ; 01131 if( ! ISVALID_DSET(qset) ) continue ; 01132 if( ISANAT(qset) ){ 01133 if( ISANATBUCKET(qset) ) /* 30 Nov 1997 */ 01134 sprintf(qnam,"%-*s [%s:%d]" , 01135 ltop,dsl[id].title , 01136 ANAT_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 01137 01138 else if( DSET_NUM_TIMES(qset) == 1 ) 01139 sprintf(qnam,"%-*s [%s]" , 01140 ltop,dsl[id].title , 01141 ANAT_prefixstr[qset->func_type] ) ; 01142 01143 else 01144 sprintf(qnam,"%-*s [%s:3D+t:%d]" , 01145 ltop,dsl[id].title , 01146 ANAT_prefixstr[qset->func_type] , DSET_NUM_TIMES(qset) ) ; 01147 01148 } else { 01149 if( ISFUNCBUCKET(qset) ) /* 30 Nov 1997 */ 01150 sprintf(qnam,"%-*s [%s:%d]" , 01151 ltop,dsl[id].title , 01152 FUNC_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 01153 01154 else if( DSET_NUM_TIMES(qset) == 1 ) 01155 sprintf(qnam,"%-*s [%s]" , 01156 ltop,dsl[id].title , 01157 FUNC_prefixstr[qset->func_type] ) ; 01158 01159 else 01160 sprintf(qnam,"%-*s [%s:3D+t:%d]" , 01161 ltop,dsl[id].title , 01162 FUNC_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 01163 } 01164 01165 if( DSET_COMPRESSED(qset) ) strcat(qnam,"z") ; 01166 01167 strcpy( dsl[id].title , qnam ) ; 01168 } 01169 01170 /*--- make a popup chooser for the user to browse ---*/ 01171 01172 POPDOWN_strlist_chooser ; 01173 01174 strlist = (char **) XtRealloc( (char *)strlist , sizeof(char *)*ndsl ) ; 01175 for( id=0 ; id < ndsl ; id++ ) strlist[id] = dsl[id].title ; 01176 01177 sprintf( label , "AFNI Dataset from\nthe %s" , VIEW_typestr[vv] ) ; 01178 01179 MCW_choose_strlist( w , label , ndsl , -1 , strlist , 01180 NUD_finalize_dset_CB , NULL ) ; 01181 01182 return ; 01183 } |
|
Definition at line 874 of file plug_nudge.c. References AV_assign_fval(), and client_data. Referenced by NUD_main().
00875 { 00876 AV_assign_fval( roll_av , 0.0 ) ; 00877 AV_assign_fval( pitch_av , 0.0 ) ; 00878 AV_assign_fval( yaw_av , 0.0 ) ; 00879 AV_assign_fval( dS_av , 0.0 ) ; 00880 AV_assign_fval( dL_av , 0.0 ) ; 00881 AV_assign_fval( dP_av , 0.0 ) ; 00882 return ; 00883 } |
|
Definition at line 1474 of file plug_nudge.c. References AFNI_process_drawnotice(), AV_SENSITIZE, choose_pb, client_data, MCW_DC::display, doall_pb, DSET_BRICK, dset_ival, DSET_NVALS, DSET_write, EDIT_substitute_brick(), iha, MRI_IMAGE::kind, MCW_invert_widget(), MCW_popdown_meter(), MCW_popup_meter(), MCW_set_meter(), METER_TOP_WIDE, mri_clear_data_pointer, mri_copy(), mri_free(), NUD_rotate(), NUD_setcumlab(), NUD_threestring(), PLUTO_dset_redisplay(), redo_pb, rotangles(), SENSITIZE, shell, shiftdeltas(), tross_Append_History(), undo_ntop, undo_nuse, and undo_pb.
01475 { 01476 int iv , nvals ; 01477 MRI_IMAGE * im ; 01478 char str[256] ; 01479 double th1,th2,th3 ; 01480 Widget meter ; 01481 01482 if( dset == NULL || imbase == NULL || undo_nuse == 1 ){ /* bad bad bad */ 01483 XBell(dc->display,100); return; 01484 } 01485 01486 /*----- actually do something -----*/ 01487 01488 /* copy imbase back into dataset */ 01489 01490 EDIT_substitute_brick( dset , dset_ival , 01491 imbase->kind , mri_data_pointer(imbase) ) ; 01492 mri_clear_data_pointer(imbase) ; mri_free(imbase) ; imbase = NULL ; 01493 01494 /* nudge each sub-brick */ 01495 01496 nvals = DSET_NVALS(dset) ; 01497 if( nvals > 1 ) 01498 meter = MCW_popup_meter( shell , METER_TOP_WIDE ) ; 01499 01500 for( iv=0 ; iv < nvals ; iv++ ){ 01501 MCW_invert_widget(doall_pb) ; 01502 01503 im = mri_copy( DSET_BRICK(dset,iv) ) ; 01504 NUD_rotate( im ) ; 01505 EDIT_substitute_brick( dset , iv , 01506 im->kind , mri_data_pointer(im) ) ; 01507 mri_clear_data_pointer( im ) ; mri_free(im) ; 01508 01509 if( nvals > 1 ) 01510 MCW_set_meter( meter , (int)(100.0*(iv+0.5)/nvals) ) ; 01511 } 01512 01513 /* store the history of what we just did */ 01514 01515 rotangles( rmat, &th1,&th2,&th3 ) ; 01516 th1 *= iha*(180.0/PI) ; th2 *= iha*(180.0/PI) ; th3 *= iha*(180.0/PI) ; 01517 sprintf(str,"plug_nudge: -rotate %s", 01518 NUD_threestring(th1,th2,th3,'I','R','A') ) ; 01519 01520 iv = strlen(str) ; 01521 shiftdeltas( svec , &th1,&th2,&th3 ) ; 01522 sprintf(str+iv," -ashift %s" , 01523 NUD_threestring(th1,th2,th3,'S','L','P') ) ; 01524 01525 tross_Append_History( dset , str ); 01526 01527 /* write to disk, and redisplay */ 01528 01529 if( nvals > 1 ) MCW_set_meter( meter , 100 ) ; 01530 01531 DSET_write( dset ) ; 01532 PLUTO_dset_redisplay( dset ) ; 01533 AFNI_process_drawnotice( im3d ) ; 01534 01535 /*----- reset to 0 nudge -----*/ 01536 01537 rmat = undo_rmat[0] ; svec = undo_svec[0] ; NUD_setcumlab() ; 01538 01539 /* clear undo stack */ 01540 01541 undo_nuse = undo_ntop = 1 ; 01542 SENSITIZE(undo_pb,0) ; SENSITIZE(redo_pb,0) ; 01543 01544 /* can't Do All again right now */ 01545 01546 SENSITIZE(doall_pb,0) ; 01547 01548 /* allow user to change datasets again */ 01549 01550 SENSITIZE(choose_pb,1) ; 01551 AV_SENSITIZE( brick_av , (nvals > 1) ) ; 01552 01553 if( nvals > 1 ) 01554 MCW_popdown_meter(meter) ; 01555 if( nvals%2 == 1 ) MCW_invert_widget(doall_pb) ; 01556 01557 return ; 01558 } |
|
Definition at line 1224 of file plug_nudge.c. References abs, adx, ady, adz, AV_SENSITIZE, ax1, ax2, ax3, MCW_DC::display, doall_pb, DSET_anyize, dset_ival, DSET_load, DSET_lock, DSET_mallocize, DSET_NVALS, DSET_unload, DSET_unlock, dsl, fd, hax1, hax2, hax3, THD_3dim_dataset::idcode, iha, info_lab, MCW_choose_cbs::ival, mri_free(), ndsl, NUD_brick_av_label_CB(), NUD_setcumlab(), nudge_pb, nudger_open, PLUTO_find_dset(), POPDOWN_strlist_chooser, redo_pb, refit_MCW_optmenu(), SENSITIZE, THD_axcode(), THD_handedness(), undo_ntop, undo_nuse, and undo_pb. Referenced by NUD_choose_CB().
01225 { 01226 int id = cbs->ival ; 01227 THD_3dim_dataset * qset ; 01228 XmString xstr ; 01229 char str[256] ; 01230 01231 /* check for errors */ 01232 01233 if( !nudger_open ){ POPDOWN_strlist_chooser; XBell(dc->display,100); return; } 01234 01235 if( dset != NULL && undo_nuse > 1 ){ XBell(dc->display,100); return; } 01236 01237 if( id < 0 || id >= ndsl ){ XBell(dc->display,100); return; } 01238 01239 qset = PLUTO_find_dset( &(dsl[id].idcode) ) ; /* the new dataset */ 01240 01241 if( qset == NULL ){ XBell(dc->display,100); return; } /* shouldn't happen */ 01242 01243 /* if not same as old dataset, close that one down */ 01244 01245 if( dset != NULL && qset != dset ){ 01246 DSET_unlock(dset) ; DSET_unload(dset) ; DSET_anyize(dset) ; 01247 } 01248 01249 /* accept this dataset */ 01250 01251 dset = qset ; dset_idc = dset->idcode ; 01252 01253 undo_nuse = 1 ; 01254 undo_ntop = 1 ; 01255 rmat = undo_rmat[0] ; 01256 svec = undo_svec[0] ; NUD_setcumlab() ; 01257 01258 SENSITIZE(undo_pb ,0) ; 01259 SENSITIZE(redo_pb ,0) ; 01260 SENSITIZE(nudge_pb,1) ; 01261 SENSITIZE(doall_pb,0) ; 01262 01263 /* write the informational label */ 01264 01265 xstr = XmStringCreateLtoR( dsl[id].title , XmFONTLIST_DEFAULT_TAG ) ; 01266 XtVaSetValues( info_lab , XmNlabelString , xstr , NULL ) ; 01267 XmStringFree(xstr) ; 01268 01269 /* lock and load this one into memory (not mmap) */ 01270 01271 DSET_mallocize(dset) ; DSET_lock(dset) ; DSET_load(dset) ; 01272 01273 if( imbase != NULL ){ mri_free(imbase); imbase = NULL; } 01274 01275 /* refit the sub-brick selector menu */ 01276 01277 if( dset_ival >= DSET_NVALS(dset) ) dset_ival = DSET_NVALS(dset)-1 ; 01278 01279 refit_MCW_optmenu( brick_av , 01280 0 , /* new minval */ 01281 DSET_NVALS(dset)-1 , /* new maxval */ 01282 dset_ival , /* new inival */ 01283 0 , /* new decim? */ 01284 NUD_brick_av_label_CB , /* text routine */ 01285 dset /* text data */ 01286 ) ; 01287 01288 AV_SENSITIZE( brick_av , (DSET_NVALS(dset) > 1) ) ; 01289 01290 /* set codes indicating rotation axes: 01291 iha = left or right handed coordinate order in dataset 01292 ax1 = axis index for 'I' hax1 = sign for roll angle 01293 ax2 = axis index for 'R' hax2 = sign for pitch angle 01294 ax3 = axis index for 'A' hax3 = sign for yaw angle */ 01295 01296 iha = THD_handedness( dset ) ; 01297 ax1 = THD_axcode(dset,'I') ; hax1 = ax1 ; ax1 = abs(ax1)-1 ; /* roll */ 01298 ax2 = THD_axcode(dset,'R') ; hax2 = ax2 ; ax2 = abs(ax2)-1 ; /* pitch */ 01299 ax3 = THD_axcode(dset,'A') ; hax3 = ax3 ; ax3 = abs(ax3)-1 ; /* yaw */ 01300 01301 adx = THD_axcode(dset,'S') ; /* for shifts */ 01302 ady = THD_axcode(dset,'L') ; 01303 adz = THD_axcode(dset,'P') ; 01304 01305 #if 0 01306 fprintf(stderr,"NUD_finalize_dset_CB: iha=%d\n" 01307 " ax1 =%2d ax2 =%2d ax3 =%2d\n" 01308 " hax1=%2d hax2=%2d hax3=%2d\n" 01309 " adx =%2d ady =%2d adz =%2d\n" , 01310 iha , ax1,ax2,ax3 , hax1,hax2,hax3 , adx,ady,adz ) ; 01311 #endif 01312 01313 return ; 01314 } |
|
Definition at line 957 of file plug_nudge.c. References client_data, help_pb, new_MCW_textwin(), and TEXT_READONLY.
00958 { 00959 (void ) new_MCW_textwin( help_pb , 00960 00961 "PURPOSE: Nudge a dataset's position a little.\n" 00962 "\n" 00963 "CONTROLS:\n" 00964 "Choose Dataset: button to choose which dataset to move around.\n" 00965 "Brick: which single sub-brick of the dataset will be moved,\n" 00966 " prior to use of 'Do All'.\n" 00967 "Resampling: choose interpolation method for brick resampling\n" 00968 "Clip: clip each brick after interpolation?\n" 00969 "---------------------------------------------------------------------\n" 00970 "Angles: the entry fields are the rotational angles to be applied:\n" 00971 " positive I = roll = looking to the left\n" 00972 " positive R = pitch = nodding the head forward\n" 00973 " positive A = yaw = tilting left ear towards shoulder\n" 00974 "Shifts: the entry fields are the translational shifts to be applied.\n" 00975 " positive S = superior = shifting head upwards\n" 00976 " positive L = left = shifting head leftwards\n" 00977 " positive P = posterior = shifting head backwards\n" 00978 "---------------------------------------------------------------------\n" 00979 "Nudge: apply the Angles and Shifts entered above to the chosen Brick;\n" 00980 " also updates the cumulative angles/shifts\n" 00981 "Clear: set the Angles and Shifts to zero\n" 00982 "Undo: undo the previous Nudge\n" 00983 "Redo: redo the previously undone Nudge\n" 00984 "Quit: exit, restoring the dataset to its values stored on disk\n" 00985 "Do All: apply cumulative angles/shifts to all sub-bricks; write to disk\n" 00986 "Print: print (to stderr) 3drotate command equivalent to current nudge\n" 00987 " [use 'Print' before 'Do All', since 'Do All' sets nudge to 0]\n" 00988 "=======================================================================\n" 00989 "USAGE SUGGESTIONS:\n" 00990 "* Load the dataset and brick to nudge into this plugin.\n" 00991 "* Switch the image viewers to the same dataset and brick;\n" 00992 " as the brick is nudged, then images will be redrawn.\n" 00993 "* You can also use the rendering plugin - if DynaDraw is on,\n" 00994 " the brick will be re-rendered with each nudge.\n" 00995 "* If you are comparing the nudged dataset to a reference, and\n" 00996 " trying to realign the two, one way is to temporarily make\n" 00997 " one of them a fim dataset (using '3drefit -fim'), and then\n" 00998 " display it as a color overlay. When you are happy with\n" 00999 " the alignment, you can quit AFNI and use 3drefit to change\n" 01000 " the dataset back to whatever it was before.\n" 01001 "* When using the '-fim' trick on the nudged dataset, you will\n" 01002 " have to set the colors and color scaling range appropriately\n" 01003 " on the 'Define Function' control panel, otherwise the color\n" 01004 " overlay will look so peculiar as to be useless.\n" 01005 "* Nudge-ing on the single sub-brick is done only in memory, so if\n" 01006 " you Quit, the dataset on disk will be unchanged. When you use\n" 01007 " 'Do All', all sub-bricks will be nudged the same way and then\n" 01008 " be written out to disk, overwriting the original dataset .BRIK.\n" 01009 "* Instead of using 'Do All', you can use 'Print' to see the 3drotate\n" 01010 " parameters to use. You can then apply these to as many datasets\n" 01011 " you want (e.g., in a shell script, to nudge a whole bunch of\n" 01012 " datasets exactly the same way).\n" 01013 "* I suggest you do NOT nudge functional activation maps. It is better\n" 01014 " to nudge the anatomical underlay, or nudge the original EPI time\n" 01015 " series. Nudging a dataset implies interpolating to a new grid,\n" 01016 " and this is problematical for the non-smooth activation maps.\n" 01017 "=======================================================================\n" 01018 "WARNINGS:\n" 01019 "* Values past the edge of the dataset are 0, and if they are shifted\n" 01020 " into the volume covered by the dataset, you will get 0's there.\n" 01021 "* Values shifted past the edge of the volume covered by the dataset\n" 01022 " will be LOST. This may seem obvious, but when you are shifting\n" 01023 " a functional dataset that is smaller than the anatomical underlay,\n" 01024 " it can look mysterious.\n" 01025 "* One solution to the problem above is to use 3dZeropad to explicitly\n" 01026 " put a layer of 0's around the outside of the functional dataset\n" 01027 " volume. Shifted values will then go into this 0 buffer, and\n" 01028 " will not be lost.\n" 01029 "=======================================================================\n" 01030 "ALGORITHM:\n" 01031 "* Uses the same basic routines as program 3drotate; see\n" 01032 " RW Cox and A Jesmanowicz.\n" 01033 " Real-time 3D image registration for functional MRI.\n" 01034 " Magnetic Resonance in Medicine, 42: 1014-1018, 1999.\n" 01035 " Also see 3drotate.c, 3dvolreg.c, and thd_rot3d.c.\n" 01036 "* Bricks are not repeatedly interpolated as you nudge - each nudge\n" 01037 " takes place using the cumulative angles/shifts starting from the\n" 01038 " brick read in from disk. However, if you re-nudge a dataset\n" 01039 " after using 'Do All' to write to disk, you will then be re-\n" 01040 " interpolating an already interpolated dataset.\n" 01041 "* Note that cumulative angles/shifts may not be exactly the sum of\n" 01042 " the incremental nudges. This effect is due to the non-Abelian\n" 01043 " nature of 3D rotation (i.e., doing rotation A then B is not the\n" 01044 " same as doing rotation B then A).\n" 01045 "* The angle and shift parameters are specified in the same order\n" 01046 " as output by 3dvolreg, and would be input to 3drotate as\n" 01047 " -rotate <roll>I <pitch>R <yaw>A -ashift <dS>S <dL>L <dP>P\n" 01048 "* Rotations are about the center of the rectangular volume of the\n" 01049 " dataset. This is not likely to be the center of the brain.\n" 01050 "=======================================================================\n" 01051 "AUTHOR: RWCox, April 2000\n" 01052 "=======================================================================\n" 01053 01054 , TEXT_READONLY ) ; 01055 return ; 01056 } |
|
Definition at line 152 of file plug_nudge.c. References AFNI_controller_label(), AV_assign_ival(), AV_SENSITIZE, choose_pb, Three_D_View::dc, doall_pb, dset_ival, free, IM3D_OPEN, info_lab, LOAD_DFVEC3, LOAD_DIAG_DMAT, malloc, mri_free(), NUD_clear_CB(), NUD_make_widgets(), NUD_quit_CB(), NUD_setcumlab(), NUD_undopush(), nudge_pb, nudger_open, plint, PLUTO_cursorize, PLUTO_set_topshell(), redo_pb, RWC_visibilize_widget(), SENSITIZE, shell, undo_nall, undo_ntop, undo_nuse, undo_pb, and ZERO_IDCODE. Referenced by PLUGIN_init().
00153 { 00154 XmString xstr ; 00155 00156 /*-- sanity checks --*/ 00157 00158 if( ! IM3D_OPEN(plint->im3d) ) 00159 return " \n AFNI Controller\nnot opened?! \n " ; 00160 00161 if( nudger_open ){ 00162 if( plint->im3d != im3d ){ /* different controller => close it */ 00163 NUD_quit_CB(NULL,NULL,NULL) ; 00164 } else { /* same controller => just raise up */ 00165 XtMapWidget(shell) ; 00166 XRaiseWindow( XtDisplay(shell) , XtWindow(shell) ) ; 00167 return NULL ; 00168 } 00169 } 00170 00171 im3d = plint->im3d ; /* save for local use */ 00172 00173 /*-- create widgets, first time through --*/ 00174 00175 if( shell == NULL ){ 00176 dc = im3d->dc ; /* save this too */ 00177 NUD_make_widgets() ; 00178 PLUTO_set_topshell( plint , shell ) ; /* 22 Sep 2000 */ 00179 RWC_visibilize_widget( shell ) ; /* 27 Sep 2000 */ 00180 } 00181 00182 /*-- set titlebar --*/ 00183 00184 { char ttl[PLUGIN_STRING_SIZE] ; 00185 sprintf(ttl , "AFNI Nudger %s" , AFNI_controller_label(im3d) ) ; 00186 XtVaSetValues( shell , XmNtitle , ttl , NULL ) ; 00187 } 00188 00189 /*-- set the info label --*/ 00190 00191 xstr = XmStringCreateLtoR( "[No dataset]" , 00192 XmFONTLIST_DEFAULT_TAG ) ; 00193 XtVaSetValues( info_lab , XmNlabelString , xstr , NULL ) ; 00194 XmStringFree(xstr) ; 00195 00196 /*-- pop the widget up --*/ 00197 00198 XtMapWidget(shell) ; 00199 PLUTO_cursorize(shell) ; 00200 00201 /*-- misc initialization --*/ 00202 00203 dset = NULL ; /* not editing anything */ 00204 ZERO_IDCODE(dset_idc) ; 00205 dset_ival = 0 ; AV_assign_ival(brick_av,0) ; 00206 if( imbase != NULL ){ mri_free(imbase); imbase = NULL; } 00207 00208 nudger_open = 1 ; /* editor is now open for business */ 00209 00210 SENSITIZE(nudge_pb ,0) ; 00211 SENSITIZE(undo_pb ,0) ; 00212 SENSITIZE(redo_pb ,0) ; 00213 SENSITIZE(doall_pb ,0) ; 00214 00215 SENSITIZE(choose_pb,1) ; AV_SENSITIZE(brick_av,0) ; 00216 00217 /* initialize nudgerosity */ 00218 00219 NUD_clear_CB(NULL,NULL,NULL) ; 00220 00221 LOAD_DIAG_DMAT(rmat,1.0,1.0,1.0) ; 00222 LOAD_DFVEC3(svec,0.0,0.0,0.0) ; 00223 NUD_setcumlab() ; 00224 00225 /* initialize undo stack */ 00226 00227 if( undo_rmat != NULL ){ free(undo_rmat); undo_rmat = NULL; } 00228 if( undo_svec != NULL ){ free(undo_svec); undo_svec = NULL; } 00229 undo_nuse = 0 ; 00230 undo_ntop = 0 ; 00231 undo_nall = 1 ; 00232 undo_rmat = (THD_dmat33 *) malloc(sizeof(THD_dmat33)) ; 00233 undo_svec = (THD_dfvec3 *) malloc(sizeof(THD_dfvec3)) ; 00234 NUD_undopush() ; /* top of stack = current transformation */ 00235 00236 return NULL ; 00237 } |
|
Definition at line 291 of file plug_nudge.c. References angle_cum_lab, choose_pb, clear_pb, MCW_action_item::data, DC_yokify(), MCW_DC::display, doall_pb, help_pb, info_lab, MCW_action_area(), MCW_AV_downup, MCW_AV_editext, MCW_AV_optmenu, MCW_AV_readtext, MCW_isitmwm, MCW_reghelp_children(), MCW_reghint_children(), MCW_register_help(), MCW_register_hint(), NACT, new_MCW_arrowval(), NRESAM, NUD_brick_av_CB(), NUD_choose_CB(), NUD_dummy_av_label, NUD_quit_CB(), nudge_pb, NYESNO, plint, print_pb, quit_pb, redo_pb, REG_resam_strings, rowcol, SEP_HOR, SEP_VER, shell, shift_cum_lab, undo_pb, MCW_arrowval::wrowcol, MCW_arrowval::wtext, and YESNO_strings. Referenced by NUD_main().
00292 { 00293 XmString xstr ; 00294 Widget hrc ; 00295 00296 /*** top level shell for window manager ***/ 00297 00298 shell = 00299 XtVaAppCreateShell( 00300 "AFNI" , "AFNI" , topLevelShellWidgetClass , dc->display , 00301 00302 XmNtitle , "AFNI Nudger" , /* top of window */ 00303 XmNiconName , "Nudger" , /* label on icon */ 00304 XmNdeleteResponse , XmDO_NOTHING , /* deletion handled below */ 00305 XmNallowShellResize , True , /* let code resize shell? */ 00306 XmNmappedWhenManaged , False , /* must map it manually */ 00307 XmNinitialResourcesPersistent , False , 00308 NULL ) ; 00309 00310 DC_yokify( shell , dc ) ; /* 14 Sep 1998 */ 00311 00312 #ifndef DONT_INSTALL_ICONS 00313 if( afni48_good ) /* set icon pixmap */ 00314 XtVaSetValues( shell , 00315 XmNiconPixmap , afni48_pixmap , 00316 NULL ) ; 00317 #endif 00318 00319 if( MCW_isitmwm(shell) ) /* remove some MWM functions */ 00320 XtVaSetValues( shell , 00321 XmNmwmFunctions , 00322 MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE , 00323 NULL ) ; 00324 00325 XmAddWMProtocolCallback( /* make "Close" window menu work */ 00326 shell , 00327 XmInternAtom( dc->display , "WM_DELETE_WINDOW" , False ) , 00328 NUD_quit_CB , (XtPointer) plint ) ; 00329 00330 /*** rowcolumn widget to hold all user interface stuff ***/ 00331 00332 rowcol = XtVaCreateWidget( 00333 "AFNI" , xmRowColumnWidgetClass , shell , 00334 XmNpacking , XmPACK_TIGHT , 00335 XmNorientation , XmVERTICAL , 00336 XmNtraversalOn , False , 00337 XmNinitialResourcesPersistent , False , 00338 NULL ) ; 00339 00340 /*** label at top to let user know who we are ***/ 00341 00342 xstr = XmStringCreateLtoR( "[No dataset]" , 00343 XmFONTLIST_DEFAULT_TAG ) ; 00344 info_lab = XtVaCreateManagedWidget( 00345 "AFNI" , xmLabelWidgetClass , rowcol , 00346 XmNlabelString , xstr , 00347 XmNinitialResourcesPersistent , False , 00348 NULL ) ; 00349 XmStringFree(xstr) ; 00350 MCW_register_help( info_lab , "Shows dataset being nudged" ) ; 00351 MCW_register_hint( info_lab , "Shows dataset being nudged" ) ; 00352 00353 /***** top row of widgets to choose dataset and sub-brick *****/ 00354 00355 SEP_HOR(rowcol) ; 00356 00357 hrc = XtVaCreateWidget( 00358 "AFNI" , xmRowColumnWidgetClass , rowcol , 00359 XmNorientation , XmHORIZONTAL , 00360 XmNpacking , XmPACK_TIGHT , 00361 XmNadjustLast , False , 00362 XmNadjustMargin , False , 00363 XmNtraversalOn , False , 00364 XmNmarginWidth , 0 , 00365 XmNmarginHeight , 0 , 00366 XmNinitialResourcesPersistent , False , 00367 NULL ) ; 00368 00369 /*** button to let user choose dataset to edit ***/ 00370 00371 xstr = XmStringCreateLtoR( "Choose Dataset" , XmFONTLIST_DEFAULT_TAG ) ; 00372 choose_pb = XtVaCreateManagedWidget( 00373 "AFNI" , xmPushButtonWidgetClass , hrc , 00374 XmNlabelString , xstr , 00375 XmNtraversalOn , False , 00376 XmNinitialResourcesPersistent , False , 00377 NULL ) ; 00378 XmStringFree(xstr) ; 00379 XtAddCallback( choose_pb, XmNactivateCallback, NUD_choose_CB, NULL ) ; 00380 MCW_register_help( choose_pb , 00381 "Use this to popup a\n" 00382 "'chooser' that lets\n" 00383 "you select which\n" 00384 "dataset to nudge." 00385 ) ; 00386 MCW_register_hint( choose_pb , "Popup dataset chooser" ) ; 00387 00388 /*** menu to let user choose sub-brick to deal with ***/ 00389 00390 SEP_VER(hrc) ; 00391 00392 brick_av = new_MCW_arrowval( 00393 hrc , /* parent Widget */ 00394 "Brick" , /* label */ 00395 MCW_AV_optmenu , /* option menu style */ 00396 0 , /* first option */ 00397 1 , /* last option */ 00398 0 , /* initial selection */ 00399 MCW_AV_readtext , /* ignored but needed */ 00400 0 , /* decimal shift */ 00401 NUD_brick_av_CB , /* callback when changed */ 00402 NULL , /* data for above */ 00403 MCW_av_substring_CB , /* text creation routine */ 00404 NUD_dummy_av_label /* data for above */ 00405 ) ; 00406 MCW_reghelp_children( brick_av->wrowcol , 00407 "Choose the sub-brick\n" 00408 "to nudge interactively;\n" 00409 "you should also be\n" 00410 "viewing this sub-brick" ) ; 00411 MCW_reghint_children( brick_av->wrowcol , "Sub-brick to nudge" ) ; 00412 00413 /** some miscellaneous controls **/ 00414 00415 SEP_VER(hrc) ; 00416 00417 interp_av = new_MCW_arrowval( 00418 hrc , /* parent Widget */ 00419 "Resampling" , /* label */ 00420 MCW_AV_optmenu , /* option menu style */ 00421 0 , /* first option */ 00422 NRESAM-1 , /* last option */ 00423 3 , /* initial selection */ 00424 MCW_AV_readtext , /* ignored but needed */ 00425 0 , /* decimal shift */ 00426 NULL , /* callback when changed */ 00427 NULL , /* data for above */ 00428 MCW_av_substring_CB , /* text creation routine */ 00429 REG_resam_strings /* data for above */ 00430 ) ; 00431 MCW_reghint_children( interp_av->wrowcol , "Set interpolation method" ) ; 00432 00433 SEP_VER(hrc) ; 00434 00435 clip_av = new_MCW_arrowval( 00436 hrc , /* parent Widget */ 00437 "Clip" , /* label */ 00438 MCW_AV_optmenu , /* option menu style */ 00439 0 , /* first option */ 00440 NYESNO-1 , /* last option */ 00441 1 , /* initial selection */ 00442 MCW_AV_readtext , /* ignored but needed */ 00443 0 , /* decimal shift */ 00444 NULL , /* callback when changed */ 00445 NULL , /* data for above */ 00446 MCW_av_substring_CB , /* text creation routine */ 00447 YESNO_strings /* data for above */ 00448 ) ; 00449 MCW_reghint_children( clip_av->wrowcol , "Clip after interpolation?" ) ; 00450 00451 XtManageChild(hrc) ; 00452 00453 /********** Angle choosers ***********/ 00454 00455 SEP_HOR(rowcol) ; 00456 00457 hrc = XtVaCreateWidget( 00458 "AFNI" , xmRowColumnWidgetClass , rowcol , 00459 XmNorientation , XmHORIZONTAL , 00460 XmNpacking , XmPACK_TIGHT , 00461 XmNadjustLast , False , 00462 XmNadjustMargin , False , 00463 XmNtraversalOn , False , 00464 XmNmarginWidth , 0 , 00465 XmNmarginHeight , 0 , 00466 XmNinitialResourcesPersistent , False , 00467 NULL ) ; 00468 00469 xstr = XmStringCreateLtoR( "Angles: " , 00470 XmFONTLIST_DEFAULT_TAG ) ; 00471 (void) XtVaCreateManagedWidget( 00472 "AFNI" , xmLabelWidgetClass , hrc , 00473 XmNlabelString , xstr , 00474 XmNinitialResourcesPersistent , False , 00475 NULL ) ; 00476 XmStringFree(xstr) ; 00477 00478 /** the actual angles **/ 00479 00480 roll_av = new_MCW_arrowval( hrc, "I" , 00481 MCW_AV_downup , -300,300,0 , 00482 MCW_AV_editext , 1 , 00483 NULL , NULL , NULL,NULL ) ; 00484 MCW_reghint_children( roll_av->wrowcol , "Roll angle [I-axis]" ) ; 00485 XtVaSetValues( roll_av->wtext , XmNcolumns , 6 , NULL ) ; 00486 SEP_VER(hrc) ; 00487 00488 pitch_av = new_MCW_arrowval( hrc, "R" , 00489 MCW_AV_downup , -300,300,0 , 00490 MCW_AV_editext , 1 , 00491 NULL , NULL , NULL,NULL ) ; 00492 MCW_reghint_children( pitch_av->wrowcol , "Pitch angle [R-axis]" ) ; 00493 XtVaSetValues( pitch_av->wtext , XmNcolumns , 6 , NULL ) ; 00494 SEP_VER(hrc) ; 00495 00496 yaw_av = new_MCW_arrowval( hrc, "A" , 00497 MCW_AV_downup , -300,300,0 , 00498 MCW_AV_editext , 1 , 00499 NULL , NULL , NULL,NULL ) ; 00500 MCW_reghint_children( yaw_av->wrowcol , "Yaw angle [A-axis]" ) ; 00501 XtVaSetValues( yaw_av->wtext , XmNcolumns , 6 , NULL ) ; 00502 SEP_VER(hrc) ; 00503 00504 /** cumulative label **/ 00505 00506 xstr = XmStringCreateLtoR( "--" , XmFONTLIST_DEFAULT_TAG ) ; 00507 angle_cum_lab = XtVaCreateManagedWidget( 00508 "AFNI" , xmLabelWidgetClass , hrc , 00509 XmNlabelString , xstr , 00510 XmNalignment , XmALIGNMENT_CENTER , 00511 XmNinitialResourcesPersistent , False , 00512 XmNrecomputeSize , True , 00513 #if 0 00514 XmNmarginHeight , 0 , 00515 XmNmarginBottom , 0 , 00516 XmNmarginLeft , 0 , 00517 XmNmarginRight , 0 , 00518 XmNmarginTop , 0 , 00519 XmNmarginWidth , 0 , 00520 #endif 00521 XmNtraversalOn , False , 00522 NULL ) ; 00523 XmStringFree(xstr) ; 00524 MCW_register_hint( angle_cum_lab , "Cumulative [degrees]" ) ; 00525 00526 XtManageChild(hrc) ; 00527 00528 /********** Shift choosers ***********/ 00529 00530 /*** SEP_HOR(rowcol) ; ***/ 00531 00532 hrc = XtVaCreateWidget( 00533 "AFNI" , xmRowColumnWidgetClass , rowcol , 00534 XmNorientation , XmHORIZONTAL , 00535 XmNpacking , XmPACK_TIGHT , 00536 XmNadjustLast , False , 00537 XmNadjustMargin , False , 00538 XmNtraversalOn , False , 00539 XmNmarginWidth , 0 , 00540 XmNmarginHeight , 0 , 00541 XmNinitialResourcesPersistent , False , 00542 NULL ) ; 00543 00544 xstr = XmStringCreateLtoR( "Shifts: " , 00545 XmFONTLIST_DEFAULT_TAG ) ; 00546 (void) XtVaCreateManagedWidget( 00547 "AFNI" , xmLabelWidgetClass , hrc , 00548 XmNlabelString , xstr , 00549 XmNinitialResourcesPersistent , False , 00550 NULL ) ; 00551 XmStringFree(xstr) ; 00552 00553 /** the actual shifts **/ 00554 00555 dS_av = new_MCW_arrowval( hrc, "S" , 00556 MCW_AV_downup , -999,999,0 , 00557 MCW_AV_editext , 1 , 00558 NULL , NULL , NULL,NULL ) ; 00559 MCW_reghint_children( dS_av->wrowcol , "Delta Superior" ) ; 00560 XtVaSetValues( dS_av->wtext , XmNcolumns , 6 , NULL ) ; 00561 SEP_VER(hrc) ; 00562 00563 dL_av = new_MCW_arrowval( hrc, "L" , 00564 MCW_AV_downup , -999,999,0 , 00565 MCW_AV_editext , 1 , 00566 NULL , NULL , NULL,NULL ) ; 00567 MCW_reghint_children( dL_av->wrowcol , "Delta Left" ) ; 00568 XtVaSetValues( dL_av->wtext , XmNcolumns , 6 , NULL ) ; 00569 SEP_VER(hrc) ; 00570 00571 dP_av = new_MCW_arrowval( hrc, "P" , 00572 MCW_AV_downup , -999,999,0 , 00573 MCW_AV_editext , 1 , 00574 NULL , NULL , NULL,NULL ) ; 00575 MCW_reghint_children( dP_av->wrowcol , "Delta Posterior" ) ; 00576 XtVaSetValues( dP_av->wtext , XmNcolumns , 6 , NULL ) ; 00577 SEP_VER(hrc) ; 00578 00579 /** cumulative label **/ 00580 00581 xstr = XmStringCreateLtoR( "--" , XmFONTLIST_DEFAULT_TAG ) ; 00582 shift_cum_lab = XtVaCreateManagedWidget( 00583 "AFNI" , xmLabelWidgetClass , hrc , 00584 XmNalignment , XmALIGNMENT_BEGINNING , 00585 XmNlabelString , xstr , 00586 XmNinitialResourcesPersistent , False , 00587 XmNrecomputeSize , True , 00588 #if 0 00589 XmNmarginHeight , 0 , 00590 XmNmarginHeight , 0 , 00591 XmNmarginBottom , 0 , 00592 XmNmarginLeft , 0 , 00593 XmNmarginRight , 0 , 00594 XmNmarginTop , 0 , 00595 XmNmarginWidth , 0 , 00596 #endif 00597 XmNtraversalOn , False , 00598 NULL ) ; 00599 XmStringFree(xstr) ; 00600 MCW_register_hint( shift_cum_lab , "Cumulative [mm]" ) ; 00601 00602 XtManageChild(hrc) ; 00603 00604 /*** a set of action buttons below the line ***/ 00605 00606 SEP_HOR(rowcol) ; 00607 00608 (void) MCW_action_area( rowcol , NUD_actor , NACT ) ; 00609 00610 nudge_pb = (Widget) NUD_actor[0].data ; 00611 clear_pb = (Widget) NUD_actor[1].data ; 00612 undo_pb = (Widget) NUD_actor[2].data ; 00613 redo_pb = (Widget) NUD_actor[3].data ; 00614 help_pb = (Widget) NUD_actor[4].data ; 00615 quit_pb = (Widget) NUD_actor[5].data ; 00616 doall_pb = (Widget) NUD_actor[6].data ; 00617 print_pb = (Widget) NUD_actor[7].data ; 00618 00619 /*** that's all ***/ 00620 00621 XtManageChild(rowcol) ; 00622 XtRealizeWidget(shell) ; /* will not be mapped */ 00623 return ; 00624 } |
|
Definition at line 823 of file plug_nudge.c. References ADD_DFVEC3, AV_SENSITIZE, choose_pb, client_data, MCW_DC::display, DMAT_MUL, DMATVEC, doall_pb, DSET_BRICK, dset_ival, MCW_arrowval::fval, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, mri_copy(), NUD_setcumlab(), NUD_undopush(), NUD_update_base(), nudge_pb, roll(), rotmatrix(), SENSITIZE, shiftvec(), and undo_pb.
00824 { 00825 float roll,pitch,yaw , dS,dL,dP ; 00826 THD_dmat33 new_rmat ; 00827 THD_dfvec3 new_svec , qv ; 00828 00829 if( dset == NULL ){ XBell(dc->display,100); return; } /* shouldn't happen */ 00830 00831 roll = (PI/180.0)*roll_av->fval ; 00832 pitch = (PI/180.0)*pitch_av->fval ; 00833 yaw = (PI/180.0)*yaw_av->fval ; 00834 dS = dS_av->fval ; 00835 dL = dL_av->fval ; 00836 dP = dP_av->fval ; 00837 00838 if( roll==0.0 && pitch==0.0 && yaw==0.0 && dS==0.0 && dL==0.0 && dP==0.0 ){ 00839 (void) MCW_popup_message( nudge_pb , 00840 " \n" 00841 "** Can't nudge dataset! **\n" 00842 "** All Angle and Shifts **\n" 00843 "** are zero. **\n" , 00844 MCW_USER_KILL | MCW_TIMER_KILL ) ; 00845 XBell( dc->display , 100 ) ; 00846 return ; 00847 } 00848 00849 SENSITIZE(undo_pb,1) ; SENSITIZE(doall_pb,1) ; 00850 SENSITIZE(choose_pb,0) ; AV_SENSITIZE(brick_av,0) ; 00851 00852 new_rmat = rotmatrix( roll, pitch, yaw ) ; 00853 rmat = DMAT_MUL( new_rmat , rmat ) ; 00854 00855 new_svec = DMATVEC( new_rmat , svec ) ; 00856 qv = shiftvec( dS , dL , dP ) ; 00857 svec = ADD_DFVEC3( new_svec , qv ) ; 00858 00859 NUD_undopush() ; /* push new transformatin onto undo list */ 00860 NUD_setcumlab() ; /* draw the cumulative labels */ 00861 00862 /* actually do something here */ 00863 00864 if( imbase == NULL ) /* first time: get base */ 00865 imbase = mri_copy( DSET_BRICK(dset,dset_ival) ) ; 00866 00867 NUD_update_base( nudge_pb ) ; return ; 00868 } |
|
Definition at line 776 of file plug_nudge.c. References cbuf, iha, MCW_arrowval::ival, NUD_3string(), REG_resam_options, rotangles(), and shiftdeltas().
00777 { 00778 double th1,th2,th3 ; 00779 char cbuf[256] = "3drotate" ; 00780 00781 strcat( cbuf , " " ) ; 00782 strcat( cbuf , REG_resam_options[interp_av->ival] ) ; 00783 00784 if( clip_av->ival ) strcat( cbuf , " -clipit" ) ; 00785 00786 rotangles( rmat, &th1,&th2,&th3 ) ; 00787 th1 *= iha*(180.0/PI) ; th2 *= iha*(180.0/PI) ; th3 *= iha*(180.0/PI) ; 00788 strcat( cbuf , " -rotate " ) ; 00789 strcat( cbuf , NUD_3string(th1,th2,th3,'I','R','A') ) ; 00790 00791 shiftdeltas( svec , &th1,&th2,&th3 ) ; 00792 strcat( cbuf , " -ashift " ) ; 00793 strcat( cbuf , NUD_3string(th1,th2,th3,'S','L','P') ) ; 00794 00795 strcat( cbuf , " -prefix ??? inputdataset" ) ; 00796 00797 fprintf(stderr,"\nCurrent Nudge command is:\n%s\n",cbuf ) ; 00798 return ; 00799 } |
|
|
Definition at line 909 of file plug_nudge.c. References client_data, MCW_DC::display, doall_pb, NUD_setcumlab(), NUD_update_base(), redo_pb, SENSITIZE, undo_ntop, undo_nuse, and undo_pb.
00910 { 00911 if( undo_ntop <= undo_nuse ){ XBell(dc->display,100); return; } 00912 00913 rmat = undo_rmat[undo_nuse] ; 00914 svec = undo_svec[undo_nuse] ; 00915 undo_nuse++ ; 00916 NUD_setcumlab() ; 00917 if( undo_nuse >= undo_ntop ) SENSITIZE(redo_pb,0) ; 00918 SENSITIZE(undo_pb,1) ; SENSITIZE(doall_pb,1) ; 00919 00920 /* actually do something here */ 00921 00922 NUD_update_base( redo_pb ) ; return ; 00923 } |
|
Definition at line 1331 of file plug_nudge.c. References ax1, ax2, ax3, DELTA_AFTER, DSET_DX, DSET_DY, DSET_DZ, EDIT_coerce_type(), EPS, fb, free, FREE_IMARR, hax1, hax2, hax3, IMAGE_IN_IMARR, MCW_arrowval::ival, MRI_IMAGE::kind, malloc, mri_3to_rgb(), MRI_FLOAT_PTR, mri_free(), MRI_LINEAR, MRI_NN, MRI_RGB_PTR, mri_rgb_to_3float(), MRI_IMAGE::nvox, MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::nz, REG_resam_ints, rotangles(), THD_rota_method(), THD_rota_vol(), tt, and UNLOAD_DFVEC3. Referenced by NUD_doall_CB(), and NUD_update_base().
01332 { 01333 int clipit=clip_av->ival , mode=REG_resam_ints[interp_av->ival] ; 01334 float cbot,ctop ; 01335 float *fvol ; 01336 double th1,th2,th3 , dx,dy,dz ; 01337 01338 if( im == NULL || dset == NULL ) return ; 01339 01340 rotangles( rmat, &th1,&th2,&th3 ) ; 01341 if( hax1 < 0 ) th1 = -th1 ; 01342 if( hax2 < 0 ) th2 = -th2 ; 01343 if( hax3 < 0 ) th3 = -th3 ; 01344 UNLOAD_DFVEC3( svec , dx,dy,dz ) ; 01345 01346 #if 0 01347 fprintf(stderr,"th1=%g th2=%g th3=%g\n",th1,th2,th3) ; 01348 #endif 01349 01350 /* nothing to do? */ 01351 01352 if( fabs(th1) < EPS && fabs(th2) < EPS && fabs(th3) < EPS && 01353 fabs(dx) < EPS && fabs(dy) < EPS && fabs(dz) < EPS ) return ; 01354 01355 #if 0 01356 if( clipit && (mode == MRI_LINEAR || mode == MRI_NN) ) clipit = 0 ; 01357 #endif 01358 01359 /*--- 09 May 2005: RGB input image ==> do each channel separately ---*/ 01360 01361 #undef BCLIP 01362 #define BCLIP(x) if((x)<0.0f)(x)=0.0f; else if((x)>255.0)(x)=255.0 01363 01364 if( im->kind == MRI_rgb ){ 01365 MRI_IMARR *imtriple ; 01366 MRI_IMAGE *rim, *gim, *bim, *newim ; 01367 float *fr, *fg, *fb ; 01368 register int ii ; 01369 01370 imtriple = mri_rgb_to_3float( im ) ; 01371 if( imtriple == NULL ){ 01372 fprintf(stderr,"*** mri_rgb_to_3float fails in NUD_rotate!\n"); return; 01373 } 01374 rim = IMAGE_IN_IMARR(imtriple,0) ; 01375 gim = IMAGE_IN_IMARR(imtriple,1) ; 01376 bim = IMAGE_IN_IMARR(imtriple,2) ; FREE_IMARR(imtriple) ; 01377 NUD_rotate(rim); NUD_rotate(gim); NUD_rotate(bim); 01378 fr = MRI_FLOAT_PTR(rim); fg = MRI_FLOAT_PTR(gim); fb = MRI_FLOAT_PTR(bim); 01379 for( ii=0 ; ii < im->nvox ; ii++ ){ 01380 BCLIP(fr[ii]) ; BCLIP(fg[ii]) ; BCLIP(fb[ii]) ; 01381 } 01382 newim = mri_3to_rgb( rim, gim, bim ) ; 01383 mri_free(rim) ; mri_free(gim) ; mri_free(bim) ; 01384 memcpy( MRI_RGB_PTR(im) , MRI_RGB_PTR(newim) , 3*im->nvox ) ; 01385 mri_free(newim) ; 01386 return ; 01387 } 01388 01389 /*--- need a floating point copy? ---*/ 01390 01391 if( im->kind != MRI_float ){ 01392 fvol = (float *) malloc( sizeof(float) * im->nvox ) ; 01393 EDIT_coerce_type( im->nvox , 01394 im->kind , mri_data_pointer(im) , 01395 MRI_float , fvol ) ; 01396 } else { 01397 fvol = MRI_FLOAT_PTR(im) ; 01398 } 01399 01400 /* compute bounds? */ 01401 01402 if( clipit ){ 01403 register int ii ; register float bb,tt ; 01404 bb = tt = fvol[0] ; 01405 for( ii=1 ; ii < im->nvox ; ii++ ){ 01406 if( fvol[ii] < bb ) bb = fvol[ii] ; 01407 else if( fvol[ii] > tt ) tt = fvol[ii] ; 01408 } 01409 cbot = bb ; ctop = tt ; 01410 } 01411 01412 /* actually rotate! */ 01413 01414 THD_rota_method( mode ) ; /* this line fixed 28 Nov 2000 */ 01415 01416 THD_rota_vol( im->nx , im->ny , im->nz , 01417 fabs(DSET_DX(dset)), fabs(DSET_DY(dset)), fabs(DSET_DZ(dset)), 01418 fvol , ax1,th1 , ax2,th2 , ax3,th3 , DELTA_AFTER,dx,dy,dz ) ; 01419 01420 /* apply bounds? */ 01421 01422 if( clipit ){ 01423 register int ii ; register float bb,tt ; 01424 bb = cbot ; tt = ctop ; 01425 for( ii=0 ; ii < im->nvox ; ii++ ){ 01426 if( fvol[ii] < bb ) fvol[ii] = bb ; 01427 else if( fvol[ii] > tt ) fvol[ii] = tt ; 01428 } 01429 } 01430 01431 /* convert type? */ 01432 01433 if( im->kind != MRI_float ){ 01434 EDIT_coerce_type( im->nvox , MRI_float , fvol , 01435 im->kind , mri_data_pointer(im) ) ; 01436 free(fvol) ; 01437 } 01438 01439 return ; 01440 } |
|
Definition at line 750 of file plug_nudge.c. References angle_cum_lab, iha, NUD_threestring(), rotangles(), shift_cum_lab, and shiftdeltas(). Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_nudge_CB(), NUD_redo_CB(), and NUD_undo_CB().
00751 { 00752 double th1,th2,th3 ; 00753 XmString xstr ; 00754 00755 rotangles( rmat, &th1,&th2,&th3 ) ; 00756 th1 *= iha*(180.0/PI) ; th2 *= iha*(180.0/PI) ; th3 *= iha*(180.0/PI) ; 00757 xstr = XmStringCreateLtoR( NUD_threestring(th1,th2,th3,'I','R','A') , 00758 XmFONTLIST_DEFAULT_TAG ) ; 00759 XtVaSetValues( angle_cum_lab , XmNlabelString , xstr , NULL ) ; 00760 XmStringFree(xstr) ; 00761 00762 shiftdeltas( svec , &th1,&th2,&th3 ) ; 00763 xstr = XmStringCreateLtoR( NUD_threestring(th1,th2,th3,'S','L','P') , 00764 XmFONTLIST_DEFAULT_TAG ) ; 00765 XtVaSetValues( shift_cum_lab , XmNlabelString , xstr , NULL ) ; 00766 XmStringFree(xstr) ; 00767 00768 return ; 00769 } |
|
Definition at line 78 of file plug_nudge.c. Referenced by NUD_doall_CB(), and NUD_setcumlab().
|
|
Definition at line 889 of file plug_nudge.c. References client_data, MCW_DC::display, doall_pb, NUD_setcumlab(), NUD_update_base(), redo_pb, SENSITIZE, undo_nuse, and undo_pb.
00890 { 00891 if( undo_nuse <= 1 ){ XBell(dc->display,100); return; } 00892 00893 undo_nuse-- ; 00894 rmat = undo_rmat[undo_nuse-1] ; 00895 svec = undo_svec[undo_nuse-1] ; 00896 NUD_setcumlab() ; 00897 if( undo_nuse <= 1 ){ SENSITIZE(undo_pb,0); SENSITIZE(doall_pb,0); } 00898 SENSITIZE(redo_pb,1) ; 00899 00900 /* actually do something here */ 00901 00902 NUD_update_base( undo_pb ) ; return ; 00903 } |
|
Definition at line 805 of file plug_nudge.c. References realloc, redo_pb, SENSITIZE, undo_nall, undo_ntop, and undo_nuse. Referenced by NUD_main(), and NUD_nudge_CB().
00806 { 00807 if( undo_nuse >= undo_nall ){ 00808 undo_nall = undo_nuse + 4 ; 00809 undo_rmat = (THD_dmat33 *)realloc( undo_rmat, sizeof(THD_dmat33)*undo_nall ); 00810 undo_svec = (THD_dfvec3 *)realloc( undo_svec, sizeof(THD_dfvec3)*undo_nall ); 00811 } 00812 00813 undo_rmat[undo_nuse] = rmat ; 00814 undo_svec[undo_nuse] = svec ; 00815 undo_nuse++ ; undo_ntop = undo_nuse ; SENSITIZE(redo_pb,0) ; 00816 return ; 00817 } |
|
Definition at line 1446 of file plug_nudge.c. References AFNI_process_drawnotice(), dset_ival, DSET_NVALS, EDIT_substitute_brick(), ISVALID_STATISTIC, MRI_IMAGE::kind, MCW_invert_widget(), mri_clear_data_pointer, mri_copy(), mri_free(), NUD_rotate(), PLUTO_dset_redisplay(), THD_3dim_dataset::stats, and THD_update_statistics(). Referenced by NUD_nudge_CB(), NUD_redo_CB(), and NUD_undo_CB().
01447 { 01448 MRI_IMAGE * im ; 01449 01450 if( dset == NULL || imbase == NULL || dset_ival >= DSET_NVALS(dset) ) return; 01451 01452 if( w != NULL ) MCW_invert_widget(w) ; 01453 01454 im = mri_copy(imbase) ; /* copy base */ 01455 NUD_rotate( im ) ; /* rotate copy */ 01456 EDIT_substitute_brick( dset , dset_ival , /* put into dset */ 01457 im->kind , mri_data_pointer(im) ); 01458 01459 if( ISVALID_STATISTIC(dset->stats) ) /* 27 Nov 2000 */ 01460 THD_update_statistics( dset ) ; 01461 01462 mri_clear_data_pointer( im ) ; mri_free(im) ; /* toss the trash */ 01463 01464 PLUTO_dset_redisplay( dset ) ; /* re-show it */ 01465 AFNI_process_drawnotice( im3d ) ; /* anyone cares? */ 01466 if( w != NULL ) MCW_invert_widget(w) ; 01467 return ; 01468 } |
|
Definition at line 56 of file plug_nudge.c. References NUD_main(), plint, PLUTO_add_hint(), and PLUTO_set_sequence().
00057 { 00058 if( ncall > 0 ) return NULL ; /* only one interface */ 00059 00060 plint = PLUTO_new_interface( "Nudge Dataset" , 00061 "Move bricks around" , 00062 NULL , 00063 PLUGIN_CALL_IMMEDIATELY , NUD_main ) ; 00064 00065 PLUTO_add_hint( plint , "Move bricks around" ) ; 00066 00067 PLUTO_set_sequence( plint , "A:olddset:nudger" ) ; 00068 00069 return plint ; 00070 } |
|
Definition at line 653 of file plug_nudge.c. References ax1, ax2, ax3, hax1, hax2, hax3, and THD_dmat33::mat. Referenced by NUD_doall_CB(), NUD_print_CB(), NUD_rotate(), and NUD_setcumlab().
00654 { 00655 *th2 = asin( rm.mat[ax3][ax1] ) ; 00656 *th1 = atan2( -rm.mat[ax3][ax2] , rm.mat[ax3][ax3] ) ; 00657 *th3 = atan2( -rm.mat[ax2][ax1] , rm.mat[ax1][ax1] ) ; 00658 00659 if( hax1 < 0 ) *th1 = -(*th1) ; 00660 if( hax2 < 0 ) *th2 = -(*th2) ; 00661 if( hax3 < 0 ) *th3 = -(*th3) ; 00662 00663 return ; 00664 } |
|
cumulative label * Definition at line 633 of file plug_nudge.c. References ax1, ax2, ax3, DMAT_MUL, hax1, hax2, hax3, LOAD_ROT_DMAT, p, and q.
00634 { 00635 THD_dmat33 q , p ; 00636 00637 if( hax1 < 0 ) th1 = -th1 ; 00638 if( hax2 < 0 ) th2 = -th2 ; 00639 if( hax3 < 0 ) th3 = -th3 ; 00640 00641 LOAD_ROT_DMAT( q , th1 , ax1 ) ; 00642 LOAD_ROT_DMAT( p , th2 , ax2 ) ; q = DMAT_MUL( p , q ) ; 00643 LOAD_ROT_DMAT( p , th3 , ax3 ) ; q = DMAT_MUL( p , q ) ; 00644 00645 return q ; 00646 } |
|
Definition at line 709 of file plug_nudge.c. References UNLOAD_DFVEC3. Referenced by NUD_doall_CB(), NUD_print_CB(), and NUD_setcumlab().
00710 { 00711 double qdx,qdy,qdz , dx=0.0,dy=0.0,dz=0.0 ; 00712 00713 UNLOAD_DFVEC3( sv , qdx,qdy,qdz ) ; 00714 00715 switch( adx ){ 00716 case 1: dx = -qdx ; break ; 00717 case -1: dx = qdx ; break ; 00718 case 2: dx = -qdy ; break ; 00719 case -2: dx = qdy ; break ; 00720 case 3: dx = -qdz ; break ; 00721 case -3: dx = qdz ; break ; 00722 } 00723 00724 switch( ady ){ 00725 case 1: dy = -qdx ; break ; 00726 case -1: dy = qdx ; break ; 00727 case 2: dy = -qdy ; break ; 00728 case -2: dy = qdy ; break ; 00729 case 3: dy = -qdz ; break ; 00730 case -3: dy = qdz ; break ; 00731 } 00732 00733 switch( adz ){ 00734 case 1: dz = -qdx ; break ; 00735 case -1: dz = qdx ; break ; 00736 case 2: dz = -qdy ; break ; 00737 case -2: dz = qdy ; break ; 00738 case 3: dz = -qdz ; break ; 00739 case -3: dz = qdz ; break ; 00740 } 00741 00742 *d1 = dx ; *d2 = dy ; *d3 = dz ; return ; 00743 } |
|
Definition at line 670 of file plug_nudge.c. References LOAD_DFVEC3. Referenced by NUD_nudge_CB().
00671 { 00672 double qdx=0.0,qdy=0.0,qdz=0.0 ; 00673 THD_dfvec3 qv ; 00674 00675 switch( adx ){ 00676 case 1: qdx = -dx ; break ; 00677 case -1: qdx = dx ; break ; 00678 case 2: qdy = -dx ; break ; 00679 case -2: qdy = dx ; break ; 00680 case 3: qdz = -dx ; break ; 00681 case -3: qdz = dx ; break ; 00682 } 00683 00684 switch( ady ){ 00685 case 1: qdx = -dy ; break ; 00686 case -1: qdx = dy ; break ; 00687 case 2: qdy = -dy ; break ; 00688 case -2: qdy = dy ; break ; 00689 case 3: qdz = -dy ; break ; 00690 case -3: qdz = dy ; break ; 00691 } 00692 00693 switch( adz ){ 00694 case 1: qdx = -dz ; break ; 00695 case -1: qdx = dz ; break ; 00696 case 2: qdy = -dz ; break ; 00697 case -2: qdy = dz ; break ; 00698 case 3: qdz = -dz ; break ; 00699 case -3: qdz = dz ; break ; 00700 } 00701 00702 LOAD_DFVEC3(qv,qdx,qdy,qdz) ; return qv ; 00703 } |
Variable Documentation
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(). |
|
Definition at line 108 of file plug_nudge.c. Referenced by NUD_make_widgets(), and NUD_setcumlab(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 104 of file plug_nudge.c. Referenced by NUD_choose_CB(), NUD_doall_CB(), NUD_main(), NUD_make_widgets(), and NUD_nudge_CB(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 110 of file plug_nudge.c. |
|
Definition at line 116 of file plug_nudge.c. |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_make_widgets(), NUD_nudge_CB(), NUD_redo_CB(), and NUD_undo_CB(). |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 118 of file plug_nudge.c. |
|
Definition at line 119 of file plug_nudge.c. |
|
Definition at line 121 of file plug_nudge.c. Referenced by NUD_brick_av_CB(), NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_nudge_CB(), and NUD_update_base(). |
|
Definition at line 122 of file plug_nudge.c. |
|
Definition at line 1066 of file plug_nudge.c. Referenced by NUD_choose_CB(), and NUD_finalize_dset_CB(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_rotate(), rotangles(), and rotmatrix(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_help_CB(), and NUD_make_widgets(). |
|
Definition at line 126 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_print_CB(), and NUD_setcumlab(). |
|
Definition at line 117 of file plug_nudge.c. |
|
Definition at line 148 of file plug_nudge.c. Referenced by IMREG_main(), mri_2dalign_setup(), mri_3dalign_setup(), mri_align_dfspace(), and mri_overlay_2D(). |
|
Definition at line 104 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_main(), and NUD_make_widgets(). |
|
Definition at line 110 of file plug_nudge.c. |
|
Definition at line 1065 of file plug_nudge.c. Referenced by NUD_choose_CB(), and NUD_finalize_dset_CB(). |
|
Definition at line 120 of file plug_nudge.c. |
|
Initial value: { {"Nudge",NUD_nudge_CB,NULL, "Applies Angles and Shifts\nto chosen Brick of dataset","Apply Angles/Shifts",1} , {"Clear",NUD_clear_CB,NULL, "Clears Angles and\nShifts entry fields","Clear Angles/Shifts",0} , {"Undo",NUD_undo_CB,NULL, "Undoes previous nudge, if possible","Undo last nudge",0} , {"Redo",NUD_redo_CB,NULL, "Redoes previously undone nudge","Redo last undone nudge",0} , {"Help",NUD_help_CB,NULL, "Displays more help" , "Displays more help",0} , {"Quit",NUD_quit_CB,NULL, "Discard nudges since last\n'Do All' and close down", "Discard nudges and close",0} , {"Do All",NUD_doall_CB,NULL, "Apply Angles and Shifts to all sub-\nbricks and save dataset to disk" , "Apply Angles/Shifts; write to disk" , 1 } , {"Print",NUD_print_CB,NULL, "Print current Angles and Shifts as\na '3drotate' command, to stderr" , "Print 3drotate command to screen" , 0 } } Definition at line 260 of file plug_nudge.c. |
|
Definition at line 124 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_main(), NUD_make_widgets(), and NUD_nudge_CB(). |
|
Definition at line 114 of file plug_nudge.c. Referenced by NUD_finalize_dset_CB(), NUD_main(), and NUD_quit_CB(). |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 23 of file plug_nudge.c. Referenced by NUD_main(), NUD_make_widgets(), and PLUGIN_init(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_make_widgets(), and NUD_quit_CB(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_make_widgets(), NUD_redo_CB(), NUD_undo_CB(), and NUD_undopush(). |
|
Initial value: Definition at line 143 of file plug_nudge.c. Referenced by NUD_rotate(). |
|
Initial value: { "-NN" , "-linear" , "-cubic" , "-quintic" , "-heptic" , "-Fourier" , "-Fourier_nopad" } Definition at line 140 of file plug_nudge.c. Referenced by NUD_print_CB(). |
|
Initial value: { "NN" , "Linear" , "Cubic" , "Quintic" , "Heptic" , "Fourier" , "Fourier_nopad" } Definition at line 137 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 132 of file plug_nudge.c. |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 104 of file plug_nudge.c. Referenced by NUD_make_widgets(). |
|
Definition at line 104 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_main(), NUD_make_widgets(), and NUD_quit_CB(). |
|
Definition at line 108 of file plug_nudge.c. Referenced by NUD_make_widgets(), and NUD_setcumlab(). |
|
Definition at line 133 of file plug_nudge.c. |
|
Definition at line 128 of file plug_nudge.c. Referenced by NUD_main(), NUD_quit_CB(), and NUD_undopush(). |
|
Definition at line 128 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_redo_CB(), and NUD_undopush(). |
|
Definition at line 128 of file plug_nudge.c. Referenced by NUD_choose_CB(), NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_quit_CB(), NUD_redo_CB(), NUD_undo_CB(), and NUD_undopush(). |
|
Definition at line 105 of file plug_nudge.c. Referenced by NUD_doall_CB(), NUD_finalize_dset_CB(), NUD_main(), NUD_make_widgets(), NUD_nudge_CB(), NUD_redo_CB(), and NUD_undo_CB(). |
|
Definition at line 129 of file plug_nudge.c. |
|
Definition at line 130 of file plug_nudge.c. |
|
Definition at line 106 of file plug_nudge.c. |
|
Definition at line 146 of file plug_nudge.c. Referenced by NUD_make_widgets(). |