Doxygen Source Code Documentation
plug_roiedit.c File Reference
#include <Xm/FileSB.h>
#include "afni.h"
#include "plug_roiedit.h"
#include "plug_roiedit.hhh"
Go to the source code of this file.
Defines | |
#define | MODE_CURVE 0 |
#define | MODE_CLOSED 1 |
#define | MODE_POINTS 2 |
#define | MODE_FLOOD_VAL 3 |
#define | MODE_FLOOD_NZ 4 |
#define | MODE_VOL_FILL 5 |
#define | MODE_CONN_PTS 6 |
#define | NUM_modes (sizeof(mode_ints)/sizeof(int)) |
#define | NACT 5 |
#define | AR(i, j) ar[(i)+(j)*nx] |
Functions | |
char * | DRAW_main (PLUGIN_interface *) |
void | DRAW_make_widgets (void) |
void | DRAW_done_CB (Widget, XtPointer, XtPointer) |
void | DRAW_undo_CB (Widget, XtPointer, XtPointer) |
void | DRAW_help_CB (Widget, XtPointer, XtPointer) |
void | DRAW_quit_CB (Widget, XtPointer, XtPointer) |
void | DRAW_save_CB (Widget, XtPointer, XtPointer) |
void | DRAW_choose_CB (Widget, XtPointer, XtPointer) |
void | DRAW_color_CB (MCW_arrowval *, XtPointer) |
void | DRAW_mode_CB (MCW_arrowval *, XtPointer) |
void | DRAW_value_CB (MCW_arrowval *, XtPointer) |
void | DRAW_receiver (int, int, void *, void *) |
void | DRAW_into_dataset (int, int *, int *, int *, void *) |
void | DRAW_finalize_dset_CB (Widget, XtPointer, MCW_choose_cbs *) |
void | DRAW_2dfiller (int nx, int ny, int ix, int jy, byte *ar) |
DEFINE_PLUGIN_PROTOTYPE PLUGIN_interface * | PLUGIN_init (int ncall) |
void | r_main_mk_main_shell (void) |
void | r_main_mk_show_buttons (void) |
void | r_main_mk_save_as_fr (Widget parent) |
void | r_wtgr_mk_main_shell (r_X_s *X) |
void | r_HL_mk_main_shell (holes_s *H) |
Widget | r_HL_mk_buttons (holes_s *H, Widget parent) |
Widget | r_HL_mk_maxsize_fr (holes_s *H, Widget parent) |
Widget | r_HL_mk_fillval_fr (holes_s *H, Widget parent) |
int | r_init_holes_vals (holes_s *H) |
void | r_HL_cb_fill (Widget w, XtPointer client_data, XtPointer call_data) |
int | r_HL_check_neighbors (points_t *P, int coord) |
void | r_INT_mk_main_shell (interp_s *I) |
Widget | r_INT_mk_app_buttons (interp_s *I, Widget parent) |
Widget | r_INT_mk_fillval_fr (interp_s *I, Widget parent) |
void | r_any_cb_apply (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_any_cb_hide (Widget w, char *client_data, XtPointer call_data) |
void | r_any_cb_raise (Widget w, char *client_data, XtPointer call_data) |
void | r_any_cb_undo (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_INT_cb_fill (Widget w, XtPointer client_data, XtPointer call_data) |
double | r_p_distance (r_ipt_t p1, r_ipt_t p2) |
r_ipt_t | r_index2pt (int coord, int nx, int ny, int nz) |
int | r_init_pt_conn_s (r_pt_conn_s *P) |
int | r_init_interp_vals (interp_s *I) |
Widget | r_wt_mk_main_frame (r_X_s *X, Widget parent) |
Widget | r_gr_mk_main_frame (r_X_s *X, Widget parent) |
int | r_init_Alg_values (r_alg_s *A) |
void | r_init_afni_vars (r_alg_s *A, THD_3dim_dataset *func) |
void | r_any_cb_fill_stats (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_histogram (r_alg_s *A, int min, int max, int check_val) |
void | r_wt_cb_SB_toggle (Widget w, XtPointer client_data, XtPointer call_data) |
int | r_wtgr_calc_min_frm_val (int value) |
int | r_wtgr_calc_max_frm_val (int value) |
void | r_wtgr_cb_hide (void) |
void | r_wtgr_cb_suggest_limits (Widget w, XtPointer client_data, XtPointer call_data) |
Widget | r_gr_mk_fill_buttons (r_X_s *X, Widget parent) |
void | r_wt_mk_fill_buttons (r_X_s *X, Widget parent) |
Widget | r_wt_mk_diag_conn_fr (r_X_s *X, Widget parent) |
Widget | r_wt_mk_strong_bord_fr (r_X_s *X, Widget parent) |
Widget | r_wt_mk_nbrs_fr (r_X_s *X, Widget parent) |
Widget | r_gr_mk_max_dist_w (r_X_s *X, Widget parent) |
Widget | r_wt_mk_fillval_fr (r_X_s *X, Widget parent) |
Widget | r_gr_mk_fillval_fr (r_X_s *X, Widget parent) |
Widget | r_gr_mk_range_fr (r_X_s *X, Widget parent) |
Widget | r_wt_mk_range_fr (r_X_s *X, Widget parent) |
void | r_any_cb_unfill (Widget w, XtPointer client_data, XtPointer call_data) |
int | r_wt_bad_ngbr_exists (r_alg_s *A, int current, int testval) |
int | r_wt_check_insert (r_alg_s *A, int current) |
void | r_wt_cb_fill (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_gr_cb_fill (Widget w, XtPointer client_data, XtPointer call_data) |
int | r_gr_check_insert (r_alg_s *A, points_t *B, int current) |
int | r_add_to_boundary (points_t *B, int index) |
void | r_wt_set_neighbors (r_alg_s *A) |
void | r_wt_cb_set_diag_conn (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_wt_cb_set_min_nbrs (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_gr_cb_set_max_dist (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_HL_cb_set_maxsize (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_HL_cb_set_fill_val (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_INT_cb_set_fill_val (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_wt_cb_set_fill_val (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_gr_set_fill_val (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_wt_cb_set_range (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_gr_cb_set_range (Widget w, XtPointer client_data, XtPointer call_data) |
int | r_afni_set_fill_point (int *coord, r_alg_s *A) |
Widget | r_mk_scale_bar (Widget parent, char *title, int min, int max, int value, int decimal_places, XtCallbackProc callback) |
void | r_main_show_alg_vals (r_alg_s *A) |
void | r_main_show_INT_vals (interp_s *I) |
void | r_main_show_HL_vals (holes_s *H) |
void | r_main_show_pt_conn_vals (r_pt_conn_s *PC) |
void | r_main_cb_help (Widget w, XtPointer client_data, XtPointer call_data) |
void | r_main_cb_quit (void) |
void | r_main_cb_saveas (Widget w, int client_data, XtPointer call_data) |
int | r_save_dataset_as (char *filename, int overwrite) |
void | r_main_cb_show_structs (void) |
Variables | |
PLUGIN_interface * | plint = NULL |
Widget | shell = NULL |
Widget | rowcol |
Widget | info_lab |
Widget | choose_pb |
Widget | done_pb |
Widget | undo_pb |
Widget | help_pb |
Widget | quit_pb |
Widget | save_pb |
MCW_arrowval * | value_av |
MCW_arrowval * | color_av |
MCW_arrowval * | mode_av |
char * | mode_strings [] |
int | mode_ints [] |
MCW_DC * | dc |
Three_D_View * | im3d |
THD_3dim_dataset * | dset |
int | color_index = 1 |
int | mode_ival = MODE_CURVE |
int | mode_index = DRAWING_LINES |
int | value_int = 1 |
float | value_float = 1.0 |
int | editor_open = 0 |
int | dset_changed = 0 |
int | recv_open = 0 |
int | recv_key = -1 |
int | undo_bufsiz = 0 |
int | undo_bufnum = 0 |
int | undo_bufuse = 0 |
void * | undo_buf = NULL |
int * | undo_xyz = NULL |
THD_dataxes | dax_save |
MCW_action_item | DRAW_actor [NACT] |
int | ndsl = 0 |
PLUGIN_dataset_link * | dsl = NULL |
Define Documentation
|
|
|
Definition at line 101 of file plug_roiedit.c. Referenced by r_main_cb_show_structs(). |
|
Definition at line 106 of file plug_roiedit.c. Referenced by r_main_cb_show_structs(). |
|
Definition at line 100 of file plug_roiedit.c. Referenced by r_main_cb_show_structs(). |
|
Definition at line 104 of file plug_roiedit.c. |
|
Definition at line 103 of file plug_roiedit.c. |
|
Definition at line 102 of file plug_roiedit.c. |
|
Definition at line 105 of file plug_roiedit.c. |
|
Definition at line 241 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 116 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
Function Documentation
|
Definition at line 5764 of file plug_roiedit.c. Referenced by DRAW_receiver(), and main(). |
|
Definition at line 4999 of file plug_roiedit.c. References DSET_NUM_TIMES, DSET_NVALS, dsl, THD_3dim_dataset::func_type, and ISANATBUCKET. Referenced by DRAW_make_widgets().
04999 { 05000 if( ISANATBUCKET(qset) ) /* 30 Nov 1997 */ 05001 sprintf(qnam,"%-*s [%s:%d]" , 05002 ltop,dsl[id].title , 05003 ANAT_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 05004 05005 else if( DSET_NUM_TIMES(qset) == 1 ) 05006 sprintf(qnam,"%-*s [%s]" , 05007 ltop,dsl[id].title , 05008 ANAT_prefixstr[qset->func_type] ) ; 05009 05010 else 05011 sprintf(qnam,"%-*s [%s:3D+t:%d]" , 05012 ltop,dsl[id].title , 05013 ANAT_prefixstr[qset->func_type] , DSET_NUM_TIMES(qset) ) ; 05014 05015 } else { 05016 if( ISFUNCBUCKET(qset) ) /* 30 Nov 1997 */ 05017 sprintf(qnam,"%-*s [%s:%d]" , 05018 ltop,dsl[id].title , 05019 FUNC_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 05020 05021 else if( DSET_NUM_TIMES(qset) == 1 ) 05022 sprintf(qnam,"%-*s [%s]" , 05023 ltop,dsl[id].title , 05024 FUNC_prefixstr[qset->func_type] ) ; 05025 05026 else 05027 sprintf(qnam,"%-*s [%s:3D+t:%d]" , 05028 ltop,dsl[id].title , 05029 FUNC_prefixstr[qset->func_type] , DSET_NVALS(qset) ) ; 05030 } 05031 05032 if( DSET_COMPRESSED(qset) ) strcat(qnam,"z") ; 05033 05034 strcpy( dsl[id].title , qnam ) ; 05035 } 05036 05037 /*--- make a popup chooser for the user to browse ---*/ 05038 05039 POPDOWN_strlist_chooser ; 05040 05041 strlist = (char **) XtRealloc( (char *)strlist , sizeof(char *)*ndsl ) ; 05042 for( id=0 ; id < ndsl ; id++ ) strlist[id] = dsl[id].title ; 05043 05044 sprintf( label , "AFNI Dataset from\nthe %s" , VIEW_typestr[vv] ) ; 05045 05046 MCW_choose_strlist( w , label , ndsl , -1 , strlist , 05047 DRAW_finalize_dset_CB , NULL ) ; 05048 05049 EXRETURN ; 05050 } 05051 05052 static void DRAW_finalize_dset_CB( Widget w, XtPointer fd, MCW_choose_cbs * cbs ) 05053 { 05054 int id = cbs->ival ; 05055 THD_3dim_dataset * qset ; 05056 XmString xstr ; 05057 char str[256] ; 05058 05059 ENTRY("DRAW_finalize_dset_CB"); 05060 05061 /* check for errors */ 05062 05063 if( ! editor_open ){ POPDOWN_strlist_chooser ; XBell(dc->display,100) ; EXRETURN ; } 05064 05065 if( dset != NULL && dset_changed ){ XBell(dc->display,100) ; EXRETURN ; } 05066 05067 if( id < 0 || id >= ndsl ){ XBell(dc->display,100) ; EXRETURN ; } 05068 05069 qset = PLUTO_find_dset( &(dsl[id].idcode) ) ; /* the new dataset? */ 05070 05071 if( qset == NULL ){ XBell(dc->display,100) ; EXRETURN ; } 05072 05073 if( ! EQUIV_DATAXES( im3d->wod_daxes , qset->daxes ) ){ 05074 XBell(dc->display,100) ; EXRETURN ; 05075 } 05076 05077 /* accept this dataset */ 05078 05079 dset = qset ; dset_changed = 0 ; SENSITIZE(save_pb,0) ; 05080 dax_save = *(dset->daxes) ; 05081 05082 /* write the informational label */ 05083 05084 if( DSET_BRICK_FACTOR(dset,0) == 0.0 ){ 05085 strcpy(str,dsl[id].title) ; 05086 } else { 05087 char abuf[16] ; 05088 AV_fval_to_char( DSET_BRICK_FACTOR(dset,0) , abuf ) ; 05089 sprintf(str,"%s\nbrick factor: %s", dsl[id].title , abuf ) ; 05090 } 05091 xstr = XmStringCreateLtoR( str , XmFONTLIST_DEFAULT_TAG ) ; 05092 XtVaSetValues( info_lab , XmNlabelString , xstr , NULL ) ; 05093 XmStringFree(xstr) ; 05094 05095 /* setup AFNI for drawing */ 05096 05097 if( ! recv_open ){ 05098 recv_key = AFNI_receive_init( im3d, RECEIVE_DRAWING_MASK, 05099 DRAW_receiver,NULL,"DRAW_receiver" ) ; 05100 05101 if( recv_key < 0 ){ 05102 (void) MCW_popup_message( im3d->vwid->top_shell , 05103 "Unable to establish\n" 05104 "connection to AFNI\n" 05105 "drawing routines!" , 05106 MCW_USER_KILL | MCW_TIMER_KILL ) ; 05107 05108 dset = NULL ; XBell(dc->display,100) ; EXRETURN ; 05109 } 05110 } 05111 05112 DSET_mallocize(dset) ; DSET_lock(dset) ; DSET_load(dset) ; 05113 05114 AFNI_receive_control( im3d, recv_key , mode_index , NULL ) ; 05115 AFNI_receive_control( im3d, recv_key , DRAWING_OVCINDEX, (void *)color_index ) ; 05116 recv_open = 1 ; 05117 05118 undo_bufuse = 0 ; SENSITIZE(undo_pb,0) ; 05119 05120 r_init_afni_vars( &gRA, dset ); 05121 05122 EXRETURN ; 05123 } 05124 05125 /*------------------------------------------------------------------- 05126 Callback for color menu 05127 ---------------------------------------------------------------------*/ 05128 05129 static void DRAW_color_CB( MCW_arrowval * av , XtPointer cd ) 05130 { 05131 color_index = av->ival ; 05132 05133 if( dset != NULL && recv_open ) 05134 AFNI_receive_control( im3d, recv_key, DRAWING_OVCINDEX, (void *)color_index ) ; 05135 05136 return ; 05137 } 05138 |
|
Definition at line 5217 of file plug_roiedit.c. Referenced by DRAW_make_widgets().
05222 { 05223 rERROR( "In DRAW_receiver() - gRCP.cur_pt is unset." ); 05224 EXRETURN; 05225 } |
|
Definition at line 4734 of file plug_roiedit.c. References editor_open, recv_key, recv_open, and shell.
04743 { 04744 ENTRY("DRAW_save_CB"); 04745 04746 if( dset == NULL ){ XBell( dc->display , 100 ) ; EXRETURN ; } 04747 04748 MCW_invert_widget(save_pb) ; 04749 04750 DSET_write(dset) ; dset_changed = 0 ; SENSITIZE(choose_pb,1) ; 04751 04752 MCW_invert_widget(save_pb) ; SENSITIZE(save_pb,0) ; 04753 EXRETURN ; 04754 } 04755 04756 /*------------------------------------------------------------------- 04757 Callback for help button |
|
Definition at line 5140 of file plug_roiedit.c. References AFNI_receive_control(), MCW_arrowval::ival, mode_index, mode_ints, mode_ival, recv_key, and recv_open.
05144 { 05145 mode_ival = av->ival ; 05146 mode_index = mode_ints[mode_ival] ; 05147 05148 if( dset != NULL && recv_open ) 05149 AFNI_receive_control( im3d, recv_key, mode_index , NULL ) ; 05150 05151 return ; 05152 } 05153 05154 /*------------------------------------------------------------------- 05155 Callback for value menu 05156 ---------------------------------------------------------------------*/ 05157 05158 static void DRAW_value_CB( MCW_arrowval * av , XtPointer cd ) 05159 { 05160 value_int = av->ival ; 05161 value_float = av->fval ; 05162 return ; 05163 } 05164 05165 /******************************************************************* 05166 Receive data from AFNI after drawing, etc. 05167 ********************************************************************/ 05168 05169 static void DRAW_receiver( int why , int np , void * vp , void * cbd ) 05170 { 05171 ENTRY("DRAW_receiver"); 05172 05173 switch( why ){ 05174 05175 default: 05176 fprintf(stderr,"DRAW_receiver: illegal why=%d\n",why) ; 05177 EXRETURN ; 05178 05179 /*-- we like this one --*/ 05180 05181 case RECEIVE_POINTS:{ 05182 int **ip = (int **)vp ; 05183 int *xd=ip[0] , *yd=ip[1] , *zd=ip[2] ; /* pts coords */ 05184 int mode=ip[3][0] ; /* how pts are organized */ 05185 int plane ; 05186 05187 if( np <= 0 ) EXRETURN ; /* some error? */ 05188 05189 plane = mode - SINGLE_MODE ; 05190 if( plane < 1 || plane > 3 ) plane = mode - PLANAR_MODE ; 05191 if( plane < 1 || plane > 3 ) plane = 0 ; 05192 05193 /* handle selection of initial point for vol_fill, otherwise, */ 05194 /* anything but flood mode --> just draw given points */ 05195 05196 if ( mode_ival == MODE_VOL_FILL ) 05197 { 05198 int coord; 05199 05200 if ( yd == NULL ) 05201 coord = *xd; 05202 else 05203 coord = *xd + 05204 *yd * DSET_NX(gRA.anat) + 05205 *zd * DSET_NX(gRA.anat) * DSET_NY(gRA.anat); 05206 05207 if ( r_afni_set_fill_point( &coord, &gRA ) < 0 ) 05208 EXRETURN ; 05209 05210 DRAW_into_dataset( 0, &coord, NULL, NULL, NULL ); 05211 } |
|
Definition at line 4848 of file plug_roiedit.c. References COXEMAIL, and TEXT_READONLY.
04855 :\n" 04856 " * It is important to understand the distinction between 'pixels'\n" 04857 " and 'voxels'. Pixels are on the screen, and while you are\n" 04858 " drawing, you are drawing pixels with the drawing color. When\n" 04859 " you release mouse button 2, those dataset voxels to which these\n" 04860 " pixels correspond are computed. The values stored in those\n" 04861 " voxels are then altered, and the dataset display is refreshed.\n" 04862 " * It is possible to draw on a montaged image window. However,\n" 04863 " only voxels from the first slice drawn into will be altered.\n" 04864 " * Using button 2 in an image or graph window before choosing a\n" 04865 " dataset to edit will cause the display to beep.\n" 04866 " * Closing the AFNI controller window that this was started from\n" 04867 " is the equivalent of pressing 'Quit'.\n" 04868 " * Doing something that causes the AFNI controller window to\n" 04869 " alter its 3D grid location or resolution is also the\n" 04870 " equivalent of pressing 'Quit'. This is because the 3D grid\n" 04871 " for the dataset being edited will no longer correspond to\n" 04872 " the 3D grid in the image and graph windows. Such actions\n" 04873 " include switching from 'View Brick' to 'Warp on Demand',\n" 04874 " switching datasets or sessions, and switching views.\n" 04875 " * You can only draw into the windows of the controller from which\n" 04876 " the Editor was started.\n" 04877 " * Only one copy of the Editor can be active at a time. If you\n" 04878 " use the plugin menu to call up the Editor when it is already\n" 04879 " open, that will simply pop the window up to the top of the\n" 04880 " stacking order. If you want to restart the Editor in a\n" 04881 " different AFNI controller, you must first close the Editor\n" 04882 " (via 'Done' or 'Quit') and then start it from the other\n" 04883 " controller's window.\n" 04884 " * Peculiar and confusing things can happen using 'Warp-on-Demand'\n" 04885 " with the Editor. My advice is not to try this.\n" 04886 " * Edit at your own risk! Be careful out there.\n" 04887 "\n" 04888 "SUGGESTIONS?\n" 04889 " * Please send them to " COXEMAIL "\n" 04890 " * Even better than suggestions are implementations.\n" 04891 04892 04893 , TEXT_READONLY ) ; 04894 return ; 04895 } 04896 04897 /*------------------------------------------------------------------- 04898 Callback for choose button. 04899 Criteria for datasets that can be edited: 04900 - must be in current session 04901 - must have actual bricks 04902 - only datasets with nvals=1 can be edited 04903 - bricks must be on same grid (dataxes) as AFNI controller 04904 Much of this code is adapted from PLUG_choose_dataset_CB. 04905 [28 Jul 2003] Modified for new THD_session struct. 04906 ---------------------------------------------------------------------*/ 04907 04908 static int ndsl = 0 ; 04909 static PLUGIN_dataset_link * dsl = NULL ; 04910 04911 static void DRAW_choose_CB( Widget w, XtPointer client_data, XtPointer call_data ) 04912 { 04913 THD_session * ss = im3d->ss_now ; /* current session */ 04914 int vv = im3d->vinfo->view_type ; /* view type */ 04915 THD_3dim_dataset * qset ; 04916 int id , ltop , llen ; 04917 char qnam[THD_MAX_NAME] , label[THD_MAX_NAME] ; 04918 static char ** strlist = NULL ; 04919 04920 ENTRY("DRAW_choose_CB"); 04921 04922 /* can't do this if a dataset is already active and changed */ 04923 04924 if( dset != NULL && dset_changed ){ 04925 (void) MCW_popup_message( choose_pb , 04926 "Can't change datasets until\n" 04927 "you save the changes you've\n" 04928 "already made. Or you could\n" 04929 "'Quit' and re-start the Editor" , 04930 MCW_USER_KILL | MCW_TIMER_KILL ) ; 04931 XBell( dc->display , 100 ) ; 04932 EXRETURN ; 04933 } 04934 04935 /* RCR - If data is not on disk, do not accept it (must be a warp). 04936 Inform the user that they might have to write the anat. 04937 */ 04938 if ( ! DSET_ONDISK( im3d->anat_now ) ) 04939 { 04940 (void) MCW_popup_message( choose_pb , 04941 "Anat data is not actually on disk!\n" 04942 "You may be in 'Warp-on-Demand' mode.\n" 04943 "\n" 04944 "Please take the following steps :\n" 04945 " 1. 'Write Anat'\n" 04946 " 2. 'Rescan This'\n" 04947 " 3. Set to 'View Anat Data Brick'", 04948 MCW_USER_KILL | MCW_TIMER_KILL ) ; 04949 XBell( dc->display , 100 ) ; 04950 EXRETURN ; 04951 } 04952 04953 /* initialize */ 04954 04955 ndsl = 0 ; 04956 04957 /* scan anats */ 04958 04959 for( id=0 ; id < ss->num_dsset ; id++ ){ 04960 qset = ss->dsset[id][vv] ; 04961 04962 if( ! ISVALID_DSET (qset) ) continue ; /* skip */ 04963 if( ! DSET_INMEMORY(qset) ) continue ; 04964 if( DSET_NVALS(qset) > 1 ) continue ; 04965 if( ! EQUIV_DATAXES(qset->daxes,im3d->wod_daxes) ) continue ; 04966 04967 ndsl++ ; 04968 dsl = (PLUGIN_dataset_link *) 04969 XtRealloc( (char *) dsl , sizeof(PLUGIN_dataset_link)*ndsl ) ; 04970 04971 make_PLUGIN_dataset_link( qset , dsl + (ndsl-1) ) ; 04972 } 04973 04974 /* found nothing? exit */ 04975 04976 if( ndsl < 1 ){ 04977 (void) MCW_popup_message( choose_pb , 04978 "Didn't find any datasets to edit!\n" 04979 "Check if:\n" 04980 " - you are in 'Warp-on-Demand' mode\n" 04981 " - you are in the correct session" , 04982 MCW_USER_KILL | MCW_TIMER_KILL ) ; 04983 XBell( dc->display , 100 ) ; |
|
Definition at line 5572 of file plug_roiedit.c. References undo_xyz, and value_float. Referenced by DRAW_receiver(), DRAW_redo_CB(), DRAW_ttatlas_CB(), and DRAW_undo_CB().
05574 { /* save into undo buffer */ 05575 ixyz = undo_xyz[ii] ; 05576 up[ii] = (ixyz >= 0 && ixyz < nxyz) ? bp[ixyz] : 0 ; 05577 } 05578 05579 for( ii=0 ; ii < np ; ii++ ){ /* put into dataset */ 05580 ixyz = undo_xyz[ii] ; 05581 if( ixyz >= 0 && ixyz < nxyz ) 05582 bp[ixyz] = (vvv==NULL) ? val : vvv[ii] ; 05583 } 05584 } 05585 break ; 05586 05587 case MRI_byte:{ 05588 byte * bp = (byte *) DSET_BRICK_ARRAY(dset,0) ; 05589 byte * up = (byte *) undo_buf ; 05590 byte * vvv = (byte *) var ; 05591 byte val = (byte) (value_float/bfac) ; 05592 05593 for( ii=0 ; ii < np ; ii++ ){ 05594 ixyz = undo_xyz[ii] ; 05595 up[ii] = (ixyz >= 0 && ixyz < nxyz) ? bp[ixyz] : 0 ; 05596 } 05597 for( ii=0 ; ii < np ; ii++ ){ 05598 ixyz = undo_xyz[ii] ; 05599 if( ixyz >= 0 && ixyz < nxyz ) 05600 bp[ixyz] = (vvv==NULL) ? val : vvv[ii] ; 05601 } 05602 } 05603 break ; 05604 05605 case MRI_float:{ 05606 float * bp = (float *) DSET_BRICK_ARRAY(dset,0) ; 05607 float * up = (float *) undo_buf ; 05608 float * vvv = (float *) var ; 05609 float val = (value_float/bfac) ; 05610 05611 for( ii=0 ; ii < np ; ii++ ){ 05612 ixyz = undo_xyz[ii] ; 05613 up[ii] = (ixyz >= 0 && ixyz < nxyz) ? bp[ixyz] : 0.0 ; 05614 } 05615 for( ii=0 ; ii < np ; ii++ ){ 05616 ixyz = undo_xyz[ii] ; 05617 if( ixyz >= 0 && ixyz < nxyz ) 05618 bp[ixyz] = (vvv==NULL) ? val : vvv[ii] ; 05619 } 05620 } 05621 break ; 05622 05623 case MRI_complex:{ 05624 complex * bp = (complex *) DSET_BRICK_ARRAY(dset,0) ; 05625 complex * up = (complex *) undo_buf ; 05626 complex * vvv = (complex *) var ; 05627 complex val ; 05628 static complex cxzero = { 0.0 , 0.0 } ; 05629 05630 val = CMPLX( (value_float/bfac) , 0.0 ) ; 05631 05632 for( ii=0 ; ii < np ; ii++ ){ 05633 ixyz = undo_xyz[ii] ; 05634 up[ii] = (ixyz >= 0 && ixyz < nxyz) ? bp[ixyz] : cxzero ; 05635 } 05636 for( ii=0 ; ii < np ; ii++ ){ 05637 ixyz = undo_xyz[ii] ; 05638 if( ixyz >= 0 && ixyz < nxyz ) 05639 bp[ixyz] = (vvv==NULL) ? val : vvv[ii] ; 05640 } 05641 } 05642 break ; 05643 05644 } /* end of switch on brick type */ 05645 05646 /* recompute statistics, if the loaded value is big or small */ 05647 05648 if( !ISVALID_STATISTIC(dset->stats) || 05649 vload > dset->stats->bstat[0].max || 05650 vload < dset->stats->bstat[0].min ) THD_load_statistics( dset ) ; 05651 05652 /* now redisplay dataset, in case anyone is looking at it */ 05653 05654 PLUTO_dset_redisplay( dset ) ; 05655 05656 undo_bufuse = np ; 05657 dset_changed = 1 ; 05658 SENSITIZE(save_pb,1) ; 05659 SENSITIZE(choose_pb,0) ; 05660 SENSITIZE(undo_pb,1) ; 05661 05662 EXRETURN ; 05663 } 05664 05665 /*--------------------------------------------------------------------------- 05666 Flood filling a byte array: 05667 nx = 1st dimension 05668 ny = 2nd dimension 05669 ix = start point 05670 jy = end point 05671 ar = array, with 0's everwhere except 1's as barriers to flooding 05672 05673 All filled points (starting with ix,jy) will get the value 2. 05674 -----------------------------------------------------------------------------*/ 05675 05676 static void DRAW_2dfiller( int nx , int ny , int ix , int jy , byte * ar ) 05677 { 05678 int ii,jj , ip,jp , num ; 05679 05680 ENTRY("DRAW_2dfiller"); 05681 05682 #define AR(i,j) ar[(i)+(j)*nx] 05683 05684 /* fill out in cross from 1st point */ 05685 05686 ip = ix ; jp = jy ; AR(ip,jp) = 2 ; 05687 05688 for( ii=ip+1; ii < nx && AR(ii,jp) == 0; ii++ ) AR(ii,jp) = 2; 05689 for( ii=ip-1; ii >= 0 && AR(ii,jp) == 0; ii-- ) AR(ii,jp) = 2; 05690 for( jj=jp+1; jj < ny && AR(ip,jj) == 0; jj++ ) AR(ip,jj) = 2; 05691 for( jj=jp-1; jj >= 0 && AR(ip,jj) == 0; jj-- ) AR(ip,jj) = 2; 05692 05693 /* brute force repetition of the cross technique */ 05694 05695 do { 05696 num = 0 ; 05697 for( jp=0 ; jp < ny ; jp++ ){ 05698 for( ip=0 ; ip < nx ; ip++ ){ 05699 if( AR(ip,jp) == 2 ){ 05700 for( ii=ip+1; ii < nx && AR(ii,jp) == 0; ii++ ){ AR(ii,jp) = 2; num++; } 05701 for( ii=ip-1; ii >= 0 && AR(ii,jp) == 0; ii-- ){ AR(ii,jp) = 2; num++; } 05702 for( jj=jp+1; jj < ny && AR(ip,jj) == 0; jj++ ){ AR(ip,jj) = 2; num++; } 05703 for( jj=jp-1; jj >= 0 && AR(ip,jj) == 0; jj-- ){ AR(ip,jj) = 2; num++; } 05704 } 05705 } 05706 } 05707 } while( num > 0 ) ; 05708 05709 EXRETURN ; 05710 } 05711 |
|
Definition at line 141 of file plug_roiedit.c. References AFNI_controller_index(), choose_pb, Three_D_View::dc, DRAW_make_widgets(), dset_changed, editor_open, ENTRY, gRX, IM3D_OPEN, info_lab, r_X_s::main, r_X_s::main_is_open, plint, PLUTO_set_topshell(), r_check_host(), recv_key, recv_open, RETURN, RWC_visibilize_widget(), save_pb, SENSITIZE, shell, undo_bufuse, and undo_pb. Referenced by PLUGIN_init().
00142 { 00143 XmString xstr ; 00144 00145 ENTRY("DRAW_main"); 00146 00147 #if 0 00148 /* RCR - this plugin is not authorized outside of the mcw domain */ 00149 if ( ! r_check_host( ) ) 00150 return NULL; 00151 #endif 00152 00153 /*-- sanity checks --*/ 00154 00155 if( ! IM3D_OPEN(plint->im3d) ) RETURN( "AFNI Controller\nnot opened?!") ; 00156 00157 if( editor_open ) 00158 { 00159 XMapRaised( XtDisplay(shell) , XtWindow(shell) ) ; 00160 00161 if ( gRX.main_is_open ) 00162 { 00163 XMapRaised( XtDisplay( gRX.main ) , XtWindow( gRX.main ) ) ; 00164 } 00165 else 00166 { 00167 XtMapWidget( gRX.main ); 00168 gRX.main_is_open = 1; 00169 } 00170 00171 RETURN(NULL); 00172 } 00173 00174 im3d = plint->im3d ; /* save for local use */ 00175 00176 /*-- create widgets, first time through --*/ 00177 00178 if( shell == NULL ){ 00179 dc = im3d->dc ; /* save this too */ 00180 DRAW_make_widgets() ; 00181 PLUTO_set_topshell( plint , shell ) ; /* 22 Sep 2000 */ 00182 RWC_visibilize_widget( shell ) ; /* 27 Sep 2000 */ 00183 } 00184 00185 /*-- set titlebar --*/ 00186 00187 { static char clabel[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; /* see afni_func.c */ 00188 char ttl[PLUGIN_STRING_SIZE] ; int ic ; 00189 00190 ic = AFNI_controller_index(im3d) ; /* find out which controller */ 00191 00192 if( ic >=0 && ic < 26 ){ 00193 sprintf( ttl , "'AFNI' GyrusFinder [%c]" , clabel[ic] ) ; 00194 XtVaSetValues( shell , XmNtitle , ttl , NULL ) ; 00195 } 00196 } 00197 00198 /*-- set the info label --*/ 00199 00200 xstr = XmStringCreateLtoR( "[No dataset]" , 00201 XmFONTLIST_DEFAULT_TAG ) ; 00202 XtVaSetValues( info_lab , XmNlabelString , xstr , NULL ) ; 00203 XmStringFree(xstr) ; 00204 00205 /*-- pop the widget up --*/ 00206 00207 XtMapWidget(shell) ; 00208 00209 if ( gRX.main_is_open ) 00210 { 00211 XMapRaised( XtDisplay( gRX.main ) , XtWindow( gRX.main ) ) ; 00212 } 00213 else 00214 { 00215 XtMapWidget( gRX.main ); 00216 gRX.main_is_open = 1; 00217 } 00218 00219 00220 /*-- misc initialization --*/ 00221 00222 dset = NULL ; /* not editing anything */ 00223 dset_changed = 0 ; /* not yet changed */ 00224 editor_open = 1 ; /* editor is now open for business */ 00225 recv_open = 0 ; /* receiver is not yet open */ 00226 recv_key = -1; 00227 00228 SENSITIZE(undo_pb,0) ; undo_bufuse = 0 ; 00229 SENSITIZE(save_pb,0) ; 00230 SENSITIZE(choose_pb,1) ; 00231 00232 RETURN(NULL) ; 00233 } |
|
Definition at line 261 of file plug_roiedit.c. References choose_pb, color_index, MCW_action_item::data, MCW_DC::display, done_pb, DRAW_choose_CB(), DRAW_color_CB(), DRAW_mode_CB(), DRAW_quit_CB(), DRAW_value_CB(), ENTRY, help_pb, info_lab, MCW_action_area(), MCW_AV_downup, MCW_AV_editext, MCW_isitmwm, MCW_reghelp_children(), MCW_reghint_children(), MCW_register_help(), MCW_register_hint(), mode_strings, NACT, MCW_DCOV::ncol_ov, new_MCW_arrowval(), new_MCW_colormenu(), new_MCW_optmenu(), NUM_modes, MCW_DC::ovc, plint, quit_pb, r_main_mk_main_shell(), rowcol, save_pb, shell, undo_pb, value_int, and MCW_arrowval::wrowcol.
00262 { 00263 XmString xstr ; 00264 00265 ENTRY("DRAW_make_widgets"); 00266 00267 /*** top level shell for window manager ***/ 00268 00269 shell = 00270 XtVaAppCreateShell( 00271 "AFNI" , "AFNI" , topLevelShellWidgetClass , dc->display , 00272 XmNtitle , "GFinder Editor", /* top of window */ 00273 XmNiconName , "GFinder" , /* label on icon */ 00274 XmNdeleteResponse , XmDO_NOTHING , /* deletion handled below */ 00275 XmNallowShellResize , True , /* let code resize shell? */ 00276 XmNmappedWhenManaged , False , /* must map it manually */ 00277 XmNinitialResourcesPersistent , False , 00278 NULL ) ; 00279 00280 if( afni48_good ) /* set icon pixmap */ 00281 XtVaSetValues( shell , 00282 XmNiconPixmap , afni48_pixmap , 00283 NULL ) ; 00284 00285 if( MCW_isitmwm(shell) ) /* remove some MWM functions */ 00286 XtVaSetValues( shell , 00287 XmNmwmFunctions , 00288 MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE , 00289 NULL ) ; 00290 00291 XmAddWMProtocolCallback( /* make "Close" window menu work */ 00292 shell , 00293 XmInternAtom( dc->display , "WM_DELETE_WINDOW" , False ) , 00294 DRAW_quit_CB , (XtPointer) plint ) ; 00295 00296 /*** rowcolumn widget to hold all user interface stuff ***/ 00297 00298 rowcol = XtVaCreateWidget( 00299 "AFNI" , xmRowColumnWidgetClass , shell , 00300 XmNpacking , XmPACK_TIGHT , 00301 XmNorientation , XmVERTICAL , 00302 XmNtraversalOn , False , 00303 XmNinitialResourcesPersistent , False , 00304 NULL ) ; 00305 00306 /*** label at top to let user know who we are ***/ 00307 00308 xstr = XmStringCreateLtoR( "[No dataset]" , 00309 XmFONTLIST_DEFAULT_TAG ) ; 00310 info_lab = XtVaCreateManagedWidget( 00311 "AFNI" , xmLabelWidgetClass , rowcol , 00312 XmNlabelString , xstr , 00313 XmNinitialResourcesPersistent , False , 00314 NULL ) ; 00315 XmStringFree(xstr) ; 00316 MCW_register_help( info_lab , "Shows dataset being edited" ) ; 00317 MCW_register_hint( info_lab , "Shows dataset being edited" ) ; 00318 00319 /*** separator for visual neatness ***/ 00320 00321 (void) XtVaCreateManagedWidget( 00322 "AFNI" , xmSeparatorWidgetClass , rowcol , 00323 XmNseparatorType , XmSINGLE_LINE , 00324 XmNinitialResourcesPersistent , False , 00325 NULL ) ; 00326 00327 /*** button to let user choose dataset to edit ***/ 00328 00329 xstr = XmStringCreateLtoR( "Choose Dataset" , XmFONTLIST_DEFAULT_TAG ) ; 00330 choose_pb = XtVaCreateManagedWidget( 00331 "AFNI" , xmPushButtonWidgetClass , rowcol , 00332 XmNlabelString , xstr , 00333 XmNtraversalOn , False , 00334 XmNinitialResourcesPersistent , False , 00335 NULL ) ; 00336 XmStringFree(xstr) ; 00337 XtAddCallback( choose_pb, XmNactivateCallback, DRAW_choose_CB, NULL ) ; 00338 MCW_register_help( choose_pb , 00339 "Use this to popup a\n" 00340 "'chooser' that lets\n" 00341 "you select which\n" 00342 "dataset to edit." 00343 ) ; 00344 MCW_register_hint( choose_pb , "Popup a dataset chooser" ) ; 00345 00346 /*** arrowval to choose value that is drawn into dataset voxels ***/ 00347 00348 value_av = new_MCW_arrowval( rowcol , "Drawing Value " , 00349 MCW_AV_downup , -32767,32767,value_int , 00350 MCW_AV_editext , 0 , 00351 DRAW_value_CB , NULL , NULL,NULL ) ; 00352 00353 MCW_reghelp_children( value_av->wrowcol , 00354 "Use this to set the value that\n" 00355 "will be drawn into the dataset\n" 00356 "using mouse button 2." 00357 ) ; 00358 MCW_reghint_children( value_av->wrowcol , "Goes into dataset voxels" ) ; 00359 00360 /*** option menu to choose drawing color ***/ 00361 00362 color_av = new_MCW_colormenu( rowcol , "Drawing Color " , dc , 00363 1 , dc->ovc->ncol_ov - 1 , color_index , 00364 DRAW_color_CB , NULL ) ; 00365 00366 MCW_reghelp_children( color_av->wrowcol , 00367 "Use this to set the color that is\n" 00368 "shown during mouse button 2 drawing.\n" 00369 "N.B.: After drawing is completed,\n" 00370 " the dataset will be displayed\n" 00371 " with the chosen value replacing\n" 00372 " the drawing color. This color\n" 00373 " is used ONLY while button 2 is\n" 00374 " actually pressed down." 00375 ) ; 00376 MCW_reghint_children( color_av->wrowcol , "Used when button 2 is drawing" ) ; 00377 00378 /*** arrowval to choose drawing mode ***/ 00379 00380 mode_av = new_MCW_optmenu( rowcol , "Drawing Mode " , 00381 0 , NUM_modes-1 , 0,0 , 00382 DRAW_mode_CB , NULL , 00383 MCW_av_substring_CB , mode_strings ) ; 00384 00385 MCW_reghelp_children( mode_av->wrowcol , 00386 "Use this to set the way in which\n" 00387 "drawing pixels on the screen is\n" 00388 "used to select dataset voxels:\n" 00389 "Open Curve = voxels picked along lines drawn;\n" 00390 "Closed Curve = voxels forming a closed curve\n" 00391 "Points = only voxels at X11 notify pixels;\n" 00392 "Flood->Value = flood fill from the chosen point\n" 00393 " out to points = Drawing Value\n" 00394 "Flood->Nonzero = flood fill from chosen point out\n" 00395 " to any nonzero point" 00396 ) ; 00397 MCW_reghint_children( mode_av->wrowcol , "How voxels are chosen") ; 00398 00399 /*** separator for visual neatness ***/ 00400 00401 (void) XtVaCreateManagedWidget( 00402 "AFNI" , xmSeparatorWidgetClass , rowcol , 00403 XmNseparatorType , XmSINGLE_LINE , 00404 XmNinitialResourcesPersistent , False , 00405 NULL ) ; 00406 00407 /*** a set of action buttons below the line ***/ 00408 00409 (void) MCW_action_area( rowcol , DRAW_actor , NACT ) ; 00410 00411 undo_pb = (Widget) DRAW_actor[0].data ; 00412 help_pb = (Widget) DRAW_actor[1].data ; 00413 quit_pb = (Widget) DRAW_actor[2].data ; 00414 save_pb = (Widget) DRAW_actor[3].data ; 00415 done_pb = (Widget) DRAW_actor[4].data ; 00416 00417 /*** that's all (for Bob) ***/ 00418 00419 XtManageChild(rowcol) ; 00420 XtRealizeWidget(shell) ; /* will not be mapped */ 00421 00422 r_main_mk_main_shell( ); 00423 00424 EXRETURN; 00425 } |
|
Definition at line 5231 of file plug_roiedit.c. Referenced by DRAW_make_widgets().
|
|
Definition at line 4799 of file plug_roiedit.c. Referenced by DRAW_make_widgets(), and DRAW_receiver().
04855 :\n"
|
|
Definition at line 5257 of file plug_roiedit.c. References gRA, gRCP, r_alg_s::nx, r_alg_s::ny, r_add_to_boundary(), and R_DIST_STEP.
05262 { 05263 coord = (int)fx + gRA.nx*((int)fy + gRA.ny*(int)fz); 05264 r_add_to_boundary( Bp, coord ); 05265 05266 fx += dx; 05267 fy += dy; 05268 fz += dz; 05269 } 05270 05271 coord = gRCP.dest.x + gRA.nx*(gRCP.dest.y+gRA.ny*gRCP.dest.z); 05272 r_add_to_boundary( Bp, coord ); /* add last point */ 05273 05274 DRAW_into_dataset( Bp->used, Bp->points, NULL, NULL, NULL ); 05275 05276 gRCP.cur_pt = 1; 05277 05278 /* 05279 ** store the line as an interpolator line : 05280 ** DRAW_into_dataset() was edited to check for MODE_CONN_PTS 05281 ** when it stores the incoming line (point set). 05282 */ 05283 } 05284 } 05285 else if( plane == 0 || 05286 ((mode_ival != MODE_FLOOD_VAL) && (mode_ival != MODE_FLOOD_NZ)) ){ 05287 05288 DRAW_into_dataset( np , xd,yd,zd , NULL ) ; 05289 05290 } else { 05291 05292 /* flood mode! */ 05293 05294 int ityp = DSET_BRICK_TYPE(dset,0) ; 05295 float bfac = DSET_BRICK_FACTOR(dset,0) ; 05296 int nx=DSET_NX(dset) , ny=DSET_NY(dset) , nz=DSET_NZ(dset) , 05297 nxy = nx*ny , nxyz = nxy*nz , ii,jj , ixyz ; 05298 int base , di,dj , itop,jtop,nij , xx=xd[0],yy=yd[0],zz=zd[0] , 05299 ix,jy ; 05300 byte * pl ; 05301 int nfill , * xyzf , nf ; 05302 05303 /* compute stuff for which plane we are in: 05304 1 -> yz , 2 -> xz , 3 -> xy */ 05305 05306 switch(plane){ 05307 case 1: base=xx ; di=nx; dj=nxy; itop=ny; jtop=nz; 05308 ix=yy; jy=zz; break; 05309 case 2: base=yy*nx ; di=1 ; dj=nxy; itop=nx; jtop=nz; 05310 ix=xx; jy=zz; break; 05311 case 3: base=zz*nxy; di=1 ; dj=nx ; itop=nx; jtop=ny; 05312 ix=xx; jy=yy; break; 05313 } 05314 05315 /* create a 2D array with 0 where dataset != blocking value 05316 and with 1 where dataset == blocking value */ 05317 05318 nij = itop*jtop ; 05319 pl = (byte *) malloc( sizeof(byte) * nij ) ; 05320 memset( pl , 0 , sizeof(byte) * nij ) ; 05321 05322 if( bfac == 0.0 ) bfac = 1.0 ; 05323 switch(ityp){ 05324 05325 case MRI_short:{ 05326 short * bp = (short *) DSET_BRICK_ARRAY(dset,0) ; 05327 short val = (short) (value_float/bfac) ; 05328 05329 if( mode_ival == MODE_FLOOD_VAL ){ 05330 for( jj=0 ; jj < jtop ; jj++ ) 05331 for( ii=0 ; ii < itop ; ii++ ){ 05332 ixyz = base + ii*di + jj*dj ; 05333 if( bp[ixyz] == val ) pl[ii+jj*itop] = 1 ; 05334 } 05335 } else { 05336 for( jj=0 ; jj < jtop ; jj++ ) 05337 for( ii=0 ; ii < itop ; ii++ ){ 05338 ixyz = base + ii*di + jj*dj ; 05339 if( bp[ixyz] != 0 ) pl[ii+jj*itop] = 1 ; 05340 } 05341 } 05342 } 05343 break ; 05344 05345 case MRI_byte:{ 05346 byte * bp = (byte *) DSET_BRICK_ARRAY(dset,0) ; 05347 byte val = (byte) (value_float/bfac) ; 05348 05349 if( mode_ival == MODE_FLOOD_VAL ){ 05350 for( jj=0 ; jj < jtop ; jj++ ) 05351 for( ii=0 ; ii < itop ; ii++ ){ 05352 ixyz = base + ii*di + jj*dj ; 05353 if( bp[ixyz] == val ) pl[ii+jj*itop] = 1 ; 05354 } 05355 } else { 05356 for( jj=0 ; jj < jtop ; jj++ ) 05357 for( ii=0 ; ii < itop ; ii++ ){ 05358 ixyz = base + ii*di + jj*dj ; 05359 if( bp[ixyz] != 0 ) pl[ii+jj*itop] = 1 ; 05360 } 05361 } 05362 } 05363 break ; 05364 05365 case MRI_float:{ 05366 float * bp = (float *) DSET_BRICK_ARRAY(dset,0) ; 05367 float val = (value_float/bfac) ; 05368 05369 if( mode_ival == MODE_FLOOD_VAL ){ 05370 for( jj=0 ; jj < jtop ; jj++ ) 05371 for( ii=0 ; ii < itop ; ii++ ){ 05372 ixyz = base + ii*di + jj*dj ; 05373 if( bp[ixyz] == val ) pl[ii+jj*itop] = 1 ; 05374 } 05375 } else { 05376 for( jj=0 ; jj < jtop ; jj++ ) 05377 for( ii=0 ; ii < itop ; ii++ ){ 05378 ixyz = base + ii*di + jj*dj ; 05379 if( bp[ixyz] != 0.0 ) pl[ii+jj*itop] = 1 ; 05380 } 05381 } 05382 } 05383 break ; 05384 05385 default: 05386 free(pl) ; 05387 fprintf(stderr, 05388 "Flood not implemented for datasets of type %s\a\n", 05389 MRI_TYPE_name[ityp] ) ; 05390 EXRETURN ; 05391 05392 } /* end of switch on type */ 05393 05394 /* start point must be a 0 (can't fill from an edge) */ 05395 05396 if( pl[ix+jy*itop] == 1 ){ 05397 free(pl) ; XBell(dc->display,100) ; EXRETURN ; 05398 } 05399 05400 /* call a routine to fill the array */ 05401 05402 DRAW_2dfiller( itop,jtop , ix,jy , pl ) ; 05403 05404 /* all filled points are 2 --> these are the locations to draw */ 05405 05406 nfill = 0 ; 05407 for( ii=0 ; ii < nij ; ii++ ) nfill += (pl[ii] == 2) ; 05408 if( nfill == 0 ){ free(pl) ; XBell(dc->display,100) ; EXRETURN ; } 05409 05410 xyzf = (int *) malloc( sizeof(int) * nfill ) ; 05411 05412 for( nf=0,jj=0 ; jj < jtop ; jj++ ){ 05413 for( ii=0 ; ii < itop ; ii++ ){ 05414 if( pl[ii+jj*itop] == 2 ) 05415 xyzf[nf++] = base + ii*di + jj*dj ; 05416 } 05417 } 05418 05419 free(pl) ; 05420 DRAW_into_dataset( nfill , xyzf,NULL,NULL , NULL ) ; 05421 free(xyzf) ; 05422 05423 } /* end of flooding */ 05424 05425 } /* end of dealing with drawn points */ 05426 break ; 05427 05428 /*-- user closed the controller window!? (the fiend) */ 05429 05430 case RECEIVE_CLOSURE:{ 05431 if( dset != NULL && dset_changed ) XBell(dc->display,100) ; /* protest */ 05432 DRAW_quit_CB(NULL,NULL,NULL) ; /* and die */ 05433 } 05434 break ; 05435 05436 /*-- user altered the controller window!? */ 05437 05438 case RECEIVE_ALTERATION:{ 05439 05440 /* if we are already editing a dataset, then 05441 check if the grid has changed -- if it has, must quit */ 05442 05443 if( dset != NULL ){ 05444 if( ! EQUIV_DATAXES( im3d->wod_daxes , &dax_save ) ){ 05445 XBell( dc->display , 100 ) ; /* feeble protest */ 05446 DRAW_quit_CB(NULL,NULL,NULL) ; /* die */ 05447 05448 05449 { /* RCR stuff */ 05450 05451 printf("Initializing gRA...\n"); 05452 gRA.anat = NULL; 05453 gRA.func = NULL; 05454 gRA.adata = NULL; 05455 gRA.fdata = NULL; 05456 05457 r_main_cb_quit(); 05458 } 05459 05460 /* less feeble protest */ 05461 (void) MCW_popup_message( im3d->vwid->top_shell , 05462 "Controller grid was altered!\n" 05463 "Editor was forced to quit.\n" 05464 "Any un-Saved changes were lost." , 05465 MCW_USER_KILL | MCW_TIMER_KILL ) ; 05466 } 05467 } 05468 } 05469 break ; 05470 05471 } /* end of switch on why */ 05472 05473 EXRETURN ; 05474 } 05475 05476 /*-------------------------------------------------------------------------- 05477 Routine to draw into a dataset. 05478 If yd & zd are NULL, then xd is used as the direct 3D array index, 05479 otherwise xd,yd,zd are used as the 3-index. 05480 If var == NULL, then the value_av is used, otherwise the array var[] 05481 will be the source of the data. 05482 ----------------------------------------------------------------------------*/ 05483 05484 static void DRAW_into_dataset( int np , int * xd , int * yd , int * zd , void * var ) 05485 { 05486 int ityp = DSET_BRICK_TYPE(dset,0) ; 05487 float bfac = DSET_BRICK_FACTOR(dset,0) ; 05488 int nx=DSET_NX(dset) , ny=DSET_NY(dset) , nz=DSET_NZ(dset) , 05489 nxy = nx*ny , nxyz = nxy*nz , ii , ixyz ; 05490 float vload = 0.0 ; 05491 int nbytes ; 05492 05493 ENTRY("DRAW_into_dataset"); 05494 05495 /* sanity check */ 05496 05497 if( dset==NULL || np <= 0 || xd==NULL ) EXRETURN ; 05498 05499 /* make space for undo */ 05500 05501 nbytes = np * mri_datum_size((MRI_TYPE)ityp) ; /* bytes needed for save */ 05502 if( nbytes > undo_bufsiz ){ 05503 if( undo_buf != NULL ) free(undo_buf) ; 05504 undo_buf = malloc(nbytes) ; 05505 undo_bufsiz = nbytes ; 05506 } 05507 if( np > undo_bufnum ){ 05508 if( undo_xyz != NULL ) free(undo_xyz); 05509 undo_xyz = (int *) malloc(sizeof(int)*np) ; 05510 undo_bufnum = np ; 05511 } 05512 05513 /* compute (or copy) data index into undo_xyz */ 05514 05515 if( yd == NULL ){ /* direct supply of index */ 05516 memcpy(undo_xyz,xd,sizeof(int)*np) ; 05517 } else { /* collapse 3-index into 1 */ 05518 for( ii=0 ; ii < np ; ii++ ) 05519 undo_xyz[ii] = xd[ii] + yd[ii] * nx + zd[ii] * nxy ; 05520 } 05521 05522 /* actually copy data, based on type */ 05523 05524 if( bfac == 0.0 ) bfac = 1.0 ; 05525 vload = value_float ; 05526 05527 /* RCR - code for interpolation */ 05528 if ( ! gRI.afni_undo && 05529 ( ( mode_ival == MODE_CURVE ) || ( mode_ival == MODE_CLOSED ) || 05530 ( mode_ival == MODE_CONN_PTS ) ) 05531 ) 05532 { 05533 /* insert the points into the interpolation structure */ 05534 05535 int count, coord; 05536 int * ipA, * ipB, * ipc; 05537 points_t * Bp, tmpB; 05538 05539 if ( gRI.A.used == 0 ) /* if first IP set is empty, use it */ 05540 Bp = &gRI.A; 05541 else if ( gRI.B.used == 0 ) /* else, similarly for second */ 05542 Bp = &gRI.B; 05543 else /* else, move 2->1 and use second */ 05544 { 05545 tmpB = gRI.A; /* swap and empty new one */ 05546 gRI.A = gRI.B; 05547 gRI.B = tmpB; 05548 gRI.B.used = 0; 05549 05550 Bp = &gRI.B; 05551 } 05552 05553 for ( count = 0; count < np; count++ ) 05554 { 05555 coord = undo_xyz[ count ]; 05556 05557 if ( coord >= 0 && coord < nxyz ) 05558 r_add_to_boundary( Bp, coord ); 05559 } 05560 } 05561 05562 switch( ityp ){ |
|
Definition at line 4830 of file plug_roiedit.c.
04855 :\n"
|
|
Definition at line 4763 of file plug_roiedit.c. Referenced by DRAW_receiver().
04855 :\n"
|
|
Definition at line 5246 of file plug_roiedit.c. References gRCP, p, and R_DIST_STEP. Referenced by DRAW_make_widgets().
05262 { |
|
Definition at line 74 of file plug_roiedit.c. References DRAW_main(), plint, PLUTO_add_hint(), and PLUTO_set_sequence().
00075 { 00076 if( ncall > 0 ) return NULL ; /* only one interface */ 00077 00078 plint = PLUTO_new_interface( "Gyrus Finder" , NULL , NULL , 00079 PLUGIN_CALL_IMMEDIATELY , DRAW_main ) ; 00080 00081 PLUTO_add_hint( plint , "Interactive Region of Interest Editor" ) ; 00082 00083 PLUTO_set_sequence( plint , "z:Reynolds" ) ; 00084 00085 return plint ; 00086 } |
|
Definition at line 3510 of file plug_roiedit.c. References ENTRY, points_t::M, malloc, points_t::points, realloc, RETURN, and points_t::used.
03511 { 03512 ENTRY("r_add_to_boundary"); 03513 03514 if ( !B ) 03515 { 03516 fprintf( stderr, "Error: atb10\n" 03517 "Unexpected error - missing memory for bound structure!\n" ); 03518 RETURN(0); 03519 } 03520 else if ( ! B->points ) /* we need initial memory */ 03521 { 03522 B->used = 0; 03523 B->M = 50; 03524 B->points = (int *)malloc( B->M * sizeof( int ) ); 03525 03526 if ( B->points == NULL ) 03527 { 03528 fprintf( stderr, "Error: atb15\n" 03529 "Failed to allocate %d ints for boundary.\n", B->M ); 03530 RETURN(0); 03531 } 03532 } 03533 else if ( B->used == B->M ) /* then we need more memory */ 03534 { 03535 B->M *= 2; 03536 B->points = (int *)realloc( B->points, B->M * sizeof( int ) ); 03537 03538 if ( B->points == NULL ) 03539 { 03540 fprintf( stderr, "Error: atb20\n" 03541 "Failed to reallocate %d ints for boundary.\n", B->M ); 03542 RETURN(0); 03543 } 03544 } 03545 03546 B->points[B->used] = index; 03547 B->used++; 03548 03549 RETURN(1); 03550 } |
|
Definition at line 4208 of file plug_roiedit.c. References r_alg_s::adata, ENTRY, r_alg_s::fdata, r_alg_s::neighbors, r_alg_s::point_coord, r_alg_s::point_value, and RETURN.
04212 { 04213 ENTRY("r_afni_set_fill_point"); 04214 04215 A->point_coord = *coord; 04216 04217 /*printf("A = %p, A->adata = %p, A->point_coord = %d\n", 04218 A,A->adata,A->point_coord); 04219 fflush(stdout);*/ 04220 04221 if ( A->adata == NULL ) 04222 { 04223 /*fprintf(stderr,"Loading data...\n"); 04224 DSET_load(A->anat);*/ 04225 fputs("r_afni_set_fill_point(): Error: No anatomical data. ( A->adata = NULL )\n",stderr); 04226 fputs("This may have been caused by selecting Talairach\n",stderr); 04227 fputs("view before Switch Underlay or Switch Overlay.\n",stderr); 04228 fputs("Try setting the environment variable AFNI_VIEW_ANAT_BRICK\n",stderr); 04229 fputs("(The value is irrelevant) and run afni again.\n",stderr); 04230 RETURN(-1); 04231 } 04232 A->point_value = A->adata[A->point_coord]; /* no anat factor? */ 04233 04234 04235 printf( "coord = %d, adata = %d, fdata = %d, ndata = %d\n", 04236 *coord, A->adata[*coord], A->fdata[*coord], A->neighbors[*coord] ); 04237 04238 RETURN(0); 04239 } |
|
Definition at line 1454 of file plug_roiedit.c. References client_data, ENTRY, r_alg_s::fdata, r_alg_s::func, gRA, r_alg_s::nvox, PLUTO_dset_redisplay(), THD_load_statistics(), r_alg_s::undo_data, and value_int. Referenced by r_INT_mk_app_buttons().
01459 { 01460 short * fptr, * uptr; 01461 int clear_val = *( (int *)client_data ); 01462 int count; 01463 01464 ENTRY("r_any_cb_apply"); 01465 01466 if ( ! gRA.fdata ) /* error beep */ 01467 { 01468 fprintf( stderr, "%c", 7 ); 01469 EXRETURN; 01470 } 01471 01472 /* first store to undo_data */ 01473 fptr = gRA.fdata; uptr = gRA.undo_data; 01474 for ( count = 0; count < gRA.nvox; count++ ) 01475 *uptr++ = *fptr++; 01476 01477 for ( count = 0, fptr = gRA.fdata; count < gRA.nvox; count++, fptr++ ) 01478 if ( *fptr == clear_val ) 01479 *fptr = value_int; 01480 01481 THD_load_statistics( gRA.func ) ; 01482 PLUTO_dset_redisplay( gRA.func ) ; 01483 01484 EXRETURN; 01485 } |
|
Definition at line 2152 of file plug_roiedit.c. References r_alg_s::adata, client_data, ENTRY, r_alg_s::fdata, gRA, r_alg_s::nvox, r_histogram(), and rWARNING. Referenced by r_gr_mk_fill_buttons(), r_HL_mk_buttons(), r_INT_mk_app_buttons(), and r_wt_mk_fill_buttons().
02157 { 02158 short * fptr = gRA.fdata; 02159 short * aptr = gRA.adata; 02160 int fillval = *(int *)client_data; 02161 int count, min = 30000, max = -30000, size = 0; 02162 02163 ENTRY("r_any_cb_fill_stats"); 02164 02165 if ( ! gRA.fdata ) 02166 { 02167 fputc( 7, stderr ); /* hard-code a beep */ 02168 EXRETURN; 02169 } 02170 02171 for ( count = 0; count < gRA.nvox; count++ ) 02172 { 02173 if ( *fptr == fillval ) 02174 { 02175 if ( *aptr > max ) 02176 max = *aptr; 02177 if ( *aptr < min ) 02178 min = *aptr; 02179 size++; 02180 } 02181 02182 aptr++; 02183 fptr++; 02184 } 02185 02186 printf( "------------------------------------------------------------\n" ); 02187 02188 if ( size > 0 ) 02189 { 02190 printf( "fill region min = %d\n", min ); 02191 printf( "fill region max = %d\n", max ); 02192 printf( "fill region size = %d\n", size ); 02193 printf( "\n" ); 02194 02195 r_histogram( &gRA, min, max, fillval ); 02196 } 02197 else 02198 rWARNING( "Fill region is empty." ); 02199 02200 printf( "------------------------------------------------------------\n" ); 02201 02202 EXRETURN; 02203 } |
|
Definition at line 1495 of file plug_roiedit.c. References client_data, ENTRY, gRH, gRI, gRmessage, gRX, holes_s::main, interp_s::main, rERROR, r_X_s::save_as_file_d, and r_X_s::wtgr_main. Referenced by r_gr_mk_fill_buttons(), r_HL_mk_buttons(), r_HL_mk_main_shell(), r_INT_mk_app_buttons(), r_INT_mk_main_shell(), r_main_mk_save_as_fr(), and r_wtgr_mk_main_shell().
01500 { 01501 ENTRY("r_any_cb_hide"); 01502 01503 if ( ! strcmp( client_data, "INT" ) ) 01504 XtUnmapWidget( gRI.main ); 01505 else if ( ! strcmp( client_data, "HL" ) ) 01506 XtUnmapWidget( gRH.main ); 01507 else if ( ! strcmp( client_data, "wtgr" ) ) 01508 XtUnmapWidget( gRX.wtgr_main ); 01509 else if ( ! strcmp( client_data, "saveas" ) ) 01510 XtUnmanageChild( gRX.save_as_file_d ); 01511 else if ( ! strcmp( client_data, "all" ) ) 01512 { 01513 XtUnmapWidget( gRI.main ); 01514 XtUnmapWidget( gRH.main ); 01515 XtUnmapWidget( gRX.wtgr_main ); 01516 XtUnmanageChild( gRX.save_as_file_d ); 01517 } 01518 else 01519 { 01520 sprintf( gRmessage, "rach_10 : client_data is '%s'\n", client_data ); 01521 rERROR( gRmessage ); 01522 } 01523 01524 EXRETURN; 01525 } |
|
Definition at line 1535 of file plug_roiedit.c. References client_data, ENTRY, gRH, gRI, gRmessage, gRX, holes_s::main, interp_s::main, rERROR, r_X_s::save_as_file_d, and r_X_s::wtgr_main. Referenced by r_main_mk_show_buttons().
01540 { 01541 ENTRY("r_any_cb_raise"); 01542 01543 if ( ! strcmp( client_data, "INT" ) ) 01544 { 01545 XMapRaised( XtDisplay( gRI.main ) , XtWindow( gRI.main ) ); 01546 } 01547 else if ( ! strcmp( client_data, "HL" ) ) 01548 { 01549 XMapRaised( XtDisplay( gRH.main ) , XtWindow( gRH.main ) ); 01550 } 01551 else if ( ! strcmp( client_data, "wtgr" ) ) 01552 { 01553 XMapRaised( XtDisplay( gRX.wtgr_main ) , XtWindow( gRX.wtgr_main ) ); 01554 } 01555 else if ( ! strcmp( client_data, "saveas" ) ) 01556 { 01557 XtManageChild( gRX.save_as_file_d ); 01558 XtPopup( XtParent( gRX.save_as_file_d ), XtGrabNone ); 01559 } 01560 else if ( ! strcmp( client_data, "all" ) ) 01561 { 01562 XMapRaised( XtDisplay( gRI.main ) , XtWindow( gRI.main ) ); 01563 XMapRaised( XtDisplay( gRH.main ) , XtWindow( gRH.main ) ); 01564 XMapRaised( XtDisplay( gRX.wtgr_main ) , XtWindow( gRX.wtgr_main ) ); 01565 XtManageChild( gRX.save_as_file_d ); 01566 XtPopup( XtParent( gRX.save_as_file_d ), XtGrabNone ); 01567 } 01568 else 01569 { 01570 sprintf( gRmessage, "racr_10 : client_data is '%s'\n", client_data ); 01571 rERROR( gRmessage ); 01572 } 01573 01574 EXRETURN; 01575 } |
|
Definition at line 1585 of file plug_roiedit.c. References client_data, ENTRY, r_alg_s::fdata, r_alg_s::func, gRA, r_alg_s::nvox, PLUTO_dset_redisplay(), THD_load_statistics(), and r_alg_s::undo_data. Referenced by r_main_mk_show_buttons().
01590 { 01591 short * fptr, * uptr; 01592 int count; 01593 01594 ENTRY("r_any_cb_undo"); 01595 01596 fptr = gRA.fdata; uptr = gRA.undo_data; 01597 if ( !fptr || !uptr ) 01598 { 01599 fprintf(stderr,"** undo without pointers: (%p,%p)\n",fptr,uptr); 01600 EXRETURN; 01601 } 01602 01603 for ( count = 0; count < gRA.nvox; count++ ) 01604 *fptr++ = *uptr++; 01605 01606 THD_load_statistics( gRA.func ) ; 01607 PLUTO_dset_redisplay( gRA.func ) ; 01608 01609 EXRETURN; 01610 } |
|
Definition at line 3062 of file plug_roiedit.c. References client_data, ENTRY, r_alg_s::fdata, r_alg_s::func, gRA, r_alg_s::nvox, PLUTO_dset_redisplay(), THD_load_statistics(), and r_alg_s::undo_data. Referenced by r_gr_mk_fill_buttons(), r_HL_mk_buttons(), r_INT_mk_app_buttons(), and r_wt_mk_fill_buttons().
03067 { 03068 short * fptr, * uptr; 03069 int count; 03070 int unfill_val = *((int *)client_data); 03071 03072 ENTRY("r_any_cb_unfill"); 03073 03074 if ( ! gRA.fdata ) 03075 EXRETURN; 03076 03077 /* first store to undo_data */ 03078 fptr = gRA.fdata; uptr = gRA.undo_data; 03079 for ( count = 0; count < gRA.nvox; count++ ) 03080 *uptr++ = *fptr++; 03081 03082 for ( count = 0, fptr = gRA.fdata; count < gRA.nvox; count++, fptr++ ) 03083 if ( *fptr == unfill_val ) 03084 *fptr = 0; 03085 03086 THD_load_statistics( gRA.func ) ; 03087 PLUTO_dset_redisplay( gRA.func ) ; 03088 03089 EXRETURN; 03090 } |
|
Definition at line 3343 of file plug_roiedit.c. References r_alg_s::Bnew, r_alg_s::Bold, r_alg_s::border, client_data, dset_changed, ENTRY, r_alg_s::fdata, r_alg_s::func, holes_s::gr_edge, r_alg_s::gr_fill_val, r_alg_s::gr_max_dist, gRA, gRH, iptr, r_alg_s::neighbors, r_alg_s::nvox, r_alg_s::nx, r_alg_s::nxy, PLUTO_dset_redisplay(), r_alg_s::point_coord, points_t::points, R_BOUND_VAL, r_gr_check_insert(), rWARNING, THD_load_statistics(), r_alg_s::undo_data, and points_t::used. Referenced by r_gr_mk_fill_buttons().
03348 { 03349 points_t B; 03350 short * fnptr, * uptr; 03351 int * iptr; 03352 int count, dist, added, current; 03353 int nx, nxy; 03354 03355 ENTRY("r_gr_cb_fill"); 03356 03357 nx = gRA.nx; 03358 nxy = gRA.nxy; 03359 03360 03361 if ( ( gRA.point_coord == -1 ) || ( ! gRA.fdata ) ) 03362 { 03363 fputc( 7, stderr ); /* hard-code a beep */ 03364 EXRETURN; 03365 } 03366 03367 if ( gRA.gr_max_dist <= 0 ) 03368 EXRETURN; 03369 03370 if ( !gRA.Bold.points || !gRA.Bnew.points || 03371 !gRA.neighbors || !gRA.undo_data) { 03372 fprintf( stderr, "Error: rcfg10\n" 03373 "Memory failure, addresses are %p, %p, %p and %p.\n", 03374 gRA.Bold.points, gRA.Bnew.points, 03375 gRA.neighbors, gRA.undo_data ); 03376 EXRETURN; 03377 } 03378 03379 /* give the user an idea of what is happening */ 03380 rWARNING( "filling gray matter" ); 03381 03382 03383 /* first store to undo_data */ 03384 fnptr = gRA.fdata; uptr = gRA.undo_data; 03385 for ( count = 0; count < gRA.nvox; count++ ) 03386 *uptr++ = *fnptr++; 03387 03388 /* clear old memory */ 03389 for ( count = 0, fnptr = gRA.fdata; count < gRA.nvox; count++, fnptr++ ) 03390 if ( *fnptr == gRA.gr_fill_val ) 03391 *fnptr = 0; 03392 03393 /* set old and new borders to nothing */ 03394 gRA.Bold.used = 0; 03395 gRA.Bnew.used = 0; 03396 03397 gRH.gr_edge.used = 0; /* trash the old gray edge */ 03398 03399 iptr = gRA.border.points; 03400 for ( count = 0; count < gRA.border.used; count++ ) 03401 { 03402 if ( ( added = r_gr_check_insert( &gRA, &gRA.Bold, *iptr ) ) == -1 ) 03403 EXRETURN; 03404 iptr++; 03405 } 03406 03407 03408 dist = 1; 03409 fputc( '.', stdout ); 03410 while ( ( gRA.Bold.used > 0 ) && ( dist < gRA.gr_max_dist ) ) 03411 { 03412 iptr = gRA.Bold.points; 03413 for ( count = 0; count < gRA.Bold.used; count++ ) 03414 { 03415 current = *iptr; 03416 03417 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current - 1 ); 03418 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current + 1 ); 03419 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current - nx ); 03420 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current + nx ); 03421 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current - nxy ); 03422 ( void )r_gr_check_insert( &gRA, &gRA.Bnew, current + nxy ); 03423 03424 iptr++; 03425 } 03426 03427 B = gRA.Bold; 03428 gRA.Bold = gRA.Bnew; 03429 gRA.Bnew = B; 03430 gRA.Bnew.used = 0; 03431 03432 dist++; 03433 fputc( '.', stdout ); 03434 } 03435 03436 /* clear bound markings */ 03437 for( count = 0, fnptr = gRA.fdata; count < gRA.nvox; count++, fnptr++ ) 03438 if ( *fnptr == R_BOUND_VAL ) 03439 *fnptr = 0; 03440 03441 fputs( "done\n\n", stdout ); 03442 03443 /* recompute statistics, if the loaded value is big or small */ 03444 03445 THD_load_statistics( gRA.func ) ; 03446 03447 /* now redisplay dataset, in case anyone is looking at it */ 03448 03449 PLUTO_dset_redisplay( gRA.func ) ; 03450 dset_changed = 1; 03451 EXRETURN; 03452 } |
|
Definition at line 3730 of file plug_roiedit.c. References client_data, r_alg_s::gr_max_dist, gRA, gRmessage, rERROR, and XtFree. Referenced by r_gr_mk_max_dist_w().
03735 { 03736 char * text; 03737 int ival; 03738 03739 text = XmTextGetString( w ); 03740 03741 if ( ! text || ! *text ) /* nothing typed */ 03742 { 03743 if ( text ) 03744 XtFree( text ); 03745 return; 03746 } 03747 03748 /* 03749 ** Make sure a value has changed (to something acceptable) 03750 ** before applying. 03751 */ 03752 03753 ival = atoi( text ); 03754 if ( ( ival < 1 ) || ( ival > 200 ) ) 03755 { 03756 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 1, 200 ); 03757 rERROR( gRmessage ); 03758 return; 03759 } 03760 03761 if ( gRA.gr_max_dist != ival ) 03762 gRA.gr_max_dist = ival; 03763 03764 03765 XtFree( text ); 03766 } |
|
Definition at line 4111 of file plug_roiedit.c. References client_data, r_alg_s::gr_range_max, r_alg_s::gr_range_min, gRA, gRmessage, rERROR, and XtFree. Referenced by r_gr_mk_range_fr().
04116 { 04117 char * string = ( char * )client_data; 04118 char * text; 04119 int ival; 04120 04121 text = XmTextGetString( w ); 04122 04123 if ( ! text || ! *text ) /* nothing typed */ 04124 { 04125 if ( text ) 04126 XtFree( text ); 04127 return; 04128 } 04129 04130 if ( ! string ) /* strange error - complain and return */ 04131 { 04132 fprintf( stderr, "r_gr_cb_set_range error - string is NULL\n" ); 04133 return; 04134 } 04135 else if ( ! *string ) 04136 { 04137 fprintf( stderr, "r_gr_cb_set_range error - string is empty\n" ); 04138 return; 04139 } 04140 else if ( ! strcmp( string, "to" ) && ! strcmp( string, "from" ) ) 04141 { 04142 fprintf( stderr, "r_gr_cb_set_range error -\n" 04143 "'%s' should be 'to' or 'from'.\n", string ); 04144 return; 04145 } 04146 04147 /* 04148 ** Make sure a value has changed (to something acceptable) 04149 ** before applying. Use short range. 04150 */ 04151 04152 ival = atoi( text ); 04153 if ( ( ival < -32768 ) || ( ival > 32767 ) ) 04154 { 04155 sprintf( gRmessage, "Value %d is not in range [%d,%d].", 04156 ival, -32768, 32767 ); 04157 rERROR( gRmessage ); 04158 return; 04159 } 04160 04161 if ( ! strcmp( string, "from" ) ) 04162 { 04163 if ( gRA.gr_range_min != ival ) 04164 { 04165 gRA.gr_range_min = ival; 04166 04167 if ( gRA.gr_range_min > gRA.gr_range_max ) 04168 { 04169 sprintf( gRmessage, "\nWarning!" 04170 " Min value should be less than max value.\n" 04171 "Value are %d and %d, respectively.\n", 04172 gRA.gr_range_min, gRA.gr_range_max ); 04173 rERROR( gRmessage ); 04174 } 04175 } 04176 } 04177 else 04178 { 04179 if ( gRA.gr_range_max != ival ) 04180 { 04181 gRA.gr_range_max = ival; 04182 04183 if ( gRA.gr_range_min > gRA.gr_range_max ) 04184 { 04185 sprintf( gRmessage, "\nWarning!" 04186 " Min value should be less than max value.\n" 04187 "Value are %d and %d, respectively.\n", 04188 gRA.gr_range_min, gRA.gr_range_max ); 04189 rERROR( gRmessage ); 04190 } 04191 } 04192 } 04193 04194 XtFree( text ); 04195 } |
|
Definition at line 3462 of file plug_roiedit.c. References r_alg_s::adata, ENTRY, r_alg_s::fdata, holes_s::gr_edge, r_alg_s::gr_fill_val, r_alg_s::gr_range_max, r_alg_s::gr_range_min, gRH, r_alg_s::neighbors, r_add_to_boundary(), R_BOUND_VAL, and RETURN.
03463 { 03464 short * aptr = A->adata; 03465 short * fptr = A->fdata; 03466 short * nptr = A->neighbors; 03467 short * fvalp; 03468 int value, added = 0; 03469 03470 ENTRY("r_gr_check_insert"); 03471 03472 if ( nptr[ current ] == -1 ) /* do not accept edge points */ 03473 RETURN(0); 03474 03475 fvalp = fptr + current; 03476 value = aptr[ current ]; 03477 03478 /* if new and in range, we will consider setting it as a result */ 03479 if ( *fvalp == 0 ) 03480 { 03481 if ( ( value >= A->gr_range_min ) && 03482 ( value <= A->gr_range_max ) ) 03483 { 03484 if ( ! r_add_to_boundary( B, current ) ) 03485 RETURN(-1); 03486 03487 *fvalp = A->gr_fill_val; 03488 03489 added = 1; 03490 } 03491 else /* mark as in boundary, add to HOLE's search set */ 03492 { 03493 *fvalp = R_BOUND_VAL; 03494 if ( ! r_add_to_boundary( &gRH.gr_edge, current ) ) 03495 RETURN(-1); 03496 } 03497 } 03498 03499 RETURN(added); 03500 } |
|
Definition at line 2405 of file plug_roiedit.c. References r_X_s::charset, ENTRY, r_alg_s::gr_fill_val, gRA, gRX, MCW_register_hint(), r_any_cb_fill_stats(), r_any_cb_hide(), r_any_cb_unfill(), R_BUTTON_SPACE, r_gr_cb_fill(), r_wtgr_cb_suggest_limits(), and RETURN.
02406 { 02407 int ac; 02408 Arg al[ 10 ]; 02409 Widget form, frame, button; 02410 XmString xstr; 02411 02412 ENTRY("r_gr_mk_fill_buttons"); 02413 02414 /* create frame to hold form and buttons */ 02415 ac = 0; 02416 frame = XmCreateFrame( parent, "frame", al, ac ); 02417 02418 /* create form to hold push buttons */ 02419 ac = 0; 02420 XtSetArg( al[ac], XmNhorizontalSpacing, R_BUTTON_SPACE ); ac++; 02421 form = XmCreateForm( frame, "form", al, ac ); 02422 02423 02424 /* region fill button */ 02425 ac = 0; 02426 xstr = XmStringCreateLtoR( "FILL", gRX.charset ); 02427 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02428 button = XmCreatePushButton( form, "fill", al, ac ); 02429 XtManageChild( button ); 02430 XtAddCallback( button, XmNactivateCallback, 02431 ( XtCallbackProc )r_gr_cb_fill, NULL ); 02432 XtSetSensitive( button, True ); 02433 XmStringFree( xstr ); 02434 MCW_register_hint( button , "fill the gray matter region" ); 02435 02436 /* unfill button */ 02437 ac = 0; 02438 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02439 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 02440 xstr = XmStringCreateLtoR( "unfill", gRX.charset ); 02441 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02442 button = XmCreatePushButton( form, "unfill", al, ac ); 02443 XtManageChild( button ); 02444 XtAddCallback( button, XmNactivateCallback, 02445 ( XtCallbackProc )r_any_cb_unfill, &gRA.gr_fill_val ); 02446 XtSetSensitive( button, True ); 02447 XmStringFree( xstr ); 02448 MCW_register_hint( button , "unfill the \"fill value\" region" ); 02449 02450 02451 /* suggest range button */ 02452 ac = 0; 02453 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02454 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 02455 xstr = XmStringCreateLtoR( "suggest range", gRX.charset ); 02456 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02457 button = XmCreatePushButton( form, "suggest_range", al, ac ); 02458 XtManageChild( button ); 02459 XtAddCallback( button, XmNactivateCallback, 02460 ( XtCallbackProc )r_wtgr_cb_suggest_limits, "gray" ); 02461 XtSetSensitive( button, True ); 02462 XmStringFree( xstr ); 02463 MCW_register_hint( button , "suggest a range for gray matter values" ); 02464 02465 02466 /* stats button */ 02467 ac = 0; 02468 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02469 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 02470 xstr = XmStringCreateLtoR( "stats", gRX.charset ); 02471 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02472 button = XmCreatePushButton( form, "stats", al, ac ); 02473 XtManageChild( button ); 02474 XtAddCallback( button, XmNactivateCallback, 02475 ( XtCallbackProc )r_any_cb_fill_stats, &gRA.gr_fill_val ); 02476 XtSetSensitive( button, True ); 02477 XmStringFree( xstr ); 02478 MCW_register_hint( button , "get stats for this \"fill value\"" ); 02479 02480 02481 /* hide window button */ 02482 ac = 0; 02483 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02484 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 02485 xstr = XmStringCreateLtoR( "hide", gRX.charset ); 02486 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02487 button = XmCreatePushButton( form, "hide", al, ac ); 02488 XtManageChild( button ); 02489 XtAddCallback( button, XmNactivateCallback, 02490 ( XtCallbackProc )r_any_cb_hide, "wtgr" ); 02491 XtSetSensitive( button, True ); 02492 XmStringFree( xstr ); 02493 MCW_register_hint( button , "temporarily close this window" ); 02494 02495 02496 XtManageChild( form ); 02497 XtManageChild( frame ); 02498 02499 RETURN( frame ); 02500 } |
|
Definition at line 2868 of file plug_roiedit.c. References r_X_s::charset, r_alg_s::gr_fill_val, r_X_s::gr_fill_val_w, gRA, gRX, and r_gr_set_fill_val().
02869 { 02870 Widget junk, rc, frame; 02871 XmString xstr; 02872 Arg al[ 10 ]; 02873 int ac; 02874 char string[ 15 ]; 02875 02876 02877 ac = 0; 02878 frame = XmCreateFrame( parent, "frame", al, ac ); 02879 02880 ac = 0; 02881 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02882 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02883 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02884 02885 ac = 0; 02886 xstr = XmStringCreateLtoR( "fill value : ", gRX.charset ); 02887 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02888 junk = XmCreateLabel( rc, "label", al, ac ); 02889 XtManageChild( junk ); 02890 XmStringFree( xstr ); 02891 02892 02893 sprintf( string, "%d", gRA.gr_fill_val ); 02894 02895 ac = 0; 02896 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02897 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02898 X->gr_fill_val_w = XmCreateText( rc, "text", al, ac ); 02899 XtManageChild( X->gr_fill_val_w ); 02900 XtAddCallback( X->gr_fill_val_w, XmNactivateCallback, 02901 ( XtCallbackProc )r_gr_set_fill_val, NULL ); 02902 XtAddCallback( X->gr_fill_val_w, XmNlosingFocusCallback, 02903 ( XtCallbackProc )r_gr_set_fill_val, NULL ); 02904 02905 02906 XtManageChild( rc ); 02907 XtManageChild( frame ); 02908 02909 return( frame ); 02910 } |
|
Definition at line 1915 of file plug_roiedit.c. References r_X_s::charset, ENTRY, r_gr_mk_fill_buttons(), r_gr_mk_fillval_fr(), r_gr_mk_max_dist_w(), r_gr_mk_range_fr(), and RETURN.
01916 { 01917 Widget frame, rc, label; 01918 XmString xstring; 01919 Arg al[ 20 ]; 01920 int ac; 01921 01922 ENTRY("r_gr_mk_main_frame"); 01923 01924 ac = 0; 01925 XtSetArg( al[ ac ], XmNmarginHeight, 3 ); ac++; 01926 frame = XmCreateFrame( parent, "frame", al, ac ); 01927 01928 ac = 0; 01929 XtSetArg( al[ ac ], XmNlabelString, 01930 XmStringCreate( "Gray Matter Fill :", X->charset ) ); ac++; 01931 XtSetArg( al[ ac ], XmNchildType, XmFRAME_TITLE_CHILD ); ac++; 01932 XtSetArg( al[ ac ], XmNchildVerticalAlignment, 01933 XmALIGNMENT_BASELINE_BOTTOM); ac++; 01934 label = XmCreateLabel( frame, "label", al, ac ); 01935 XtManageChild( label ); 01936 01937 ac = 0; 01938 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 01939 01940 01941 ( void )r_gr_mk_range_fr ( X, rc ); 01942 ( void )r_gr_mk_fillval_fr ( X, rc ); 01943 ( void )r_gr_mk_max_dist_w ( X, rc ); 01944 ( void )r_gr_mk_fill_buttons( X, rc ); 01945 01946 01947 01948 XtManageChild( rc ); 01949 XtManageChild( frame ); 01950 01951 RETURN(frame); 01952 } |
|
Definition at line 2763 of file plug_roiedit.c. References r_X_s::charset, ENTRY, r_alg_s::gr_max_dist, gRA, gRX, r_gr_cb_set_max_dist(), and RETURN.
02764 { 02765 Widget junk, rc, frame; 02766 XmString xstr; 02767 Arg al[ 10 ]; 02768 int ac; 02769 char string[ 15 ]; 02770 02771 ENTRY("r_gr_mk_max_dist_w"); 02772 02773 ac = 0; 02774 frame = XmCreateFrame( parent, "frame", al, ac ); 02775 02776 ac = 0; 02777 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02778 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02779 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02780 02781 ac = 0; 02782 xstr = XmStringCreateLtoR( "max distance : ", gRX.charset ); 02783 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02784 junk = XmCreateLabel( rc, "label", al, ac ); 02785 XtManageChild( junk ); 02786 XmStringFree( xstr ); 02787 02788 02789 sprintf( string, "%d", gRA.gr_max_dist ); 02790 02791 ac = 0; 02792 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02793 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02794 junk = XmCreateText( rc, "text", al, ac ); 02795 XtManageChild( junk ); 02796 XtAddCallback( junk, XmNactivateCallback, 02797 ( XtCallbackProc )r_gr_cb_set_max_dist, NULL ); 02798 XtAddCallback( junk, XmNlosingFocusCallback, 02799 ( XtCallbackProc )r_gr_cb_set_max_dist, NULL ); 02800 02801 02802 XtManageChild( rc ); 02803 XtManageChild( frame ); 02804 02805 RETURN( frame ); 02806 } |
|
Definition at line 2920 of file plug_roiedit.c. References r_X_s::charset, r_alg_s::gr_range_max, r_X_s::gr_range_max_w, r_alg_s::gr_range_min, r_X_s::gr_range_min_w, gRA, gRX, and r_gr_cb_set_range().
02921 { 02922 Widget junk, rc, frame; 02923 XmString xstr; 02924 Arg al[ 10 ]; 02925 int ac; 02926 char string[ 15 ]; 02927 02928 02929 ac = 0; 02930 frame = XmCreateFrame( parent, "frame", al, ac ); 02931 02932 ac = 0; /* to hold labels and text */ 02933 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02934 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02935 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02936 02937 ac = 0; 02938 xstr = XmStringCreateLtoR( "search range : ", gRX.charset ); 02939 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02940 junk = XmCreateLabel( rc, "label", al, ac ); 02941 XtManageChild( junk ); 02942 XmStringFree( xstr ); 02943 02944 02945 sprintf( string, "%d", gRA.gr_range_min ); /* init value */ 02946 02947 ac = 0; 02948 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02949 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02950 X->gr_range_min_w = XmCreateText( rc, "text", al, ac ); 02951 XtManageChild( X->gr_range_min_w ); 02952 XtAddCallback( X->gr_range_min_w, XmNactivateCallback, 02953 ( XtCallbackProc )r_gr_cb_set_range, "from" ); 02954 XtAddCallback( X->gr_range_min_w, XmNlosingFocusCallback, 02955 ( XtCallbackProc )r_gr_cb_set_range, "from" ); 02956 02957 ac = 0; 02958 xstr = XmStringCreateLtoR( " to ", gRX.charset ); 02959 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02960 junk = XmCreateLabel( rc, "label", al, ac ); 02961 XtManageChild( junk ); 02962 XmStringFree( xstr ); 02963 02964 02965 sprintf( string, "%d", gRA.gr_range_max ); 02966 02967 ac = 0; 02968 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02969 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02970 X->gr_range_max_w = XmCreateText( rc, "text", al, ac ); 02971 XtManageChild( X->gr_range_max_w ); 02972 XtAddCallback( X->gr_range_max_w, XmNactivateCallback, 02973 ( XtCallbackProc )r_gr_cb_set_range, "to" ); 02974 XtAddCallback( X->gr_range_max_w, XmNlosingFocusCallback, 02975 ( XtCallbackProc )r_gr_cb_set_range, "to" ); 02976 02977 XtManageChild( rc ); 02978 XtManageChild( frame ); 02979 02980 return( frame ); 02981 } |
|
Definition at line 3972 of file plug_roiedit.c. References client_data, r_alg_s::gr_fill_val, gRA, gRmessage, rERROR, and XtFree. Referenced by r_gr_mk_fillval_fr().
03977 { 03978 char * text; 03979 int ival; 03980 03981 text = XmTextGetString( w ); 03982 03983 if ( ! text || ! *text ) /* nothing typed */ 03984 { 03985 if ( text ) 03986 XtFree( text ); 03987 return; 03988 } 03989 03990 /* 03991 ** Make sure a value has changed (to something acceptable) 03992 ** before applying. 03993 */ 03994 03995 ival = atoi( text ); 03996 if ( ( ival < 1 ) || ( ival > 255 ) ) 03997 { 03998 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 1, 255 ); 03999 rERROR( gRmessage ); 04000 return; 04001 } 04002 04003 if ( gRA.gr_fill_val != ival ) 04004 gRA.gr_fill_val = ival; 04005 04006 04007 XtFree( text ); 04008 } |
|
Definition at line 2213 of file plug_roiedit.c. References r_alg_s::adata, ENTRY, r_alg_s::fdata, free, gRA, gRmessage, malloc, r_alg_s::nvox, and rWARNING.
02214 { 02215 int * hist; 02216 02217 short * fptr = gRA.fdata; 02218 short * aptr = gRA.adata; 02219 int count, size = max - min + 1, total = 0; 02220 02221 ENTRY("r_histogram"); 02222 02223 if ( ( hist = (int *)malloc( size * sizeof( int ) ) ) == NULL ) 02224 { 02225 sprintf( gRmessage, "Error: pr_rh_10\n" 02226 "Failed alloca for %d ints.", size ); 02227 rWARNING( gRmessage ); 02228 EXRETURN; 02229 } 02230 02231 for ( count = 0; count < size; count++ ) 02232 hist[count] = 0; 02233 02234 for ( count = 0; count < A->nvox; count++ ) 02235 { 02236 if ( *fptr == check_val ) 02237 { 02238 hist[*aptr - min]++; 02239 total++; 02240 } 02241 02242 aptr++; 02243 fptr++; 02244 } 02245 02246 printf( " value \t nvox \t %%\n" ); 02247 printf( "--------- \t --------- \t --------- \n" ); 02248 02249 for ( count = 0; count < size; count++) 02250 printf( " %6d \t %7d \t %7.3f\n", 02251 min + count, hist[ count ], 100.0 * hist[ count ] / total ); 02252 free(hist); 02253 EXRETURN; 02254 } |
|
Definition at line 1064 of file plug_roiedit.c. References r_alg_s::border, client_data, dset_changed, ENTRY, r_alg_s::fdata, holes_s::fill_val, r_alg_s::func, holes_s::gr_edge, gRA, holes_s::max_size, r_alg_s::nvox, PLUTO_dset_redisplay(), points_t::points, r_add_to_boundary(), R_HL_BAD_VAL, r_HL_check_neighbors(), THD_load_statistics(), r_alg_s::undo_data, points_t::used, and holes_s::wtgr_edge. Referenced by r_HL_mk_buttons().
01069 { 01070 points_t Marked, Search; 01071 holes_s * H = (holes_s *)client_data; 01072 short * fdata = gRA.fdata; 01073 short * fptr, * uptr; 01074 int * wgpts, *tmpp; 01075 int count, fill_size, coord, status, pcount; 01076 01077 ENTRY("r_HL_cb_fill"); 01078 01079 /* first store fdata to undo_data */ 01080 fptr = gRA.fdata; uptr = gRA.undo_data; 01081 for ( count = 0; count < gRA.nvox; count++ ) 01082 *uptr++ = *fptr++; 01083 01084 01085 Search.points = Marked.points = NULL; 01086 01087 /* add gRA.border and gr_edge to wtgr_edge */ 01088 H->wtgr_edge.used = 0; 01089 for ( count = 0, wgpts = H->gr_edge.points; 01090 count < H->gr_edge.used; 01091 count++, wgpts++ ) 01092 if ( ! r_add_to_boundary( &H->wtgr_edge, *wgpts ) ) 01093 EXRETURN; 01094 01095 for ( count = 0, wgpts = gRA.border.points; 01096 count < gRA.border.used; 01097 count++, wgpts++ ) 01098 if ( ! r_add_to_boundary( &H->wtgr_edge, *wgpts ) ) 01099 EXRETURN; 01100 01101 /* for each point in white/gray boundary - try to grow */ 01102 /* (watch for 3-D brick edges) */ 01103 for ( count = 0, wgpts = H->wtgr_edge.points; 01104 count < H->wtgr_edge.used; 01105 count++, wgpts++ ) 01106 { 01107 01108 fill_size = 0; /* init for current fill region */ 01109 01110 fptr = fdata + *wgpts; /* addr + coordinate (offset) */ 01111 if ( *fptr ) 01112 continue; 01113 01114 if ( ! r_add_to_boundary( &Search, *wgpts ) ) 01115 EXRETURN; 01116 01117 while ( Search.used > 0 ) 01118 { 01119 coord = Search.points[Search.used - 1]; 01120 Search.used--; 01121 01122 *(fdata + coord) = H->fill_val; /* mark as found */ 01123 if ( ! r_add_to_boundary( &Marked, coord ) ) 01124 EXRETURN; 01125 01126 fill_size++; 01127 01128 /* 1 = OK, 0 = BAD point found, -1 = memory error */ 01129 if ( ( status = r_HL_check_neighbors( &Search, coord ) ) == -1 ) 01130 EXRETURN; 01131 01132 if ( ( fill_size > H->max_size ) || ( status == 0 ) ) 01133 { 01134 status = 0; /* if we enter through fill_size */ 01135 01136 for ( pcount = 0, tmpp = Search.points; 01137 pcount < Search.used; 01138 pcount++, tmpp++ ) 01139 *(fdata + *tmpp) = R_HL_BAD_VAL; 01140 01141 Search.used = 0; /* will terminate search loop */ 01142 01143 for ( pcount = 0, tmpp = Marked.points; 01144 pcount < Marked.used; 01145 pcount++, tmpp++ ) 01146 *(fdata + *tmpp) = R_HL_BAD_VAL; 01147 01148 Marked.used = 0; 01149 } 01150 } 01151 01152 Marked.used = 0; 01153 } 01154 01155 /* reset all BAD_VAL points - we haven't saved them */ 01156 for ( count = 0, fptr = fdata; count < gRA.nvox; count++, fptr++ ) 01157 if ( *fptr == R_HL_BAD_VAL ) 01158 *fptr = 0; 01159 01160 01161 THD_load_statistics( gRA.func ) ; 01162 PLUTO_dset_redisplay( gRA.func ) ; 01163 01164 dset_changed = 1; 01165 01166 EXRETURN; 01167 } |
|
Definition at line 3821 of file plug_roiedit.c. References client_data, holes_s::fill_val, gRH, gRmessage, rERROR, rWARNING, and XtFree. Referenced by r_HL_mk_fillval_fr().
03826 { 03827 char * text; 03828 int ival; 03829 03830 text = XmTextGetString( w ); 03831 03832 if ( ! text || ! *text ) /* nothing typed */ 03833 { 03834 if ( text ) 03835 XtFree( text ); 03836 return; 03837 } 03838 03839 /* 03840 ** Make sure a value has changed (to something acceptable) 03841 ** before applying. 03842 */ 03843 03844 ival = atoi( text ); 03845 if ( ( ival < 0 ) || ( ival > 255 ) ) 03846 { 03847 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 0, 255 ); 03848 rERROR( gRmessage ); 03849 return; 03850 } 03851 else if ( ival == 0 ) 03852 { 03853 rWARNING( "Using hole fill value of 0." ); 03854 } 03855 03856 03857 if ( gRH.fill_val != ival ) 03858 gRH.fill_val = ival; 03859 03860 03861 XtFree( text ); 03862 } |
|
Definition at line 3776 of file plug_roiedit.c. References client_data, gRH, gRmessage, holes_s::max_size, rERROR, and XtFree. Referenced by r_HL_mk_maxsize_fr().
03781 { 03782 char * text; 03783 int ival; 03784 03785 text = XmTextGetString( w ); 03786 03787 if ( ! text || ! *text ) /* nothing typed */ 03788 { 03789 if ( text ) 03790 XtFree( text ); 03791 return; 03792 } 03793 03794 /* 03795 ** Make sure a value has changed (to something acceptable) 03796 ** before applying. 03797 */ 03798 03799 ival = atoi( text ); 03800 if ( ival < 1 ) 03801 { 03802 sprintf( gRmessage, "Value %d is not in range [%d,oo).", ival, 1 ); 03803 rERROR( gRmessage ); 03804 return; 03805 } 03806 03807 if ( gRH.max_size != ival ) 03808 gRH.max_size = ival; 03809 03810 XtFree( text ); 03811 } |
|
Definition at line 1183 of file plug_roiedit.c. References ENTRY, r_alg_s::fdata, gRA, r_alg_s::neighbors, r_alg_s::nx, r_alg_s::nxy, r_add_to_boundary(), R_HL_BAD_VAL, and RETURN.
01184 { 01185 short * nptr = gRA.neighbors; 01186 short * fvalp = NULL; 01187 int nx, nxy, value; 01188 01189 ENTRY("r_HL_check_neighbors"); 01190 01191 nx = gRA.nx; 01192 nxy = gRA.nxy; 01193 01194 if ( nptr[ coord ] == -1 ) /* do not accept edge points */ 01195 RETURN(1); /* normal return */ 01196 01197 fvalp = gRA.fdata + coord; 01198 01199 value = *(fvalp - 1); 01200 if ( value == R_HL_BAD_VAL ) 01201 RETURN(0); 01202 else if ( ! value ) 01203 if ( ! r_add_to_boundary( P, coord - 1 ) ) 01204 RETURN(-1); 01205 01206 value = *(fvalp + 1); 01207 if ( value == R_HL_BAD_VAL ) 01208 RETURN(0); 01209 else if ( ! value ) 01210 if ( ! r_add_to_boundary( P, coord + 1 ) ) 01211 RETURN(-1); 01212 01213 value = *(fvalp - nx); 01214 if ( value == R_HL_BAD_VAL ) 01215 RETURN(0); 01216 else if ( ! value ) 01217 if ( ! r_add_to_boundary( P, coord - nx ) ) 01218 RETURN(-1); 01219 01220 value = *(fvalp + nx); 01221 if ( value == R_HL_BAD_VAL ) 01222 RETURN(0); 01223 else if ( ! value ) 01224 if ( ! r_add_to_boundary( P, coord + nx ) ) 01225 RETURN(-1); 01226 01227 value = *(fvalp - nxy); 01228 if ( value == R_HL_BAD_VAL ) 01229 RETURN(0); 01230 else if ( ! value ) 01231 if ( ! r_add_to_boundary( P, coord - nxy ) ) 01232 RETURN(-1); 01233 01234 value = *(fvalp + nxy); 01235 if ( value == R_HL_BAD_VAL ) 01236 RETURN(0); 01237 else if ( ! value ) 01238 if ( ! r_add_to_boundary( P, coord + nxy ) ) 01239 RETURN(-1); 01240 01241 RETURN(0); 01242 } |
|
Definition at line 851 of file plug_roiedit.c. References r_X_s::charset, ENTRY, holes_s::fill_val, gRH, gRX, r_any_cb_fill_stats(), r_any_cb_hide(), r_any_cb_unfill(), R_BUTTON_SPACE, r_HL_cb_fill(), and RETURN.
00852 { 00853 int ac; 00854 Arg al[ 10 ]; 00855 Widget form, frame, button1, button2; 00856 XmString xstr; 00857 00858 ENTRY("r_HL_mk_buttons"); 00859 00860 /* create frame to hold form and buttons */ 00861 ac = 0; 00862 frame = XmCreateFrame( parent, "frame", al, ac ); 00863 00864 /* create form to hold push buttons */ 00865 ac = 0; 00866 XtSetArg( al[ac], XmNhorizontalSpacing, R_BUTTON_SPACE ); ac++; 00867 form = XmCreateForm( frame, "form", al, ac ); 00868 00869 00870 /* region fill button */ 00871 ac = 0; 00872 xstr = XmStringCreateLtoR( "FILL", gRX.charset ); 00873 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00874 button1 = XmCreatePushButton( form, "fill", al, ac ); 00875 XtManageChild( button1 ); 00876 XtAddCallback( button1, XmNactivateCallback, 00877 ( XtCallbackProc )r_HL_cb_fill, H ); 00878 XtSetSensitive( button1, True ); 00879 XmStringFree( xstr ); 00880 00881 /* unfill button */ 00882 ac = 0; 00883 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 00884 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 00885 xstr = XmStringCreateLtoR( "unfill", gRX.charset ); 00886 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00887 button2 = XmCreatePushButton( form, "unfill", al, ac ); 00888 XtManageChild( button2 ); 00889 XtAddCallback( button2, XmNactivateCallback, 00890 ( XtCallbackProc )r_any_cb_unfill, &H->fill_val ); 00891 XtSetSensitive( button2, True ); 00892 XmStringFree( xstr ); 00893 00894 00895 /* stats button */ 00896 ac = 0; 00897 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 00898 XtSetArg( al[ac], XmNleftWidget, button2 ); ac++; 00899 xstr = XmStringCreateLtoR( "stats", gRX.charset ); 00900 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00901 button1 = XmCreatePushButton( form, "stats", al, ac ); 00902 XtManageChild( button1 ); 00903 XtAddCallback( button1, XmNactivateCallback, 00904 ( XtCallbackProc )r_any_cb_fill_stats, &gRH.fill_val ); 00905 XtSetSensitive( button1, True ); 00906 XmStringFree( xstr ); 00907 00908 /* hide button */ 00909 ac = 0; 00910 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 00911 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 00912 xstr = XmStringCreateLtoR( "hide", gRX.charset ); 00913 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00914 button2 = XmCreatePushButton( form, "hide", al, ac ); 00915 XtManageChild( button2 ); 00916 XtAddCallback( button2, XmNactivateCallback, 00917 ( XtCallbackProc )r_any_cb_hide, "HL" ); 00918 XtSetSensitive( button2, True ); 00919 XmStringFree( xstr ); 00920 00921 00922 XtManageChild( form ); 00923 XtManageChild( frame ); 00924 00925 RETURN( frame ); 00926 } |
|
Definition at line 989 of file plug_roiedit.c. References r_X_s::charset, ENTRY, holes_s::fill_val, holes_s::fillval_w, gRX, r_HL_cb_set_fill_val(), and RETURN.
00990 { 00991 Widget junk, rc, frame; 00992 XmString xstr; 00993 Arg al[ 10 ]; 00994 int ac; 00995 char string[ 15 ]; 00996 00997 ENTRY("r_HL_mk_fillval_fr"); 00998 00999 ac = 0; 01000 frame = XmCreateFrame( parent, "frame", al, ac ); 01001 01002 ac = 0; 01003 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 01004 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 01005 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 01006 01007 01008 sprintf( string, "%d", H->fill_val ); 01009 01010 ac = 0; 01011 xstr = XmStringCreateLtoR( "fill value : ", gRX.charset ); 01012 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 01013 junk = XmCreateLabel( rc, "label", al, ac ); 01014 XtManageChild( junk ); 01015 XmStringFree( xstr ); 01016 01017 ac = 0; 01018 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 01019 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 01020 H->fillval_w = XmCreateText( rc, "text", al, ac ); 01021 XtManageChild( H->fillval_w ); 01022 XtAddCallback( H->fillval_w, XmNactivateCallback, 01023 ( XtCallbackProc )r_HL_cb_set_fill_val, NULL ); 01024 XtAddCallback( H->fillval_w, XmNlosingFocusCallback, 01025 ( XtCallbackProc )r_HL_cb_set_fill_val, NULL ); 01026 01027 01028 XtManageChild( rc ); 01029 XtManageChild( frame ); 01030 01031 RETURN( frame ); 01032 } |
|
Definition at line 804 of file plug_roiedit.c. References r_X_s::display, ENTRY, gRH, gRX, holes_s::main, holes_s::mainRC, r_any_cb_hide(), r_HL_mk_buttons(), r_HL_mk_fillval_fr(), r_HL_mk_maxsize_fr(), and r_init_holes_vals().
00805 { 00806 Widget junk, frame, rc; 00807 XmString xstring; 00808 Arg al[ 20 ]; 00809 int ac; 00810 00811 ENTRY("r_HL_mk_main_shell"); 00812 00813 if ( ! r_init_holes_vals( H ) ) 00814 EXRETURN; 00815 00816 ac = 0; 00817 XtSetArg( al[ac], XmNinitialResourcesPersistent, False ); ac++; 00818 XtSetArg( al[ac], XmNdeleteResponse, XmDO_NOTHING ); ac++; 00819 XtSetArg( al[ac], XmNmappedWhenManaged, False ); ac++; 00820 H->main = XtAppCreateShell( "Hole Filler", "rshell", 00821 topLevelShellWidgetClass, gRX.display, al, ac ); 00822 00823 XmAddWMProtocolCallback( gRH.main, 00824 XmInternAtom( gRX.display, "WM_DELETE_WINDOW", False ), 00825 ( XtCallbackProc )r_any_cb_hide, "HL" ); 00826 00827 ac = 0; 00828 XtSetArg( al[ac], XmNspacing, 15 ); ac++; 00829 XtSetArg( al[ac], XmNmarginWidth, 10 ); ac++; 00830 XtSetArg( al[ac], XmNmarginHeight, 10 ); ac++; 00831 H->mainRC = XmCreateRowColumn( H->main, "rowcolumn", al, ac ); 00832 00833 ( void )r_HL_mk_fillval_fr( H, H->mainRC ); 00834 ( void )r_HL_mk_maxsize_fr( H, H->mainRC ); 00835 ( void )r_HL_mk_buttons ( H, H->mainRC ); 00836 00837 XtManageChild ( H->mainRC ); 00838 XtRealizeWidget( H->main ); 00839 00840 EXRETURN; 00841 } |
|
Definition at line 936 of file plug_roiedit.c. References r_X_s::charset, ENTRY, gRX, holes_s::max_size, holes_s::maxsize_w, r_HL_cb_set_maxsize(), and RETURN.
00937 { 00938 Widget junk, rc, frame; 00939 XmString xstr; 00940 Arg al[ 10 ]; 00941 int ac; 00942 char string[ 15 ]; 00943 00944 ENTRY("r_HL_mk_maxsize_fr"); 00945 00946 ac = 0; 00947 frame = XmCreateFrame( parent, "frame", al, ac ); 00948 00949 ac = 0; 00950 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 00951 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 00952 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 00953 00954 00955 sprintf( string, "%d", H->max_size ); 00956 00957 ac = 0; 00958 xstr = XmStringCreateLtoR( "max size : ", gRX.charset ); 00959 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 00960 junk = XmCreateLabel( rc, "label", al, ac ); 00961 XtManageChild( junk ); 00962 XmStringFree( xstr ); 00963 00964 ac = 0; 00965 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 00966 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 00967 H->maxsize_w = XmCreateText( rc, "text", al, ac ); 00968 XtManageChild( H->maxsize_w ); 00969 XtAddCallback( H->maxsize_w, XmNactivateCallback, 00970 ( XtCallbackProc )r_HL_cb_set_maxsize, NULL ); 00971 XtAddCallback( H->maxsize_w, XmNlosingFocusCallback, 00972 ( XtCallbackProc )r_HL_cb_set_maxsize, NULL ); 00973 00974 00975 XtManageChild( rc ); 00976 XtManageChild( frame ); 00977 00978 RETURN( frame ); 00979 } |
|
Definition at line 1741 of file plug_roiedit.c. References ENTRY, gRmessage, nz, p, rERROR, RETURN, r_ipt_t::x, r_ipt_t::y, and r_ipt_t::z.
01742 { 01743 r_ipt_t p = { 0, 0, 0 }; 01744 int tmp; 01745 01746 ENTRY("r_index2pt"); 01747 01748 if ( coord < 0 ) 01749 { 01750 sprintf( gRmessage, "Coordinate %d is out of range!\n", coord ); 01751 rERROR( gRmessage ); 01752 RETURN(p); 01753 } 01754 01755 p.x = coord % nx; 01756 tmp = coord / nx; 01757 p.y = tmp % ny; 01758 p.z = tmp / ny; 01759 01760 if ( p.z >= nz ) 01761 { 01762 sprintf( gRmessage, "Coordinate %d is out of range!\n" 01763 "Associated point is (%d,%d,%d).\n", 01764 coord, p.x, p.y, p.z ); 01765 rERROR( gRmessage ); 01766 } 01767 01768 RETURN(p); 01769 } |
|
Definition at line 2052 of file plug_roiedit.c. References r_alg_s::adata, r_alg_s::anat, calloc, DSET_BRICK_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, DSET_load, DSET_LOADED, DSET_NX, DSET_NY, DSET_NZ, ENTRY, r_alg_s::factor, r_alg_s::fdata, r_alg_s::func, gRX, r_X_s::main, malloc, MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, r_alg_s::neighbors, r_alg_s::nvox, r_alg_s::nx, r_alg_s::nxy, r_alg_s::ny, r_alg_s::nz, plint, and r_alg_s::undo_data.
02053 { 02054 ENTRY("r_init_afni_vars"); 02055 02056 A->anat = plint->im3d->anat_now; 02057 02058 if ( func ) 02059 { 02060 if ( DSET_BRICK_TYPE( func, 0 ) != MRI_short ) 02061 { 02062 ( void )MCW_popup_message( gRX.main, 02063 "Serious error.\n" 02064 "\n" 02065 "Functional data is not of\n" 02066 "type short. Please choose\n" 02067 "another dataset.\n", 02068 MCW_USER_KILL | MCW_TIMER_KILL ); 02069 EXRETURN; 02070 } 02071 02072 A->func = func; 02073 02074 A->factor = DSET_BRICK_FACTOR( A->func, 0 ); 02075 A->factor = ( A->factor == 0.0 ) ? 1.0 : A->factor; 02076 A->fdata = (short *)DSET_BRICK_ARRAY( A->func, 0 ); 02077 02078 A->nx = DSET_NX( A->func ); 02079 A->ny = DSET_NY( A->func ); 02080 A->nz = DSET_NZ( A->func ); 02081 A->nxy = A->nx * A->ny; 02082 A->nvox = A->nx * A->ny * A->nz; 02083 02084 if ( A->neighbors == NULL ) 02085 { 02086 A->neighbors = malloc( A->nvox * sizeof( short ) ); 02087 if ( A->neighbors == NULL ) 02088 { 02089 fprintf( stderr, "\nError: riav10\n" 02090 "Failed to allocate %d ints for neighbors.\n\n", A->nvox ); 02091 } 02092 02093 A->undo_data = calloc( A->nvox, sizeof( short ) ); 02094 if ( A->undo_data == NULL ) 02095 { 02096 fprintf( stderr, "\nError: riav20\n" 02097 "Failed to allocate %d ints for undo_data.\n\n", A->nvox ); 02098 } 02099 } 02100 } 02101 else 02102 ( void )MCW_popup_message( gRX.main, 02103 "Serious error.\n" 02104 "\n" 02105 "Missing functional dataset.\n" 02106 "Please choose another dataset.\n", 02107 MCW_USER_KILL | MCW_TIMER_KILL ); 02108 02109 fprintf(stderr,"r_init_afni_vars(): A->anat = %p\n",A->anat); 02110 if ( A->anat ) 02111 { 02112 if ( DSET_BRICK_TYPE( A->anat, 0 ) != MRI_short ) 02113 { 02114 ( void )MCW_popup_message( gRX.main, 02115 "Serious error.\n" 02116 "\n" 02117 "Anatomical data is not of\n" 02118 "type short. Please choose\n" 02119 "another dataset.\n", 02120 MCW_USER_KILL | MCW_TIMER_KILL ); 02121 EXRETURN; 02122 } 02123 02124 if ( ! DSET_LOADED(A->anat) ) 02125 { 02126 fprintf(stderr,"-d loading anat...\n"); 02127 DSET_load( A->anat ); 02128 } 02129 02130 A->adata = (short *)DSET_BRICK_ARRAY( A->anat, 0 ); 02131 /*fprintf(stderr,"Set A->adata to %p\n",A->adata);*/ 02132 } 02133 else 02134 ( void )MCW_popup_message( gRX.main, 02135 "Serious error.\n" 02136 "\n" 02137 "Missing anatomical dataset.\n" 02138 "Please choose another dataset.\n", 02139 MCW_USER_KILL | MCW_TIMER_KILL ); 02140 02141 EXRETURN; 02142 } |
|
Definition at line 1962 of file plug_roiedit.c. References r_alg_s::adata, r_alg_s::adjust_point, r_alg_s::anat, r_alg_s::Bnew, r_alg_s::Bold, r_alg_s::border, DSET_BRICK_ARRAY, DSET_load, DSET_LOADED, ENTRY, r_alg_s::gr_fill_val, r_alg_s::gr_max_dist, r_alg_s::gr_range_max, r_alg_s::gr_range_min, points_t::M, malloc, r_alg_s::min_nbrs, r_alg_s::neighbors, plint, r_alg_s::point_coord, r_alg_s::point_value, points_t::points, r_wtgr_calc_max_frm_val(), r_wtgr_calc_min_frm_val(), RETURN, r_alg_s::save_as_name, r_alg_s::strong_borders, r_alg_s::undo_data, points_t::used, r_alg_s::wt_diag_connect, r_alg_s::wt_fill_val, r_alg_s::wt_range_max, and r_alg_s::wt_range_min.
01963 { 01964 ENTRY("r_init_Alg_values"); 01965 01966 A->point_value = 75; 01967 A->point_coord = -1; /* means user has not yet selected a point */ 01968 A->adjust_point = 0; 01969 01970 strcpy( A->save_as_name, "default" ); 01971 01972 A->wt_fill_val = 5; 01973 A->wt_range_min = r_wtgr_calc_min_frm_val( A->point_value ); 01974 A->wt_range_max = r_wtgr_calc_max_frm_val( A->point_value ); 01975 A->wt_diag_connect = 0; /* any connection */ 01976 01977 A->gr_fill_val = 10; 01978 A->gr_range_min = r_wtgr_calc_min_frm_val( 42 ); 01979 A->gr_range_max = r_wtgr_calc_max_frm_val( 42 ); 01980 A->gr_max_dist = 4; 01981 01982 A->anat = plint->im3d->anat_now; 01983 01984 fprintf(stderr,"r_init_Alg_values(): A->anat = %p\n",A->anat); 01985 if ( A->anat ) 01986 { 01987 if ( ! DSET_LOADED(A->anat) ) 01988 { 01989 DSET_load( A->anat ); 01990 fprintf(stderr,"-d loading anat...\n"); 01991 } 01992 A->adata = (short *)DSET_BRICK_ARRAY( A->anat, 0 ); 01993 /*fprintf(stderr,"Set A->adata to %p\n",A->adata);*/ 01994 } 01995 01996 /* 01997 ** Create boundary memory and check for malloc success. 01998 */ 01999 A->Bold.used = 0; 02000 A->Bold.M = 1000; 02001 A->Bold.points = (int *)malloc( A->Bold.M * sizeof( int ) ); 02002 02003 if ( A->Bold.points == NULL ) 02004 { 02005 fprintf( stderr, "Error: riAv10\n" 02006 "Failed to allocate %d ints for boundary.\n", A->Bold.M ); 02007 RETURN(0); 02008 } 02009 02010 A->Bnew.used = 0; 02011 A->Bnew.M = 1000; 02012 A->Bnew.points = (int *)malloc( A->Bnew.M * sizeof( int ) ); 02013 02014 if ( A->Bnew.points == NULL ) 02015 { 02016 fprintf( stderr, "\nError: riAv20\n" 02017 "Failed to allocate %d ints for boundary.\n\n", A->Bnew.M ); 02018 RETURN(0); 02019 } 02020 02021 A->border.used = 0; 02022 A->border.M = 1000; 02023 A->border.points = (int *)malloc( A->border.M * sizeof( int ) ); 02024 02025 if ( A->border.points == NULL ) 02026 { 02027 fprintf( stderr, "\nError: riAv30\n" 02028 "Failed to allocate %d ints for boundary.\n\n", 02029 A->border.M ); 02030 RETURN(0); 02031 } 02032 02033 /* we will initialize this after we know we have data */ 02034 A->neighbors = NULL; /* - will be nvox */ 02035 A->undo_data = NULL; /* - will be nvox */ 02036 02037 A->min_nbrs = 0; 02038 A->strong_borders = 1; 02039 02040 02041 RETURN(1); 02042 } |
|
Definition at line 1042 of file plug_roiedit.c. References ENTRY, holes_s::fill_val, holes_s::filled, points_t::M, holes_s::max_size, points_t::points, RETURN, and points_t::used.
|
|
Definition at line 1825 of file plug_roiedit.c. References interp_s::A, interp_s::afni_undo, interp_s::B, ENTRY, interp_s::fill_val, points_t::M, malloc, points_t::points, RETURN, and points_t::used.
01826 { 01827 ENTRY("r_init_interp_vals"); 01828 01829 I->fill_val = 2; 01830 I->afni_undo = 0; 01831 01832 I->A.used = 0; 01833 I->A.M = 100; 01834 I->A.points = (int *)malloc( I->A.M * sizeof( int ) ); 01835 01836 if ( I->A.points == NULL ) 01837 { 01838 fprintf( stderr, "\nError: riiv10\n" 01839 "Failed to allocate %d ints for interpolation struct.\n\n", 01840 I->A.M ); 01841 RETURN(0); 01842 } 01843 01844 I->B.used = 0; 01845 I->B.M = 100; 01846 I->B.points = (int *)malloc( I->B.M * sizeof( int ) ); 01847 01848 if ( I->B.points == NULL ) 01849 { 01850 fprintf( stderr, "\nError: riiv20\n" 01851 "Failed to allocate %d ints for interpolation struct.\n\n", 01852 I->B.M ); 01853 RETURN(0); 01854 } 01855 01856 RETURN(1); 01857 } |
|
Definition at line 1789 of file plug_roiedit.c. References r_pt_conn_s::cur_pt, r_pt_conn_s::dest, points_t::M, p, r_pt_conn_s::plist, points_t::points, r_pt_conn_s::source, and points_t::used.
01790 { 01791 r_ipt_t p = { 0, 0, 0 }; 01792 01793 P->cur_pt = 1; /* may be either 1 or 2 */ 01794 P->source = p; /* just to initialize to SOMEthing */ 01795 P->dest = p; 01796 01797 P->plist.points = NULL; /* init border structure */ 01798 P->plist.used = 0; 01799 P->plist.M = 0; 01800 01801 return 1; 01802 } |
|
Definition at line 1620 of file plug_roiedit.c. References interp_s::A, interp_s::B, client_data, dset_changed, ENTRY, r_alg_s::fdata, interp_s::fill_val, r_alg_s::func, gRA, r_alg_s::nvox, r_alg_s::nx, r_alg_s::ny, r_alg_s::nz, nz, PLUTO_dset_redisplay(), points_t::points, R_DIST_STEP, r_index2pt(), r_p_distance(), rERROR, rWARNING, sb, THD_load_statistics(), r_alg_s::undo_data, points_t::used, r_ipt_t::x, r_ipt_t::y, and r_ipt_t::z. Referenced by r_INT_mk_app_buttons().
01625 { 01626 r_ipt_t sourcep, destp; 01627 interp_s * I = (interp_s *)client_data; 01628 points_t * lb, * sb; 01629 double index_ratio, tot_dist; 01630 double dx, dy, dz, dcurr; 01631 double fx, fy, fz; 01632 short * fnptr = gRA.fdata, * sptr; 01633 short * fptr, * uptr; 01634 int * ip1; 01635 int count, dest_index, coord; 01636 int nx = gRA.nx, ny = gRA.ny, nz = gRA.nz; 01637 01638 ENTRY("r_INT_cb_fill"); 01639 01640 if ( ! gRA.fdata ) 01641 { 01642 fprintf( stderr, "%c", 7 ); 01643 EXRETURN; 01644 } 01645 01646 if ( ! I ) 01647 { 01648 rERROR( "Error : entered r_INT_cb_fill() without client_data." ); 01649 EXRETURN; 01650 } 01651 01652 /* check that neither border is empty */ 01653 if ( I->A.used <= 0 || I->B.used <= 0 ) 01654 { 01655 fprintf( stderr, "%c", 7 ); 01656 rWARNING( "Missing bounding curve for interpolation." ); 01657 EXRETURN; 01658 } 01659 01660 /* first store to undo_data */ 01661 fptr = gRA.fdata; uptr = gRA.undo_data; 01662 for ( count = 0; count < gRA.nvox; count++ ) 01663 *uptr++ = *fptr++; 01664 01665 if ( I->A.used >= I->B.used ) 01666 { 01667 lb = &I->A; 01668 sb = &I->B; 01669 index_ratio = I->B.used / (double)I->A.used; 01670 } 01671 else 01672 { 01673 lb = &I->B; 01674 sb = &I->A; 01675 index_ratio = I->A.used / (double)I->B.used; 01676 } 01677 01678 for ( count = 0, ip1 = lb->points; count < lb->used; count++, ip1++ ) 01679 { 01680 sourcep = r_index2pt( *ip1, nx, ny, nz ); 01681 dest_index = count * index_ratio + 0.0001; 01682 destp = r_index2pt( sb->points[dest_index], nx, ny, nz ); 01683 01684 tot_dist = r_p_distance( sourcep, destp ); 01685 dx = R_DIST_STEP * ( destp.x - sourcep.x ) / tot_dist; 01686 dy = R_DIST_STEP * ( destp.y - sourcep.y ) / tot_dist; 01687 dz = R_DIST_STEP * ( destp.z - sourcep.z ) / tot_dist; 01688 fx = sourcep.x + dx; 01689 fy = sourcep.y + dy; 01690 fz = sourcep.z + dz; 01691 01692 for ( dcurr = R_DIST_STEP; dcurr < tot_dist; dcurr += R_DIST_STEP ) 01693 { 01694 coord = (int)fx + nx * ( (int)fy + ny * (int)fz ); 01695 01696 sptr = fnptr + coord; 01697 01698 /* if ( ! *sptr ) - draw through anything? */ 01699 *sptr = I->fill_val; 01700 01701 fx += dx; 01702 fy += dy; 01703 fz += dz; 01704 } 01705 } 01706 01707 THD_load_statistics( gRA.func ); 01708 PLUTO_dset_redisplay( gRA.func ); 01709 dset_changed = 1; 01710 01711 EXRETURN; 01712 } |
|
Definition at line 3872 of file plug_roiedit.c. References client_data, interp_s::fill_val, gRI, gRmessage, rERROR, rWARNING, and XtFree. Referenced by r_INT_mk_fillval_fr().
03877 { 03878 char * text; 03879 int ival; 03880 03881 text = XmTextGetString( w ); 03882 03883 if ( ! text || ! *text ) /* nothing typed */ 03884 { 03885 if ( text ) 03886 XtFree( text ); 03887 return; 03888 } 03889 03890 /* 03891 ** Make sure a value has changed (to something acceptable) 03892 ** before applying. 03893 */ 03894 03895 ival = atoi( text ); 03896 if ( ( ival < 0 ) || ( ival > 255 ) ) 03897 { 03898 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 0, 255 ); 03899 rERROR( gRmessage ); 03900 return; 03901 } 03902 else if ( ival == 0 ) 03903 { 03904 rWARNING( "Using interpolation fill value of 0." ); 03905 } 03906 03907 if ( gRI.fill_val != ival ) 03908 gRI.fill_val = ival; 03909 03910 03911 XtFree( text ); 03912 } |
|
Definition at line 1299 of file plug_roiedit.c. References r_X_s::charset, ENTRY, interp_s::fill_val, gRI, gRX, MCW_register_hint(), r_any_cb_apply(), r_any_cb_fill_stats(), r_any_cb_hide(), r_any_cb_unfill(), R_BUTTON_SPACE, r_INT_cb_fill(), and RETURN.
01300 { 01301 int ac; 01302 Arg al[ 10 ]; 01303 Widget form, frame, button1, button2; 01304 XmString xstr; 01305 01306 ENTRY("r_INT_mk_app_buttons"); 01307 01308 /* create frame to hold form and buttons */ 01309 ac = 0; 01310 frame = XmCreateFrame( parent, "frame", al, ac ); 01311 01312 /* create form to hold push buttons */ 01313 ac = 0; 01314 XtSetArg( al[ac], XmNhorizontalSpacing, R_BUTTON_SPACE ); ac++; 01315 form = XmCreateForm( frame, "form", al, ac ); 01316 01317 01318 /* region fill button */ 01319 ac = 0; 01320 xstr = XmStringCreateLtoR( "FILL", gRX.charset ); 01321 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 01322 button1 = XmCreatePushButton( form, "fill", al, ac ); 01323 XtManageChild( button1 ); 01324 XtAddCallback( button1, XmNactivateCallback, 01325 ( XtCallbackProc )r_INT_cb_fill, I ); 01326 XtSetSensitive( button1, True ); 01327 XmStringFree( xstr ); 01328 MCW_register_hint( button1 , "interpolate between the last two lines" ); 01329 01330 /* unfill button */ 01331 ac = 0; 01332 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 01333 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 01334 xstr = XmStringCreateLtoR( "unfill", gRX.charset ); 01335 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 01336 button2 = XmCreatePushButton( form, "unfill", al, ac ); 01337 XtManageChild( button2 ); 01338 XtAddCallback( button2, XmNactivateCallback, 01339 ( XtCallbackProc )r_any_cb_unfill, &gRI.fill_val ); 01340 XtSetSensitive( button2, True ); 01341 XmStringFree( xstr ); 01342 MCW_register_hint( button2 , "unfill at interpolation \"fill value\"" ); 01343 01344 /* apply button - set interpolation values to draw values */ 01345 ac = 0; 01346 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 01347 XtSetArg( al[ac], XmNleftWidget, button2 ); ac++; 01348 xstr = XmStringCreateLtoR( "apply", gRX.charset ); 01349 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 01350 button1 = XmCreatePushButton( form, "apply", al, ac ); 01351 XtManageChild( button1 ); 01352 XtAddCallback( button1, XmNactivateCallback, 01353 ( XtCallbackProc )r_any_cb_apply, &gRI.fill_val ); 01354 XtSetSensitive( button1, True ); 01355 XmStringFree( xstr ); 01356 MCW_register_hint( button1 , "sets fill values to main draw values" ); 01357 01358 01359 /* stats button */ 01360 ac = 0; 01361 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 01362 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 01363 xstr = XmStringCreateLtoR( "stats", gRX.charset ); 01364 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 01365 button2 = XmCreatePushButton( form, "stats", al, ac ); 01366 XtManageChild( button2 ); 01367 XtAddCallback( button2, XmNactivateCallback, 01368 ( XtCallbackProc )r_any_cb_fill_stats, &gRI.fill_val ); 01369 XtSetSensitive( button2, True ); 01370 XmStringFree( xstr ); 01371 01372 /* hide button */ 01373 ac = 0; 01374 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 01375 XtSetArg( al[ac], XmNleftWidget, button2 ); ac++; 01376 xstr = XmStringCreateLtoR( "hide", gRX.charset ); 01377 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 01378 button1 = XmCreatePushButton( form, "hide", al, ac ); 01379 XtManageChild( button1 ); 01380 XtAddCallback( button1, XmNactivateCallback, 01381 ( XtCallbackProc )r_any_cb_hide, "INT" ); 01382 XtSetSensitive( button1, True ); 01383 XmStringFree( xstr ); 01384 01385 01386 XtManageChild( form ); 01387 XtManageChild( frame ); 01388 01389 RETURN( frame ); 01390 } |
|
Definition at line 1400 of file plug_roiedit.c. References r_X_s::charset, ENTRY, interp_s::fill_val, interp_s::fillval_w, gRX, r_INT_cb_set_fill_val(), and RETURN.
01401 { 01402 Widget junk, rc, frame; 01403 XmString xstr; 01404 Arg al[ 10 ]; 01405 int ac; 01406 char string[ 15 ]; 01407 01408 ENTRY("r_INT_mk_fillval_fr"); 01409 01410 ac = 0; 01411 frame = XmCreateFrame( parent, "frame", al, ac ); 01412 01413 ac = 0; 01414 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 01415 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 01416 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 01417 01418 01419 sprintf( string, "%d", I->fill_val ); 01420 01421 ac = 0; 01422 xstr = XmStringCreateLtoR( "fill value : ", gRX.charset ); 01423 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 01424 junk = XmCreateLabel( rc, "label", al, ac ); 01425 XtManageChild( junk ); 01426 XmStringFree( xstr ); 01427 01428 ac = 0; 01429 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 01430 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 01431 I->fillval_w = XmCreateText( rc, "text", al, ac ); 01432 XtManageChild( I->fillval_w ); 01433 XtAddCallback( I->fillval_w, XmNactivateCallback, 01434 ( XtCallbackProc )r_INT_cb_set_fill_val, NULL ); 01435 XtAddCallback( I->fillval_w, XmNlosingFocusCallback, 01436 ( XtCallbackProc )r_INT_cb_set_fill_val, NULL ); 01437 01438 01439 XtManageChild( rc ); 01440 XtManageChild( frame ); 01441 01442 RETURN( frame ); 01443 } |
|
Definition at line 1252 of file plug_roiedit.c. References r_X_s::display, ENTRY, gRX, interp_s::main, interp_s::mainRC, r_any_cb_hide(), r_init_interp_vals(), r_INT_mk_app_buttons(), and r_INT_mk_fillval_fr().
01253 { 01254 Widget junk, frame, rc; 01255 XmString xstring; 01256 Arg al[ 20 ]; 01257 int ac; 01258 01259 ENTRY("r_INT_mk_main_shell"); 01260 01261 if ( ! r_init_interp_vals( I ) ) 01262 EXRETURN; 01263 01264 ac = 0; 01265 XtSetArg( al[ac], XmNinitialResourcesPersistent, False ); ac++; 01266 XtSetArg( al[ac], XmNdeleteResponse, XmDO_NOTHING ); ac++; 01267 XtSetArg( al[ac], XmNmappedWhenManaged, False ); ac++; 01268 I->main = XtAppCreateShell( "The Interpolator", 01269 "rshell", topLevelShellWidgetClass, gRX.display, al, ac ); 01270 01271 XmAddWMProtocolCallback( I->main, 01272 XmInternAtom( gRX.display, "WM_DELETE_WINDOW", False ), 01273 ( XtCallbackProc )r_any_cb_hide, "INT" ); 01274 01275 ac = 0; 01276 XtSetArg( al[ac], XmNspacing, 15 ); ac++; 01277 XtSetArg( al[ac], XmNmarginWidth, 10 ); ac++; 01278 XtSetArg( al[ac], XmNmarginHeight, 10 ); ac++; 01279 I->mainRC = XmCreateRowColumn( I->main, "rowcolumn", al, ac ); 01280 01281 /* create the main white and gray selection frames */ 01282 ( void )r_INT_mk_fillval_fr ( I, I->mainRC ); 01283 ( void )r_INT_mk_app_buttons( I, I->mainRC ); 01284 01285 XtManageChild( I->mainRC ); 01286 XtRealizeWidget( I->main ); 01287 01288 EXRETURN ; 01289 } |
|
Definition at line 4463 of file plug_roiedit.c. References client_data, new_MCW_textwin(), and TEXT_READONLY. Referenced by r_main_mk_show_buttons().
04468 { 04469 ( void )new_MCW_textwin( w, 04470 04471 #include "plug_roiedit.hhh" 04472 04473 "Compiled: " 04474 __DATE__ 04475 ", " 04476 __TIME__ 04477 "\n" 04478 04479 , TEXT_READONLY ); 04480 04481 return; 04482 } 04483 04484 04485 /*---------------------------------------------------------------------- 04486 ** 04487 ** Callback to quit ( this merely unmanages all the widgets ). 04488 ** 04489 **---------------------------------------------------------------------- 04490 */ 04491 static void 04492 r_main_cb_quit( void ) 04493 { 04494 r_any_cb_hide( NULL, "all", NULL ); 04495 XtUnmapWidget( gRX.main ); 04496 gRX.main_is_open = 0; 04497 } 04498 04499 04500 /*---------------------------------------------------------------------- 04501 ** 04502 ** Callback to save the current dataset under a new name. 04503 ** 04504 **---------------------------------------------------------------------- 04505 */ 04506 static void 04507 r_main_cb_saveas( 04508 Widget w, 04509 int client_data, 04510 XtPointer call_data 04511 ) 04512 { 04513 XmSelectionBoxCallbackStruct * cbs; 04514 char * text; 04515 int ival; 04516 04517 ENTRY("r_main_cb_saveas"); 04518 04519 cbs = ( XmSelectionBoxCallbackStruct * )call_data; 04520 04521 if ( ! XmStringGetLtoR( cbs->value, gRX.charset, &text ) ) 04522 { 04523 rERROR( "Failed to get filename from text." ); 04524 EXRETURN; 04525 } 04526 else if ( ! *text ) 04527 { 04528 XtFree( text ); 04529 EXRETURN; 04530 } 04531 04532 /* Make sure file name is not too long. */ 04533 04534 if ( strlen( text ) > R_FILE_L - 14 ) /* leave from for +tlrc.BRIK.gz_ */ 04535 { 04536 sprintf( gRmessage, "Output filename '%s' exceeds %d characters.\n", 04537 text, R_FILE_L - 14 ); 04538 rERROR( gRmessage ); 04539 } 04540 else 04541 strcpy( gRA.save_as_name, text ); 04542 04543 XtFree( text ); 04544 04545 r_save_dataset_as( gRA.save_as_name, client_data ); 04546 EXRETURN; 04547 } 04548 04549 04550 /*---------------------------------------------------------------------- 04551 ** 04552 ** Actually save the new dataset. Make a copy of the original dset, 04553 ** change the prefix and save the file. 04554 ** 04555 **---------------------------------------------------------------------- 04556 */ 04557 static int 04558 r_save_dataset_as( char * filename, int overwrite ) 04559 { 04560 THD_3dim_dataset * dset = NULL; 04561 04562 ENTRY("r_save_dataset_as"); 04563 04564 if ( ! ( dset = PLUTO_copy_dset( gRA.func, filename ) ) ) 04565 { 04566 sprintf( gRmessage,"Failed to copy dataset with name '%s'.", filename ); 04567 rERROR( gRmessage ); 04568 RETURN(0); 04569 } 04570 |
|
Definition at line 4580 of file plug_roiedit.c. References gRmessage. Referenced by r_main_mk_show_buttons().
04599 { |
|
Definition at line 4595 of file plug_roiedit.c. References ENTRY, gRA, gRCP, gRH, gRI, r_main_show_alg_vals(), r_main_show_HL_vals(), r_main_show_INT_vals(), and r_main_show_pt_conn_vals(). Referenced by r_main_mk_save_as_fr().
04599 { 04600 ENTRY("r_main_cb_show_structs"); 04601 04602 printf( "------------------------------------------------------------\n" ); 04603 04604 r_main_show_alg_vals ( &gRA ); 04605 r_main_show_INT_vals ( &gRI ); 04606 r_main_show_HL_vals ( &gRH ); 04607 r_main_show_pt_conn_vals( &gRCP ); 04608 04609 printf( "------------------------------------------------------------\n" ); 04610 EXRETURN; 04611 } 04612 04613 04614 /*---------------------------------------------------------------------- 04615 **------ -------------------------------- 04616 **------ Begin interpolation routines -------------------------------- 04617 **------ -------------------------------- 04618 **---------------------------------------------------------------------- 04619 ** 04620 ** The technique here is to keep two curves of data stored. 04621 ** 04622 ** Operations that we need to consider are : 04623 ** 04624 ** o inserting a new line ( on any line draw ) 04625 ** if none { insert first } 04626 ** else if one { insert second } 04627 ** else { move second to first, insert second } 04628 ** o UNDO move 04629 ** if two { remove second } 04630 ** else { remove first } 04631 ** o interpolate ( use special interpolation value ) 04632 ** - only with the two lines 04633 ** - store previous interpolation first 04634 ** ( change interpolation values to draw values ) 04635 ** o undo interpolation |
|
Definition at line 4686 of file plug_roiedit.c. References gRCP, gRI, MODE_CLOSED, MODE_CONN_PTS, MODE_CURVE, mode_ival, undo_buf, undo_bufuse, and undo_xyz. Referenced by r_main_mk_show_buttons().
04696 { 04697 gRI.B.used = 0; /* RCR - clear any new I-data */ 04698 04699 if ( mode_ival == MODE_CONN_PTS ) |
|
Definition at line 463 of file plug_roiedit.c. References ENTRY, gRH, gRI, gRX, r_HL_mk_main_shell(), r_INT_mk_main_shell(), r_main_mk_show_buttons(), and r_wtgr_mk_main_shell(). Referenced by DRAW_make_widgets().
00464 { 00465 ENTRY("r_main_mk_main_shell"); 00466 #ifdef R_LOG_INFO_D 00467 if ( ! r_open_log_file( ) ) 00468 return 0; 00469 #endif 00470 00471 r_wtgr_mk_main_shell ( &gRX ); 00472 r_INT_mk_main_shell ( &gRI ); /* interpolation shell */ 00473 r_HL_mk_main_shell ( &gRH ); /* hole filler shell */ 00474 r_main_mk_show_buttons( ); 00475 00476 EXRETURN; 00477 } |
|
Definition at line 677 of file plug_roiedit.c. References r_X_s::charset, r_X_s::display, ENTRY, gRA, gRX, r_any_cb_hide(), r_main_cb_saveas(), r_X_s::save_as_file_d, r_alg_s::save_as_name, shell, and VISIBILIZE_WHEN_MAPPED.
00678 { 00679 Widget button, junk, hrc, vrc, frame; 00680 Arg al[ 10 ]; 00681 int ac; 00682 char string[ 25 ]; 00683 00684 ENTRY("r_main_mk_save_as_fr"); 00685 00686 XtVaSetValues( shell , 00687 XmNmwmFunctions , 00688 MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE , 00689 NULL ) ; 00690 ac = 0; 00691 XtSetArg( al[ ac ], XmNdialogTitle, 00692 XmStringCreateLtoR( "Save As", gRX.charset ) ); ac++; 00693 XtSetArg( al[ ac ], XmNtextString, 00694 XmStringCreateLtoR( gRA.save_as_name, gRX.charset ) ); ac++; 00695 XtSetArg( al[ ac ], XmNselectionLabelString, 00696 XmStringCreateLtoR( "AFNI prefix : ", gRX.charset ) ); ac++; 00697 XtSetArg( al[ ac ], XmNokLabelString, 00698 XmStringCreateLtoR( "save", gRX.charset ) ); ac++; 00699 XtSetArg( al[ ac ], XmNapplyLabelString, 00700 XmStringCreateLtoR( "overwrite", gRX.charset ) ); ac++; 00701 XtSetArg( al[ ac ], XmNcancelLabelString, 00702 XmStringCreateLtoR( "hide", gRX.charset ) ); ac++; 00703 XtSetArg( al[ ac ], XmNminimizeButtons, True ); ac++; 00704 XtSetArg( al[ac], XmNinitialResourcesPersistent, False ); ac++; 00705 XtSetArg( al[ac], XmNmappedWhenManaged, False ); ac++; 00706 XtSetArg( al[ac], XmNdeleteResponse, XmDO_NOTHING ); ac++; 00707 gRX.save_as_file_d = XmCreatePromptDialog( parent, "dialog", al, ac ); 00708 00709 XmAddWMProtocolCallback( gRX.save_as_file_d, 00710 XmInternAtom( gRX.display, "WM_DELETE_WINDOW", False ), 00711 ( XtCallbackProc )r_any_cb_hide, "saveas" ); 00712 00713 XtAddCallback( gRX.save_as_file_d, XmNokCallback, 00714 ( XtCallbackProc )r_main_cb_saveas, ( XtPointer )0 ); 00715 XtAddCallback( gRX.save_as_file_d, XmNapplyCallback, 00716 ( XtCallbackProc )r_main_cb_saveas, ( XtPointer )1 ); 00717 XtAddCallback( gRX.save_as_file_d, XmNcancelCallback, 00718 ( XtCallbackProc )r_any_cb_hide, "saveas" ); 00719 00720 XtManageChild( XmSelectionBoxGetChild( gRX.save_as_file_d, 00721 XmDIALOG_APPLY_BUTTON ) ); 00722 XtUnmanageChild( XmSelectionBoxGetChild( gRX.save_as_file_d, 00723 XmDIALOG_HELP_BUTTON ) ); 00724 00725 XtManageChild( gRX.save_as_file_d ); 00726 00727 VISIBILIZE_WHEN_MAPPED(gRX.save_as_file_d) ; /* 27 Sep 2000 */ 00728 00729 /* 00730 ** Once we prevent it from popping up immediately, set it to display 00731 ** anytime it's managed. 00732 */ 00733 ac = 0; 00734 XtSetArg( al[ac], XmNmappedWhenManaged, True ); ac++; 00735 XtSetValues( gRX.save_as_file_d, al, ac ); 00736 00737 EXRETURN; 00738 } |
|
Definition at line 510 of file plug_roiedit.c. References r_X_s::charset, r_X_s::display, ENTRY, gRX, r_X_s::main, r_X_s::main_is_open, r_X_s::mainForm, r_any_cb_raise(), r_any_cb_undo(), r_main_cb_help(), r_main_cb_quit(), r_main_cb_show_structs(), and r_main_mk_save_as_fr(). Referenced by r_main_mk_main_shell().
00511 { 00512 int ac; 00513 Arg al[ 10 ]; 00514 Widget button, tmpb, tmpb2; 00515 XmString xstr; 00516 00517 ENTRY("r_main_mk_show_buttons"); 00518 00519 gRX.main_is_open = 1; 00520 00521 ac = 0; 00522 XtSetArg( al[ac], XmNinitialResourcesPersistent, False ); ac++; 00523 XtSetArg( al[ac], XmNdeleteResponse, XmDO_NOTHING ); ac++; 00524 gRX.main = XtAppCreateShell( "GyrusFinder", "rshell", 00525 topLevelShellWidgetClass, gRX.display, al, ac ); 00526 00527 XmAddWMProtocolCallback( gRX.main, 00528 XmInternAtom( gRX.display, "WM_DELETE_WINDOW", False ), 00529 ( XtCallbackProc )r_main_cb_quit, ( XtPointer )NULL ); 00530 00531 ac = 0; 00532 gRX.mainForm = XmCreateForm( gRX.main, "form", al, ac ); 00533 00534 00535 /* raise interpolator button */ 00536 ac = 0; 00537 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00538 XtSetArg( al[ac], XmNwidth, 220 ); ac++; 00539 xstr = XmStringCreateLtoR( "Interpolator", gRX.charset ); 00540 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00541 button = XmCreatePushButton( gRX.mainForm, "INT", al, ac ); 00542 XtManageChild( button ); 00543 XtAddCallback( button, XmNactivateCallback, 00544 ( XtCallbackProc )r_any_cb_raise, "INT" ); 00545 XtSetSensitive( button, True ); 00546 XmStringFree(xstr) ; 00547 tmpb = button; 00548 00549 /* raise wtgr button */ 00550 ac = 0; 00551 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00552 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00553 XtSetArg( al[ac], XmNtopWidget, tmpb ); ac++; 00554 XtSetArg( al[ac], XmNwidth, 220 ); ac++; 00555 xstr = XmStringCreateLtoR( "White/Gray Finder", gRX.charset ); 00556 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 00557 button = XmCreatePushButton( gRX.mainForm, "WhiteGray", al, ac ); 00558 XtManageChild( button ); 00559 XtAddCallback( button, XmNactivateCallback, 00560 ( XtCallbackProc )r_any_cb_raise, "wtgr" ); 00561 XtSetSensitive( button, True ); 00562 XmStringFree( xstr ); 00563 tmpb = button; 00564 00565 00566 /* raise holes button */ 00567 ac = 0; 00568 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00569 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00570 XtSetArg( al[ac], XmNtopWidget, tmpb ); ac++; 00571 XtSetArg( al[ac], XmNwidth, 220 ); ac++; 00572 xstr = XmStringCreateLtoR( "Hole Filler", gRX.charset ); 00573 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00574 button = XmCreatePushButton( gRX.mainForm, "fillholes", al, ac ); 00575 XtManageChild( button ); 00576 XtAddCallback( button, XmNactivateCallback, 00577 ( XtCallbackProc )r_any_cb_raise, "HL" ); 00578 XtSetSensitive( button, True ); 00579 XmStringFree( xstr ); 00580 tmpb = button; 00581 00582 00583 /* UNDO button */ 00584 00585 ac = 0; 00586 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00587 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00588 XtSetArg( al[ac], XmNtopWidget, tmpb ); ac++; 00589 XtSetArg( al[ac], XmNwidth, 110 ); ac++; 00590 xstr = XmStringCreateLtoR( "UNDO", gRX.charset ); 00591 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00592 button = XmCreatePushButton( gRX.mainForm, "saveas", al, ac ); 00593 XtManageChild( button ); 00594 XtAddCallback( button, XmNactivateCallback, 00595 ( XtCallbackProc )r_any_cb_undo, NULL ); 00596 XtSetSensitive( button, True ); 00597 XmStringFree( xstr ); 00598 tmpb2 = button; 00599 00600 00601 /* save as button */ 00602 00603 ac = 0; 00604 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00605 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 00606 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 00607 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00608 XtSetArg( al[ac], XmNtopWidget, tmpb ); ac++; 00609 XtSetArg( al[ac], XmNwidth, 110 ); ac++; 00610 xstr = XmStringCreateLtoR( "Save As", gRX.charset ); 00611 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00612 button = XmCreatePushButton( gRX.mainForm, "saveas", al, ac ); 00613 XtManageChild( button ); 00614 XtAddCallback( button, XmNactivateCallback, 00615 ( XtCallbackProc )r_any_cb_raise, "saveas" ); 00616 XtSetSensitive( button, True ); 00617 XmStringFree( xstr ); 00618 tmpb = button; 00619 00620 /* 00621 ** We're going to cheat a little here. The "save as" widget will 00622 ** be implemented as a child of the main RC. So we need to create 00623 ** the widget now, so the main "save as" button can raise/manage it. 00624 */ 00625 00626 r_main_mk_save_as_fr( gRX.mainForm ); 00627 00628 00629 /* help button */ 00630 ac = 0; 00631 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00632 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00633 XtSetArg( al[ac], XmNtopWidget, tmpb2 ); ac++; 00634 XtSetArg( al[ac], XmNwidth, 110 ); ac++; 00635 xstr = XmStringCreateLtoR( "Help", gRX.charset ); 00636 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00637 button = XmCreatePushButton( gRX.mainForm, "help", al, ac ); 00638 XtManageChild( button ); 00639 XtAddCallback( button, XmNactivateCallback, 00640 ( XtCallbackProc )r_main_cb_help, NULL ); 00641 XtSetSensitive( button, True ); 00642 XmStringFree( xstr ); 00643 00644 00645 /* show data structures button */ 00646 ac = 0; 00647 XtSetArg( al[ac], XmNalignment, XmALIGNMENT_CENTER ); ac++; 00648 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 00649 XtSetArg( al[ac], XmNleftWidget, button ); ac++; 00650 XtSetArg( al[ac], XmNtopAttachment, XmATTACH_WIDGET ); ac++; 00651 XtSetArg( al[ac], XmNtopWidget, tmpb ); ac++; 00652 XtSetArg( al[ac], XmNwidth, 110 ); ac++; 00653 xstr = XmStringCreateLtoR( "structs", gRX.charset ); 00654 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 00655 button = XmCreatePushButton( gRX.mainForm, "structs", al, ac ); 00656 XtManageChild( button ); 00657 XtAddCallback( button, XmNactivateCallback, 00658 ( XtCallbackProc )r_main_cb_show_structs, NULL ); 00659 XtSetSensitive( button, True ); 00660 XmStringFree( xstr ); 00661 00662 00663 XtManageChild( gRX.mainForm ); 00664 XtRealizeWidget( gRX.main ); 00665 00666 EXRETURN; 00667 } |
|
Definition at line 4302 of file plug_roiedit.c. References r_alg_s::adata, r_alg_s::adjust_point, r_alg_s::anat, r_alg_s::Bnew, r_alg_s::Bold, r_alg_s::border, r_alg_s::factor, r_alg_s::fdata, r_alg_s::func, r_alg_s::gr_fill_val, r_alg_s::gr_max_dist, r_alg_s::gr_range_max, r_alg_s::gr_range_min, points_t::M, r_alg_s::min_nbrs, r_alg_s::neighbors, r_alg_s::nvox, r_alg_s::nx, r_alg_s::ny, r_alg_s::nz, r_alg_s::point_coord, r_alg_s::point_value, points_t::points, r_alg_s::save_as_name, r_alg_s::strong_borders, r_alg_s::undo_data, points_t::used, r_alg_s::wt_diag_connect, r_alg_s::wt_fill_val, r_alg_s::wt_range_max, and r_alg_s::wt_range_min.
04303 { 04304 printf( "-----------------------------------\n" ); 04305 04306 printf( 04307 "gRA :\n" 04308 "\n" 04309 "point value : %d\n" 04310 "point coord : %d\n" 04311 "adjust point : %d\n" 04312 "'save as' name : %s\n" 04313 "\n" 04314 "white fill value : %d\n" 04315 "white range min : %d\n" 04316 "white range max : %d\n" 04317 "white diag connect : %d\n" 04318 "\n" 04319 "gray fill value : %d\n" 04320 "gray range min : %d\n" 04321 "gray range max : %d\n" 04322 "gray max distance : %d\n" 04323 "\n" 04324 "anat dset (addr) : %p\n" 04325 "func dset (addr) : %p\n" 04326 "adata data (addr) : %p\n" 04327 "fdata data (addr) : %p\n" 04328 "factor : %f\n" 04329 "nx : %d\n" 04330 "ny : %d\n" 04331 "nz : %d\n" 04332 "nvox : %d\n" 04333 "\n" 04334 "old bound.M : %d\n" 04335 "old bound.used : %d\n" 04336 "old bound.points (addr) : %p\n" 04337 "new bound.M : %d\n" 04338 "new bound.used : %d\n" 04339 "new bound.points (addr) : %p\n" 04340 "border.M : %d\n" 04341 "border.used : %d\n" 04342 "border.points (addr) : %p\n" 04343 "\n" 04344 "neighbors (addr) : %p\n" 04345 "undo data (addr) : %p\n" 04346 "\n" 04347 "min neighbors : %d\n" 04348 "strong borders : %d\n", 04349 A->point_value, A->point_coord, A->adjust_point, A->save_as_name, 04350 A->wt_fill_val, A->wt_range_min, A->wt_range_max, 04351 A->wt_diag_connect, 04352 A->gr_fill_val, A->gr_range_min, A->gr_range_max, A->gr_max_dist, 04353 A->anat, A->func, 04354 A->adata, A->fdata, 04355 A->factor, A->nx, A->ny, A->nz, A->nvox, 04356 A->Bold.M, A->Bold.used, A->Bold.points, 04357 A->Bnew.M, A->Bnew.used, A->Bnew.points, 04358 A->border.M, A->border.used, A->border.points, 04359 A->neighbors, A->undo_data, 04360 A->min_nbrs, A->strong_borders 04361 ); 04362 04363 printf( "-----------------------------------\n" ); 04364 } |
|
Definition at line 4406 of file plug_roiedit.c. References holes_s::fill_val, holes_s::filled, points_t::M, holes_s::max_size, points_t::points, points_t::used, and holes_s::wtgr_edge. Referenced by r_main_cb_saveas().
04407 { 04408 printf( "-----------------------------------\n" ); 04409 printf( 04410 "gRH :\n" 04411 "\n" 04412 "max size : %d\n" 04413 "fill value : %d\n" 04414 "wtgr_edge.M : %d\n" 04415 "wtgr_edge.used : %d\n" 04416 "wtgr_edge.points (addr) : %p\n" 04417 "filled.M : %d\n" 04418 "filled.used : %d\n" 04419 "filled.points (addr) : %p\n", 04420 H->max_size, H->fill_val, 04421 H->wtgr_edge.M, H->wtgr_edge.used, H->wtgr_edge.points, 04422 H->filled.M, H->filled.used, H->filled.points 04423 ); 04424 printf( "-----------------------------------\n" ); 04425 } |
|
Definition at line 4374 of file plug_roiedit.c. References interp_s::A, interp_s::afni_undo, interp_s::B, interp_s::fill_val, points_t::M, points_t::points, and points_t::used.
04375 { 04376 printf( "-----------------------------------\n" ); 04377 04378 printf( 04379 "gRI :\n" 04380 "\n" 04381 "fill value : %d\n" 04382 "afni undo : %d\n" 04383 "\n" 04384 "A.M : %d\n" 04385 "A.used : %d\n" 04386 "A.points (addr) : %p\n" 04387 "B.M : %d\n" 04388 "B.used : %d\n" 04389 "B.points (addr) : %p\n", 04390 I->fill_val, I->afni_undo, 04391 I->A.M, I->A.used, I->A.points, 04392 I->B.M, I->B.used, I->B.points 04393 ); 04394 04395 printf( "-----------------------------------\n" ); 04396 } |
|
Definition at line 4435 of file plug_roiedit.c. References r_pt_conn_s::cur_pt, r_pt_conn_s::dest, points_t::M, r_pt_conn_s::plist, points_t::points, r_pt_conn_s::source, points_t::used, r_ipt_t::x, r_ipt_t::y, and r_ipt_t::z.
04436 { 04437 printf( "-----------------------------------\n" ); 04438 printf( 04439 "gRCP :\n" 04440 "\n" 04441 "plist.M : %d\n" 04442 "plist.used : %d\n" 04443 "plist.points (addr) : %p\n" 04444 "source point : (%d,%d,%d)\n" 04445 "dest point : (%d,%d,%d)\n" 04446 "which point : %d\n", 04447 PC->plist.M, PC->plist.used, PC->plist.points, 04448 PC->source.x, PC->source.y, PC->source.z, 04449 PC->dest.x, PC->dest.y, PC->dest.z, 04450 PC->cur_pt 04451 ); 04452 printf( "-----------------------------------\n" ); 04453 } |
|
Definition at line 4250 of file plug_roiedit.c. References r_X_s::charset, gRX, and scale.
04259 { 04260 int ac; 04261 Arg al[ 20 ]; 04262 XmString Xtitle; 04263 Widget scale; 04264 04265 Xtitle = XmStringCreateLtoR( title, gRX.charset ); 04266 04267 ac = 0; 04268 XtSetArg( al[ac], XmNtitleString, Xtitle ); ac++; 04269 XtSetArg( al[ac], XmNorientation, XmHORIZONTAL ); ac++; 04270 XtSetArg( al[ac], XmNminimum, min ); ac++; 04271 XtSetArg( al[ac], XmNmaximum, max ); ac++; 04272 XtSetArg( al[ac], XmNvalue, value ); ac++; 04273 XtSetArg( al[ac], XmNshowValue, True ); ac++; 04274 04275 if ( decimal_places > 0 ) 04276 { 04277 XtSetArg( al[ac], XmNdecimalPoints, decimal_places ); 04278 ac++; 04279 } 04280 04281 04282 scale = XmCreateScale( parent, "scale_bar", al, ac ); 04283 04284 XmStringFree( Xtitle ); 04285 04286 XtManageChild( scale ); 04287 04288 XtAddCallback( scale, XmNvalueChangedCallback, callback, NULL ); 04289 04290 return scale; 04291 } |
|
Definition at line 1722 of file plug_roiedit.c. References r_ipt_t::x, r_ipt_t::y, and r_ipt_t::z.
|
|
Definition at line 4646 of file plug_roiedit.c. References AFNI_receive_control(), client_data, done_pb, DRAWING_SHUTDOWN, DSET_anyize, dset_changed, DSET_unlock, DSET_write, editor_open, ENTRY, free, MCW_invert_widget(), recv_key, recv_open, shell, undo_buf, undo_bufnum, undo_bufsiz, undo_bufuse, and undo_xyz.
04647 { 04648 ENTRY("DRAW_done_CB"); 04649 04650 if( dset != NULL ){ 04651 if( recv_open ) AFNI_receive_control( im3d, recv_key, DRAWING_SHUTDOWN, NULL ) ; 04652 if( dset_changed ){ 04653 MCW_invert_widget( done_pb ) ; 04654 DSET_write(dset) ; 04655 MCW_invert_widget( done_pb ) ; 04656 } 04657 DSET_unlock(dset) ; DSET_anyize(dset) ; 04658 dset = NULL ; dset_changed = 0 ; 04659 } 04660 04661 if( undo_buf != NULL ){ 04662 free(undo_buf) ; free(undo_xyz) ; 04663 undo_buf = NULL; undo_xyz = NULL; 04664 undo_bufsiz = undo_bufnum = undo_bufuse = 0 ; 04665 } 04666 04667 XtUnmapWidget( shell ) ; editor_open = 0 ; recv_open = 0 ; recv_key = -1 ; 04668 EXRETURN; 04669 } 04670 04671 /*------------------------------------------------------------------- 04672 Callback for undo button 04673 ---------------------------------------------------------------------*/ 04674 04675 static void DRAW_undo_CB( Widget w, XtPointer client_data, XtPointer call_data ) 04676 { |
|
Definition at line 3102 of file plug_roiedit.c. References ENTRY, r_alg_s::fdata, r_alg_s::nvox, r_alg_s::nx, r_alg_s::nxy, R_BOUND_VAL, and RETURN.
03103 { 03104 int last; 03105 int nx, nxy; 03106 short val; 03107 short * data; 03108 03109 ENTRY("r_wt_bad_ngbr_exists"); 03110 03111 data = A->fdata + current; 03112 nx = A->nx; 03113 nxy = A->nxy; 03114 last = A->nvox - nxy; 03115 03116 if ( ( current < nxy ) || ( current >= last ) ) 03117 RETURN(1); 03118 03119 val = data[ -1 ]; 03120 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03121 RETURN(1); 03122 03123 val = data[ 1 ]; 03124 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03125 RETURN(1); 03126 03127 val = data[ -nx ]; 03128 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03129 RETURN(1); 03130 03131 val = data[ nx ]; 03132 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03133 RETURN(1); 03134 03135 val = data[ -nxy ]; 03136 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03137 RETURN(1); 03138 03139 val = data[ nxy ]; 03140 if ( val && ( val != testval ) && ( val != R_BOUND_VAL ) ) 03141 RETURN(1); 03142 03143 RETURN(0); 03144 } |
|
Definition at line 3210 of file plug_roiedit.c. References r_alg_s::Bnew, r_alg_s::Bold, r_alg_s::border, client_data, dset_changed, ENTRY, r_alg_s::fdata, r_alg_s::func, gRA, r_alg_s::neighbors, r_alg_s::nvox, r_alg_s::nx, r_alg_s::nxy, PLUTO_dset_redisplay(), r_alg_s::point_coord, points_t::points, R_BOUND_VAL, r_wt_check_insert(), r_wt_set_neighbors(), rWARNING, THD_load_statistics(), r_alg_s::undo_data, points_t::used, r_alg_s::wt_diag_connect, and r_alg_s::wt_fill_val. Referenced by r_wt_mk_fill_buttons().
03215 { 03216 short * nptr, * fnptr, * flptr, * aptr, * uptr; 03217 int count, value, current; 03218 int nxy = gRA.nxy, nx = gRA.nx; 03219 char * cp = (char *)client_data; 03220 points_t B; 03221 03222 ENTRY("r_wt_cb_fill"); 03223 03224 /* check that we are ready to fill anything */ 03225 if ( ( gRA.point_coord == -1 ) || ( ! gRA.fdata ) ) 03226 { 03227 fputc( 7, stderr ); /* hard-code a beep */ 03228 EXRETURN; 03229 } 03230 03231 if ( !gRA.Bold.points || !gRA.Bnew.points || 03232 !gRA.neighbors || !gRA.undo_data) 03233 { 03234 fprintf( stderr, "Error: rcfr10\n" 03235 "Memory failure, addresses are %p, %p, %p and %p.\n", 03236 gRA.Bold.points, gRA.Bnew.points, 03237 gRA.neighbors, gRA.undo_data ); 03238 EXRETURN; 03239 } 03240 03241 /* first store to undo_data */ 03242 fnptr = gRA.fdata; uptr = gRA.undo_data; 03243 for ( count = 0; count < gRA.nvox; count++ ) 03244 *uptr++ = *fnptr++; 03245 03246 /* give the user an idea of what is happening */ 03247 rWARNING( "filling white matter" ); 03248 03249 if ( ( cp == NULL ) || ( *cp != '0' ) ) 03250 { 03251 for ( count = 0, fnptr = gRA.fdata; count < gRA.nvox; count++, fnptr++ ) if ( *fnptr == gRA.wt_fill_val ) 03252 *fnptr = 0; 03253 } 03254 03255 r_wt_set_neighbors( &gRA ); 03256 03257 /* set borders to nothing */ 03258 gRA.Bold.used = 0; 03259 gRA.Bnew.used = 0; 03260 gRA.border.used = 0; 03261 03262 if ( r_wt_check_insert( &gRA, gRA.point_coord ) != 1 ) 03263 EXRETURN; 03264 03265 while ( gRA.Bnew.used > 0 ) /* while boundary exists */ 03266 { 03267 B = gRA.Bold; /* swap memory and reset Bnew.used to zero */ 03268 gRA.Bold = gRA.Bnew; /* - this simply preserves the memory */ 03269 gRA.Bnew = B; 03270 gRA.Bnew.used = 0; 03271 fputs( ".", stderr ); 03272 03273 for ( count = 0; count < gRA.Bold.used; count++ ) 03274 { 03275 current = gRA.Bold.points[count]; 03276 03277 /* 6 'face sharing' points */ 03278 r_wt_check_insert( &gRA, current - 1 ); 03279 r_wt_check_insert( &gRA, current + 1 ); 03280 r_wt_check_insert( &gRA, current - nx ); 03281 r_wt_check_insert( &gRA, current + nx ); 03282 r_wt_check_insert( &gRA, current - nxy ); 03283 r_wt_check_insert( &gRA, current + nxy ); 03284 03285 /* 12 'edge sharing' points */ 03286 if ( gRA.wt_diag_connect < 2 ) 03287 { 03288 r_wt_check_insert( &gRA, current + nx - 1 ); 03289 r_wt_check_insert( &gRA, current + nx + 1 ); 03290 r_wt_check_insert( &gRA, current - nx - 1 ); 03291 r_wt_check_insert( &gRA, current - nx + 1 ); 03292 r_wt_check_insert( &gRA, current + nxy - 1 ); 03293 r_wt_check_insert( &gRA, current + nxy + 1 ); 03294 r_wt_check_insert( &gRA, current - nxy - 1 ); 03295 r_wt_check_insert( &gRA, current - nxy + 1 ); 03296 r_wt_check_insert( &gRA, current + nxy - nx ); 03297 r_wt_check_insert( &gRA, current + nxy + nx ); 03298 r_wt_check_insert( &gRA, current - nxy - nx ); 03299 r_wt_check_insert( &gRA, current - nxy + nx ); 03300 03301 /* 8 'corner sharing' points */ 03302 if ( gRA.wt_diag_connect == 0 ) 03303 { 03304 r_wt_check_insert( &gRA, current - nxy - nx - 1 ); 03305 r_wt_check_insert( &gRA, current - nxy - nx + 1 ); 03306 r_wt_check_insert( &gRA, current - nxy + nx - 1 ); 03307 r_wt_check_insert( &gRA, current - nxy + nx + 1 ); 03308 r_wt_check_insert( &gRA, current + nxy - nx - 1 ); 03309 r_wt_check_insert( &gRA, current + nxy - nx + 1 ); 03310 r_wt_check_insert( &gRA, current + nxy + nx - 1 ); 03311 r_wt_check_insert( &gRA, current + nxy + nx + 1 ); 03312 } 03313 } 03314 } 03315 } 03316 03317 /* clear bound markings */ 03318 for( count = 0, fnptr = gRA.fdata; count < gRA.nvox; count++, fnptr++ ) 03319 if ( *fnptr == R_BOUND_VAL ) 03320 *fnptr = 0; 03321 03322 /* recompute statistics, if the loaded value is big or small */ 03323 03324 THD_load_statistics( gRA.func ) ; 03325 03326 /* now redisplay dataset, in case anyone is looking at it */ 03327 03328 PLUTO_dset_redisplay( gRA.func ) ; 03329 dset_changed = 1; 03330 03331 fputs( "done\n\n", stderr ); 03332 EXRETURN; 03333 } |
|
Definition at line 2264 of file plug_roiedit.c. References client_data, gRA, and r_alg_s::strong_borders. Referenced by r_wt_mk_strong_bord_fr().
02269 { 02270 Boolean set; 02271 Arg al[ 10 ]; 02272 int ac; 02273 02274 ac = 0; 02275 XtSetArg( al[ ac ], XmNset, &set ); ac++; 02276 XtGetValues( w, al, ac ); 02277 02278 if ( set ) 02279 gRA.strong_borders = 1; 02280 else 02281 gRA.strong_borders = 0; 02282 02283 return; 02284 } |
|
Definition at line 3636 of file plug_roiedit.c. References client_data, ENTRY, gRA, gRmessage, rERROR, r_alg_s::wt_diag_connect, and XtFree. Referenced by r_wt_mk_diag_conn_fr().
03641 { 03642 char * text; 03643 int ival; 03644 03645 ENTRY("r_wt_cb_set_diag_conn"); 03646 03647 text = XmTextGetString( w ); 03648 03649 if ( ! text || ! *text ) /* nothing typed */ 03650 { 03651 if ( text ) 03652 XtFree( text ); 03653 EXRETURN; 03654 } 03655 03656 /* 03657 ** Make sure a value has changed (to something acceptable) 03658 ** before applying. 03659 */ 03660 03661 ival = atoi( text ); 03662 if ( ( ival < 0 ) || ( ival > 2 ) ) 03663 { 03664 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 0, 2 ); 03665 rERROR( gRmessage ); 03666 EXRETURN; 03667 } 03668 03669 if ( gRA.wt_diag_connect != ival ) 03670 gRA.wt_diag_connect = ival; 03671 03672 XtFree( text ); 03673 EXRETURN; 03674 } |
|
Definition at line 3922 of file plug_roiedit.c. References client_data, gRA, gRmessage, rERROR, rWARNING, r_alg_s::wt_fill_val, and XtFree. Referenced by r_wt_mk_fillval_fr().
03927 { 03928 char * text; 03929 int ival; 03930 03931 text = XmTextGetString( w ); 03932 03933 if ( ! text || ! *text ) /* nothing typed */ 03934 { 03935 if ( text ) 03936 XtFree( text ); 03937 return; 03938 } 03939 03940 /* 03941 ** Make sure a value has changed (to something acceptable) 03942 ** before applying. 03943 */ 03944 03945 ival = atoi( text ); 03946 if ( ( ival < 0 ) || ( ival > 255 ) ) 03947 { 03948 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 0, 255 ); 03949 rERROR( gRmessage ); 03950 return; 03951 } 03952 else if ( ival == 0 ) 03953 { 03954 rWARNING( "Warning : using white matter fill value of 0." ); 03955 } 03956 03957 if ( gRA.wt_fill_val != ival ) 03958 gRA.wt_fill_val = ival; 03959 03960 03961 XtFree( text ); 03962 } |
|
Definition at line 3684 of file plug_roiedit.c. References client_data, gRA, gRmessage, r_alg_s::min_nbrs, rERROR, and XtFree. Referenced by r_wt_mk_nbrs_fr().
03689 { 03690 char * text; 03691 int ival; 03692 03693 text = XmTextGetString( w ); 03694 03695 if ( ! text || ! *text ) /* nothing typed */ 03696 { 03697 if ( text ) 03698 XtFree( text ); 03699 return; 03700 } 03701 03702 /* 03703 ** Make sure a value has changed (to something acceptable) 03704 ** before applying. 03705 */ 03706 03707 ival = atoi( text ); 03708 if ( ( ival < 0 ) || ( ival > 6 ) ) 03709 { 03710 sprintf( gRmessage, "Value %d is not in range [%d,%d].", ival, 0, 6 ); 03711 rERROR( gRmessage ); 03712 return; 03713 } 03714 03715 if ( gRA.min_nbrs != ival ) 03716 gRA.min_nbrs = ival; 03717 03718 03719 XtFree( text ); 03720 } |
|
Definition at line 4018 of file plug_roiedit.c. References client_data, gRA, gRmessage, rERROR, r_alg_s::wt_range_max, r_alg_s::wt_range_min, and XtFree. Referenced by r_wt_mk_range_fr().
04023 { 04024 char * string = ( char * )client_data; 04025 char * text; 04026 int ival; 04027 04028 text = XmTextGetString( w ); 04029 04030 if ( ! text || ! *text ) /* nothing typed */ 04031 { 04032 if ( text ) 04033 XtFree( text ); 04034 return; 04035 } 04036 04037 if ( ! string ) /* strange error - complain and return */ 04038 { 04039 fprintf( stderr, "r_wt_cb_set_range error - string is NULL\n" ); 04040 return; 04041 } 04042 else if ( ! *string ) 04043 { 04044 fprintf( stderr, "r_wt_cb_set_range error - string is empty\n" ); 04045 return; 04046 } 04047 else if ( ! strcmp( string, "to" ) && ! strcmp( string, "from" ) ) 04048 { 04049 fprintf( stderr, "r_wt_cb_set_range error -\n" 04050 "'%s' should be 'to' or 'from'.\n", string ); 04051 return; 04052 } 04053 04054 /* 04055 ** Make sure a value has changed (to something acceptable) 04056 ** before applying. Use short range. 04057 */ 04058 04059 ival = atoi( text ); 04060 if ( ( ival < -32768 ) || ( ival > 32767 ) ) 04061 { 04062 fprintf( stderr, "Value %d is not in range [%d,%d].\n", 04063 ival, -32768, 32767 ); 04064 return; 04065 } 04066 04067 if ( ! strcmp( string, "from" ) ) 04068 { 04069 if ( gRA.wt_range_min != ival ) 04070 { 04071 gRA.wt_range_min = ival; 04072 04073 if ( gRA.wt_range_min > gRA.wt_range_max ) 04074 { 04075 sprintf( gRmessage, "\nWarning!" 04076 " Min value should be less than max value.\n" 04077 "Value are %d and %d, respectively.\n", 04078 gRA.wt_range_min, gRA.wt_range_max ); 04079 rERROR( gRmessage ); 04080 } 04081 } 04082 } 04083 else 04084 { 04085 if ( gRA.wt_range_max != ival ) 04086 { 04087 gRA.wt_range_max = ival; 04088 04089 if ( gRA.wt_range_min > gRA.wt_range_max ) 04090 { 04091 sprintf( gRmessage, "\nWarning!" 04092 " Min value should be less than max value.\n" 04093 "Value are %d and %d, respectively.\n", 04094 gRA.wt_range_min, gRA.wt_range_max ); 04095 rERROR( gRmessage ); 04096 } 04097 } 04098 } 04099 04100 XtFree( text ); 04101 } |
|
Definition at line 3154 of file plug_roiedit.c. References r_alg_s::adata, r_alg_s::Bnew, r_alg_s::border, ENTRY, r_alg_s::fdata, r_alg_s::min_nbrs, r_alg_s::neighbors, r_add_to_boundary(), R_BOUND_VAL, r_wt_bad_ngbr_exists(), RETURN, r_alg_s::strong_borders, r_alg_s::wt_fill_val, r_alg_s::wt_range_max, and r_alg_s::wt_range_min.
03155 { 03156 short * aptr = A->adata; 03157 short * fptr = A->fdata; 03158 short * nptr = A->neighbors; 03159 short * fvp = fptr + current; /* pointer to function value */ 03160 03161 int value, added = 0; 03162 03163 ENTRY("r_wt_check_insert"); 03164 03165 value = aptr[ current ]; 03166 03167 /* if new and in range, we will set as a result voxel */ 03168 if ( *fvp == 0 ) 03169 { 03170 if ( ( value >= A->wt_range_min ) && 03171 ( value <= A->wt_range_max ) ) 03172 { 03173 /* if it also has enough neighbors */ 03174 if ( nptr[ current ] >= A->min_nbrs ) 03175 { 03176 /* also check for neighbor in the user's boundary */ 03177 if ( ( ! A->strong_borders ) || 03178 ! r_wt_bad_ngbr_exists( A, current, A->wt_fill_val ) ) 03179 { 03180 if ( ! r_add_to_boundary( &A->Bnew, current ) ) 03181 RETURN(-1); 03182 else 03183 added = 1; 03184 } 03185 } 03186 03187 /* either way, set point as wt_fill_val */ 03188 *fvp = A->wt_fill_val; 03189 } 03190 else /* add to the 3d boundary */ 03191 { 03192 *fvp = R_BOUND_VAL; /* mark as in boundary, clear later */ 03193 03194 if ( ! r_add_to_boundary( &A->border, current ) ) 03195 RETURN(-1); 03196 } 03197 } 03198 03199 RETURN(added); 03200 } |
|
Definition at line 2618 of file plug_roiedit.c. References r_X_s::charset, ENTRY, gRA, gRX, r_wt_cb_set_diag_conn(), RETURN, r_X_s::wt_diag_conn_w, and r_alg_s::wt_diag_connect.
02619 { 02620 Widget junk, rc, frame; 02621 XmString xstr; 02622 Arg al[ 10 ]; 02623 int ac; 02624 char string[ 15 ]; 02625 02626 ENTRY("r_wt_mk_diag_conn_fr"); 02627 02628 ac = 0; 02629 frame = XmCreateFrame( parent, "frame", al, ac ); 02630 02631 ac = 0; 02632 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02633 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02634 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02635 02636 ac = 0; 02637 xstr = XmStringCreateLtoR( "connection constraint (0-2) : ", gRX.charset ); 02638 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02639 junk = XmCreateLabel( rc, "label", al, ac ); 02640 XtManageChild( junk ); 02641 XmStringFree( xstr ); 02642 02643 02644 sprintf( string, "%d", gRA.wt_diag_connect ); 02645 02646 ac = 0; 02647 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02648 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02649 X->wt_diag_conn_w = XmCreateText( rc, "text", al, ac ); 02650 XtManageChild( X->wt_diag_conn_w ); 02651 XtAddCallback( X->wt_diag_conn_w, XmNactivateCallback, 02652 ( XtCallbackProc )r_wt_cb_set_diag_conn, NULL ); 02653 XtAddCallback( X->wt_diag_conn_w, XmNlosingFocusCallback, 02654 ( XtCallbackProc )r_wt_cb_set_diag_conn, NULL ); 02655 02656 02657 XtManageChild( rc ); 02658 XtManageChild( frame ); 02659 02660 RETURN( frame ); 02661 } |
|
Definition at line 2510 of file plug_roiedit.c. References r_X_s::charset, ENTRY, gRA, gRX, MCW_register_hint(), r_any_cb_fill_stats(), r_any_cb_unfill(), R_BUTTON_SPACE, r_wt_cb_fill(), r_wtgr_cb_suggest_limits(), and r_alg_s::wt_fill_val.
02511 { 02512 int ac; 02513 Arg al[ 10 ]; 02514 Widget form, frame, button1, button2, button3; 02515 XmString xstr; 02516 02517 ENTRY("r_wt_mk_fill_buttons"); 02518 02519 /* create frame to hold form and buttons */ 02520 ac = 0; 02521 frame = XmCreateFrame( parent, "frame", al, ac ); 02522 02523 /* create form to hold push buttons */ 02524 ac = 0; 02525 XtSetArg( al[ac], XmNhorizontalSpacing, R_BUTTON_SPACE ); ac++; 02526 form = XmCreateForm( frame, "form", al, ac ); 02527 02528 02529 /* region fill button */ 02530 ac = 0; 02531 xstr = XmStringCreateLtoR( "FILL", gRX.charset ); 02532 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02533 button1 = XmCreatePushButton( form, "fill", al, ac ); 02534 XtManageChild( button1 ); 02535 XtAddCallback( button1, XmNactivateCallback, 02536 ( XtCallbackProc )r_wt_cb_fill, NULL ); 02537 XtSetSensitive( button1, True ); 02538 XmStringFree( xstr ); 02539 MCW_register_hint( button1 , "fill the white matter region" ); 02540 02541 02542 /* MORE region fill button */ 02543 ac = 0; 02544 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02545 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 02546 xstr = XmStringCreateLtoR( "MORE", gRX.charset ); 02547 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02548 button3 = XmCreatePushButton( form, "more", al, ac ); 02549 XtManageChild( button3 ); 02550 XtAddCallback( button3, XmNactivateCallback, 02551 ( XtCallbackProc )r_wt_cb_fill, "0" ); 02552 XtSetSensitive( button3, True ); 02553 XmStringFree( xstr ); 02554 MCW_register_hint( button3 , "fill more white matter (no unfill)" ); 02555 02556 02557 /* unfill button */ 02558 ac = 0; 02559 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02560 XtSetArg( al[ac], XmNleftWidget, button3 ); ac++; 02561 xstr = XmStringCreateLtoR( "unfill", gRX.charset ); 02562 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02563 button2 = XmCreatePushButton( form, "unfill", al, ac ); 02564 XtManageChild( button2 ); 02565 XtAddCallback( button2, XmNactivateCallback, 02566 ( XtCallbackProc )r_any_cb_unfill, &gRA.wt_fill_val ); 02567 XtSetSensitive( button2, True ); 02568 XmStringFree( xstr ); 02569 MCW_register_hint( button2 , "unfill all matter for the \"fill value\"" ); 02570 02571 02572 /* suggest range button */ 02573 ac = 0; 02574 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02575 XtSetArg( al[ac], XmNleftWidget, button2 ); ac++; 02576 xstr = XmStringCreateLtoR( "suggest range", gRX.charset ); 02577 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02578 button1 = XmCreatePushButton( form, "suggest_range", al, ac ); 02579 XtManageChild( button1 ); 02580 XtAddCallback( button1, XmNactivateCallback, 02581 ( XtCallbackProc )r_wtgr_cb_suggest_limits, "white" ); 02582 XtSetSensitive( button1, True ); 02583 XmStringFree( xstr ); 02584 MCW_register_hint( button1 , "suggest a white matter range" ); 02585 02586 02587 /* stats button */ 02588 ac = 0; 02589 XtSetArg( al[ac], XmNleftAttachment, XmATTACH_WIDGET ); ac++; 02590 XtSetArg( al[ac], XmNleftWidget, button1 ); ac++; 02591 xstr = XmStringCreateLtoR( "stats", gRX.charset ); 02592 XtSetArg( al[ac], XmNlabelString, xstr ); ac++; 02593 button2 = XmCreatePushButton( form, "stats", al, ac ); 02594 XtManageChild( button2 ); 02595 XtAddCallback( button2, XmNactivateCallback, 02596 ( XtCallbackProc )r_any_cb_fill_stats, &gRA.wt_fill_val ); 02597 XtSetSensitive( button2, True ); 02598 XmStringFree( xstr ); 02599 MCW_register_hint( button2 , "get stats for this \"fill value\"" ); 02600 02601 02602 XtManageChild( form ); 02603 XtManageChild( frame ); 02604 02605 EXRETURN; 02606 } |
|
Definition at line 2816 of file plug_roiedit.c. References r_X_s::charset, gRA, gRX, r_wt_cb_set_fill_val(), r_alg_s::wt_fill_val, and r_X_s::wt_fill_val_w.
02817 { 02818 Widget junk, rc, frame; 02819 XmString xstr; 02820 Arg al[ 10 ]; 02821 int ac; 02822 char string[ 15 ]; 02823 02824 02825 ac = 0; 02826 frame = XmCreateFrame( parent, "frame", al, ac ); 02827 02828 ac = 0; 02829 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02830 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02831 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02832 02833 ac = 0; 02834 xstr = XmStringCreateLtoR( "fill value : ", gRX.charset ); 02835 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02836 junk = XmCreateLabel( rc, "label", al, ac ); 02837 XtManageChild( junk ); 02838 XmStringFree( xstr ); 02839 02840 02841 sprintf( string, "%d", gRA.wt_fill_val ); 02842 02843 ac = 0; 02844 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02845 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02846 X->wt_fill_val_w = XmCreateText( rc, "text", al, ac ); 02847 XtManageChild( X->wt_fill_val_w ); 02848 XtAddCallback( X->wt_fill_val_w, XmNactivateCallback, 02849 ( XtCallbackProc )r_wt_cb_set_fill_val, NULL ); 02850 XtAddCallback( X->wt_fill_val_w, XmNlosingFocusCallback, 02851 ( XtCallbackProc )r_wt_cb_set_fill_val, NULL ); 02852 02853 02854 XtManageChild( rc ); 02855 XtManageChild( frame ); 02856 02857 return( frame ); 02858 } |
|
Definition at line 1867 of file plug_roiedit.c. References r_X_s::charset, ENTRY, r_wt_mk_diag_conn_fr(), r_wt_mk_fill_buttons(), r_wt_mk_fillval_fr(), r_wt_mk_nbrs_fr(), r_wt_mk_range_fr(), r_wt_mk_strong_bord_fr(), and RETURN.
01868 { 01869 Widget frame, rc, label; 01870 XmString xstring; 01871 Arg al[ 20 ]; 01872 int ac; 01873 01874 ENTRY("r_wt_mk_main_frame"); 01875 01876 ac = 0; 01877 XtSetArg( al[ ac ], XmNmarginHeight, 3 ); ac++; 01878 frame = XmCreateFrame( parent, "frame", al, ac ); 01879 01880 ac = 0; 01881 XtSetArg( al[ ac ], XmNlabelString, 01882 XmStringCreate( "White Matter Fill :", X->charset ) ); ac++; 01883 XtSetArg( al[ ac ], XmNchildType, XmFRAME_TITLE_CHILD ); ac++; 01884 XtSetArg( al[ ac ], XmNchildVerticalAlignment, 01885 XmALIGNMENT_BASELINE_BOTTOM); ac++; 01886 label = XmCreateLabel( frame, "label", al, ac ); 01887 XtManageChild( label ); 01888 01889 ac = 0; 01890 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 01891 01892 ( void )r_wt_mk_range_fr ( X, rc ); 01893 ( void )r_wt_mk_fillval_fr ( X, rc ); 01894 ( void )r_wt_mk_nbrs_fr ( X, rc ); 01895 ( void )r_wt_mk_diag_conn_fr ( X, rc ); 01896 ( void )r_wt_mk_strong_bord_fr( X, rc ); 01897 01898 r_wt_mk_fill_buttons( X, rc ); 01899 01900 01901 XtManageChild( rc ); 01902 XtManageChild( frame ); 01903 01904 RETURN(frame); 01905 } |
|
Definition at line 2710 of file plug_roiedit.c. References r_X_s::charset, ENTRY, gRA, gRX, r_alg_s::min_nbrs, r_wt_cb_set_min_nbrs(), RETURN, and r_X_s::wt_min_nbrs_w.
02711 { 02712 Widget junk, rc, frame; 02713 XmString xstr; 02714 Arg al[ 10 ]; 02715 int ac; 02716 char string[ 15 ]; 02717 02718 ENTRY("r_wt_mk_nbrs_fr"); 02719 02720 ac = 0; 02721 frame = XmCreateFrame( parent, "frame", al, ac ); 02722 02723 ac = 0; 02724 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 02725 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 02726 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 02727 02728 ac = 0; 02729 xstr = XmStringCreateLtoR( "neighbors constraint (0-6) : ", gRX.charset ); 02730 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02731 junk = XmCreateLabel( rc, "label", al, ac ); 02732 XtManageChild( junk ); 02733 XmStringFree( xstr ); 02734 02735 02736 sprintf( string, "%d", gRA.min_nbrs ); 02737 02738 ac = 0; 02739 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02740 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 02741 X->wt_min_nbrs_w = XmCreateText( rc, "text", al, ac ); 02742 XtManageChild( X->wt_min_nbrs_w ); 02743 XtAddCallback( X->wt_min_nbrs_w, XmNactivateCallback, 02744 ( XtCallbackProc )r_wt_cb_set_min_nbrs, NULL ); 02745 XtAddCallback( X->wt_min_nbrs_w, XmNlosingFocusCallback, 02746 ( XtCallbackProc )r_wt_cb_set_min_nbrs, NULL ); 02747 02748 02749 XtManageChild( rc ); 02750 XtManageChild( frame ); 02751 02752 RETURN( frame ); 02753 } |
|
Definition at line 2991 of file plug_roiedit.c. References r_X_s::charset, gRA, gRX, r_wt_cb_set_range(), r_alg_s::wt_range_max, r_X_s::wt_range_max_w, r_alg_s::wt_range_min, and r_X_s::wt_range_min_w.
02992 { 02993 Widget junk, rc, frame; 02994 XmString xstr; 02995 Arg al[ 10 ]; 02996 int ac; 02997 char string[ 15 ]; 02998 02999 03000 ac = 0; 03001 frame = XmCreateFrame( parent, "frame", al, ac ); 03002 03003 ac = 0; /* to hold labels and text */ 03004 XtSetArg( al[ ac ], XmNpacking, XmPACK_TIGHT ); ac++; 03005 XtSetArg( al[ ac ], XmNorientation, XmHORIZONTAL ); ac++; 03006 rc = XmCreateRowColumn( frame, "rowcolumn", al, ac ); 03007 03008 ac = 0; 03009 xstr = XmStringCreateLtoR( "search range : ", gRX.charset ); 03010 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 03011 junk = XmCreateLabel( rc, "label", al, ac ); 03012 XtManageChild( junk ); 03013 XmStringFree( xstr ); 03014 03015 03016 sprintf( string, "%d", gRA.wt_range_min ); /* init value */ 03017 03018 ac = 0; 03019 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 03020 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 03021 X->wt_range_min_w = XmCreateText( rc, "text", al, ac ); 03022 XtManageChild( X->wt_range_min_w ); 03023 XtAddCallback( X->wt_range_min_w, XmNactivateCallback, 03024 ( XtCallbackProc )r_wt_cb_set_range, "from" ); 03025 XtAddCallback( X->wt_range_min_w, XmNlosingFocusCallback, 03026 ( XtCallbackProc )r_wt_cb_set_range, "from" ); 03027 03028 ac = 0; 03029 xstr = XmStringCreateLtoR( " to ", gRX.charset ); 03030 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 03031 junk = XmCreateLabel( rc, "label", al, ac ); 03032 XtManageChild( junk ); 03033 XmStringFree( xstr ); 03034 03035 03036 sprintf( string, "%d", gRA.wt_range_max ); 03037 03038 ac = 0; 03039 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 03040 XtSetArg( al[ ac ], XmNwidth, 80 ); ac++; 03041 X->wt_range_max_w = XmCreateText( rc, "text", al, ac ); 03042 XtManageChild( X->wt_range_max_w ); 03043 XtAddCallback( X->wt_range_max_w, XmNactivateCallback, 03044 ( XtCallbackProc )r_wt_cb_set_range, "to" ); 03045 XtAddCallback( X->wt_range_max_w, XmNlosingFocusCallback, 03046 ( XtCallbackProc )r_wt_cb_set_range, "to" ); 03047 03048 XtManageChild( rc ); 03049 XtManageChild( frame ); 03050 03051 return( frame ); 03052 } |
|
Definition at line 2672 of file plug_roiedit.c. References r_X_s::charset, ENTRY, gRX, r_wt_cb_SB_toggle(), and RETURN.
02673 { 02674 Widget junk, frame; 02675 XmString xstr; 02676 Arg al[ 10 ]; 02677 int ac; 02678 char string[ 15 ]; 02679 02680 ENTRY("r_wt_mk_strong_bord_fr"); 02681 02682 ac = 0; 02683 frame = XmCreateFrame( parent, "frame", al, ac ); 02684 02685 ac = 0; 02686 XtSetArg( al[ ac ], XmNset, True ); ac++; 02687 XtSetArg( al[ ac ], XmNwidth, 1 ); ac++; 02688 XtSetArg( al[ ac ], XmNspacing, 1 ); ac++; 02689 XtSetArg( al[ ac ], XmNmarginLeft, 1 ); ac++; 02690 xstr = XmStringCreateLtoR( "strong borders ", gRX.charset ); 02691 XtSetArg( al[ ac ], XmNlabelString, xstr ); ac++; 02692 junk = XmCreateToggleButton( frame, "toggle", al, ac ); 02693 XtManageChild( junk ); 02694 XtAddCallback( junk, XmNvalueChangedCallback, r_wt_cb_SB_toggle, NULL); 02695 XmStringFree( xstr ); 02696 02697 XtManageChild( frame ); 02698 02699 RETURN( frame ); 02700 } |
|
Definition at line 3565 of file plug_roiedit.c. References r_alg_s::adata, ENTRY, r_alg_s::neighbors, r_alg_s::nx, r_alg_s::nxy, r_alg_s::ny, r_alg_s::nz, r_alg_s::wt_range_max, and r_alg_s::wt_range_min.
03566 { 03567 short * aptr = A->adata; 03568 short * nptr = A->neighbors; 03569 int cx, cy, cz; 03570 int nxy = A->nxy, nx = A->nx; 03571 03572 ENTRY("r_wt_set_neighbors"); 03573 03574 03575 for ( cz = 0; cz < A->nz; cz++ ) 03576 for ( cy = 0; cy < A->ny; cy++ ) 03577 for ( cx = 0; cx < A->nx; cx++ ) 03578 { 03579 *nptr = 0; 03580 03581 if ( ( cx == 0 ) || ( cx == A->nx - 1 ) || 03582 ( cy == 0 ) || ( cy == A->ny - 1 ) || 03583 ( cz == 0 ) || ( cz == A->nz - 1 ) 03584 ) 03585 { 03586 aptr++; 03587 *nptr++ = -1; /* no future consideration */ 03588 continue; 03589 } 03590 else if ( *aptr > A->wt_range_max || *aptr < A->wt_range_min ) 03591 { 03592 aptr++; 03593 nptr++; 03594 continue; 03595 } 03596 03597 if ( ( *(aptr-1) <= A->wt_range_max ) && 03598 ( *(aptr-1) >= A->wt_range_min ) ) 03599 (*nptr)++; 03600 03601 if ( ( *(aptr+1) <= A->wt_range_max ) && 03602 ( *(aptr+1) >= A->wt_range_min ) ) 03603 (*nptr)++; 03604 03605 if ( ( *(aptr-nx) <= A->wt_range_max ) && 03606 ( *(aptr-nx) >= A->wt_range_min ) ) 03607 (*nptr)++; 03608 03609 if ( ( *(aptr+nx) <= A->wt_range_max ) && 03610 ( *(aptr+nx) >= A->wt_range_min ) ) 03611 (*nptr)++; 03612 03613 if ( ( *(aptr-nxy) <= A->wt_range_max ) && 03614 ( *(aptr-nxy) >= A->wt_range_min) ) 03615 (*nptr)++; 03616 03617 if ( ( *(aptr+nxy) <= A->wt_range_max ) && 03618 ( *(aptr+nxy) >= A->wt_range_min) ) 03619 (*nptr)++; 03620 03621 aptr++; 03622 nptr++; 03623 } 03624 03625 EXRETURN; 03626 } |
|
Definition at line 2307 of file plug_roiedit.c.
02308 {
02309 return( (int)(1.06 * value + 5) );
02310 }
|
|
Definition at line 2294 of file plug_roiedit.c.
02295 {
02296 return( (int)(0.94 * value - 5) );
02297 }
|
|
Definition at line 2320 of file plug_roiedit.c. References gRX, and r_X_s::wtgr_main.
|
|
Definition at line 2335 of file plug_roiedit.c. References client_data, ENTRY, r_alg_s::gr_range_max, r_X_s::gr_range_max_w, r_alg_s::gr_range_min, r_X_s::gr_range_min_w, gRA, gRX, r_alg_s::point_value, r_wtgr_calc_max_frm_val(), r_wtgr_calc_min_frm_val(), r_alg_s::wt_range_max, r_X_s::wt_range_max_w, r_alg_s::wt_range_min, and r_X_s::wt_range_min_w. Referenced by r_gr_mk_fill_buttons(), and r_wt_mk_fill_buttons().
02340 { 02341 Widget minw, maxw; 02342 char * cdptr = (char *)client_data; 02343 char string[ 10 ] = ""; 02344 Arg al[ 10 ]; 02345 int ac, min, max; 02346 02347 ENTRY("r_wtgr_cb_suggest_limits"); 02348 02349 if ( ! cdptr ) 02350 { 02351 fprintf( stderr, 02352 "Entered r_wtgr_cb_suggest_limits() without a type.\n" ); 02353 EXRETURN; 02354 } 02355 02356 min = r_wtgr_calc_min_frm_val( gRA.point_value ); 02357 max = r_wtgr_calc_max_frm_val( gRA.point_value ); 02358 02359 if ( ! strcmp( cdptr, "white" ) ) 02360 { 02361 gRA.wt_range_min = min; /* apply the new values */ 02362 gRA.wt_range_max = max; 02363 02364 minw = gRX.wt_range_min_w; /* set the widgets to be updated */ 02365 maxw = gRX.wt_range_max_w; 02366 } 02367 else /* then gray */ 02368 { 02369 max = min - 1; /* assume the gray starts below white */ 02370 min = 0.60 * min; 02371 02372 gRA.gr_range_max = max; 02373 gRA.gr_range_min = min; 02374 02375 minw = gRX.gr_range_min_w; 02376 maxw = gRX.gr_range_max_w; 02377 } 02378 02379 /* set the values into the range widgets */ 02380 02381 sprintf( string, "%d", min ); 02382 02383 ac = 0; 02384 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02385 XtSetValues( minw, al, ac ); 02386 02387 02388 sprintf( string, "%d", max ); 02389 02390 ac = 0; 02391 XtSetArg( al[ ac ], XmNvalue, string ); ac++; 02392 XtSetValues( maxw, al, ac ); 02393 02394 EXRETURN; 02395 } |
|
Definition at line 748 of file plug_roiedit.c. References r_X_s::charset, MCW_DC::display, r_X_s::display, ENTRY, gRA, gRCP, gRX, r_any_cb_hide(), r_gr_mk_main_frame(), r_init_Alg_values(), r_init_pt_conn_s(), r_wt_mk_main_frame(), r_X_s::wtgr_main, and r_X_s::wtgr_mainRC.
00749 { 00750 Widget junk, frame, rc; 00751 XmString xstring; 00752 Arg al[ 20 ]; 00753 int ac; 00754 00755 ENTRY("r_wtgr_mk_main_shell"); 00756 00757 /* create a main RC widget with four frame children */ 00758 00759 if ( ! r_init_Alg_values( &gRA ) ) 00760 EXRETURN; 00761 00762 if ( ! r_init_pt_conn_s( &gRCP ) ) 00763 EXRETURN; 00764 00765 X->display = dc->display; 00766 X->charset = XmSTRING_DEFAULT_CHARSET; 00767 00768 ac = 0; 00769 XtSetArg( al[ac], XmNinitialResourcesPersistent, False ); ac++; 00770 XtSetArg( al[ac], XmNdeleteResponse, XmDO_NOTHING ); ac++; 00771 XtSetArg( al[ac], XmNmappedWhenManaged, False ); ac++; 00772 X->wtgr_main = XtAppCreateShell( "White/Gray Finder", "rshell", 00773 topLevelShellWidgetClass, X->display, al, ac ); 00774 00775 XmAddWMProtocolCallback( gRX.wtgr_main, 00776 XmInternAtom( gRX.display, "WM_DELETE_WINDOW", False ), 00777 ( XtCallbackProc )r_any_cb_hide, "wtgr" ); 00778 00779 ac = 0; 00780 XtSetArg( al[ac], XmNspacing, 15 ); ac++; 00781 XtSetArg( al[ac], XmNmarginWidth, 10 ); ac++; 00782 XtSetArg( al[ac], XmNmarginHeight, 10 ); ac++; 00783 X->wtgr_mainRC = XmCreateRowColumn( X->wtgr_main, "rowcolumn", al, ac ); 00784 00785 /* create the main white and gray selection frames */ 00786 ( void )r_wt_mk_main_frame( X, X->wtgr_mainRC ); 00787 ( void )r_gr_mk_main_frame( X, X->wtgr_mainRC ); 00788 00789 00790 XtManageChild( X->wtgr_mainRC ); 00791 XtRealizeWidget( X->wtgr_main ); 00792 00793 EXRETURN ; 00794 } |
Variable Documentation
|
Definition at line 94 of file plug_roiedit.c. Referenced by DRAW_main(), and DRAW_make_widgets(). |
|
Definition at line 96 of file plug_roiedit.c. |
|
Definition at line 122 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 139 of file plug_roiedit.c. |
|
Definition at line 118 of file plug_roiedit.c. |
|
Definition at line 95 of file plug_roiedit.c. Referenced by DRAW_make_widgets(), and r_save_dataset_as(). |
|
Initial value: { {"Undo",DRAW_undo_CB,NULL, "Undoes previous draw\naction, if possible","Undo last change",0} , {"Help",DRAW_help_CB,NULL, "Displays more help" , "Displays more help",0} , {"Quit",DRAW_quit_CB,NULL, "Discard edits since last Save\nand close Editor" , "Discard edits and close",0} , {"Save",DRAW_save_CB,NULL, "Save edits to disk\nand continue" , "Save to disk and continue",0} , {"Done",DRAW_done_CB,NULL, "Save edits to disk\nand close Editor" , "Save and close",1} } Definition at line 243 of file plug_roiedit.c. |
|
Definition at line 120 of file plug_roiedit.c. |
|
Definition at line 129 of file plug_roiedit.c. Referenced by DRAW_main(), r_gr_cb_fill(), r_HL_cb_fill(), r_INT_cb_fill(), r_save_dataset_as(), and r_wt_cb_fill(). |
|
Definition at line 4997 of file plug_roiedit.c. Referenced by DRAW_choose_CB(). |
|
Definition at line 128 of file plug_roiedit.c. Referenced by DRAW_done_CB(), DRAW_main(), and r_save_dataset_as(). |
|
Definition at line 95 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 119 of file plug_roiedit.c. |
|
Definition at line 94 of file plug_roiedit.c. Referenced by DRAW_main(), and DRAW_make_widgets(). |
|
Definition at line 96 of file plug_roiedit.c. |
|
Definition at line 124 of file plug_roiedit.c. Referenced by DRAW_finalize_dset_CB(). |
|
Initial value: { DRAWING_LINES , DRAWING_FILL , DRAWING_POINTS , DRAWING_POINTS , DRAWING_POINTS, DRAWING_POINTS, DRAWING_POINTS } Definition at line 112 of file plug_roiedit.c. Referenced by DRAW_finalize_dset_CB(). |
|
Definition at line 123 of file plug_roiedit.c. Referenced by DRAW_finalize_dset_CB(), and r_main_cb_show_structs(). |
|
Initial value: { "Open Curve" , "Closed Curve" , "Points" , "Flood->Value", "Flood->Nonzero", "Set Fill Point", "Connect Points" } Definition at line 108 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 4996 of file plug_roiedit.c. |
|
Definition at line 62 of file plug_roiedit.c. Referenced by DRAW_main(), DRAW_make_widgets(), PLUGIN_init(), r_init_afni_vars(), and r_init_Alg_values(). |
|
Definition at line 95 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 131 of file plug_roiedit.c. Referenced by DRAW_done_CB(), DRAW_finalize_dset_CB(), DRAW_main(), and r_save_dataset_as(). |
|
Definition at line 130 of file plug_roiedit.c. Referenced by DRAW_done_CB(), DRAW_finalize_dset_CB(), DRAW_main(), and r_save_dataset_as(). |
|
Definition at line 94 of file plug_roiedit.c. Referenced by DRAW_make_widgets(). |
|
Definition at line 95 of file plug_roiedit.c. Referenced by DRAW_main(), and DRAW_make_widgets(). |
|
Definition at line 94 of file plug_roiedit.c. Referenced by DRAW_done_CB(), DRAW_main(), DRAW_make_widgets(), r_main_mk_save_as_fr(), and r_save_dataset_as(). |
|
Definition at line 136 of file plug_roiedit.c. Referenced by r_main_cb_show_structs(), and r_save_dataset_as(). |
|
Definition at line 134 of file plug_roiedit.c. Referenced by r_save_dataset_as(). |
|
Definition at line 133 of file plug_roiedit.c. Referenced by r_save_dataset_as(). |
|
Definition at line 135 of file plug_roiedit.c. Referenced by DRAW_main(), r_main_cb_show_structs(), and r_save_dataset_as(). |
|
Definition at line 95 of file plug_roiedit.c. Referenced by DRAW_main(), and DRAW_make_widgets(). |
|
Definition at line 137 of file plug_roiedit.c. Referenced by DRAW_into_dataset(), r_main_cb_show_structs(), and r_save_dataset_as(). |
|
Definition at line 96 of file plug_roiedit.c. |
|
Definition at line 126 of file plug_roiedit.c. Referenced by DRAW_into_dataset(). |
|
Definition at line 125 of file plug_roiedit.c. Referenced by DRAW_make_widgets(), and r_any_cb_apply(). |