1 /* $Id: petscdraw.h,v 1.73 2000/06/07 17:41:41 balay Exp balay $ */ 2 /* 3 Interface to the PETSc graphics (currently only support for X-windows 4 */ 5 #if !defined(__PETSCDRAW_H) 6 #define __PETSCDRAW_H 7 #include "petsc.h" 8 9 #define DRAW_COOKIE PETSC_COOKIE+6 10 11 /* types of draw contexts */ 12 #define DRAW_X "x" 13 #define DRAW_NULL "null" 14 #define DRAW_PS "ps" 15 #define DRAW_WIN32 "win32" 16 17 typedef struct _p_Draw* Draw; 18 19 typedef char* DrawType; 20 extern FList DrawList; 21 EXTERN int DrawRegisterAll(char *); 22 EXTERN int DrawRegisterDestroy(void); 23 24 EXTERN int DrawRegister(char*,char*,char*,int(*)(Draw)); 25 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 26 #define DrawRegisterDynamic(a,b,c,d) DrawRegister(a,b,c,0) 27 #else 28 #define DrawRegisterDynamic(a,b,c,d) DrawRegister(a,b,c,d) 29 #endif 30 EXTERN int DrawGetType(Draw,DrawType*); 31 EXTERN int DrawSetType(Draw,DrawType); 32 EXTERN int DrawCreate(MPI_Comm,const char[],const char[],int,int,int,int,Draw*); 33 EXTERN int DrawSetFromOptions(Draw); 34 35 /* 36 Number of basic colors in the draw routines, the others are used 37 for a uniform colormap. 38 */ 39 #define DRAW_BASIC_COLORS 33 40 41 #define DRAW_ROTATE -1 /* will rotate through the colors, start with 2 */ 42 #define DRAW_WHITE 0 43 #define DRAW_BLACK 1 44 #define DRAW_RED 2 45 #define DRAW_GREEN 3 46 #define DRAW_CYAN 4 47 #define DRAW_BLUE 5 48 #define DRAW_MAGENTA 6 49 #define DRAW_AQUAMARINE 7 50 #define DRAW_FORESTGREEN 8 51 #define DRAW_ORANGE 9 52 #define DRAW_VIOLET 10 53 #define DRAW_BROWN 11 54 #define DRAW_PINK 12 55 #define DRAW_CORAL 13 56 #define DRAW_GRAY 14 57 #define DRAW_YELLOW 15 58 59 #define DRAW_GOLD 16 60 #define DRAW_LIGHTPINK 17 61 #define DRAW_MEDIUMTURQUOISE 18 62 #define DRAW_KHAKI 19 63 #define DRAW_DIMGRAY 20 64 #define DRAW_YELLOWGREEN 21 65 #define DRAW_SKYBLUE 22 66 #define DRAW_DARKGREEN 23 67 #define DRAW_NAVYBLUE 24 68 #define DRAW_SANDYBROWN 25 69 #define DRAW_CADETBLUE 26 70 #define DRAW_POWDERBLUE 27 71 #define DRAW_DEEPPINK 28 72 #define DRAW_THISTLE 29 73 #define DRAW_LIMEGREEN 30 74 #define DRAW_LAVENDERBLUSH 31 75 #define DRAW_PLUM 32 76 77 EXTERN int DrawOpenX(MPI_Comm,const char[],const char[],int,int,int,int,Draw*); 78 EXTERN int DrawOpenPS(MPI_Comm,char *,Draw *); 79 #define DRAW_FULL_SIZE -3 80 #define DRAW_HALF_SIZE -4 81 #define DRAW_THIRD_SIZE -5 82 #define DRAW_QUARTER_SIZE -6 83 84 EXTERN int DrawOpenNull(MPI_Comm,Draw *); 85 EXTERN int DrawDestroy(Draw); 86 EXTERN int DrawIsNull(Draw,PetscTruth*); 87 88 EXTERN int DrawGetPopup(Draw,Draw*); 89 EXTERN int DrawCheckResizedWindow(Draw); 90 EXTERN int DrawResizeWindow(Draw,int,int); 91 92 EXTERN int DrawScalePopup(Draw,double min,double max); 93 94 EXTERN int DrawLine(Draw,double,double,double,double,int); 95 EXTERN int DrawLineSetWidth(Draw,double); 96 EXTERN int DrawLineGetWidth(Draw,double*); 97 98 EXTERN int DrawPoint(Draw,double,double,int); 99 EXTERN int DrawPointSetSize(Draw,double); 100 101 EXTERN int DrawRectangle(Draw,double,double,double,double,int,int,int,int); 102 EXTERN int DrawTriangle(Draw,double,double,double,double,double,double,int,int,int); 103 EXTERN int DrawTensorContourPatch(Draw,int,int,double*,double*,double,double,Scalar*); 104 EXTERN int DrawTensorContour(Draw,int,int,const double[],const double[],Scalar *); 105 106 EXTERN int DrawString(Draw,double,double,int,char*); 107 EXTERN int DrawStringVertical(Draw,double,double,int,char*); 108 EXTERN int DrawStringSetSize(Draw,double,double); 109 EXTERN int DrawStringGetSize(Draw,double*,double*); 110 111 EXTERN int DrawSetViewPort(Draw,double,double,double,double); 112 EXTERN int DrawSplitViewPort(Draw); 113 114 EXTERN int DrawSetCoordinates(Draw,double,double,double,double); 115 EXTERN int DrawGetCoordinates(Draw,double*,double*,double*,double*); 116 117 EXTERN int DrawSetTitle(Draw,char *); 118 EXTERN int DrawAppendTitle(Draw,char *); 119 EXTERN int DrawGetTitle(Draw,char **); 120 121 EXTERN int DrawSetPause(Draw,int); 122 EXTERN int DrawGetPause(Draw,int*); 123 EXTERN int DrawPause(Draw); 124 EXTERN int DrawSetDoubleBuffer(Draw); 125 EXTERN int DrawFlush(Draw); 126 EXTERN int DrawSynchronizedFlush(Draw); 127 EXTERN int DrawClear(Draw); 128 EXTERN int DrawSynchronizedClear(Draw); 129 EXTERN int DrawBOP(Draw); 130 EXTERN int DrawEOP(Draw); 131 132 EXTERN int DrawGetSingleton(Draw,Draw*); 133 EXTERN int DrawRestoreSingleton(Draw,Draw*); 134 135 typedef enum {BUTTON_NONE,BUTTON_LEFT,BUTTON_CENTER,BUTTON_RIGHT } DrawButton; 136 EXTERN int DrawGetMouseButton(Draw,DrawButton *,double*,double *,double *,double *); 137 EXTERN int DrawSynchronizedGetMouseButton(Draw,DrawButton *,double*,double *,double *,double *); 138 139 EXTERN int DrawZoom(Draw,int (*)(Draw,void *),void *); 140 141 /* Allows one to maintain a subset of viewports for a single window */ 142 typedef struct { 143 int nports; 144 double *xl,*xr,*yl,*yr; 145 Draw draw; 146 } DrawViewPorts; 147 EXTERN int DrawViewPortsCreate(Draw,int,DrawViewPorts**); 148 EXTERN int DrawViewPortsDestroy(DrawViewPorts*); 149 EXTERN int DrawViewPortsSet(DrawViewPorts*,int); 150 151 /* 152 Routines for drawing X-Y axises in a Draw object 153 */ 154 typedef struct _p_DrawAxis* DrawAxis; 155 #define DRAWAXIS_COOKIE PETSC_COOKIE+16 156 EXTERN int DrawAxisCreate(Draw,DrawAxis *); 157 EXTERN int DrawAxisDestroy(DrawAxis); 158 EXTERN int DrawAxisDraw(DrawAxis); 159 EXTERN int DrawAxisSetLimits(DrawAxis,double,double,double,double); 160 EXTERN int DrawAxisSetColors(DrawAxis,int,int,int); 161 EXTERN int DrawAxisSetLabels(DrawAxis,char*,char*,char*); 162 163 /* 164 Routines to draw line curves in X-Y space 165 */ 166 typedef struct _p_DrawLG* DrawLG; 167 #define DRAWLG_COOKIE PETSC_COOKIE+7 168 EXTERN int DrawLGCreate(Draw,int,DrawLG *); 169 EXTERN int DrawLGDestroy(DrawLG); 170 EXTERN int DrawLGAddPoint(DrawLG,double*,double*); 171 EXTERN int DrawLGAddPoints(DrawLG,int,double**,double**); 172 EXTERN int DrawLGDraw(DrawLG); 173 EXTERN int DrawLGReset(DrawLG); 174 EXTERN int DrawLGSetDimension(DrawLG,int); 175 EXTERN int DrawLGGetAxis(DrawLG,DrawAxis *); 176 EXTERN int DrawLGGetDraw(DrawLG,Draw *); 177 EXTERN int DrawLGIndicateDataPoints(DrawLG); 178 EXTERN int DrawLGSetLimits(DrawLG,double,double,double,double); 179 180 /* 181 Routines to draw scatter plots in complex space 182 */ 183 typedef struct _p_DrawSP* DrawSP; 184 #define DRAWSP_COOKIE PETSC_COOKIE+27 185 EXTERN int DrawSPCreate(Draw,int,DrawSP *); 186 EXTERN int DrawSPDestroy(DrawSP); 187 EXTERN int DrawSPAddPoint(DrawSP,double*,double*); 188 EXTERN int DrawSPAddPoints(DrawSP,int,double**,double**); 189 EXTERN int DrawSPDraw(DrawSP); 190 EXTERN int DrawSPReset(DrawSP); 191 EXTERN int DrawSPSetDimension(DrawSP,int); 192 EXTERN int DrawSPGetAxis(DrawSP,DrawAxis *); 193 EXTERN int DrawSPGetDraw(DrawSP,Draw *); 194 EXTERN int DrawSPSetLimits(DrawSP,double,double,double,double); 195 196 /* 197 Routines to draw histograms 198 */ 199 typedef struct _p_DrawHG* DrawHG; 200 #define DRAWHG_COOKIE PETSC_COOKIE+15 201 EXTERN int DrawHGCreate(Draw,int,DrawHG *); 202 EXTERN int DrawHGDestroy(DrawHG); 203 EXTERN int DrawHGAddValue(DrawHG,double); 204 EXTERN int DrawHGDraw(DrawHG); 205 EXTERN int DrawHGReset(DrawHG); 206 EXTERN int DrawHGGetAxis(DrawHG,DrawAxis *); 207 EXTERN int DrawHGGetDraw(DrawHG,Draw *); 208 EXTERN int DrawHGSetLimits(DrawHG,double,double,int,int); 209 EXTERN int DrawHGSetNumberBins(DrawHG,int); 210 EXTERN int DrawHGSetColor(DrawHG,int); 211 212 /* 213 Viewer routines that allow you to access underlying Draw objects 214 */ 215 EXTERN int ViewerDrawGetDraw(Viewer,int,Draw*); 216 EXTERN int ViewerDrawGetDrawLG(Viewer,int,DrawLG*); 217 EXTERN int ViewerDrawGetDrawAxis(Viewer,int,DrawAxis*); 218 219 EXTERN int DrawUtilitySetCmapHue(unsigned char *,unsigned char *,unsigned char *,int); 220 EXTERN int DrawUtilitySetGamma(double); 221 222 /* Mesh management routines */ 223 typedef struct _p_DrawMesh* DrawMesh; 224 int DrawMeshCreate(DrawMesh *, 225 double *,double *,double *, 226 int,int,int,int,int,int,int,int,int, 227 int,int,int,int,double *,int); 228 int DrawMeshCreateSimple(DrawMesh *,double *,double *,double *, 229 int,int,int,int,double *,int); 230 int DrawMeshDestroy(DrawMesh *); 231 232 233 234 235 #endif 236 237 238 239 240 241