1 #ifndef SUMA_CREATEDO_INCLUDED 2 #define SUMA_CREATEDO_INCLUDED 3 typedef struct { 4 char *idcode_str; /* copied by value */ 5 char *LocalDomainParent; /* copied by value */ 6 char *LocalDomainParentID; /* copied by value */ 7 SUMA_SO_File_Format FileFormat; /*defaults to SUMA_ASCII*/ 8 SUMA_SO_File_Type FileType; /*defaults to SUMA_FT_NOT_SPECIFIED*/ 9 byte DoNormals; /* calculate normals ?*/ 10 byte DoMetrics; /* calculate metrics? */ 11 byte DoCenter; /* calculate center ? */ 12 float LargestBoxSize; 13 } SUMA_NEW_SO_OPT; 14 15 typedef struct { 16 char state_s[32]; /*!< state name */ 17 char now_s[16]; /*!< current value in string format*/ 18 char init_s[16]; /*!< initial value in string format*/ 19 int now_i; 20 int init_i; 21 float now_f4[4]; 22 float init_f4[4]; 23 char whodunit[32]; /*!< Who wanted this state tracked */ 24 } SUMA_GL_STEL; 25 26 typedef struct { 27 char *idcode_str; 28 float *NodeList; 29 int N_Node; 30 int *NodeIndex; 31 32 float AvgLe; 33 byte err; 34 } SUMA_DUMB_DO; /* A structure to hold pointer copies for use by drawing 35 functions. Nothing in here should be allocated for. 36 All use of this structure should be temporary to the 37 drawing function */ 38 39 /* A structure to create a hash table for locating NIML elements 40 for a certain edge in a graph dataset */ 41 typedef struct { 42 int id; /* keep it named 'id' to facilitate use of convenience 43 macros in uthash . The integer id of an edge: its index*/ 44 int ngrindex; /* the index into ngr->part of the ni element in question. 45 ngr is the AFNI_dataset group element */ 46 UT_hash_handle hh; /* keep it named 'hh' for same reasons */ 47 } SUMA_NGR_INDEX_HASH_DATUM; 48 49 /*! Graph dataset Auxiliary structure for SUMA's use */ 50 typedef struct { 51 DList *DisplayUpdates; 52 SUMA_SegmentDO *SDO; 53 SUMA_NIDO *nido; 54 SUMA_SurfaceObject *FrameSO; /*!< Matrix's holder surface object */ 55 SUMA_OVERLAYS *Overlay; 56 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 57 SUMA_PICK_RESULT *PR; 58 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 59 by thresholds etc. */ 60 NI_group *net; /*!< A network group holding tract indexed in thd. 61 if net is NULL, then thd indexes into dset->ngr*/ 62 SUMA_NGR_INDEX_HASH_DATUM *thd; /*! A hash table pointing to niml element 63 containing tract to represent path 64 between two points */ 65 SUMA_Boolean ShowBundles; /*!< Show bundles instead of edge if possible */ 66 SUMA_Boolean ShowUncon; /*!< Show graph points (nodes) even if not 67 connected */ 68 SUMA_Boolean IgnoreSelection; /*!< Ignore selection mode when displaying 69 Currently used to show all graph, even 70 when one node is selected */ 71 float *Center_G3D; /* Geometric center of all points in 3D variant*/ 72 float *Range_G3D; /* Min Max of X, Y, and Z of all points in 3D variant*/ 73 float *Center_GMATRIX; /* Geometric center of all points in MATRIX 74 variant*/ 75 float *Range_GMATRIX; /* Min Max of X, Y, and Z of all points in MATRIX 76 variant*/ 77 } SUMA_GRAPH_SAUX; 78 79 /*! A Tract object's Auxiliary structure for SUMA's use */ 80 typedef struct { 81 DList *DisplayUpdates; 82 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 83 SUMA_PICK_RESULT *PR; 84 SUMA_OVERLAYS **Overlays; 85 int N_Overlays; 86 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 87 by thresholds etc. */ 88 int TractMask; 89 float MaskGray; 90 float *tract_lengths; 91 92 float *Center; /* Geometric center of all points */ 93 float *Range; /* Min Max of X, Y, and Z of all points */ 94 } SUMA_TRACT_SAUX; 95 96 /*! A CIFTI object's Auxiliary structure for SUMA's use */ 97 typedef struct { 98 DList *DisplayUpdates; 99 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 100 SUMA_PICK_RESULT *PR; 101 SUMA_OVERLAYS **Overlays; 102 int N_Overlays; 103 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 104 by thresholds etc. */ 105 106 float *Center; /* Geometric center of all points */ 107 float *Range; /* Min Max of X, Y, and Z of all points */ 108 } SUMA_CIFTI_SAUX; 109 110 /*! A Mask object's Auxiliary structure for SUMA's use */ 111 typedef struct { 112 DList *DisplayUpdates; 113 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 114 SUMA_PICK_RESULT *PR; 115 SUMA_OVERLAYS **Overlays; 116 int N_Overlays; 117 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 118 by thresholds etc. */ 119 } SUMA_MASK_SAUX; 120 121 122 /*! A Surface object's Auxiliary structure for SUMA's use */ 123 typedef struct { 124 #if 0 /* Not in use yet*/ 125 DList *DisplayUpdates; 126 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 127 #endif 128 SUMA_PICK_RESULT *PR; 129 #if 0 /* Not in use yet*/ 130 SUMA_OVERLAYS **Overlays; 131 int N_Overlays; 132 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 133 by thresholds etc. */ 134 #endif 135 } SUMA_SURF_SAUX; 136 137 typedef struct { 138 float Eq[4]; 139 int slc_num; 140 char variant[16]; 141 } SUMA_RENDERED_SLICE; /*!< Information about a rendered slice */ 142 143 /*! A volume object's Aux structure for SUMA's use */ 144 typedef struct { 145 DList *DisplayUpdates; 146 SUMA_X_SurfCont *DOCont;/*!< Displayable object controller */ 147 SUMA_PICK_RESULT *PR; 148 SUMA_PICK_RESULT *PRc; 149 SUMA_OVERLAYS **Overlays; 150 int N_Overlays; 151 SUMA_Boolean *isColored; /*!< is the datum receiving color? Not masked say 152 by thresholds etc. */ 153 DList *slcl; /* Rendered slices, top slice rendered last */ 154 DList *vrslcl; 155 156 char *State; /* Normally the state of a volume is ANY_ANATOMICAL, 157 but when it is a domain of a CIFTI object, we will 158 change its state to reflect that fact. If we don't 159 do that, the volume itself would get registered 160 (and therefore displayed) in any anatomically correct state 161 with complete disregard for its lineage. We want to 162 display the volume only when the CIFTI object is being 163 displayed. */ 164 int ShowAxSlc; 165 int ShowSaSlc; 166 int ShowCoSlc; 167 int ShowVrSlc; 168 int VrSelect; 169 170 int SlicesAtCrosshair; /* Make three slices jump to location of crosshair */ 171 SUMA_ATRANS_MODES TransMode; /*!< polygon transparency */ 172 } SUMA_VOL_SAUX; 173 174 #define SDSET_GSAUX(dset) ( ( (dset) && (dset)->Aux && (dset)->Aux->Saux && \ 175 SUMA_isGraphDset(dset) ) ? \ 176 (SUMA_GRAPH_SAUX *)((dset)->Aux->Saux):NULL ) 177 178 #define SDSET_GOVERLAY(dset) (( (dset) && (dset)->Aux && (dset)->Aux->Saux && \ 179 SUMA_isGraphDset(dset) ) ? \ 180 ((SUMA_GRAPH_SAUX *)(dset)->Aux->Saux)->Overlay:NULL ) 181 #define SDSET_COVERLAY(dset) (( (dset) && (dset)->Aux && (dset)->Aux->Saux && \ 182 SUMA_isCIFTIDset(dset) ) ? \ 183 ((SUMA_CIFTI_SAUX *)(dset)->Aux->Saux)->Overlay:NULL ) 184 185 #define SDSET_GMATSO(dset) (( (dset) && (dset)->Aux && (dset)->Aux->Saux && \ 186 SUMA_isGraphDset(dset) ) ? \ 187 ((SUMA_GRAPH_SAUX *)(dset)->Aux->Saux)->FrameSO:NULL ) 188 189 #define TDO_HAS_GRID(tdo) ( ((tdo) && (tdo)->net && (tdo)->net->grid) ? \ 190 (tdo)->net->grid : NULL ) 191 192 #define TDO_N_BUNDLES(tdo) ( ((tdo) && (tdo)->net ) ? (tdo)->net->N_tbv : -1 ) 193 #define TDO_N_TRACTS(tdo) ( ((tdo) ) ? Network_N_tracts((tdo)->net, 0) : -1 ) 194 195 #define TDO_BUNDLE(tdo, tbi) ( ((tdo) && (tdo)->net && (tdo)->net->tbv && \ 196 tbi >= 0 && tbi < (tdo)->net->N_tbv) ? \ 197 (tdo)->net->tbv[tbi] : NULL ) 198 #define TDO_TSAUX(tdo) ( (tdo) ? (SUMA_TRACT_SAUX *)(tdo)->Saux:NULL ) 199 #define CDO_CSAUX(cdo) ( (cdo) ? (SUMA_CIFTI_SAUX *)(cdo)->Saux:NULL ) 200 #define VDO_VSAUX(vo) ( (vo) ? (SUMA_VOL_SAUX *)(vo)->Saux:NULL ) 201 #define SDO_SSAUX(so) ( (so) ? (SUMA_SURF_SAUX *)(so)->Saux:NULL ) 202 #define MDO_MSAUX(mo) ( (mo) ? (SUMA_MASK_SAUX *)(mo)->Saux:NULL ) 203 204 #define VE_NX(ve) SUMA_VE_Ni(&ve, 0) 205 #define VE_NY(ve) SUMA_VE_Nj(&ve, 0) 206 #define VE_NZ(ve) SUMA_VE_Nk(&ve, 0) 207 #define VE_NXY(ve) SUMA_VE_Niy(&ve, 0) 208 #define VE_NVOX(ve) SUMA_VE_Nvox(&ve, 0) 209 210 #define VO_NI(vo) ( (vo) ? \ 211 SUMA_VE_Ni((vo)->VE, 0) : -1 ) 212 #define VO_NIJ(vo) ( (vo) ? \ 213 SUMA_VE_Nij((vo)->VE, 0) : -1 ) 214 #define VO_NJ(vo) ( (vo) ? \ 215 SUMA_VE_Nj((vo)->VE, 0) : -1 ) 216 #define VO_NK(vo) ( (vo) ? \ 217 SUMA_VE_Nk((vo)->VE, 0) : -1 ) 218 #define VO_NVOX(vo) ( (vo) ? \ 219 SUMA_VE_Nvox((vo)->VE, 0) : -1 ) 220 #define VO_N_VOLS(vo) ( SUMA_VO_NumVE(vo) ) 221 222 #define MDO_IS_SHADOW(MDO) ( ((MDO) && (MDO)->mtype[0] == 'C' && \ 223 (MDO)->mtype[1] == 'A' && \ 224 (MDO)->mtype[2] == 'S' && \ 225 (MDO)->mtype[3] == 'P' && \ 226 (MDO)->mtype[4] == 'E' && \ 227 (MDO)->mtype[5] == 'R' && \ 228 (MDO)->mtype[6] == '\0' ) ? 1:0 ) 229 #define MDO_IS_BOX(MDO) ( ((MDO) && (!strcasecmp((MDO)->mtype,"box") || \ 230 !strcasecmp((MDO)->mtype,"cube"))) ? 1:0 ) 231 #define MDO_IS_SPH(MDO) ( ((MDO) && (!strcasecmp((MDO)->mtype,"ball") || \ 232 !strcasecmp((MDO)->mtype,"sphere"))) ? 1:0 ) 233 #define MDO_IS_SURF(MDO) ( ((MDO) && (!strcasecmp((MDO)->mtype,"surf"))) ? 1:0 ) 234 235 SUMA_Boolean SUMA_DrawDO_UL_FullMonty(DList *dl); 236 SUMA_Boolean SUMA_ADO_UL_Add(SUMA_ALL_DO *ado, char *com, int replace); 237 SUMA_Boolean SUMA_DrawDO_UL_Add(DList *dl, char *com, int replace); 238 DListElmt *SUMA_DrawDO_UL_Find(DList *dl, char *com); 239 SUMA_Boolean SUMA_DrawDO_UL_EmptyList(DList *dl, DListElmt *del); 240 SUMA_Boolean SUMA_DestroyNgrHashDatum(SUMA_NGR_INDEX_HASH_DATUM *thd); 241 void SUMA_Free_GSaux(void *vSaux); 242 void SUMA_Free_SSaux(void *vSaux); 243 void SUMA_Free_TSaux(void *vSaux); 244 void SUMA_Free_MSaux(void *vSaux); 245 void SUMA_Free_VSaux(void *vSaux); 246 void SUMA_Free_CSaux(void *vSaux); 247 void SUMA_Free_Saux_DisplayUpdates_datum(void *ddd); 248 SUMA_Boolean SUMA_AddTractSaux(SUMA_TractDO *tdo); 249 SUMA_Boolean SUMA_AddCIFTISaux(SUMA_CIFTI_DO *cdo); 250 float SUMA_TDO_tract_length(SUMA_TractDO *tdo, int tt); 251 SUMA_Boolean SUMA_AddVolSaux(SUMA_VolumeObject *vo); 252 void SUMA_Free_SliceListDatum(void *data); 253 SUMA_Boolean SUMA_AddMaskSaux(SUMA_MaskDO *mdo); 254 SUMA_Boolean SUMA_AddDsetSaux(SUMA_DSET *dset); 255 SUMA_Boolean SUMA_Load_Dumb_DO(SUMA_ALL_DO *ado, SUMA_DUMB_DO *DDO); 256 SUMA_Boolean SUMA_SetDrawVariant(SUMA_DSET *dset, char *variant); 257 char *SUMA_GetDrawVariant(SUMA_DSET *dset); 258 SUMA_Boolean SUMA_UnSetDrawVariant(SUMA_DSET *dset); 259 SUMA_Boolean SUMA_SetDrawVariant(SUMA_DSET *dset, char *variant); 260 SUMA_Boolean SUMA_isDrawVariant(SUMA_DSET *dset, char *variant); 261 int SUMA_GDSET_edgeij_to_GMATRIX_XYZ(SUMA_DSET *dset, 262 int ei, int ej, float *XYZ, int FC); 263 int SUMA_GDSET_GMATRIX_CellPixSize(SUMA_DSET *dset, SUMA_SurfaceViewer *sv, 264 float *Sz); 265 float *SUMA_GDSET_NodeList(SUMA_DSET *dset, int *N_Node, int recompute, 266 int **ind, char *thisvariant); 267 float *SUMA_CDOM_NodeList(SUMA_CIFTI_DO *CO, int *N_Node, int recompute, 268 int **ind); 269 NI_element * SUMA_SO_NIDO_Node_Texture ( SUMA_SurfaceObject *SO, SUMA_DO* dov, 270 int N_do, SUMA_SurfaceViewer *sv ); 271 SUMA_NEW_SO_OPT *SUMA_NewNewSOOpt(void); 272 SUMA_NEW_SO_OPT *SUMA_FreeNewSOOpt(SUMA_NEW_SO_OPT *nsopt); 273 SUMA_SurfaceObject *SUMA_NewSO(float **NodeList, int N_Node, int **FaceSetList, int N_FaceSet, SUMA_NEW_SO_OPT *nsooptu); 274 SUMA_SurfaceObject *SUMA_CreateChildSO(SUMA_SurfaceObject * SO, 275 float *NodeList, int N_Node, 276 int *FaceSetList, int N_FaceSet, 277 SUMA_Boolean replace); 278 SUMA_Axis* SUMA_Alloc_Axis (const char *Name, SUMA_DO_Types type); 279 void SUMA_Free_Axis (SUMA_Axis *Ax); 280 SUMA_Boolean SUMA_DrawAxis (SUMA_Axis* Ax, SUMA_SurfaceViewer *csv); 281 void SUMA_MeshAxisStandard (SUMA_Axis* Ax, SUMA_ALL_DO *cso); 282 void SUMA_EyeAxisStandard (SUMA_Axis* Ax, SUMA_SurfaceViewer *csv); 283 void SUMA_Free_CrossHair (SUMA_CrossHair *Ch); 284 SUMA_CrossHair* SUMA_Alloc_CrossHair (void); 285 SUMA_Boolean SUMA_DrawCrossHair (SUMA_SurfaceViewer *csv); 286 void SUMA_Free_SphereMarker (SUMA_SphereMarker *SM); 287 SUMA_SphereMarker* SUMA_Alloc_SphereMarker (void); 288 SUMA_Boolean SUMA_DrawFaceSetMarker (SUMA_FaceSetMarker* FM, 289 SUMA_SurfaceViewer *sv); 290 SUMA_Boolean SUMA_ScreenPlane_WorldSpace(SUMA_SurfaceViewer *sv, float *cen, 291 float *PlEq); 292 SUMA_FaceSetMarker* SUMA_Alloc_FaceSetMarker (void); 293 void SUMA_Free_FaceSetMarker (SUMA_FaceSetMarker* FM); 294 int SUMA_NodeMask_to_FaceMask(SUMA_SurfaceObject *SO, byte *nodemask, 295 int N_nz_nodemask, 296 int *triblock, byte **facemask, 297 int minhits); 298 int SUMA_Prep_SO_DrawPatches(SUMA_SurfaceObject *SO, SUMA_SurfaceViewer *sv); 299 SUMA_DrawPatch *SUMA_New_DrawPatchDatum(SUMA_SurfaceObject *SO, int *triblock, 300 int N_Faces, byte *facemask); 301 void SUMA_Free_DrawPatchDatum(void *data); 302 int SUMA_ComplimentaryPatches(SUMA_SurfaceObject *SO, int *triblock, 303 int N_Faces, byte *facemask, 304 SUMA_DrawPatch **ptch0, 305 SUMA_DrawPatch **ptch1); 306 void SUMA_DrawMesh_mask(SUMA_SurfaceObject *SurfObj, SUMA_SurfaceViewer *sv); 307 void SUMA_DrawMesh(SUMA_SurfaceObject *SurfObj, SUMA_SurfaceViewer *csv); 308 void SUMA_SimpleDrawMesh(SUMA_SurfaceObject *SurfObj, 309 GLfloat *colp, SUMA_SurfaceViewer *sv); 310 SUMA_VIS_XFORM_DATUM *SUMA_NewVisXdatum(char *label); 311 void SUMA_FreeVisXdatum (void *vxd); 312 313 int SUMA_EmptyVisXform(SUMA_VIS_XFORM *vx); 314 int SUMA_ApplyVisXform(SUMA_SurfaceObject *SO, char *which, 315 SUMA_VISX_XFORM_DIRECTIONS direction, int recompute_norm); 316 float *SUMA_VisX_CoordPointer(SUMA_SurfaceObject *SO); 317 SUMA_Boolean SUMA_VisX_Pointers4Display(SUMA_SurfaceObject *SO, int fordisp); 318 int SUMA_AllowPrying(SUMA_SurfaceViewer *sv, int *RegSO); 319 SUMA_Boolean SUMA_ResetPrying(SUMA_SurfaceViewer *svu); 320 SUMA_Boolean SUMA_ApplyPrying(SUMA_SurfaceViewer *sv, float val[3], char *units, 321 int recompute_norm); 322 SUMA_Boolean SUMA_RecomputeNormsPrying(SUMA_SurfaceViewer *svu); 323 int SUMA_LeftShownOnLeft(SUMA_SurfaceViewer *sv, 324 SUMA_SurfaceObject *SO1, SUMA_SurfaceObject *SO2, 325 int useParents, int applyViewingXform); 326 int SUMA_ComputeVisX(SUMA_SurfaceObject *SO1, SUMA_SurfaceObject *SO2, 327 SUMA_SurfaceViewer *csv, char *which, int recompute_norm ); 328 char *SUMA_SO_AnatomicalStructurePrimary(SUMA_SurfaceObject *SO); 329 char *SUMA_SO_GeometricType(SUMA_SurfaceObject *SO); 330 char *SUMA_SO_AnatomicalStructureSecondary(SUMA_SurfaceObject *SO); 331 char *SUMA_SO_TopologicalType(SUMA_SurfaceObject *SO); 332 SUMA_Boolean SUMA_MergeAfniSO_In_SumaSO(NI_group **aSOp, 333 SUMA_SurfaceObject *SO); 334 NI_group *SUMA_ExtractAfniSO_FromSumaSO( SUMA_SurfaceObject *SO, 335 int CopyData); 336 SUMA_Boolean SUMA_Blank_AfniSO_Coord_System(NI_group *aSO); 337 char *SUMA_SideName(SUMA_SO_SIDE ss); 338 SUMA_SO_SIDE SUMA_SideType(char *s); 339 SUMA_Boolean SUMA_Free_Surface_Object (SUMA_SurfaceObject *SO); 340 SUMA_Boolean SUMA_FreeDrawMasks(SUMA_DRAW_MASKS * DW); 341 SUMA_Boolean SUMA_EmptyDrawMasks(SUMA_DRAW_MASKS * DW); 342 SUMA_VolumeObject *SUMA_FreeVolumeObject(SUMA_VolumeObject *VO); 343 SUMA_CIFTI_DO *SUMA_FreeCIFTIObject(SUMA_CIFTI_DO *CO); 344 SUMA_CIFTI_DO *SUMA_CreateCIFTIObject(char *Label); 345 void SUMA_Print_Surface_Object(SUMA_SurfaceObject *SO, FILE *Out); 346 char *SUMA_VisX_XformType2Name(SUMA_VISX_XFORM_TYPE tt); 347 char *SUMA_VisX_Info(SUMA_VIS_XFORM VisX, int N_Node, char *mumble); 348 char *SUMA_SurfaceObject_Info (SUMA_SurfaceObject *SO, DList *DsetList); 349 char *SUMA_ADO_Info(SUMA_ALL_DO *ado, DList *DsetList, int detail); 350 SUMA_SurfaceObject *SUMA_Alloc_SurfObject_Struct(int N); 351 int SUMA_VO_NumVE(SUMA_VolumeObject *VO); 352 SUMA_DSET *SUMA_VO_dset(SUMA_VolumeObject *VO); 353 SUMA_DSET *SUMA_VE_dset(SUMA_VolumeElement **VE, int idset); 354 SUMA_VolumeObject *SUMA_CreateVolumeObject(char *label); 355 SUMA_Boolean SUMA_AddDsetVolumeObject( SUMA_VolumeObject *VO, 356 THD_3dim_dataset **dsetp); 357 SUMA_DRAWN_ROI * SUMA_AllocateDrawnROI (char *Parent_idcode_str, 358 SUMA_ROI_DRAWING_STATUS DrawStatus, 359 SUMA_ROI_DRAWING_TYPE Type, char * label, int ilabel); 360 SUMA_ROI * SUMA_AllocateROI (char *Parent_idcode_str, SUMA_ROI_TYPE Type, 361 char * label, int N_ElInd, int *ElInd); 362 SUMA_Boolean SUMA_freeDrawnROI (SUMA_DRAWN_ROI *D_ROI); 363 SUMA_Boolean SUMA_freeROI (SUMA_ROI *ROI); 364 SUMA_Boolean SUMA_Draw_SO_ROI (SUMA_SurfaceObject *SO, SUMA_DO* dov, int N_dov, 365 SUMA_SurfaceViewer *csv); 366 SUMA_Boolean SUMA_Draw_SO_Dset_Contours(SUMA_SurfaceObject *SO, 367 SUMA_SurfaceViewer *sv); 368 SUMA_DO_Types SUMA_Guess_DO_Type(char *s); 369 SUMA_MaskDO *SUMA_SymMaskDO(char *s, char *mtype, char *hid, byte mtypeonly); 370 SUMA_Boolean SUMA_MDO_OkVarName(char *this); 371 SUMA_Boolean SUMA_MDO_SetVarName(SUMA_MaskDO *mdo, char *this); 372 SUMA_MaskDO *SUMA_MDO_GetVar(char *vn); 373 SUMA_Boolean SUMA_AccessorizeMDO(SUMA_MaskDO *MDO); 374 SUMA_Boolean SUMA_isSymMaskDO(char *s, char *mtype); 375 SUMA_Boolean SUMA_Ok_Sym_MaskDO_Type(char *mtype); 376 SUMA_Boolean SUMA_Guess_Str_MaskDO_Type(char *s, char *mtype); 377 SUMA_Boolean SUMA_Set_MaskDO_Type(SUMA_MaskDO *mdo, char *mtype); 378 SUMA_Boolean SUMA_Set_MaskDO_Cen(SUMA_MaskDO *mdo, float *cen); 379 SUMA_Boolean SUMA_Set_MaskDO_Dim(SUMA_MaskDO *mdo, float *dim); 380 SUMA_Boolean SUMA_Set_MaskDO_Trans(SUMA_MaskDO *mdo, SUMA_TRANS_MODES T); 381 SUMA_Boolean SUMA_Set_MaskDO_Alpha(SUMA_MaskDO *mdo, float alpha); 382 SUMA_Boolean SUMA_Set_MaskDO_Color(SUMA_MaskDO *mdo, float *col, float dim); 383 SUMA_Boolean SUMA_Set_MaskDO_Label(SUMA_MaskDO *mdo, char *lab); 384 #define SUMA_MDO_New_Cen(mdo, cen) \ 385 SUMA_MDO_New_Params((mdo), (cen), NULL, NULL, NULL, NULL, \ 386 -1, STM_N_TransModes, -1) 387 #define SUMA_MDO_New_Type(mdo, ttype) \ 388 SUMA_MDO_New_Params((mdo), NULL, NULL, NULL, NULL, (ttype), \ 389 -1, STM_N_TransModes, -1) 390 #define SUMA_MDO_New_Label(mdo, ttype) \ 391 SUMA_MDO_New_Params((mdo), NULL, NULL, NULL, (ttype), NULL, \ 392 -1, STM_N_TransModes, -1) 393 #define SUMA_MDO_New_Dim(mdo, dim) \ 394 SUMA_MDO_New_Params((mdo), NULL, (dim), NULL, NULL, NULL, \ 395 -1, STM_N_TransModes, -1) 396 #define SUMA_MDO_New_Color(mdo, col) \ 397 SUMA_MDO_New_Params((mdo), NULL, NULL, (col), NULL, NULL, \ 398 -1, STM_N_TransModes, -1) 399 #define SUMA_MDO_New_Trans(mdo, tran) \ 400 SUMA_MDO_New_Params((mdo), NULL, NULL, NULL, NULL, NULL, \ 401 -1, tran, -1) 402 #define SUMA_MDO_New_Alpha(mdo, alpha) \ 403 SUMA_MDO_New_Params((mdo), NULL, NULL, NULL, NULL, NULL, \ 404 alpha, STM_N_TransModes, -1) 405 #define SUMA_MDO_New_CDim(mdo, cdim) \ 406 SUMA_MDO_New_Params((mdo), NULL, NULL, NULL, NULL, NULL, \ 407 -1, STM_N_TransModes, cdim) 408 int SUMA_MDO_New_Doppel(SUMA_MaskDO *mdo, float *xyz); 409 int SUMA_MDO_New_parent(SUMA_MaskDO *mdo, char *parent_id, int parent_datum_id); 410 int SUMA_MDO_New_Params(SUMA_MaskDO *mdo, float *cen, float *dim, 411 float *col, char *Label, char *Type, 412 float alpha, SUMA_TRANS_MODES tran, float cdim); 413 SUMA_NIDO * SUMA_Alloc_NIDO (char *idcode_str, char *Label, 414 char *Parent_idcode_str); 415 SUMA_NIDO *SUMA_free_NIDO(SUMA_NIDO *NIDO); 416 int SUMA_ProcessDODrawMask(SUMA_SurfaceViewer *sv, 417 SUMA_SurfaceObject *SO, 418 byte **mask, int *ncross); 419 SUMA_SegmentDO * SUMA_Alloc_SegmentDO (int N_n, char *Label, int oriented, 420 char *parent_idcode, 421 int NodeBased, SUMA_DO_Types type, 422 SUMA_DO_Types P_type, char *DrawnDO_variant); 423 void SUMA_free_SegmentDO (SUMA_SegmentDO * SDO); 424 SUMA_MaskDO *SUMA_Alloc_MaskDO ( int N_obj, char *Label, char *hash_label, 425 char *parent_ADO_id, 426 int withcol); 427 void SUMA_free_MaskDO (SUMA_MaskDO * MDO); 428 int SUMA_Set_N_SegNodes_SegmentDO(SUMA_SegmentDO * SDO, int N); 429 int SUMA_Set_N_AllNodes_SegmentDO(SUMA_SegmentDO * SDO, int N); 430 SUMA_Boolean SUMA_DrawSegmentDO (SUMA_SegmentDO *SDO, SUMA_SurfaceViewer *sv); 431 SUMA_Boolean SUMA_DrawGSegmentDO (SUMA_GRAPH_SAUX *GSaux, 432 SUMA_SurfaceViewer *sv); 433 SUMA_Boolean SUMA_DrawTractDO (SUMA_TractDO *TDO, SUMA_SurfaceViewer *sv); 434 SUMA_Boolean SUMA_DrawMaskDO (SUMA_MaskDO *MDO, SUMA_SurfaceViewer *sv); 435 float *SUMA_ADO_Center(SUMA_ALL_DO *ado, float *here); 436 float *SUMA_ADO_Range(SUMA_ALL_DO *ado, float *here); 437 float *SUMA_TDO_Grid_Center(SUMA_TractDO *tdo, float *here); 438 float *SUMA_MDO_Center(SUMA_MaskDO *MDO, float *here); 439 float *SUMA_VO_Grid_Center(SUMA_VolumeObject *vo, float *here); 440 int SUMA_TDO_N_tracts(SUMA_TractDO *tdo); 441 int SUMA_TDO_Max_N_tracts(SUMA_TractDO *tdo); 442 int SUMA_VE_Nk(SUMA_VolumeElement **VE, int ivo); 443 int SUMA_VE_Nj(SUMA_VolumeElement **VE, int ivo); 444 int SUMA_VE_Ni(SUMA_VolumeElement **VE, int ivo); 445 int SUMA_VE_Niy(SUMA_VolumeElement **VE, int ivo); 446 int SUMA_VE_Nvox(SUMA_VolumeElement **VE, int ivo); 447 int SUMA_VO_N_Slices(SUMA_VolumeObject *VO, char *variant); 448 int SUMA_VE_N_Slices(SUMA_VolumeElement **VE, int ivo, char *variant); 449 char * SUMA_VO_orcode(SUMA_VolumeObject *VO); 450 char *SUMA_VE_orcode(SUMA_VolumeElement **VE, int ivo); 451 char * SUMA_VE_Headname(SUMA_VolumeElement **VE, int ivo); 452 SUMA_Boolean SUMA_VE_Set_Dims(SUMA_VolumeElement **VE, int ive); 453 float *SUMA_TDO_Points_Center(SUMA_TractDO *tdo, float *here); 454 float *SUMA_TDO_XYZ_Range(SUMA_TractDO *tdo, float *here); 455 float *SUMA_SDO_XYZ_Range(SUMA_SurfaceObject *so, float *here); 456 float *SUMA_CIFTI_DO_XYZ_Range(SUMA_CIFTI_DO *co, float *here); 457 float *SUMA_VO_XYZ_Range(SUMA_VolumeObject *VO, float *here); 458 float *SUMA_MDO_XYZ_Range(SUMA_MaskDO *MDO, float *here); 459 SUMA_SphereDO * SUMA_Alloc_SphereDO (int N_n, char *Label, char *parent_idcode, 460 SUMA_DO_Types type); 461 SUMA_TractDO * SUMA_Alloc_TractDO (char *Label, char *parent_idcode); 462 SUMA_PlaneDO * SUMA_Alloc_PlaneDO (int N_n, char *Label, SUMA_DO_Types type); 463 SUMA_Boolean SUMA_DrawGraphDO_G3D (SUMA_GraphLinkDO *gldo, 464 SUMA_SurfaceViewer *sv); 465 SUMA_Boolean SUMA_BordFrac_to_GB(int BF, int *G, int *B); 466 SUMA_NIDO * SUMA_GDSET_matrix_nido(SUMA_DSET *dset); 467 SUMA_Boolean SUMA_GDSET_clear_matrix_nido(SUMA_DSET *dset, int clear_SO); 468 SUMA_Boolean SUMA_GDSET_refresh_matrix_nido(SUMA_DSET *dset, int also_SO); 469 SUMA_Boolean SUMA_DrawGraphDO_GMATRIX (SUMA_GraphLinkDO *gldo, 470 SUMA_SurfaceViewer *sv); 471 SUMA_Boolean SUMA_DrawGraphDO_GRELIEF (SUMA_GraphLinkDO *gldo, 472 SUMA_SurfaceViewer *sv); 473 SUMA_SurfaceObject *SUMA_Surface_Of_NIDO_Matrix(SUMA_NIDO *nido); 474 void SUMA_free_SphereDO (SUMA_SphereDO * SDO); 475 void SUMA_free_TractDO (SUMA_TractDO * SDO); 476 void SUMA_free_PlaneDO (SUMA_PlaneDO * SDO); 477 void SUMA_free_GraphLinkDO (SUMA_GraphLinkDO * GLDO); 478 SUMA_GraphLinkDO * SUMA_Alloc_GraphLinkDO ( char *variant, 479 SUMA_DSET *ParentGraph); 480 SUMA_GraphLinkDO *SUMA_find_Dset_GLDO(SUMA_DSET *dset, char *variant, 481 int *ifound); 482 SUMA_DSET *SUMA_find_GLDO_Dset(SUMA_GraphLinkDO *GLDO); 483 SUMA_Boolean SUMA_Remove_From_Pick_Colid_list(SUMA_SurfaceViewer *sv, 484 char *idcode_str); 485 DListElmt * SUMA_Find_In_Pick_Colid_list(SUMA_SurfaceViewer *sv, 486 char *idcode_str, char *primitive); 487 void *SUMA_Picked_reference_object(SUMA_COLID_OFFSET_DATUM *cod, 488 SUMA_DO_Types *do_type); 489 int SUMA_Picked_DO_ID(SUMA_COLID_OFFSET_DATUM *cod); 490 SUMA_Boolean SUMA_CreateGraphDOs(SUMA_DSET *dset); 491 SUMA_Boolean SUMA_RegisterGraphDOs(SUMA_DSET *dset, SUMA_SurfaceViewer *sv); 492 SUMA_Boolean SUMA_DrawGraphDO (SUMA_GraphLinkDO *gldo, SUMA_SurfaceViewer *sv, 493 char *variant); 494 SUMA_Boolean SUMA_DrawGraphLinkDO (SUMA_GraphLinkDO *GLDO, 495 SUMA_SurfaceViewer *sv); 496 SUMA_Boolean SUMA_isGLDO_AnatCorrect(SUMA_GraphLinkDO *GLDO); 497 char *SUMA_iDO_state(int i); 498 char *SUMA_DO_state(SUMA_DO *DO); 499 char *SUMA_iDO_group(int i); 500 char *SUMA_DO_group(SUMA_DO *DO); 501 int SUMA_ADO_is_AnatCorrect(SUMA_ALL_DO *ado); 502 int SUMA_isDO_AnatCorrect(SUMA_DO *DO); 503 int SUMA_is_iDO_AnatCorrect(int dov_id); 504 SUMA_Boolean SUMA_DrawSphereDO (SUMA_SphereDO *SDO, SUMA_SurfaceViewer *sv); 505 SUMA_Boolean SUMA_DrawPointDO (SUMA_SphereDO *SDO, SUMA_SurfaceViewer *sv); 506 SUMA_Boolean SUMA_DrawPlaneDO (SUMA_PlaneDO *SDO, SUMA_SurfaceViewer *sv); 507 SUMA_Boolean SUMA_DrawPlanes( float **PlEq, float **cen, float *sz, 508 int N_pl, SUMA_SurfaceViewer *sv); 509 SUMA_Boolean SUMA_isROIdequal (SUMA_ROI_DATUM *ROId1, SUMA_ROI_DATUM *ROId2); 510 void SUMA_FreeROIDatum (void * data); 511 SUMA_ROI_DATUM * SUMA_AllocROIDatum (void); 512 SUMA_Boolean SUMA_PrependToROIdatum (SUMA_ROI_DATUM *ROId1, 513 SUMA_ROI_DATUM *ROId2); 514 void SUMA_ShowDrawnROI (SUMA_DRAWN_ROI *D_ROI, FILE *out, 515 SUMA_Boolean ShortVersion); 516 void SUMA_ShowDrawnROIDatum (SUMA_ROI_DATUM *ROId, FILE *out, 517 SUMA_Boolean ShortVersion); 518 SUMA_Boolean SUMA_AppendToROIdatum (SUMA_ROI_DATUM *ROId1, 519 SUMA_ROI_DATUM *ROId2); 520 SUMA_ROI_DATUM * SUMA_FillToMask(SUMA_SurfaceObject *SO, int *ROI_Mask, 521 int FirstSurfNode); 522 void SUMA_FillToMask_Engine (SUMA_NODE_FIRST_NEIGHB *FN, int *Visited, int *ROI_mask, int seed, int *N_Visited, int N_Node); 523 void SUMA_FillToMask_Engine_old (SUMA_NODE_FIRST_NEIGHB *FN, int *Visited, int *ROI_mask, int seed, int *N_Visited); 524 SUMA_DRAWN_ROI **SUMA_Find_ROIrelatedtoSO (SUMA_SurfaceObject *SO, SUMA_DO* dov, int N_do, int *N_ROI); 525 SUMA_DRAWN_ROI **SUMA_Find_ROIonSO (SUMA_SurfaceObject *SO, SUMA_DO* dov, int N_do, int *N_ROI); 526 SUMA_Boolean SUMA_Paint_SO_ROIplanes (SUMA_SurfaceObject *SO, 527 SUMA_DO* dov, int N_do, 528 SUMA_Boolean *MakeNel, 529 NI_element ***nelvp, int *N_nelv); 530 SUMA_Boolean SUMA_Paint_SO_ROIplanes_w (SUMA_SurfaceObject *SO, 531 SUMA_DO* dov, int N_do); 532 void SUMA_Free_ROI_PlaneData (void *da); 533 DList * SUMA_Addto_ROIplane_List (DList *ROIplaneListIn, SUMA_DO *dov, int idov); 534 int * SUMA_NodesInROI (SUMA_DRAWN_ROI *D_ROI, int *N_Nodes, SUMA_Boolean Unique); 535 SUMA_DRAWN_ROI * SUMA_1DROI_to_DrawnROI ( int *Node, int N_Node, int Value, 536 char *Parent_idcode_str, 537 char *Label, char *ColPlaneName, 538 float *FillColor, float *EdgeColor, int EdgeThickness , 539 SUMA_DO *dov, int N_dov, SUMA_Boolean ForDisplay); 540 SUMA_SegmentDO * SUMA_ReadNBVecDO (char *s, int oriented, char *parent_SO_id); 541 SUMA_SphereDO * SUMA_ReadNBSphDO (char *s, char *parent_SO_id); 542 SUMA_SegmentDO * SUMA_ReadDirDO (char *s, int oriented, char *parent_SO_id); 543 SUMA_TractDO *SUMA_ReadTractDO(char *s, char *parent_SO_id); 544 SUMA_TractDO *SUMA_Net2TractDO(TAYLOR_NETWORK *net, char *Label, 545 char *parent_SO_id); 546 GLushort SUMA_int_to_stipplemask(int i); 547 GLushort SUMA_int_to_stipplemask_cont(int i); 548 SUMA_SegmentDO * SUMA_ReadSegDO (char *s, int oriented, char *soid); 549 SUMA_SegmentDO * SUMA_ReadNBSegDO (char *s, int oriented, char *soid); 550 SUMA_SphereDO * SUMA_ReadSphDO (char *s); 551 SUMA_SphereDO * SUMA_ReadPntDO (char *s); 552 SUMA_PlaneDO * SUMA_ReadPlaneDO (char *s); 553 SUMA_MaskDO * SUMA_ReadMaskDO (char *s, char *parent_ADO_id); 554 SUMA_NIDO *SUMA_ReadNIDO(char *s, char *soid); 555 SUMA_NIDO *SUMA_BlankNIDO (char *idcode_str, char *Label, 556 char *parent_so_id, char *coord_type, 557 char *font_name); 558 SUMA_SegmentDO *SUMA_CreateSegmentDO( int N_n, int oriented, int NodeBased, 559 int Stipple, 560 char *Label, char *idcode_str, 561 char *Parent_idcode_str, SUMA_DO_Types Parent_do_type, 562 char *DrawnDO_variant, 563 float LineWidth, float *LineCol, 564 int *NodeId, int *NodeId1, 565 float *n0, float *n1, 566 float *colv, float *thickv 567 ); 568 SUMA_DO * SUMA_Multiply_NodeObjects ( SUMA_SurfaceObject *SO, 569 SUMA_DO *DO ); 570 SUMA_NIDO ** SUMA_Multiply_NodeNIDOObjects ( SUMA_SurfaceObject *SO, 571 SUMA_DO *DO, int *NodeID, int N_Node); 572 SUMA_Boolean SUMA_ApplyDataToNodeObjects( 573 SUMA_SurfaceObject *SurfObj, SUMA_SurfaceViewer *sv); 574 SUMA_SurfaceObject *SUMA_Cmap_To_SO (SUMA_COLOR_MAP *Cmap, float orig[3], 575 float topright[3], int verb); 576 SUMA_Boolean SUMA_PrepForNIDOnelPlacement ( SUMA_SurfaceViewer *sv, 577 NI_element *nel, 578 SUMA_SurfaceObject *default_SO, 579 int default_node, 580 float *txloc, float *txcoord, 581 int *sz, 582 int *orthoreset, 583 SUMA_DO_CoordUnits coord_units, 584 float *xyzoffset, int *jw); 585 SUMA_Boolean SUMA_DrawImageNIDOnel( NI_element *nel, 586 SUMA_SurfaceObject *SO, 587 SUMA_DO_CoordUnits default_coord_type, 588 float *default_txcol, 589 void *default_font, int default_node, 590 SUMA_SurfaceViewer *sv) ; 591 SUMA_Boolean SUMA_DrawTextNIDOnel( NI_element *nel, 592 SUMA_SurfaceObject *SO, 593 SUMA_DO_CoordUnits default_coord_type, 594 float *default_txcol, 595 void *default_font, int default_node, 596 SUMA_SurfaceViewer *sv) ; 597 SUMA_Boolean SUMA_DrawSphereNIDOnel( NI_element *nel, 598 SUMA_SurfaceObject *SO, 599 SUMA_DO_CoordUnits default_coord_type, 600 float *default_txcol, int default_node, 601 SUMA_SurfaceViewer *sv) ; 602 SUMA_Boolean SUMA_DrawNIDO (SUMA_NIDO *SDO, SUMA_SurfaceViewer *sv); 603 SUMA_Boolean SUMA_DrawLineAxis ( SUMA_AxisSegmentInfo *ASIp, SUMA_Axis *Ax, 604 SUMA_Boolean AddText); 605 DList *SUMA_SortedAxisSegmentList ( SUMA_SurfaceViewer *sv, SUMA_Axis *Ax, 606 SUMA_SORT_BOX_AXIS_OPTION opt); 607 void SUMA_WorldAxisStandard (SUMA_Axis* Ax, SUMA_SurfaceViewer *sv); 608 SUMA_Boolean SUMA_AxisText(SUMA_AxisSegmentInfo *ASIp, double *Ps); 609 SUMA_Boolean SUMA_DrawText(char *txt, float *Ps); 610 void SUMA_ReportDrawnROIDatumLength(SUMA_SurfaceObject *SO, SUMA_ROI_DATUM *ROId, FILE *out, SUMA_WIDGET_INDEX_DRAWROI_WHATDIST option); 611 SUMA_SurfaceObject *SUMA_HJS_Surface(int ipart); 612 SUMA_SurfaceObject *SUMA_head_01_surface(void); 613 SUMA_SurfaceObject *SUMA_cube_surface(float sz, float *cen); 614 SUMA_SurfaceObject *SUMA_box_surface(float *sz3, float *cen, 615 float *col, int n_obj); 616 SUMA_SurfaceObject *SUMA_ball_surface(float *hd3, float *cen, float *col, 617 int n_obj); 618 NI_group *SUMA_SDO2niSDO(SUMA_SegmentDO *SDO); 619 SUMA_SegmentDO *SUMA_niSDO2SDO(NI_group *ngr); 620 SUMA_Boolean SUMA_isSODimInitialized(SUMA_SurfaceObject *SO) ; 621 SUMA_Boolean SUMA_nixSODim(SUMA_SurfaceObject *SO); 622 SUMA_Boolean SUMA_SetSODims(SUMA_SurfaceObject *SO); 623 SUMA_Boolean SUMA_MinMaxNodesInROI (SUMA_DRAWN_ROI *D_ROI, 624 int MinMax[]); 625 SUMA_Boolean SUMA_TextBoxSize(char *txt, int *w, int *h, int *nl, void *font); 626 byte *SUMA_WordOverlapMask(int Nwidth, int Nheight, int N_n, char **names, 627 void *fontGL, float *xyz, float maxoverlap, 628 byte *usethesewords); 629 int SUMA_WordBoxSize (char **txt, int N_txt, int *w, void *font); 630 int SUMA_glutBitmapFontHeight(void *font) ; 631 int *SUMA_NIDOtext_LineWidth(char *string, void *font, int *N_lines); 632 633 static void *FontPointerList[] = 634 { GLUT_BITMAP_8_BY_13, GLUT_BITMAP_9_BY_15, 635 GLUT_BITMAP_TIMES_ROMAN_10 , GLUT_BITMAP_TIMES_ROMAN_24, 636 GLUT_BITMAP_HELVETICA_10, GLUT_BITMAP_HELVETICA_12, 637 GLUT_BITMAP_HELVETICA_18, NULL }; 638 639 void * SUMA_glutBitmapFont(char *fontname); 640 char * SUMA_glutBitmapFontName(void * font); 641 char *SUMA_CoordTypeName (SUMA_DO_CoordType tp); 642 SUMA_DO_CoordType SUMA_CoordType (char *atr); 643 int SUMA_NodeRange_DrawnROI (SUMA_DRAWN_ROI *ROI, int *min, int *max); 644 int SUMA_NIDO_TexEnvMode(NI_element *nel, int def); 645 const GLubyte *SUMA_StippleMask(int transp); 646 const GLubyte *SUMA_StippleMask_rand(int transp); 647 const GLubyte *SUMA_StippleMask_shift(int transp, int btp); 648 GLushort SUMA_StippleLineMask_rand(int transp, int chunkwidth, int rseed); 649 void SUMA_StippleMaskResest(void); 650 SUMA_GL_STEL *SUMA_FindStateTrackEl(char *state, DList *stu); 651 void SUMA_FreeStateTrackEl(void *stel); 652 SUMA_GL_STEL *SUMA_NewStateTrackEl(char *state, char *progenitor); 653 int SUMA_SetTrackElVal(SUMA_GL_STEL *stel, void *val, char *act); 654 char *SUMA_EnumToGLstate(int glpar); 655 int SUMA_GLstateToEnum(char *state); 656 int SUMA_GLStateTrack(char *action, DList **stu, char *progenitor, 657 char *state, void *val); 658 void SUMA_free_colid_offset_datum (void *vv); 659 GLubyte *SUMA_New_colid(SUMA_SurfaceViewer *sv, 660 char *Label, char *idcode_str, char *primitive, char *variant, 661 char *reference_idcode_str, SUMA_DO_Types ref_do_type, 662 int N_n); 663 GLubyte *SUMA_DO_get_pick_colid(SUMA_ALL_DO *DO, char *idcode_str, 664 char *primitive, char *variant, 665 char *ref_idcode_str,SUMA_DO_Types ref_do_type, 666 SUMA_SurfaceViewer *sv); 667 NI_element *SUMA_GDSET_Edge_Bundle(SUMA_DSET *gset, SUMA_GRAPH_SAUX *GSaux, 668 int edge_id, int alt_edge_id); 669 NI_group *SUMA_MDO_to_NIMDO(SUMA_MaskDO *mdo, NI_group *cont); 670 SUMA_MaskDO *SUMA_NIMDO_to_MDO(NI_group *); 671 672 /*! Following DO_ macros are for setting states up for colorid picking 673 and restoring states at exit. 674 Note that some of these are overkill. They were added in a attempt 675 to remedy what looked like antialiasing in the rendered image. 676 It turned out the problem was caused by the visual not having an 677 alpha size of 0. */ 678 #define DO_PICK_VARS int pgllst=0, pgllsm=0, pgllight=0, pglblend=0, \ 679 pgldith=0, pgltex2=0, pgltex3=0 680 681 #define DO_PICK_RESTORE { \ 682 if (pgllst) glEnable(GL_LINE_STIPPLE); \ 683 if (pgllsm) glEnable(GL_LINE_SMOOTH); \ 684 if (pgllight) glEnable(GL_LIGHTING); \ 685 if (pglblend) glEnable(GL_BLEND); \ 686 if (pgldith) glEnable(GL_DITHER); \ 687 if (pgltex2) glEnable(GL_TEXTURE_2D); \ 688 if (pgltex3) glEnable(GL_TEXTURE_3D); \ 689 } 690 691 #define DO_PICK_DISABLES { \ 692 if ((pgllst = glIsEnabled(GL_LINE_STIPPLE))) glDisable(GL_LINE_STIPPLE); \ 693 if ((pgllsm = glIsEnabled(GL_LINE_SMOOTH)) ) glDisable(GL_LINE_SMOOTH); \ 694 if ((pgllight = glIsEnabled(GL_LIGHTING))) glDisable(GL_LIGHTING); \ 695 if ((pglblend = glIsEnabled(GL_BLEND))) glDisable(GL_BLEND); \ 696 if ((pgldith = glIsEnabled(GL_DITHER))) glDisable(GL_DITHER); \ 697 if ((pgltex2 = glIsEnabled(GL_TEXTURE_2D))) glDisable(GL_TEXTURE_2D); \ 698 if ((pgltex3 = glIsEnabled(GL_TEXTURE_3D))) glDisable(GL_TEXTURE_3D); \ 699 } 700 701 702 /*! 703 NO Guarantee that certain nodes might 704 get counted twice ! 705 */ 706 #define SUMA_ROI_CRUDE_COUNT_NODES(m_D_ROI, m_N_max) \ 707 { \ 708 DListElmt *m_NextElm = NULL; \ 709 SUMA_ROI_DATUM *m_ROId = NULL; \ 710 int m_LastOfPreSeg = -1; \ 711 \ 712 m_N_max = 0;\ 713 m_NextElm = NULL;\ 714 m_LastOfPreSeg = -1; \ 715 do { \ 716 if (!m_NextElm) m_NextElm = dlist_head(m_D_ROI->ROIstrokelist); \ 717 else m_NextElm = dlist_next(m_NextElm); \ 718 m_ROId = (SUMA_ROI_DATUM *)m_NextElm->data; \ 719 if (m_ROId->nPath[0] == m_LastOfPreSeg) { \ 720 m_N_max += m_ROId->N_n - 1; \ 721 } else { \ 722 m_N_max += m_ROId->N_n; \ 723 } \ 724 m_LastOfPreSeg = m_ROId->nPath[m_ROId->N_n - 1]; \ 725 }while (m_NextElm != dlist_tail(m_D_ROI->ROIstrokelist)); \ 726 \ 727 } 728 729 #endif 730 731 732