/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
/***********************************************************************
* plug_roiedit.h - see plug_roiedit.c v1.7
***********************************************************************
*/
#define rWARNING( string ) fprintf( stderr, "\033[1m%s\033[0m\n", string )
#define rERROR( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string )
#define R_BOUND_VAL -250
#define R_HL_BAD_VAL -280
#define R_BUTTON_SPACE 4
#define R_DIST_STEP 0.1
#define R_FILE_L 128
#ifdef LINUX
#define R_HOSTID_MASK 0xffff00ff
#define R_HOSTID_VAL 0x6a8d006a
#else
#define R_HOSTID_MASK 0xffffff00
#define R_HOSTID_VAL 0x8d6a6a00
#endif
typedef struct
{
int x, y, z;
} r_ipt_t;
typedef struct
{
int * points;
int used;
int M;
} points_t;
typedef struct
{
Display * display;
/* main widgets */
Widget main;
Widget mainForm;
int main_is_open;
Widget save_as_file_d; /* dialog with save as info */
/* white/grey widgets */
Widget wtgr_main; /* main white/grey widget */
Widget wtgr_mainRC; /* main row/column widget */
Widget wt_diag_conn_w; /* widget for diagonal connect level */
Widget wt_fill_val_w; /* widget for user fill value */
Widget wt_min_nbrs_w; /* widget for minimum neighbors value */
Widget wt_range_min_w; /* minimum value in search range */
Widget wt_range_max_w; /* maximum value in search range */
Widget gr_range_min_w; /* minimum value in search range */
Widget gr_range_max_w; /* maximum value in search range */
Widget gr_fill_val_w; /* widget for user fill value */
XmStringCharSet charset;
} r_X_s;
typedef struct
{
/* general */
int point_value; /* value at initial fill point */
int point_coord; /* location of initial fill point */
int adjust_point; /* boolean - should we adjust initial point */
char save_as_name[ R_FILE_L ]; /* string to save a copy as */
/* white matter filler info */
int wt_fill_val; /* value to use in fill process */
int wt_range_min;
int wt_range_max;
int wt_diag_connect; /* level of diagonal connection */
/* grey matter filler info */
int gr_fill_val; /* value to use in fill process */
int gr_range_min;
int gr_range_max;
int gr_max_dist; /* max distance in grey search */
/* afni */
THD_3dim_dataset * anat; /* background anatomy data for searching */
THD_3dim_dataset * func; /* foreground functional data for display */
short * adata; /* pointer to anatomical background data */
short * fdata; /* pointer to functional foreground data */
float factor;
int nx, ny, nz; /* dimensions of data */
int nxy;
int nvox; /* total size of data */
/* boundary stuff */
points_t Bold;
points_t Bnew;
points_t border;
short * neighbors;
short * undo_data; /* always contains previous image */
int min_nbrs;
int strong_borders;
} r_alg_s;
typedef struct
{
Widget main; /* main application widget */
Widget mainRC; /* main rowcolumn widget */
Widget fillval_w; /* widget holding integer */
int fill_val; /* value to fill with */
int afni_undo; /* flag denoting when afni is undoing a curve */
points_t A, B; /* two point structures for interpolation */
} interp_s;
typedef struct
{
Widget main;
Widget mainRC;
Widget fillval_w;
Widget maxsize_w;
int max_size;
int fill_val;
points_t wtgr_edge;
points_t gr_edge;
points_t filled;
} holes_s;
typedef struct
{
points_t plist;
r_ipt_t source;
r_ipt_t dest;
int cur_pt; /* flag denoting first or second point */
} r_pt_conn_s;
r_X_s gRX; /* X structure for RCR */
r_alg_s gRA; /* algorithm structure */
interp_s gRI; /* interpolation structure (both X and alg) */
holes_s gRH; /* hole filling structure (both X and alg) */
r_pt_conn_s gRCP; /* point connection structure */
char gRmessage[ 1024 ]; /* error messgae memory */
static int r_afni_set_fill_point ( int *, r_alg_s * );
static void r_any_cb_apply ( Widget, XtPointer, XtPointer );
static void r_any_cb_fill_stats ( Widget, XtPointer, XtPointer );
static void r_any_cb_hide ( Widget, char *, XtPointer );
static void r_any_cb_raise ( Widget, char *, XtPointer );
static void r_any_cb_undo ( Widget, XtPointer, XtPointer );
static void r_any_cb_unfill ( Widget, XtPointer, XtPointer );
static void r_main_cb_help ( Widget, XtPointer, XtPointer );
static void r_main_cb_quit ( void );
static void r_main_cb_show_structs ( void );
static void r_main_cb_saveas ( Widget, int, XtPointer );
static void r_main_mk_main_shell ( void );
static void r_main_mk_save_as_fr ( Widget );
static void r_main_mk_show_buttons ( void );
static void r_main_show_alg_vals ( r_alg_s * );
static void r_main_show_HOL_vals ( holes_s * );
static void r_main_show_INT_vals ( interp_s * );
static void r_main_show_pt_conn_vals ( r_pt_conn_s * );
static int r_add_to_boundary ( points_t *, int );
static int r_check_host ( void );
static void r_histogram ( r_alg_s *, int, int, int );
static r_ipt_t r_index2pt ( int, int, int, int );
static double r_p_distance ( r_ipt_t, r_ipt_t );
static int r_save_dataset_as ( char *, int );
static void r_init_afni_vars ( r_alg_s *, THD_3dim_dataset * );
static int r_init_Alg_values ( r_alg_s * );
static int r_init_holes_vals ( holes_s * );
static int r_init_interp_vals ( interp_s * );
static int r_init_pt_conn_s ( r_pt_conn_s * );
static void r_HL_cb_fill ( Widget, XtPointer, XtPointer );
static void r_HL_cb_set_fill_val ( Widget, XtPointer, XtPointer );
static void r_HL_cb_set_maxsize ( Widget, XtPointer, XtPointer );
static int r_HL_check_neighbors ( points_t *, int );
static Widget r_HL_mk_buttons ( holes_s *, Widget );
static Widget r_HL_mk_fillval_fr ( holes_s *, Widget );
static void r_HL_mk_main_shell ( holes_s * );
static Widget r_HL_mk_maxsize_fr ( holes_s *, Widget );
static void r_INT_cb_fill ( Widget, XtPointer, XtPointer );
static void r_INT_cb_set_fill_val ( Widget, XtPointer, XtPointer );
static Widget r_INT_mk_app_buttons ( interp_s *, Widget );
static Widget r_INT_mk_fillval_fr ( interp_s *, Widget );
static void r_INT_mk_main_shell ( interp_s * );
static void r_gr_cb_fill ( Widget, XtPointer, XtPointer );
static void r_gr_cb_set_max_dist ( Widget, XtPointer, XtPointer );
static void r_gr_cb_set_range ( Widget, XtPointer, XtPointer );
static void r_gr_set_fill_val ( Widget, XtPointer, XtPointer );
static int r_gr_check_insert ( r_alg_s *, points_t *, int );
static Widget r_gr_mk_fill_buttons ( r_X_s *, Widget );
static Widget r_gr_mk_fillval_fr ( r_X_s *, Widget );
static Widget r_gr_mk_main_frame ( r_X_s *, Widget );
static void r_gr_mk_misc_buttons ( r_X_s *, Widget );
static Widget r_gr_mk_max_dist_w ( r_X_s *, Widget );
static Widget r_gr_mk_range_fr ( r_X_s *, Widget );
static int r_wtgr_calc_max_frm_val ( int value );
static int r_wtgr_calc_min_frm_val ( int value );
static void r_wtgr_cb_suggest_limits ( Widget, XtPointer, XtPointer );
static void r_wtgr_mk_main_shell ( r_X_s * );
static int r_wt_bad_ngbr_exists ( r_alg_s *, int, int );
static void r_wt_cb_activate_SA ( void );
static void r_wt_cb_fill ( Widget, XtPointer, XtPointer );
static void r_wt_cb_SB_toggle ( Widget, XtPointer, XtPointer );
static void r_wt_cb_set_diag_conn ( Widget, XtPointer, XtPointer );
static void r_wt_cb_set_fill_val ( Widget, XtPointer, XtPointer );
static void r_wt_cb_set_min_nbrs ( Widget, XtPointer, XtPointer );
static void r_wt_cb_set_range ( Widget, XtPointer, XtPointer );
static int r_wt_check_insert ( r_alg_s *, int );
static Widget r_wt_mk_diag_conn_fr ( r_X_s *, Widget );
static void r_wt_mk_fill_buttons ( r_X_s *, Widget );
static Widget r_wt_mk_fillval_fr ( r_X_s *, Widget );
static Widget r_wt_mk_main_frame ( r_X_s *, Widget );
static void r_wt_mk_misc_buttons ( r_X_s *, Widget );
static Widget r_wt_mk_nbrs_fr ( r_X_s *, Widget );
static Widget r_wt_mk_range_fr ( r_X_s *, Widget );
static Widget r_wt_mk_strong_bord_fr ( r_X_s *, Widget );
static void r_wt_set_neighbors ( r_alg_s * );
static Widget r_mk_scale_bar ( Widget, char *, int, int,
int, int, XtCallbackProc );
static void r_junk (void);
/*----------------- for logging of messages ---------------------------*/
/*#define R_LOG_INFO_D*/
#ifdef R_LOG_INFO_D
#define R_LOG_FILE "/var/tmp/.rickr.log.GF"
#define R_LOG( string ) fprintf( stderr, "\007\033[2m%s\033[0m\n", string )
FILE * gr_logfile
static int r_open_log_file ( void );
#endif
syntax highlighted by Code2HTML, v. 0.9.1