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