1 #ifndef SUMA_DOMANIP_INCLUDED
2 #define SUMA_DOMANIP_INCLUDED
3 /* gh edit */
4 void *SUMA_find_any_object(char *idcode_str, SUMA_DO_Types *do_type);
5 SUMA_SurfaceObject * SUMA_findanySOp_inDOv(SUMA_DO *dov, int N_dov, int *dov_id);
6 SUMA_VolumeObject * SUMA_findanyVOp_inDOv(SUMA_DO *dov, int N_dov, int *dov_id);
7 SUMA_TractDO * SUMA_findanyTDOp_inDOv(SUMA_DO *dov, int N_dov, int *dov_id);
8 SUMA_MaskDO * SUMA_findanyMDOp_inDOv(SUMA_DO *dov, int N_dov, int *dov_id);
9 SUMA_SurfaceObject * SUMA_findanySOp(int *dov_id);
10 SUMA_VolumeObject * SUMA_findanyVOp(int *dov_id);
11 SUMA_TractDO * SUMA_findanyTDOp(int *dov_id);
12 SUMA_MaskDO * SUMA_findanyMDOp(int *dov_id);
13 int SUMA_ClosestNodeToVoxels(SUMA_SurfaceObject *SO, SUMA_VOLPAR *vp,
14                               int *closest_node, float *closest_dist,
15                               byte *vox_mask, int verb);
16 float * SUMA_IV_XYZextract (char *IV_filename, int *N_NodeList,
17                             int IncludeIndex);
18 int *SUMA_IV_FaceSetsextract (char *IV_filename, int *N_FaceSetList);
19 void set_surf_norm_quiet(int v);
20 SUMA_SURF_NORM SUMA_SurfNorm (float *NodeList, int N_NodeList,
21                               int *FaceSetList, int N_FaceSetList );
22 int SUMA_SurfNormDir (SUMA_SurfaceObject *SO);
23 SUMA_Boolean SUMA_Free_Displayable_Object (SUMA_DO *dov);
24 SUMA_DO *SUMA_Alloc_DisplayObject_Struct (int N);
25 SUMA_Boolean SUMA_AddDO(SUMA_DO *dov, int *N_dov, void *op,
26                SUMA_DO_Types DO_Type, SUMA_DO_CoordType DO_CoordType);
27 SUMA_Boolean SUMA_RemoveDO(SUMA_DO *dov, int *N_dov, void *op,
28                            SUMA_Boolean Free_op);
29 SUMA_Boolean SUMA_UnRegisterDO_idcode(char *idcode_str, SUMA_SurfaceViewer *cSV);
30 SUMA_Boolean SUMA_UnRegisterDO(int dov_id, SUMA_SurfaceViewer *cSV);
31 int SUMA_FindFirst_dov_ind (SUMA_DO_LOCATOR *x0, SUMA_DO_LOCATOR *x1, int val);
32 SUMA_Boolean SUMA_SV_RegisteredDO_Refresh(SUMA_SurfaceViewer *sv);
33 SUMA_Boolean SUMA_AllSV_RegisteredDO_Refresh(void);
34 SUMA_Boolean SUMA_RegisterDO(int dov_id, SUMA_SurfaceViewer *cSV);
35 void SUMA_Show_DOv (SUMA_DO *dov, int N_dov, FILE *Out);
36 int * SUMA_GetDO_Type(SUMA_DO *dov, int N_dov, SUMA_DO_Types DO_Type, int *N);
37 SUMA_Boolean SUMA_Free_Displayable_Object_Vect (SUMA_DO *dov, int N);
38 SUMA_MEMBER_FACE_SETS *SUMA_MemberFaceSets (int Nind, int * FaceSetList, int nFr , int FaceDim, char *ownerid);
39 SUMA_Boolean SUMA_Free_MemberFaceSets (SUMA_MEMBER_FACE_SETS *MF);
40 SUMA_VOLPAR *SUMA_VolPar_Attr (char *volparent_name);
41 SUMA_VOLPAR *SUMA_VolParFromDset (THD_3dim_dataset *dset);
42 SUMA_Boolean SUMA_Free_VolPar (SUMA_VOLPAR *VP);
43 SUMA_VOLPAR *SUMA_Alloc_VolPar (void);
44 int SUMA_THD_handedness( THD_3dim_dataset * dset );
45 SUMA_Boolean SUMA_AfniExists(char *prefix, char *c2view);
46 SUMA_Boolean SUMA_AfniView (char *nameorig, char *cview);
47 SUMA_Boolean SUMA_AfniExistsView(int exists, char *view);
48 char *SUMA_AfniPrefix(char *name, char *view, char *path, int *exists);
49 byte * SUMA_isSkin(THD_3dim_dataset *dset, float *fvec, double thresh,
50                    int *N_skin);
51 void SUMA_Show_VolPar(SUMA_VOLPAR *VP, FILE *Out);
52 char *SUMA_VolPar_Info (SUMA_VOLPAR *VP);
53 SUMA_Boolean SUMA_Apply_Coord_xform(float *NodeList,
54                                     int N_Node,
55                                     int NodeDim,
56                                     double Xform[4][4],
57                                     int doinv,
58                                     double *pps);
59 SUMA_Boolean SUMA_Align_to_VolPar (SUMA_SurfaceObject *SO, void* S_struct);
60 SUMA_Boolean SUMA_Delign_to_VolPar (SUMA_SurfaceObject *SO, void * S_Struct);
61 SUMA_Boolean SUMA_Apply_VolReg_Trans (SUMA_SurfaceObject *SO);
62 const char *SUMA_WarpTypeName(SUMA_WARP_TYPES wt);
63 SUMA_Boolean SUMA_Read_SureFit_Param (char *f_name, SUMA_SureFit_struct *SF);
64 int SUMA_ReleaseLink (SUMA_INODE * IN);
65 int SUMA_AddLink (SUMA_INODE *IN);
66 SUMA_INODE *SUMA_CreateInode (void *data, char *ID);
67 SUMA_INODE *SUMA_CreateInodeLink (SUMA_INODE * FromIN, SUMA_INODE *ToIN);
68 SUMA_Boolean SUMA_isInodeLink (SUMA_INODE *IN, const char *HolderIDcode);
69 SUMA_INODE * SUMA_BreakInodeLink (SUMA_INODE *IN, const char *HolderIDcode);
70 SUMA_Boolean SUMA_existSO(char *idcode, SUMA_DO *dov, int N_dov);
71 SUMA_Boolean SUMA_existVO(char *idcode, SUMA_DO *dov, int N_dov);
72 SUMA_Boolean SUMA_existDO(char *idcode, SUMA_DO *dov, int N_dov);
73 
74 #define SUMA_whichADOg(idcode) SUMA_whichADO((idcode), SUMAg_DOv, SUMAg_N_DOv)
75 SUMA_ALL_DO* SUMA_whichADO(char *idcode, SUMA_DO *dov, int N_dov);
76 #define SUMA_whichDOg(idcode) SUMA_whichDO((idcode), SUMAg_DOv, SUMAg_N_DOv)
77 int SUMA_whichDO(char *idcode, SUMA_DO *dov, int N_dov);
78 char *SUMA_DO_dbg_info(char *idcode);
79 int SUMA_findSO_inDOv(char *idcode, SUMA_DO *dov, int N_dov);
80 int SUMA_findVO_inDOv(char *idcode, SUMA_DO *dov, int N_dov);
81 SUMA_VolumeObject * SUMA_findVOp_inDOv(char *idcode, SUMA_DO *dov, int N_dov);
82 SUMA_SurfaceObject * SUMA_findSOp_inDOv(char *idcode, SUMA_DO *dov, int N_dov);
83 SUMA_SurfaceObject * SUMA_find_named_SOp_inDOv(
84                         char *coordname, SUMA_DO *dov, int N_dov);
85 SUMA_VolumeObject * SUMA_find_named_VOp_inDOv( char *filename,
86                                                 SUMA_DO *dov, int N_dov);
87 SUMA_SurfaceObject *SUMA_FindSOp_inDOv_from_N_Node(
88                         int N_Node, SUMA_SO_SIDE side,
89                         int check_unique, int return_parent,
90                         SUMA_DO *dov, int N_dov);
91 SUMA_Boolean  SUMA_is_ID_4_SO(char *idcode, SUMA_SurfaceObject **SOp);
92 SUMA_MaskDO * SUMA_findShadowMDOp_inDOv(SUMA_DO *dov, int N_dov, int *dov_id);
93 char *SUMA_find_SOLabel_from_idcode (char *idcode, SUMA_DO *dov, int N_dov);
94 char *SUMA_find_VOLabel_from_idcode (char *idcode, SUMA_DO *dov, int N_dov);
95 char *SUMA_find_SOidcode_from_label (char *label, SUMA_DO *dov, int N_dov);
96 char *SUMA_find_VOidcode_from_label (char *label, SUMA_DO *dov, int N_dov);
97 char *SUMA_find_ADOidcode_from_label (char *label, SUMA_DO *dov, int N_dov);
98 SUMA_Boolean SUMA_isContralateral_name(char *s1, char *s2);
99 char *SUMA_Contralateral_file(char *f1);
100 SUMA_SurfaceObject *SUMA_Contralateral_SO(SUMA_SurfaceObject *SO,
101                                           SUMA_DO *dov, int N_dov);
102 SUMA_DSET * SUMA_Contralateral_dset(SUMA_DSET *dset, SUMA_SurfaceObject *SO,
103                                     SUMA_SurfaceObject**SOCp);
104 SUMA_OVERLAYS *SUMA_Contralateral_overlay(SUMA_OVERLAYS *over,
105                                           SUMA_SurfaceObject *SO,
106                                     SUMA_SurfaceObject**SOCp);
107 SUMA_Boolean SUMA_ismappable (SUMA_SurfaceObject *SO);
108 SUMA_Boolean SUMA_isINHmappable (SUMA_SurfaceObject *SO);
109 SUMA_Boolean SUMA_isLocalDomainParent (SUMA_SurfaceObject *SO);
110 SUMA_Boolean SUMA_isSO (SUMA_DO DO);
111 SUMA_Boolean SUMA_isVO (SUMA_DO DO);
112 SUMA_Boolean SUMA_isSO_G (SUMA_DO DO, char *Group);
113 SUMA_DOMAIN_KINSHIPS SUMA_WhatAreYouToMe (SUMA_SurfaceObject *SO1,
114                                           SUMA_SurfaceObject *SO2);
115 SUMA_Boolean SUMA_isRelated (SUMA_ALL_DO *ado1, SUMA_ALL_DO *ado2, int level);
116 SUMA_Boolean SUMA_isRelated_SO(SUMA_SurfaceObject *SO1,
117                                SUMA_SurfaceObject *SO2, int level);
118 SUMA_Boolean SUMA_isNBDOrelated (SUMA_NB_DO *SDO, SUMA_SurfaceObject *SO);
119 SUMA_Boolean SUMA_isdROIrelated (SUMA_DRAWN_ROI *ROI, SUMA_ALL_DO *ado);
120 SUMA_Boolean SUMA_isROIrelated (SUMA_ROI *ROI, SUMA_SurfaceObject *SO);
121 SUMA_Boolean SUMA_isNIDOrelated (SUMA_NIDO *SDO, SUMA_SurfaceObject *SO);
122 SUMA_Boolean SUMA_isNIDO_SurfBased(SUMA_NIDO *nido);
123 SUMA_DRAWN_ROI * SUMA_FetchROI_InCreation (SUMA_SurfaceObject *SO,
124                                                    SUMA_DO * dov, int N_dov);
125 SUMA_Boolean SUMA_AFNI_forward_warp_xyz( THD_warp * warp , float *XYZv, int N);
126 SUMA_Boolean SUMA_AFNItlrc_toMNI(float *NodeList, int N_Node, char *Coord);
127 int SUMA_Build_Mask_DrawnROI (SUMA_DRAWN_ROI *D_ROI, int *Mask);
128 int * SUMA_Build_Mask_AllROI (SUMA_DO *dov, int N_dov,
129                            SUMA_SurfaceObject *SO, int *Mask, int *N_added);
130 SUMA_ASSEMBLE_LIST_STRUCT *SUMA_AssembleAllROIList (SUMA_DO * dov,
131                                           int N_dov, SUMA_Boolean SortByLabel);
132 SUMA_ASSEMBLE_LIST_STRUCT *SUMA_FreeAssembleListStruct(
133                                           SUMA_ASSEMBLE_LIST_STRUCT *str);
134 SUMA_ASSEMBLE_LIST_STRUCT *SUMA_CreateAssembleListStruct(void);
135 SUMA_Boolean SUMA_DeleteROI (SUMA_DRAWN_ROI *ROI);
136 int SUMA_isTypicalSOforVolSurf (SUMA_SurfaceObject *SO);
137 int SUMA_ExcludeFromSendToAfni (SUMA_SurfaceObject *SO);
138 char *SUMA_DOv_Info (SUMA_DO *dov, int N_dov, int detail);
139 char *SUMA_TractDOInfo (SUMA_TractDO *tdo, int detail);
140 char *SUMA_MaskDOInfo (SUMA_MaskDO *mdo, int detail);
141 char *SUMA_VolumeObjectInfo (SUMA_VolumeObject *vo, int detail);
142 int SUMA_isSurfaceOfSide(SUMA_SurfaceObject *SO, SUMA_SO_SIDE ss);
143 int SUMA_BiggestLocalDomainParent_Side(SUMA_DO *dov, int N_dov, SUMA_SO_SIDE ss);
144 int SUMA_BiggestLocalDomainParent(SUMA_DO *dov, int N_dov);
145 SUMA_Boolean SUMA_SetXformShowPreProc(SUMA_XFORM *xf, int ShowPreProc,
146                                       int fromgui);
147 
148 
149 /*!
150    \brief SUMA_IS_DRAW_ROI_SWITCH_ROI_SHADED(Shaded)
151    Shaded is YUP unless the Switch ROI window is currently open.
152 */
153 #define SUMA_IS_DRAW_ROI_SWITCH_ROI_SHADED(Shaded)   \
154 {  \
155    Shaded = YUP;  \
156    if (SUMAg_CF->X) {   \
157       if (SUMAg_CF->X->DrawROI) {\
158          if (SUMAg_CF->X->DrawROI->SwitchROIlst) {\
159             if (!SUMAg_CF->X->DrawROI->SwitchROIlst->isShaded) {\
160                Shaded = NOPE;  \
161             }  \
162          }  \
163       }  \
164    }  \
165 }
166 
167 /*!
168    \brief SUMA_IS_SWITCH_COL_PLANE_SHADED(SO, Shaded)
169    Shaded is YUP unless the Switch Col plane window is currently open.
170 */
171 #define SUMA_IS_SWITCH_COL_PLANE_SHADED(ado, Shaded)   \
172 {  \
173    SUMA_X_SurfCont *SurfCont=NULL;  \
174    Shaded = YUP;  \
175    if ((SurfCont = SUMA_ADO_Cont(ado))) {   \
176       if (SurfCont->SwitchDsetlst) {\
177          if (!SurfCont->SwitchDsetlst->isShaded) {\
178             Shaded = NOPE;  \
179          }  \
180       }  \
181    }  \
182 }
183 
184 
185 
186 
187 
188 /* Xform stuff is in SUMA_display.h
189    Callback stuff is here */
190 typedef enum {
191    SUMA_ERROR_ACTIVATE_EVENT = -1,
192    SUMA_NO_ACTIVATE_EVENT = 0,
193    SUMA_NEW_NODE_ACTIVATE_EVENT,
194    SUMA_N_ACTIVATE_EVENTS,
195 }  SUMA_CALLBACK_ACTIVATE_EVENTS;
196 
197 
198 typedef struct {
199    SUMA_CALLBACK_ACTIVATE_EVENTS event;
200    char creator_xform[SUMA_IDCODE_LENGTH]; /*!< In some cases, the callbacks are
201                created when a transform is applied to some dataset, or surface.
202                The callback thus created may need to be modified when that
203                transforms is altered. creator_xform stores the ID
204                (xform->idcode_str) of the xform that setup the callback.
205                So when xform is changed, it can alter callbacks that it created.
206                This field could be empty*/
207    char parents[SUMA_MAX_XFCB_OBJS][SUMA_IDCODE_LENGTH]; /*!< IDs of parents upon                      which this callback acts.
208                      These could be SOs or DSETS*/
209    char parents_domain[SUMA_MAX_XFCB_OBJS][SUMA_IDCODE_LENGTH]; /*!< IDs of SO
210                    defining the domain of the parent. This is meaningful when
211                    the parent is a dset */
212    int N_parents;
213    int active;
214    int pending;
215    SUMA_ENGINE_SOURCE trigger_source; /*!< A flag indicating who turned the
216                                            pending flag on */
217    char FunctionName[128];
218    void  (*FunctionPtr)();
219    NI_group *FunctionInput;
220 }  SUMA_CALLBACK;
221 
222 char *SUMA_Xforms_Info(DList *dl, int detail) ;
223 char *SUMA_Callbacks_Info(DList *dl, int detail);
224 void SUMA_Show_Xforms (DList *dl, FILE *Out, int detail);
225 void SUMA_Show_Callbacks (DList *dl, FILE *Out, int detail);
226 SUMA_Boolean SUMA_SetXformActive(SUMA_XFORM *xf, int active, int fromgui);
227 SUMA_Boolean SUMA_AddXformParent (SUMA_XFORM *xf,
228                                   char *parent_idcode, char *parent_domain);
229 SUMA_Boolean SUMA_AddXformChild (SUMA_XFORM *xf,
230                                  char *child_idcode);
231 SUMA_Boolean SUMA_AddCallbackParent (SUMA_CALLBACK *cb,
232                                      char *parent_idcode, char *parent_domain);
233 SUMA_XFORM *SUMA_NewXform(char *name, char *parent_idcode, char *parent_domain);
234 SUMA_CALLBACK *SUMA_NewCallback  (char *FunctionName,
235                                SUMA_CALLBACK_ACTIVATE_EVENTS event,
236                                void *FunctionPtr,
237                                char *parent_idcode,
238                                char *parent_domain,
239                                char *creator_xform);
240 void SUMA_FreeXform(void *data);
241 void SUMA_FreeCallback(void *data);
242 SUMA_Boolean SUMA_is_XformParent (SUMA_XFORM *xf, char *id, int *loc);
243 SUMA_Boolean SUMA_is_XformChild (SUMA_XFORM *xf, char *id, int *iloc);
244 SUMA_Boolean SUMA_is_CallbackParent (SUMA_CALLBACK *cb, char *id, int *loc);
245 SUMA_XFORM *SUMA_Find_XformByID(char *idcode_str);
246 SUMA_XFORM *SUMA_Find_XformByParent(char *name, char *parent_idcode, int *iloc);
247 SUMA_CALLBACK *SUMA_Find_CallbackByParent(char *FunctionName,
248                                        char *parent_idcode, int *iloc);
249 SUMA_CALLBACK *SUMA_Find_CallbackByCreatorXformID(char *creator_xform_idcode);
250 SUMA_Boolean SUMA_SetCallbackPending (SUMA_CALLBACK *cb, SUMA_Boolean pen,
251                                       SUMA_ENGINE_SOURCE src);
252 SUMA_Boolean SUMA_FlushCallbackEventParameters (SUMA_CALLBACK *cb);
253 SUMA_Boolean SUMA_ExecuteCallback(SUMA_CALLBACK *cb,
254                                   int refresh, SUMA_ALL_DO *ado,
255                                   int doall) ;
256 void SUMA_FreeXformInterface(SUMA_GENERIC_XFORM_INTERFACE *gui);
257 SUMA_GENERIC_XFORM_INTERFACE * SUMA_NewXformInterface(SUMA_XFORM *xf);
258 char *SUMA_DO_dbg_info(char *idcode);
259 
260 #define SUMA_XFORM_STORE_AS_LAST_EVENT(nelpars) {\
261          NI_set_attribute(nelpars, "last_event.new_node",   \
262                           NI_get_attribute(nelpars,"event.new_node"));  \
263          NI_set_attribute(nelpars, "last_event.SO_idcode",  \
264                           NI_get_attribute(nelpars,"event.SO_idcode")); \
265          NI_set_attribute(nelpars, "last_event.overlay_name",  \
266                           NI_get_attribute(nelpars,"event.overlay_name")); \
267 }
268 
269 #define SUMA_XFORM_RETRIEVE_LAST_EVENT(nelpars) {\
270          NI_set_attribute(nelpars, "event.new_node",   \
271                           NI_get_attribute(nelpars,"last_event.new_node"));  \
272          NI_set_attribute(nelpars, "event.SO_idcode",  \
273                           NI_get_attribute(nelpars,"last_event.SO_idcode")); \
274          NI_set_attribute(nelpars, "event.overlay_name",  \
275                           NI_get_attribute(nelpars,"last_event.overlay_name")); \
276 }
277 
278 #define SUMA_XFORM_FLUSH_EVENT(nelpars) {\
279          NI_SET_INT(nelpars, "event.new_node", -1);   \
280          NI_set_attribute(nelpars, "event.SO_idcode", "");  \
281          NI_set_attribute(nelpars,"event.overlay_name", "");   \
282 }
283 
284 #define SUMA_XFORM_SAVE_FLUSH_EVENT(nelpars) {  \
285    SUMA_XFORM_STORE_AS_LAST_EVENT(nelpars);  \
286    SUMA_XFORM_FLUSH_EVENT(nelpars); \
287 }
288 
289 
290 #endif
291