1 /***************************************************************************** 2 Major portions of this software are copyrighted by the Medical College 3 of Wisconsin, 1994-2000, and are released under the Gnu General Public 4 License, Version 2. See the file README.Copyright for details. 5 ******************************************************************************/ 6 7 /*********************************************************************** 8 * plug_roiedit.h - see plug_roiedit.c v1.7 9 *********************************************************************** 10 */ 11 12 #define rWARNING( string ) fprintf( stderr, "\033[1m%s\033[0m\n", string ) 13 #define rERROR( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string ) 14 15 #define R_BOUND_VAL -250 16 #define R_HL_BAD_VAL -280 17 #define R_BUTTON_SPACE 4 18 #define R_DIST_STEP 0.1 19 #define R_FILE_L 128 20 21 #ifdef LINUX 22 23 #define R_HOSTID_MASK 0xffff00ff 24 #define R_HOSTID_VAL 0x6a8d006a 25 26 #else 27 28 #define R_HOSTID_MASK 0xffffff00 29 #define R_HOSTID_VAL 0x8d6a6a00 30 31 #endif 32 33 typedef struct 34 { 35 int x, y, z; 36 } r_ipt_t; 37 38 typedef struct 39 { 40 int * points; 41 int used; 42 int M; 43 } points_t; 44 45 typedef struct 46 { 47 Display * display; 48 49 /* main widgets */ 50 51 Widget main; 52 Widget mainForm; 53 54 int main_is_open; 55 56 Widget save_as_file_d; /* dialog with save as info */ 57 58 /* white/grey widgets */ 59 60 Widget wtgr_main; /* main white/grey widget */ 61 Widget wtgr_mainRC; /* main row/column widget */ 62 63 Widget wt_diag_conn_w; /* widget for diagonal connect level */ 64 Widget wt_fill_val_w; /* widget for user fill value */ 65 Widget wt_min_nbrs_w; /* widget for minimum neighbors value */ 66 Widget wt_range_min_w; /* minimum value in search range */ 67 Widget wt_range_max_w; /* maximum value in search range */ 68 69 Widget gr_range_min_w; /* minimum value in search range */ 70 Widget gr_range_max_w; /* maximum value in search range */ 71 Widget gr_fill_val_w; /* widget for user fill value */ 72 73 XmStringCharSet charset; 74 } r_X_s; 75 76 typedef struct 77 { 78 /* general */ 79 int point_value; /* value at initial fill point */ 80 int point_coord; /* location of initial fill point */ 81 int adjust_point; /* boolean - should we adjust initial point */ 82 83 char save_as_name[ R_FILE_L ]; /* string to save a copy as */ 84 85 86 /* white matter filler info */ 87 int wt_fill_val; /* value to use in fill process */ 88 int wt_range_min; 89 int wt_range_max; 90 int wt_diag_connect; /* level of diagonal connection */ 91 92 /* grey matter filler info */ 93 int gr_fill_val; /* value to use in fill process */ 94 int gr_range_min; 95 int gr_range_max; 96 97 int gr_max_dist; /* max distance in grey search */ 98 99 100 /* afni */ 101 THD_3dim_dataset * anat; /* background anatomy data for searching */ 102 THD_3dim_dataset * func; /* foreground functional data for display */ 103 104 short * adata; /* pointer to anatomical background data */ 105 short * fdata; /* pointer to functional foreground data */ 106 float factor; 107 108 int nx, ny, nz; /* dimensions of data */ 109 int nxy; 110 int nvox; /* total size of data */ 111 112 113 /* boundary stuff */ 114 points_t Bold; 115 points_t Bnew; 116 points_t border; 117 118 short * neighbors; 119 short * undo_data; /* always contains previous image */ 120 121 int min_nbrs; 122 int strong_borders; 123 } r_alg_s; 124 125 typedef struct 126 { 127 Widget main; /* main application widget */ 128 Widget mainRC; /* main rowcolumn widget */ 129 130 Widget fillval_w; /* widget holding integer */ 131 132 int fill_val; /* value to fill with */ 133 int afni_undo; /* flag denoting when afni is undoing a curve */ 134 points_t A, B; /* two point structures for interpolation */ 135 } interp_s; 136 137 typedef struct 138 { 139 Widget main; 140 Widget mainRC; 141 142 Widget fillval_w; 143 Widget maxsize_w; 144 145 int max_size; 146 int fill_val; 147 148 points_t wtgr_edge; 149 points_t gr_edge; 150 points_t filled; 151 } holes_s; 152 153 typedef struct 154 { 155 points_t plist; 156 r_ipt_t source; 157 r_ipt_t dest; 158 159 int cur_pt; /* flag denoting first or second point */ 160 } r_pt_conn_s; 161 162 163 r_X_s gRX; /* X structure for RCR */ 164 r_alg_s gRA; /* algorithm structure */ 165 interp_s gRI; /* interpolation structure (both X and alg) */ 166 holes_s gRH; /* hole filling structure (both X and alg) */ 167 r_pt_conn_s gRCP; /* point connection structure */ 168 char gRmessage[ 1024 ]; /* error messgae memory */ 169 170 171 static int r_afni_set_fill_point ( int *, r_alg_s * ); 172 static void r_any_cb_apply ( Widget, XtPointer, XtPointer ); 173 static void r_any_cb_fill_stats ( Widget, XtPointer, XtPointer ); 174 static void r_any_cb_hide ( Widget, char *, XtPointer ); 175 static void r_any_cb_raise ( Widget, char *, XtPointer ); 176 static void r_any_cb_undo ( Widget, XtPointer, XtPointer ); 177 static void r_any_cb_unfill ( Widget, XtPointer, XtPointer ); 178 static void r_main_cb_help ( Widget, XtPointer, XtPointer ); 179 static void r_main_cb_quit ( void ); 180 static void r_main_cb_show_structs ( void ); 181 static void r_main_cb_saveas ( Widget, int, XtPointer ); 182 static void r_main_mk_main_shell ( void ); 183 static void r_main_mk_save_as_fr ( Widget ); 184 static void r_main_mk_show_buttons ( void ); 185 static void r_main_show_alg_vals ( r_alg_s * ); 186 static void r_main_show_HOL_vals ( holes_s * ); 187 static void r_main_show_INT_vals ( interp_s * ); 188 static void r_main_show_pt_conn_vals ( r_pt_conn_s * ); 189 190 static int r_add_to_boundary ( points_t *, int ); 191 static int r_check_host ( void ); 192 static void r_histogram ( r_alg_s *, int, int, int ); 193 static r_ipt_t r_index2pt ( int, int, int, int ); 194 static double r_p_distance ( r_ipt_t, r_ipt_t ); 195 static int r_save_dataset_as ( char *, int ); 196 197 static void r_init_afni_vars ( r_alg_s *, THD_3dim_dataset * ); 198 static int r_init_Alg_values ( r_alg_s * ); 199 static int r_init_holes_vals ( holes_s * ); 200 static int r_init_interp_vals ( interp_s * ); 201 static int r_init_pt_conn_s ( r_pt_conn_s * ); 202 203 static void r_HL_cb_fill ( Widget, XtPointer, XtPointer ); 204 static void r_HL_cb_set_fill_val ( Widget, XtPointer, XtPointer ); 205 static void r_HL_cb_set_maxsize ( Widget, XtPointer, XtPointer ); 206 static int r_HL_check_neighbors ( points_t *, int ); 207 static Widget r_HL_mk_buttons ( holes_s *, Widget ); 208 static Widget r_HL_mk_fillval_fr ( holes_s *, Widget ); 209 static void r_HL_mk_main_shell ( holes_s * ); 210 static Widget r_HL_mk_maxsize_fr ( holes_s *, Widget ); 211 212 static void r_INT_cb_fill ( Widget, XtPointer, XtPointer ); 213 static void r_INT_cb_set_fill_val ( Widget, XtPointer, XtPointer ); 214 static Widget r_INT_mk_app_buttons ( interp_s *, Widget ); 215 static Widget r_INT_mk_fillval_fr ( interp_s *, Widget ); 216 static void r_INT_mk_main_shell ( interp_s * ); 217 218 static void r_gr_cb_fill ( Widget, XtPointer, XtPointer ); 219 static void r_gr_cb_set_max_dist ( Widget, XtPointer, XtPointer ); 220 static void r_gr_cb_set_range ( Widget, XtPointer, XtPointer ); 221 static void r_gr_set_fill_val ( Widget, XtPointer, XtPointer ); 222 static int r_gr_check_insert ( r_alg_s *, points_t *, int ); 223 static Widget r_gr_mk_fill_buttons ( r_X_s *, Widget ); 224 static Widget r_gr_mk_fillval_fr ( r_X_s *, Widget ); 225 static Widget r_gr_mk_main_frame ( r_X_s *, Widget ); 226 static void r_gr_mk_misc_buttons ( r_X_s *, Widget ); 227 static Widget r_gr_mk_max_dist_w ( r_X_s *, Widget ); 228 static Widget r_gr_mk_range_fr ( r_X_s *, Widget ); 229 230 static int r_wtgr_calc_max_frm_val ( int value ); 231 static int r_wtgr_calc_min_frm_val ( int value ); 232 static void r_wtgr_cb_suggest_limits ( Widget, XtPointer, XtPointer ); 233 static void r_wtgr_mk_main_shell ( r_X_s * ); 234 235 static int r_wt_bad_ngbr_exists ( r_alg_s *, int, int ); 236 static void r_wt_cb_activate_SA ( void ); 237 static void r_wt_cb_fill ( Widget, XtPointer, XtPointer ); 238 static void r_wt_cb_SB_toggle ( Widget, XtPointer, XtPointer ); 239 static void r_wt_cb_set_diag_conn ( Widget, XtPointer, XtPointer ); 240 static void r_wt_cb_set_fill_val ( Widget, XtPointer, XtPointer ); 241 static void r_wt_cb_set_min_nbrs ( Widget, XtPointer, XtPointer ); 242 static void r_wt_cb_set_range ( Widget, XtPointer, XtPointer ); 243 static int r_wt_check_insert ( r_alg_s *, int ); 244 static Widget r_wt_mk_diag_conn_fr ( r_X_s *, Widget ); 245 static void r_wt_mk_fill_buttons ( r_X_s *, Widget ); 246 static Widget r_wt_mk_fillval_fr ( r_X_s *, Widget ); 247 static Widget r_wt_mk_main_frame ( r_X_s *, Widget ); 248 static void r_wt_mk_misc_buttons ( r_X_s *, Widget ); 249 static Widget r_wt_mk_nbrs_fr ( r_X_s *, Widget ); 250 static Widget r_wt_mk_range_fr ( r_X_s *, Widget ); 251 static Widget r_wt_mk_strong_bord_fr ( r_X_s *, Widget ); 252 static void r_wt_set_neighbors ( r_alg_s * ); 253 254 static Widget r_mk_scale_bar ( Widget, char *, int, int, 255 int, int, XtCallbackProc ); 256 257 static void r_junk (void); 258 259 260 /*----------------- for logging of messages ---------------------------*/ 261 /*#define R_LOG_INFO_D*/ 262 #ifdef R_LOG_INFO_D 263 264 265 #define R_LOG_FILE "/var/tmp/.rickr.log.GF" 266 267 #define R_LOG( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string ) 268 269 270 FILE * gr_logfile 271 272 273 static int r_open_log_file ( void ); 274 275 #endif 276