1 #ifndef SUMA_COLOR_INCLUDED
2 #define SUMA_COLOR_INCLUDED
3 
4 #define SUMA_DUNNO_GRAY 0.54321
5 /* Bitmasks for per_sv_extra */
6 #define PSV_NOTHING 0
7 #define PSV_BIND_VOL    1
8 
9 byte SUMA_Val_Meets_Thresh(float val, double *ThreshRange,
10                            SUMA_THRESH_MODE ThrMode);
11 int SUMA_a_good_col(char *name, int i, float *acol);
12 SUMA_COLOR_MAP *SUMA_LabelsKeys2Cmap (char **str, int num, int *keys,
13                                       float **cols, int nc, char *Name);
14 SUMA_COLOR_MAP * SUMA_MakeColorMap (float **Fiducials, int Nfid, byte rgba,
15                                     int Ncols, SUMA_Boolean SkipLast,
16                                     char *Name);
17 void SUMA_Free_ColorMap (SUMA_COLOR_MAP* SM);
18 SUMA_COLOR_MAP* SUMA_DuplicateColorMap (SUMA_COLOR_MAP *cin, char *newname);
19 SUMA_SCALE_TO_MAP_OPT * SUMA_ScaleToMapOptInit(void);
20 void SUMA_Free_ColorScaledVect (SUMA_COLOR_SCALED_VECT * S);
21 SUMA_COLOR_SCALED_VECT * SUMA_Create_ColorScaledVect(int N_Node, int mode);
22 SUMA_Boolean SUMA_ScaleToMap (float *V, int N_V, float Vmin, float Vmax,
23                               SUMA_COLOR_MAP *ColMap, SUMA_SCALE_TO_MAP_OPT *Opt,
24                               SUMA_COLOR_SCALED_VECT * SV);
25 SUMA_COLOR_MAP * SUMA_MakeStandardMap (char *mapname);
26 SUMA_COLOR_MAP *SUMA_FindNamedColMap(char *Name);
27 SUMA_COLOR_MAP *SUMA_FindCodedColMap(int imap);
28 float * SUMA_PercRange (float *V, float *Vsort, int N_V,
29                         float *PercRange, float *PercRangeVal, int *iPercRange);
30 double * SUMA_dPercRange ( double *V, double *Vsort, int N_V,
31                            double *PercRange, double *PercRangeVal,
32                            int *iPercRangeVal);
33 float * SUMA_PercRangeVol (float *V, byte *mask, int N_V,
34                            float *PercRange, int N_PercRange,
35                            float *PercRangeVal, int *iPercRangeVal,
36                            int exzero, int *N_Vmsort);
37 float *SUMA_PercFullRangeVol(float *V, int N_V, int p10, int exzero, int *Nvals);
38 float SUMA_OverlayPercentile (SUMA_OVERLAYS *Sover, char vec, float perc);
39 SUMA_COLOR_MAP* SUMA_MakeColorMap_v2 ( float **Fiducials, int Nfid, byte rgba,
40                                        int *Nint, SUMA_Boolean SkipLast,
41                                        char *Name);
42 SUMA_OVERLAYS * SUMA_CreateOverlayPointer (const char *Name, SUMA_DSET *dset,
43                                        char *owner_id, SUMA_OVERLAYS *Recycle);
44 SUMA_Boolean SUMA_FreeOverlayPointerRecyclables (SUMA_OVERLAYS * Sover);
45 void SUMA_KillOverlayContours(SUMA_OVERLAYS * Sover);
46 SUMA_Boolean SUMA_FreeOverlayPointer (SUMA_OVERLAYS * Sover);
47 SUMA_Boolean SUMA_Overlays_2_GLCOLAR4(SUMA_ALL_DO *ADO,
48                                     SUMA_SurfaceViewer *sv, GLfloat *glcolar);
49 SUMA_Boolean SUMA_Overlays_2_GLCOLAR4_SO(SUMA_SurfaceObject *SO,
50                                  SUMA_SurfaceViewer *SV, GLfloat *glcolar);
51 SUMA_OVERLAYS * SUMA_Fetch_OverlayPointerByDset(SUMA_ALL_DO *ado,
52                                            SUMA_DSET *dset, int * OverInd);
53 SUMA_OVERLAYS * SUMA_Fetch_OverlayPointerByDset_arr (SUMA_OVERLAYS **Overlays,
54                               int N_Overlays, SUMA_DSET *dset, int * OverInd);
55 SUMA_OVERLAYS * SUMA_Fetch_OverlayPointer (SUMA_ALL_DO *ado,
56                                            const char * Name, int * OverInd);
57 SUMA_OVERLAYS * SUMA_Fetch_OverlayPointer_arr (SUMA_OVERLAYS **Overlays,
58                               int N_Overlays, const char * Name, int * OverInd);
59 SUMA_Boolean SUMA_Show_ColorOverlayPlanes (SUMA_OVERLAYS **Overlays,
60                               int N_Overlays, int detail);
61 char *SUMA_ColorOverlayPlane_Info (SUMA_OVERLAYS **Overlays, int N_Overlays,
62                               int detail);
63 SUMA_Boolean SUMA_MixOverlays (SUMA_OVERLAYS ** Overlays, int N_Overlays,
64                                int *ShowOvelays, int N_ShowOverlays,
65                                GLfloat *glcolar, int N_Node,
66                                SUMA_Boolean *isColored, SUMA_Boolean FILL);
67 SUMA_Boolean SUMA_MixColors (SUMA_SurfaceViewer *sv);
68 SUMA_Boolean SUMA_iRGB_to_OverlayPointer (SUMA_ALL_DO *ado,
69                                  char *Name, SUMA_OVERLAY_PLANE_DATA *sopd,
70                                  int *PlaneInd, SUMA_DO *dov, int N_dov,
71                                  DList *DsetList);
72 SUMA_Boolean SUMA_iRGB_to_SO_OverlayPointer (SUMA_SurfaceObject *SO, char *Name,
73                                           SUMA_OVERLAY_PLANE_DATA *sopd,
74                                           int *PlaneInd, SUMA_DO *dov,
75                                           int N_dov, DList *DsetList);
76 SUMA_Boolean SUMA_iRGB_to_TDO_OverlayPointer (SUMA_TractDO *TDO, char *Name,
77                                           SUMA_OVERLAY_PLANE_DATA *sopd,
78                                           int *PlaneInd, SUMA_DO *dov,
79                                           int N_dov, DList *DsetList);
80 SUMA_Boolean SUMA_CompactOverlaysOrder (SUMA_SurfaceObject *SO);
81 void SUMA_FreeOverlayListDatum (void *OLDv);
82 SUMA_Boolean SUMA_AddNewPlane (SUMA_ALL_DO *ado, SUMA_OVERLAYS *Overlay,
83                                SUMA_DO *dov, int N_dov, int DupFlag);
84 SUMA_Boolean SUMA_isOverlayOfDO (SUMA_ALL_DO *ado, SUMA_OVERLAYS *Plane);
85 SUMA_ALL_DO *SUMA_Overlay_OwnerADO(SUMA_OVERLAYS *Over);
86 int SUMA_GetSmallestForegroundOrder (DList *listop);
87 int SUMA_GetLargestBackroundOrder (DList *listop);
88 DList * SUMA_OverlaysToOrderedList (SUMA_ALL_DO *ado, int Opt);
89 SUMA_Boolean SUMA_ReleaseOverlay (SUMA_OVERLAYS * Overlays,
90                                   SUMA_INODE *Overlays_Inode);
91 SUMA_Boolean SUMA_ElementarizeOverlay(SUMA_OVERLAYS *iOver, float **ColEVec,
92                                       int **NodeEDef, int *N_NodeEDef,
93                                       float **LocalEOpacity);
94 char * SUMA_PlaneOrder_Info(SUMA_ALL_DO *ado);
95 void SUMA_Print_PlaneOrder (SUMA_ALL_DO *ado, FILE *Out);
96 SUMA_Boolean SUMA_ListOrderToPlaneOrder (DList *listop);
97 SUMA_Boolean SUMA_MovePlaneUp (SUMA_ALL_DO *ado, char *Name);
98 SUMA_Boolean SUMA_MovePlaneDown (SUMA_ALL_DO *ado, char *Name);
99 SUMA_OVERLAYS * SUMA_NewPlaneSearch(SUMA_ALL_DO *ado,
100                                     SUMA_OVERLAYS *Overlay);
101 SUMA_Boolean SUMA_LoadCIFTIDO (char *fname,
102                         SUMA_DO_CoordUnits coord_type, SUMA_DSET **odset,
103                         int OkAdopt, int SetupOverlay, int LaunchDisplay,
104                         int MakeOverlayCurrent, SUMA_OVERLAYS **used_over);
105 SUMA_CIFTI_DO * SUMA_CIFTI_DO_from_dset(SUMA_DSET *cdset);
106 char *SUMA_CIFTI_find_sub_domain(SUMA_CIFTI_DO *CO, SUMA_DO_Types ModelType,
107                                SUMA_SO_SIDE ModelSide,
108                                int Max_N_Data,
109                                int *k);
110 SUMA_CIFTI_DO *SUMA_CIFTI_find_matching_domain(SUMA_DSET *cdset,
111                                                SUMA_DO *dov, int N_dov);
112 SUMA_CIFTI_DO *SUMA_find_CIFTI_subdom_container(char *SD_id, int *ksubdom,
113       	             	      	       SUMA_DO *dov, int N_dov);
114 SUMA_ALL_DO *SUMA_CIFTI_subdom_ado(SUMA_CIFTI_DO *CO, int ksub);
115 int SUMA_CIFTI_SubDomFullOffset(SUMA_CIFTI_DO *CO, int ksub);
116 void SUMA_LoadDsetOntoSO (char *filename, void *data);
117 SUMA_Boolean SUMA_LoadDsetOntoSO_eng (char *filename, SUMA_SurfaceObject *SO,
118                               int SetupOverlay, int MakeOverlayCurrent,
119                               int LaunchDisplay,
120                               SUMA_OVERLAYS **used_over);
121 void SUMA_LoadColorPlaneFile (char *filename, void *data);
122 SUMA_Boolean SUMA_PreserveOverlaySettings(SUMA_OVERLAYS *colplanepre,
123                                    SUMA_OVERLAYS *NewColPlane);
124 SUMA_ASSEMBLE_LIST_STRUCT * SUMA_AssembleColorPlaneList (SUMA_ALL_DO *ado);
125 void SUMA_RefreshDsetList (SUMA_ALL_DO *ado);
126 SUMA_Boolean SUMA_FlushPlaneNotInUse (char *PlaneName, SUMA_ALL_DO *ado,
127                                       SUMA_DO *dov, int N_dov);
128 char *SUMA_CmapModeName (SUMA_COLORMAP_INTERP_MODE mapmode);
129 int SUMA_StandardMapIndex (char *Name);
130 char *SUMA_StandardMapName (int mapindex, int *N_col);
131 SUMA_Boolean SUMA_NeedsLinearizing(SUMA_COLOR_MAP *ColMap);
132 SUMA_COLOR_MAP *SUMA_Linearize_Color_Map (SUMA_COLOR_MAP* SM, int N_lin);
133 SUMA_COLOR_MAP *SUMA_Read_Color_Map_1D (char *Name);
134 SUMA_COLOR_MAP *SUMA_Read_Color_Map_NIML (char *Name);
135 SUMA_Boolean SUMA_Write_Color_Map_1D (SUMA_COLOR_MAP* SM, char *Name);
136 SUMA_Boolean SUMA_Write_Color_Map_NIML (SUMA_COLOR_MAP* SM, char *Name);
137 SUMA_Boolean SUMA_ScaleToMap_alaAFNI ( float *V, int N_V,
138                                        float range, SUMA_COLOR_MAP *ColMap,
139                                        SUMA_SCALE_TO_MAP_OPT *Opt,
140                                        SUMA_COLOR_SCALED_VECT * SV);
141 SUMA_Boolean SUMA_ScaleToMap_alaHASH ( float *V, int N_V,
142                                        SUMA_COLOR_MAP *ColMap,
143                                        SUMA_SCALE_TO_MAP_OPT *Opt,
144                                        SUMA_COLOR_SCALED_VECT * SV);
145 SUMA_Boolean SUMA_ScaleToMap_Interactive (   SUMA_OVERLAYS *Sover );
146 SUMA_Boolean SUMA_DSET_ClearOverlay_Vecs(SUMA_DSET *dset);
147 SUMA_Boolean SUMA_SetOverlay_Vecs(SUMA_OVERLAYS *Sover, char vec,
148                                   int colind, char *task, int perc);
149 SUMA_AFNI_COLORS * SUMA_Get_AFNI_Default_Color_Maps ();
150 SUMA_COLOR_MAP ** SUMA_Add_ColorMap (SUMA_COLOR_MAP *CM,
151                                      SUMA_COLOR_MAP **OldCMv, int *N_maps);
152 SUMA_RGB_NAME * SUMA_Add_Color (char *Name, float r, float g, float b, float a, SUMA_RGB_NAME *oCv, int *N_cols);
153 char *SUMA_ColorMapVec_Info (SUMA_COLOR_MAP **CMv, int N_maps, int detail);
154 char *SUMA_ColorVec_Info (SUMA_RGB_NAME *Cv, int N_cols);
155 void SUMA_Show_ColorMapVec (SUMA_COLOR_MAP **CMv, int N_maps, FILE *Out, int detail);
156 void SUMA_Show_ColorVec (SUMA_RGB_NAME *CMv, int N_maps, FILE *Out);
157 int SUMA_Find_ColorMap ( char *Name, SUMA_COLOR_MAP **CMv, int N_maps, int sgn);
158 int SUMA_Find_Color ( char *Name, SUMA_RGB_NAME *Cv, int N_cols);
159 SUMA_AFNI_COLORS *SUMA_DestroyAfniColors (SUMA_AFNI_COLORS *SAC);
160 SUMA_Boolean SUMA_Interpret_AFNIColor (char *Name, float RGB[3]);
161 int SUMA_AFNI_Extract_Colors ( char *fname, SUMA_AFNI_COLORS *SAC );
162 void SUMA_Flip_Color_Map (SUMA_COLOR_MAP *CM);
163 int SUMA_Rotate_Color_Map (SUMA_COLOR_MAP *CM, float frac);
164 int SUMA_ColorizePlane (SUMA_OVERLAYS *cp);
165 SUMA_Boolean SUMA_ContourateDsetOverlay(SUMA_OVERLAYS *cp,
166                                         SUMA_COLOR_SCALED_VECT * SV);
167 SUMA_AFNI_COLORS *SUMA_Build_Color_maps(void);
168 char *SUMA_ScaleToMapOpt_Info (SUMA_SCALE_TO_MAP_OPT *OptScl, int detail);
169 SUMA_Boolean SUMA_ShowScaleToMapOpt(SUMA_SCALE_TO_MAP_OPT *OptScl, FILE *Out,
170                                     int detail);
171 SUMA_Boolean SUMA_SetConvexityPlaneDefaults(SUMA_SurfaceObject *SO, DList *DsetList);
172 SUMA_COLOR_MAP *SUMA_CmapOfPlane (SUMA_OVERLAYS *Sover );
173 SUMA_SurfaceObject *SUMA_SO_of_ColPlane(SUMA_OVERLAYS *Sover);
174 SUMA_Boolean SUMA_SetSO_CoordBias(SUMA_SurfaceObject *SO, SUMA_OVERLAYS *ovr, float *NewBias, SUMA_WIDGET_INDEX_COORDBIAS BiasDim);
175 SUMA_Boolean SUMA_SetCoordBias(SUMA_OVERLAYS *ovr, float *NewBias, SUMA_WIDGET_INDEX_COORDBIAS BiasDim);
176 SUMA_Boolean SUMA_RemoveSO_CoordBias(SUMA_SurfaceObject *SO, SUMA_OVERLAYS *ovr);
177 SUMA_Boolean SUMA_RemoveCoordBias(SUMA_OVERLAYS *ovr);
178 SUMA_Boolean SUMA_TransferSO_CoordBias(SUMA_SurfaceObject *SO, SUMA_OVERLAYS
179                                     *ovr, SUMA_WIDGET_INDEX_COORDBIAS BiasDim);
180 SUMA_Boolean SUMA_AddVisX_CoordBias(SUMA_SurfaceObject *SO, SUMA_OVERLAYS *ovr,
181                                       SUMA_WIDGET_INDEX_COORDBIAS BiasDim,
182                                       float *BiasVect);
183 SUMA_Boolean SUMA_TransferCoordBias(SUMA_OVERLAYS *ovr,
184                                     SUMA_WIDGET_INDEX_COORDBIAS BiasDim);
185 SUMA_Boolean SUMA_NewSurfaceGeometry(SUMA_SurfaceObject *SO);
186 int SUMA_GetNodeOverInd (SUMA_OVERLAYS *Sover, int node);
187 int SUMA_GetSortedNodeOverInd (SUMA_OVERLAYS *Sover, int node);
188 SUMA_Boolean SUMA_isDsetColumn_inferred(SUMA_DSET *dset, int icol);
189 SUMA_Boolean SUMA_OKassign(SUMA_DSET *dset, SUMA_SurfaceObject *SO);
190 SUMA_COLOR_MAP * SUMA_pbardef_to_CM(char *cmd);
191 static char SUMA_COLOR_MAP_NAMES[][32]={
192          "rgybr20"   , "bgyr19"  , "gray02"  ,
193          "gray_i02"  , "gray20"  , "ngray20" ,
194          "bw20"      , "byr64"   , "bgyr64"  ,
195          "ygbrp256"  , "ygbrp128", "ygbrp64",
196          "\0" };
197 SUMA_Boolean SUMA_Selected_Node_Activate_Callbacks (
198       SUMA_ALL_DO *ado, SUMA_OVERLAYS *Sover,
199       SUMA_ENGINE_SOURCE Src, NI_group *ngr);
200 SUMA_DRAWN_ROI * SUMA_is_NamedColPlane_ForROI(char *PlaneName);
201 SUMA_Boolean  SUMA_isDsetRelated(SUMA_DSET *dset, SUMA_SurfaceObject *SO);
202 NI_group * SUMA_CreateCmapForLabelDset(SUMA_DSET *dset,
203                                        SUMA_COLOR_MAP *ThisCmap, int alaa) ;
204 SUMA_Boolean SUMA_IsCmapOKForLabelDset(SUMA_DSET *dset, SUMA_COLOR_MAP *cmap);
205 int SUMA_dset_to_Label_dset_cmap(SUMA_DSET *dset, SUMA_COLOR_MAP *cmap);
206 
207 
208 
209 
210 /* A fast version of SUMA_ColMapKeyIndex
211    key is set to the return value*/
212 #define SUMA_COLMAPKEYTOINDEX(key,chd,hdbuf) { \
213    HASH_FIND_INT(chd, &key, hdbuf); \
214    if (hdbuf) key = hdbuf->colmapindex; else  key = -1; \
215 }
216 
217 #define SUMA_COLMAP_INDEX_FROM_ID(id, ColMap, i0, HashMode) {\
218    if (HashMode) { \
219       i0 = id; SUMA_COLMAPKEYTOINDEX(i0, ColMap->chd, hdbuf); \
220       /* or the function call way, same but slower    \
221       i0 = SUMA_ColMapKeyIndex((int)id, ColMap); */  \
222    } else {\
223       i0 = (int)id;  /* handy if non int is passed */   \
224       if (i0 < 0) i0 = 0;  \
225       else if (i0 >= ColMap->N_M[0]) i0 = ColMap->N_M[0] -1;   \
226    }  \
227 }
228 
229 int SUMA_ColMapKeyIndex(int key, SUMA_COLOR_MAP *CM);
230 SUMA_Boolean SUMA_DestroyCmapHash(SUMA_COLOR_MAP *CM);
231 SUMA_Boolean SUMA_CreateCmapHash(SUMA_COLOR_MAP *CM);
232 NI_group *SUMA_CmapToNICmap(SUMA_COLOR_MAP *CM);
233 SUMA_COLOR_MAP *SUMA_NICmapToCmap(NI_group *ngr);
234 char *SUMA_RGB_to_hex(float *fv, char *here);
235 
236 #endif
237