1 /* $Id: petscdraw.h,v 1.74 2000/06/07 17:42:13 balay Exp bsmith $ */ 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 PETSC_DRAW_COOKIE PETSC_COOKIE+6 10 11 /* types of draw contexts */ 12 #define PETSC_DRAW_X "x" 13 #define PETSC_DRAW_NULL "null" 14 #define PETSC_DRAW_PS "ps" 15 #define PETSC_DRAW_WIN32 "win32" 16 17 typedef struct _p_PetscDraw* PetscDraw; 18 19 typedef char* PetscDrawType; 20 extern PetscFList PetscDrawList; 21 EXTERN int PetscDrawRegisterAll(char *); 22 EXTERN int PetscDrawRegisterDestroy(void); 23 24 EXTERN int PetscDrawRegister(char*,char*,char*,int(*)(PetscDraw)); 25 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 26 #define PetscDrawRegisterDynamic(a,b,c,d) PetscDrawRegister(a,b,c,0) 27 #else 28 #define PetscDrawRegisterDynamic(a,b,c,d) PetscDrawRegister(a,b,c,d) 29 #endif 30 EXTERN int PetscDrawGetType(PetscDraw,PetscDrawType*); 31 EXTERN int PetscDrawSetType(PetscDraw,PetscDrawType); 32 EXTERN int PetscDrawCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscDraw*); 33 EXTERN int PetscDrawSetFromOptions(PetscDraw); 34 35 /* 36 Number of basic colors in the draw routines, the others are used 37 for a uniform colormap. 38 */ 39 #define PETSC_DRAW_BASIC_COLORS 33 40 41 #define PETSC_DRAW_ROTATE -1 /* will rotate through the colors, start with 2 */ 42 #define PETSC_DRAW_WHITE 0 43 #define PETSC_DRAW_BLACK 1 44 #define PETSC_DRAW_RED 2 45 #define PETSC_DRAW_GREEN 3 46 #define PETSC_DRAW_CYAN 4 47 #define PETSC_DRAW_BLUE 5 48 #define PETSC_DRAW_MAGENTA 6 49 #define PETSC_DRAW_AQUAMARINE 7 50 #define PETSC_DRAW_FORESTGREEN 8 51 #define PETSC_DRAW_ORANGE 9 52 #define PETSC_DRAW_VIOLET 10 53 #define PETSC_DRAW_BROWN 11 54 #define PETSC_DRAW_PINK 12 55 #define PETSC_DRAW_CORAL 13 56 #define PETSC_DRAW_GRAY 14 57 #define PETSC_DRAW_YELLOW 15 58 59 #define PETSC_DRAW_GOLD 16 60 #define PETSC_DRAW_LIGHTPINK 17 61 #define PETSC_DRAW_MEDIUMTURQUOISE 18 62 #define PETSC_DRAW_KHAKI 19 63 #define PETSC_DRAW_DIMGRAY 20 64 #define PETSC_DRAW_YELLOWGREEN 21 65 #define PETSC_DRAW_SKYBLUE 22 66 #define PETSC_DRAW_DARKGREEN 23 67 #define PETSC_DRAW_NAVYBLUE 24 68 #define PETSC_DRAW_SANDYBROWN 25 69 #define PETSC_DRAW_CADETBLUE 26 70 #define PETSC_DRAW_POWDERBLUE 27 71 #define PETSC_DRAW_DEEPPINK 28 72 #define PETSC_DRAW_THISTLE 29 73 #define PETSC_DRAW_LIMEGREEN 30 74 #define PETSC_DRAW_LAVENDERBLUSH 31 75 #define PETSC_DRAW_PLUM 32 76 77 EXTERN int PetscDrawOpenX(MPI_Comm,const char[],const char[],int,int,int,int,PetscDraw*); 78 EXTERN int PetscDrawOpenPS(MPI_Comm,char *,PetscDraw *); 79 #define PETSC_DRAW_FULL_SIZE -3 80 #define PETSC_DRAW_HALF_SIZE -4 81 #define PETSC_DRAW_THIRD_SIZE -5 82 #define PETSC_DRAW_QUARTER_SIZE -6 83 84 EXTERN int PetscDrawOpenNull(MPI_Comm,PetscDraw *); 85 EXTERN int PetscDrawDestroy(PetscDraw); 86 EXTERN int PetscDrawIsNull(PetscDraw,PetscTruth*); 87 88 EXTERN int PetscDrawGetPopup(PetscDraw,PetscDraw*); 89 EXTERN int PetscDrawCheckResizedWindow(PetscDraw); 90 EXTERN int PetscDrawResizeWindow(PetscDraw,int,int); 91 92 EXTERN int PetscDrawScalePopup(PetscDraw,double min,double max); 93 94 EXTERN int PetscDrawLine(PetscDraw,double,double,double,double,int); 95 EXTERN int PetscDrawLineSetWidth(PetscDraw,double); 96 EXTERN int PetscDrawLineGetWidth(PetscDraw,double*); 97 98 EXTERN int PetscDrawPoint(PetscDraw,double,double,int); 99 EXTERN int PetscDrawPointSetSize(PetscDraw,double); 100 101 EXTERN int PetscDrawRectangle(PetscDraw,double,double,double,double,int,int,int,int); 102 EXTERN int PetscDrawTriangle(PetscDraw,double,double,double,double,double,double,int,int,int); 103 EXTERN int PetscDrawTensorContourPatch(PetscDraw,int,int,double*,double*,double,double,Scalar*); 104 EXTERN int PetscDrawTensorContour(PetscDraw,int,int,const double[],const double[],Scalar *); 105 106 EXTERN int PetscDrawString(PetscDraw,double,double,int,char*); 107 EXTERN int PetscDrawStringVertical(PetscDraw,double,double,int,char*); 108 EXTERN int PetscDrawStringSetSize(PetscDraw,double,double); 109 EXTERN int PetscDrawStringGetSize(PetscDraw,double*,double*); 110 111 EXTERN int PetscDrawSetViewPort(PetscDraw,double,double,double,double); 112 EXTERN int PetscDrawSplitViewPort(PetscDraw); 113 114 EXTERN int PetscDrawSetCoordinates(PetscDraw,double,double,double,double); 115 EXTERN int PetscDrawGetCoordinates(PetscDraw,double*,double*,double*,double*); 116 117 EXTERN int PetscDrawSetTitle(PetscDraw,char *); 118 EXTERN int PetscDrawAppendTitle(PetscDraw,char *); 119 EXTERN int PetscDrawGetTitle(PetscDraw,char **); 120 121 EXTERN int PetscDrawSetPause(PetscDraw,int); 122 EXTERN int PetscDrawGetPause(PetscDraw,int*); 123 EXTERN int PetscDrawPause(PetscDraw); 124 EXTERN int PetscDrawSetDoubleBuffer(PetscDraw); 125 EXTERN int PetscDrawFlush(PetscDraw); 126 EXTERN int PetscDrawSynchronizedFlush(PetscDraw); 127 EXTERN int PetscDrawClear(PetscDraw); 128 EXTERN int PetscDrawSynchronizedClear(PetscDraw); 129 EXTERN int PetscDrawBOP(PetscDraw); 130 EXTERN int PetscDrawEOP(PetscDraw); 131 132 EXTERN int PetscDrawGetSingleton(PetscDraw,PetscDraw*); 133 EXTERN int PetscDrawRestoreSingleton(PetscDraw,PetscDraw*); 134 135 typedef enum {BUTTON_NONE,BUTTON_LEFT,BUTTON_CENTER,BUTTON_RIGHT } PetscDrawButton; 136 EXTERN int PetscDrawGetMouseButton(PetscDraw,PetscDrawButton *,double*,double *,double *,double *); 137 EXTERN int PetscDrawSynchronizedGetMouseButton(PetscDraw,PetscDrawButton *,double*,double *,double *,double *); 138 139 EXTERN int PetscDrawZoom(PetscDraw,int (*)(PetscDraw,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 PetscDraw draw; 146 } PetscDrawViewPorts; 147 EXTERN int PetscDrawViewPortsCreate(PetscDraw,int,PetscDrawViewPorts**); 148 EXTERN int PetscDrawViewPortsDestroy(PetscDrawViewPorts*); 149 EXTERN int PetscDrawViewPortsSet(PetscDrawViewPorts*,int); 150 151 /* 152 Routines for drawing X-Y axises in a PetscDraw object 153 */ 154 typedef struct _p_DrawAxis* PetscDrawAxis; 155 #define DRAWAXIS_COOKIE PETSC_COOKIE+16 156 EXTERN int PetscDrawAxisCreate(PetscDraw,PetscDrawAxis *); 157 EXTERN int PetscDrawAxisDestroy(PetscDrawAxis); 158 EXTERN int PetscDrawAxisDraw(PetscDrawAxis); 159 EXTERN int PetscDrawAxisSetLimits(PetscDrawAxis,double,double,double,double); 160 EXTERN int PetscDrawAxisSetColors(PetscDrawAxis,int,int,int); 161 EXTERN int PetscDrawAxisSetLabels(PetscDrawAxis,char*,char*,char*); 162 163 /* 164 Routines to draw line curves in X-Y space 165 */ 166 typedef struct _p_DrawLG* PetscDrawLG; 167 #define DRAWLG_COOKIE PETSC_COOKIE+7 168 EXTERN int PetscDrawLGCreate(PetscDraw,int,PetscDrawLG *); 169 EXTERN int PetscDrawLGDestroy(PetscDrawLG); 170 EXTERN int PetscDrawLGAddPoint(PetscDrawLG,double*,double*); 171 EXTERN int PetscDrawLGAddPoints(PetscDrawLG,int,double**,double**); 172 EXTERN int PetscDrawLGDraw(PetscDrawLG); 173 EXTERN int PetscDrawLGReset(PetscDrawLG); 174 EXTERN int PetscDrawLGSetDimension(PetscDrawLG,int); 175 EXTERN int PetscDrawLGGetAxis(PetscDrawLG,PetscDrawAxis *); 176 EXTERN int PetscDrawLGGetDraw(PetscDrawLG,PetscDraw *); 177 EXTERN int PetscDrawLGIndicateDataPoints(PetscDrawLG); 178 EXTERN int PetscDrawLGSetLimits(PetscDrawLG,double,double,double,double); 179 180 /* 181 Routines to draw scatter plots in complex space 182 */ 183 typedef struct _p_DrawSP* PetscDrawSP; 184 #define DRAWSP_COOKIE PETSC_COOKIE+27 185 EXTERN int PetscDrawSPCreate(PetscDraw,int,PetscDrawSP *); 186 EXTERN int PetscDrawSPDestroy(PetscDrawSP); 187 EXTERN int PetscDrawSPAddPoint(PetscDrawSP,double*,double*); 188 EXTERN int PetscDrawSPAddPoints(PetscDrawSP,int,double**,double**); 189 EXTERN int PetscDrawSPDraw(PetscDrawSP); 190 EXTERN int PetscDrawSPReset(PetscDrawSP); 191 EXTERN int PetscDrawSPSetDimension(PetscDrawSP,int); 192 EXTERN int PetscDrawSPGetAxis(PetscDrawSP,PetscDrawAxis *); 193 EXTERN int PetscDrawSPGetDraw(PetscDrawSP,PetscDraw *); 194 EXTERN int PetscDrawSPSetLimits(PetscDrawSP,double,double,double,double); 195 196 /* 197 Routines to draw histograms 198 */ 199 typedef struct _p_DrawHG* PetscDrawHG; 200 #define DRAWHG_COOKIE PETSC_COOKIE+15 201 EXTERN int PetscDrawHGCreate(PetscDraw,int,PetscDrawHG *); 202 EXTERN int PetscDrawHGDestroy(PetscDrawHG); 203 EXTERN int PetscDrawHGAddValue(PetscDrawHG,double); 204 EXTERN int PetscDrawHGDraw(PetscDrawHG); 205 EXTERN int PetscDrawHGReset(PetscDrawHG); 206 EXTERN int PetscDrawHGGetAxis(PetscDrawHG,PetscDrawAxis *); 207 EXTERN int PetscDrawHGGetDraw(PetscDrawHG,PetscDraw *); 208 EXTERN int PetscDrawHGSetLimits(PetscDrawHG,double,double,int,int); 209 EXTERN int PetscDrawHGSetNumberBins(PetscDrawHG,int); 210 EXTERN int PetscDrawHGSetColor(PetscDrawHG,int); 211 212 /* 213 PetscViewer routines that allow you to access underlying PetscDraw objects 214 */ 215 EXTERN int PetscViewerDrawGetDraw(PetscViewer,int,PetscDraw*); 216 EXTERN int PetscViewerDrawGetDrawLG(PetscViewer,int,PetscDrawLG*); 217 EXTERN int PetscViewerDrawGetDrawAxis(PetscViewer,int,PetscDrawAxis*); 218 219 EXTERN int PetscDrawUtilitySetCmapHue(unsigned char *,unsigned char *,unsigned char *,int); 220 EXTERN int PetscDrawUtilitySetGamma(double); 221 222 /* Mesh management routines */ 223 typedef struct _p_DrawMesh* PetscDrawMesh; 224 int PetscDrawMeshCreate(PetscDrawMesh *, 225 double *,double *,double *, 226 int,int,int,int,int,int,int,int,int, 227 int,int,int,int,double *,int); 228 int PetscDrawMeshCreateSimple(PetscDrawMesh *,double *,double *,double *, 229 int,int,int,int,double *,int); 230 int PetscDrawMeshDestroy(PetscDrawMesh *); 231 232 233 234 235 #endif 236 237 238 239 240 241