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 #ifndef _MCW_TO3D_HEADER_
8 #define _MCW_TO3D_HEADER_
9 
10 #include "mrilib.h"
11 #include "imseq.h"
12 #include "killer.h"
13 #include "afni_warp.h"
14 #include "mcw_glob.h"
15 
16 #include <Xm/SeparatoG.h>
17 
18 #include <Xm/Display.h>
19 #include <stdlib.h>
20 #include <ctype.h>
21 #include <unistd.h>
22 
23 #define NO_NAMES
24 
25 typedef struct {
26    int   xorient,yorient,zorient , voxshape , voxcontig ,
27          xyz_centered , view_type ,
28          dataset_type , anatomy_type , function_type , nx,ny,nz ;
29 
30    float fov , xsize,ysize,zsize , zspacing ,
31          xorigin,yorigin,zorigin ;
32 
33    char dataset_name[THD_MAX_NAME] ,
34         short_label1[THD_MAX_LABEL] , short_label2[THD_MAX_LABEL] ;
35 
36    char dataset_type_string[THD_MAX_NAME] ,
37         anatomy_type_string[THD_MAX_NAME] ,
38         function_type_string[THD_MAX_NAME] ,
39         geometry_parent_filename[THD_MAX_NAME] ,
40         anatomy_parent_filename[THD_MAX_NAME] ,
41         output_filename[THD_MAX_NAME] ,
42         session_filename[THD_MAX_NAME] ;
43 
44    char geometry_dataname[THD_MAX_NAME] ,
45 	anatomy_dataname[THD_MAX_NAME] ;
46 
47    int  nimage , nvals , nosave, writebrik ;
48 
49    MCW_idcode anatomy_parent_idcode ;
50 
51    int   need_stat_aux ;
52    float stat_aux[MAX_STAT_AUX] ;
53 
54    int   xincode , yincode , zincode ;
55    float xin_bot,xin_top , yin_bot,yin_top , zin_bot,zin_top ;
56 
57    int ntt , nzz , t_then_z , tunits ;
58    float TR ;
59    float *tpattern ;
60 
61    float Torg ;   /* 23 Feb 2005 */
62 } to3d_data ;
63 
64 #define INCODE_NONE -666
65 #define INCODE_FOV   100
66 #define INCODE_SLAB  200
67 
68 #undef  ORCODE
69 #define ORCODE(aa)                         \
70   ( ((aa)=='R'||(aa)=='r') ? ORI_R2L_TYPE  \
71    :((aa)=='L'||(aa)=='l') ? ORI_L2R_TYPE  \
72    :((aa)=='P'||(aa)=='p') ? ORI_P2A_TYPE  \
73    :((aa)=='A'||(aa)=='a') ? ORI_A2P_TYPE  \
74    :((aa)=='I'||(aa)=='i') ? ORI_I2S_TYPE  \
75    :((aa)=='S'||(aa)=='s') ? ORI_S2I_TYPE : ILLEGAL_TYPE )
76 
77 typedef struct {
78    Widget topshell , topform ;
79 
80    MCW_arrowval * xorient_av , * yorient_av , * zorient_av ,
81                 * xsize_av   , * ysize_av   , * zsize_av   ,
82                 * xorigin_av , * yorigin_av , * zorigin_av ,
83                 * fov_av     ,                * zspacing_av  ;
84    MCW_bbox     * voxshape_bbox , * voxcontig_bbox , * centered_bbox ;
85 
86    Widget region_separator ;
87 
88    Widget
89 #ifndef NO_NAMES
90           dataset_name_label    , dataset_name_textfield    ,
91           short_label1_label    , short_label1_textfield    ,
92           short_label2_label    , short_label2_textfield    ,
93 #endif
94           geometry_parent_label , geometry_parent_textfield ,
95           anatomy_parent_label  , anatomy_parent_textfield   ;
96 
97 #ifndef NO_NAMES
98    Widget geometry_dataname_label , geometry_dataname_textfield ,
99 	  anatomy_dataname_label  , anatomy_dataname_textfield  ;
100 #endif
101 
102    MCW_arrowval * dataset_type_av , * function_type_av , * anatomy_type_av ;
103 
104    Widget output_file_label , output_file_textfield ;
105    Widget session_file_label , session_file_textfield ;
106 
107    Widget action_frame , action_rowcol ,
108           button_help_pb , open_view_pb , save_file_pb , quit_pb ;
109    Widget swap_pb ;  /* 14 Sep 1998 */
110 
111    /** April 1996: new widgets **/
112 
113    Widget       xorigin_label , yorigin_label , zorigin_label ;
114    MCW_arrowval * view_type_av ;
115    Widget       stat_aux_label , stat_aux_textfield , datum_label , TR_label ;
116 
117    /** Miscellaneous other stuff */
118 
119    MCW_DC    * dc ;
120    MCW_imseq * seq ;
121 
122    int good ;
123 } to3d_widget_set ;
124 
125 #define T3D_NAME_WIDTH   25
126 #define T3D_FORM_SPACING 11
127 
128 static char orbuf[2] ;
129 #define SET_ORIGIN_LABEL(ww,cc)           \
130    ( orbuf[1] = '\0' ,                    \
131      orbuf[0] = ORIENT_typestr[(cc)][0] , \
132      MCW_set_widget_label((ww),orbuf) )
133 
134 /*-----------------------------------------------------------------*/
135 
136 static char * T3D_voxshape_label[3] = {
137    "cubical" , "square" , "irregular"
138 } ;
139 
140 #define VOXSHAPE_CUBICAL   1
141 #define VOXSHAPE_SQUARE    2
142 #define VOXSHAPE_IRREGULAR 4
143 
144 static char * T3D_voxcontig_label[3] = {
145    "contiguous" , "unif.noncontig" , "irreg.noncontig" } ;
146 
147 #define VOXCONTIG_YES   1
148 #define VOXCONTIG_UNIF  2
149 #define VOXCONTIG_IRREG 4
150 
151 static char * T3D_centered_label[3] = {
152   "x axis centered" , "y axis centered" , "z axis centered" } ;
153 
154 #define XCENTERED  1
155 #define YCENTERED  2
156 #define ZCENTERED  4
157 
158 /*-----------------------------------------------------------------*/
159 
160 #define NCOLOVR 2
161 static char * FD_colovr[NCOLOVR] = { "yellow"  , "cyan" } ;
162 
163 #define NGRAY 80   /* default for -ncolor */
164 #define GAMMA 1.0  /* default for -gamma  */
165 
166 /*-----------------------------------------------------------------*/
167 
168 void T3D_create_widgets(void) ;
169 void T3D_read_images(void) ;
170 void T3D_setup_stat_aux(void) ;
171 
172 void T3D_stat_aux_CB  (Widget, XtPointer, XtPointer );
173 void T3D_voxshape_CB  (Widget, XtPointer, XtPointer );
174 void T3D_voxcontig_CB (Widget, XtPointer, XtPointer );
175 void T3D_centered_CB  (Widget, XtPointer, XtPointer );
176 void T3D_open_view_CB (Widget, XtPointer, XtPointer );
177 void T3D_save_file_CB (Widget, XtPointer, XtPointer );
178 void T3D_quit_CB      (Widget, XtPointer, XtPointer );
179 void T3D_swap_CB      (Widget, XtPointer, XtPointer );
180 
181 void T3D_geometry_parent_CB(Widget, XtPointer, XtPointer );
182 void T3D_anatomy_parent_CB (Widget, XtPointer, XtPointer );
183 void T3D_pointer_leave_EV  (Widget, XtPointer, XEvent * , RwcBoolean * ) ;
184 
185 void T3D_imseq_CB( MCW_imseq * , FD_brick * , ISQ_cbs * ) ;
186 
187 XtPointer T3D_getim( int , int , FD_brick * ) ;
188 
189 #define RESET_QUIT T3D_quit_CB(NULL,NULL,NULL)
190 
191 char * T3D_text_display( MCW_arrowval * , XtPointer ) ;
192 
193 void    T3D_initialize_user_data(void) ;
194 RwcBoolean T3D_check_data(RwcBoolean) ;
195 
196 void T3D_orient_av_CB ( MCW_arrowval * , XtPointer ) ;
197 void T3D_origin_av_CB ( MCW_arrowval * , XtPointer ) ;
198 void T3D_fov_av_CB    ( MCW_arrowval * , XtPointer ) ;
199 void T3D_size_av_CB   ( MCW_arrowval * , XtPointer ) ;
200 void T3D_type_av_CB   ( MCW_arrowval * , XtPointer ) ;
201 
202 void T3D_set_dependent_geometries(void) ;
203 void T3D_widgets_to_data(void) ;
204 void T3D_data_to_widgets(void) ;
205 
206 void T3D_poperr(char *,char *, RwcBoolean) ;
207 
208 void T3D_fix_dataset_dimen(void) ;
209 void Syntax() ;
210 
211 void AFNI_load_defaults( Widget ) ;
212 
213 int decode_location( char * str , float * val , int * dcode ) ;
214 
215 void T3D_check_outliers(int) ;  /* 15 Aug 2001 */
216 
217 static int   INIT_ngray ;
218 static float INIT_gamma ;
219 static float INIT_fov ;
220 
221 #endif /* _MCW_TO3D_HEADER_ */
222