1*b0a32e0cSBarry Smith /* $Id: petscdraw.h,v 1.74 2000/06/07 17:42:13 balay Exp bsmith $ */ 243e6b640SBarry Smith /* 33fdcb5c1SBarry Smith Interface to the PETSc graphics (currently only support for X-windows 443e6b640SBarry Smith */ 50a835dfdSSatish Balay #if !defined(__PETSCDRAW_H) 60a835dfdSSatish Balay #define __PETSCDRAW_H 7d6dfbf8fSBarry Smith #include "petsc.h" 843e6b640SBarry Smith 9*b0a32e0cSBarry Smith #define PETSC_DRAW_COOKIE PETSC_COOKIE+6 10f0479e8cSBarry Smith 11d6dfbf8fSBarry Smith /* types of draw contexts */ 12*b0a32e0cSBarry Smith #define PETSC_DRAW_X "x" 13*b0a32e0cSBarry Smith #define PETSC_DRAW_NULL "null" 14*b0a32e0cSBarry Smith #define PETSC_DRAW_PS "ps" 15*b0a32e0cSBarry Smith #define PETSC_DRAW_WIN32 "win32" 16d6dfbf8fSBarry Smith 17*b0a32e0cSBarry Smith typedef struct _p_PetscDraw* PetscDraw; 1843e6b640SBarry Smith 19*b0a32e0cSBarry Smith typedef char* PetscDrawType; 20*b0a32e0cSBarry Smith extern PetscFList PetscDrawList; 21*b0a32e0cSBarry Smith EXTERN int PetscDrawRegisterAll(char *); 22*b0a32e0cSBarry Smith EXTERN int PetscDrawRegisterDestroy(void); 237b2a1423SBarry Smith 24*b0a32e0cSBarry Smith EXTERN int PetscDrawRegister(char*,char*,char*,int(*)(PetscDraw)); 25aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 26*b0a32e0cSBarry Smith #define PetscDrawRegisterDynamic(a,b,c,d) PetscDrawRegister(a,b,c,0) 277b2a1423SBarry Smith #else 28*b0a32e0cSBarry Smith #define PetscDrawRegisterDynamic(a,b,c,d) PetscDrawRegister(a,b,c,d) 297b2a1423SBarry Smith #endif 30*b0a32e0cSBarry Smith EXTERN int PetscDrawGetType(PetscDraw,PetscDrawType*); 31*b0a32e0cSBarry Smith EXTERN int PetscDrawSetType(PetscDraw,PetscDrawType); 32*b0a32e0cSBarry Smith EXTERN int PetscDrawCreate(MPI_Comm,const char[],const char[],int,int,int,int,PetscDraw*); 33*b0a32e0cSBarry Smith EXTERN int PetscDrawSetFromOptions(PetscDraw); 347b2a1423SBarry Smith 350752156aSBarry Smith /* 360752156aSBarry Smith Number of basic colors in the draw routines, the others are used 370752156aSBarry Smith for a uniform colormap. 380752156aSBarry Smith */ 39*b0a32e0cSBarry Smith #define PETSC_DRAW_BASIC_COLORS 33 400752156aSBarry Smith 41*b0a32e0cSBarry Smith #define PETSC_DRAW_ROTATE -1 /* will rotate through the colors, start with 2 */ 42*b0a32e0cSBarry Smith #define PETSC_DRAW_WHITE 0 43*b0a32e0cSBarry Smith #define PETSC_DRAW_BLACK 1 44*b0a32e0cSBarry Smith #define PETSC_DRAW_RED 2 45*b0a32e0cSBarry Smith #define PETSC_DRAW_GREEN 3 46*b0a32e0cSBarry Smith #define PETSC_DRAW_CYAN 4 47*b0a32e0cSBarry Smith #define PETSC_DRAW_BLUE 5 48*b0a32e0cSBarry Smith #define PETSC_DRAW_MAGENTA 6 49*b0a32e0cSBarry Smith #define PETSC_DRAW_AQUAMARINE 7 50*b0a32e0cSBarry Smith #define PETSC_DRAW_FORESTGREEN 8 51*b0a32e0cSBarry Smith #define PETSC_DRAW_ORANGE 9 52*b0a32e0cSBarry Smith #define PETSC_DRAW_VIOLET 10 53*b0a32e0cSBarry Smith #define PETSC_DRAW_BROWN 11 54*b0a32e0cSBarry Smith #define PETSC_DRAW_PINK 12 55*b0a32e0cSBarry Smith #define PETSC_DRAW_CORAL 13 56*b0a32e0cSBarry Smith #define PETSC_DRAW_GRAY 14 57*b0a32e0cSBarry Smith #define PETSC_DRAW_YELLOW 15 5820563c6bSBarry Smith 59*b0a32e0cSBarry Smith #define PETSC_DRAW_GOLD 16 60*b0a32e0cSBarry Smith #define PETSC_DRAW_LIGHTPINK 17 61*b0a32e0cSBarry Smith #define PETSC_DRAW_MEDIUMTURQUOISE 18 62*b0a32e0cSBarry Smith #define PETSC_DRAW_KHAKI 19 63*b0a32e0cSBarry Smith #define PETSC_DRAW_DIMGRAY 20 64*b0a32e0cSBarry Smith #define PETSC_DRAW_YELLOWGREEN 21 65*b0a32e0cSBarry Smith #define PETSC_DRAW_SKYBLUE 22 66*b0a32e0cSBarry Smith #define PETSC_DRAW_DARKGREEN 23 67*b0a32e0cSBarry Smith #define PETSC_DRAW_NAVYBLUE 24 68*b0a32e0cSBarry Smith #define PETSC_DRAW_SANDYBROWN 25 69*b0a32e0cSBarry Smith #define PETSC_DRAW_CADETBLUE 26 70*b0a32e0cSBarry Smith #define PETSC_DRAW_POWDERBLUE 27 71*b0a32e0cSBarry Smith #define PETSC_DRAW_DEEPPINK 28 72*b0a32e0cSBarry Smith #define PETSC_DRAW_THISTLE 29 73*b0a32e0cSBarry Smith #define PETSC_DRAW_LIMEGREEN 30 74*b0a32e0cSBarry Smith #define PETSC_DRAW_LAVENDERBLUSH 31 75*b0a32e0cSBarry Smith #define PETSC_DRAW_PLUM 32 760752156aSBarry Smith 77*b0a32e0cSBarry Smith EXTERN int PetscDrawOpenX(MPI_Comm,const char[],const char[],int,int,int,int,PetscDraw*); 78*b0a32e0cSBarry Smith EXTERN int PetscDrawOpenPS(MPI_Comm,char *,PetscDraw *); 79*b0a32e0cSBarry Smith #define PETSC_DRAW_FULL_SIZE -3 80*b0a32e0cSBarry Smith #define PETSC_DRAW_HALF_SIZE -4 81*b0a32e0cSBarry Smith #define PETSC_DRAW_THIRD_SIZE -5 82*b0a32e0cSBarry Smith #define PETSC_DRAW_QUARTER_SIZE -6 83e340e5c6SBarry Smith 84*b0a32e0cSBarry Smith EXTERN int PetscDrawOpenNull(MPI_Comm,PetscDraw *); 85*b0a32e0cSBarry Smith EXTERN int PetscDrawDestroy(PetscDraw); 86*b0a32e0cSBarry Smith EXTERN int PetscDrawIsNull(PetscDraw,PetscTruth*); 8743e6b640SBarry Smith 88*b0a32e0cSBarry Smith EXTERN int PetscDrawGetPopup(PetscDraw,PetscDraw*); 89*b0a32e0cSBarry Smith EXTERN int PetscDrawCheckResizedWindow(PetscDraw); 90*b0a32e0cSBarry Smith EXTERN int PetscDrawResizeWindow(PetscDraw,int,int); 91d4fbbf0eSBarry Smith 92*b0a32e0cSBarry Smith EXTERN int PetscDrawScalePopup(PetscDraw,double min,double max); 935311e20fSBarry Smith 94*b0a32e0cSBarry Smith EXTERN int PetscDrawLine(PetscDraw,double,double,double,double,int); 95*b0a32e0cSBarry Smith EXTERN int PetscDrawLineSetWidth(PetscDraw,double); 96*b0a32e0cSBarry Smith EXTERN int PetscDrawLineGetWidth(PetscDraw,double*); 9743e6b640SBarry Smith 98*b0a32e0cSBarry Smith EXTERN int PetscDrawPoint(PetscDraw,double,double,int); 99*b0a32e0cSBarry Smith EXTERN int PetscDrawPointSetSize(PetscDraw,double); 1008ed539a5SBarry Smith 101*b0a32e0cSBarry Smith EXTERN int PetscDrawRectangle(PetscDraw,double,double,double,double,int,int,int,int); 102*b0a32e0cSBarry Smith EXTERN int PetscDrawTriangle(PetscDraw,double,double,double,double,double,double,int,int,int); 103*b0a32e0cSBarry Smith EXTERN int PetscDrawTensorContourPatch(PetscDraw,int,int,double*,double*,double,double,Scalar*); 104*b0a32e0cSBarry Smith EXTERN int PetscDrawTensorContour(PetscDraw,int,int,const double[],const double[],Scalar *); 1058ed539a5SBarry Smith 106*b0a32e0cSBarry Smith EXTERN int PetscDrawString(PetscDraw,double,double,int,char*); 107*b0a32e0cSBarry Smith EXTERN int PetscDrawStringVertical(PetscDraw,double,double,int,char*); 108*b0a32e0cSBarry Smith EXTERN int PetscDrawStringSetSize(PetscDraw,double,double); 109*b0a32e0cSBarry Smith EXTERN int PetscDrawStringGetSize(PetscDraw,double*,double*); 110d6dfbf8fSBarry Smith 111*b0a32e0cSBarry Smith EXTERN int PetscDrawSetViewPort(PetscDraw,double,double,double,double); 112*b0a32e0cSBarry Smith EXTERN int PetscDrawSplitViewPort(PetscDraw); 1132bdab257SBarry Smith 114*b0a32e0cSBarry Smith EXTERN int PetscDrawSetCoordinates(PetscDraw,double,double,double,double); 115*b0a32e0cSBarry Smith EXTERN int PetscDrawGetCoordinates(PetscDraw,double*,double*,double*,double*); 1169e25ed09SBarry Smith 117*b0a32e0cSBarry Smith EXTERN int PetscDrawSetTitle(PetscDraw,char *); 118*b0a32e0cSBarry Smith EXTERN int PetscDrawAppendTitle(PetscDraw,char *); 119*b0a32e0cSBarry Smith EXTERN int PetscDrawGetTitle(PetscDraw,char **); 120d4fbbf0eSBarry Smith 121*b0a32e0cSBarry Smith EXTERN int PetscDrawSetPause(PetscDraw,int); 122*b0a32e0cSBarry Smith EXTERN int PetscDrawGetPause(PetscDraw,int*); 123*b0a32e0cSBarry Smith EXTERN int PetscDrawPause(PetscDraw); 124*b0a32e0cSBarry Smith EXTERN int PetscDrawSetDoubleBuffer(PetscDraw); 125*b0a32e0cSBarry Smith EXTERN int PetscDrawFlush(PetscDraw); 126*b0a32e0cSBarry Smith EXTERN int PetscDrawSynchronizedFlush(PetscDraw); 127*b0a32e0cSBarry Smith EXTERN int PetscDrawClear(PetscDraw); 128*b0a32e0cSBarry Smith EXTERN int PetscDrawSynchronizedClear(PetscDraw); 129*b0a32e0cSBarry Smith EXTERN int PetscDrawBOP(PetscDraw); 130*b0a32e0cSBarry Smith EXTERN int PetscDrawEOP(PetscDraw); 131cddf8d76SBarry Smith 132*b0a32e0cSBarry Smith EXTERN int PetscDrawGetSingleton(PetscDraw,PetscDraw*); 133*b0a32e0cSBarry Smith EXTERN int PetscDrawRestoreSingleton(PetscDraw,PetscDraw*); 1346831982aSBarry Smith 135*b0a32e0cSBarry Smith typedef enum {BUTTON_NONE,BUTTON_LEFT,BUTTON_CENTER,BUTTON_RIGHT } PetscDrawButton; 136*b0a32e0cSBarry Smith EXTERN int PetscDrawGetMouseButton(PetscDraw,PetscDrawButton *,double*,double *,double *,double *); 137*b0a32e0cSBarry Smith EXTERN int PetscDrawSynchronizedGetMouseButton(PetscDraw,PetscDrawButton *,double*,double *,double *,double *); 13820563c6bSBarry Smith 139*b0a32e0cSBarry Smith EXTERN int PetscDrawZoom(PetscDraw,int (*)(PetscDraw,void *),void *); 1407c922b88SBarry Smith 1417c922b88SBarry Smith /* Allows one to maintain a subset of viewports for a single window */ 1427c922b88SBarry Smith typedef struct { 1437c922b88SBarry Smith int nports; 1447c922b88SBarry Smith double *xl,*xr,*yl,*yr; 145*b0a32e0cSBarry Smith PetscDraw draw; 146*b0a32e0cSBarry Smith } PetscDrawViewPorts; 147*b0a32e0cSBarry Smith EXTERN int PetscDrawViewPortsCreate(PetscDraw,int,PetscDrawViewPorts**); 148*b0a32e0cSBarry Smith EXTERN int PetscDrawViewPortsDestroy(PetscDrawViewPorts*); 149*b0a32e0cSBarry Smith EXTERN int PetscDrawViewPortsSet(PetscDrawViewPorts*,int); 1507c922b88SBarry Smith 151d69bd51fSBarry Smith /* 152*b0a32e0cSBarry Smith Routines for drawing X-Y axises in a PetscDraw object 153d69bd51fSBarry Smith */ 154*b0a32e0cSBarry Smith typedef struct _p_DrawAxis* PetscDrawAxis; 1556d4a8577SBarry Smith #define DRAWAXIS_COOKIE PETSC_COOKIE+16 156*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisCreate(PetscDraw,PetscDrawAxis *); 157*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisDestroy(PetscDrawAxis); 158*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisDraw(PetscDrawAxis); 159*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisSetLimits(PetscDrawAxis,double,double,double,double); 160*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisSetColors(PetscDrawAxis,int,int,int); 161*b0a32e0cSBarry Smith EXTERN int PetscDrawAxisSetLabels(PetscDrawAxis,char*,char*,char*); 16220563c6bSBarry Smith 163d69bd51fSBarry Smith /* 164d69bd51fSBarry Smith Routines to draw line curves in X-Y space 165d69bd51fSBarry Smith */ 166*b0a32e0cSBarry Smith typedef struct _p_DrawLG* PetscDrawLG; 1676d4a8577SBarry Smith #define DRAWLG_COOKIE PETSC_COOKIE+7 168*b0a32e0cSBarry Smith EXTERN int PetscDrawLGCreate(PetscDraw,int,PetscDrawLG *); 169*b0a32e0cSBarry Smith EXTERN int PetscDrawLGDestroy(PetscDrawLG); 170*b0a32e0cSBarry Smith EXTERN int PetscDrawLGAddPoint(PetscDrawLG,double*,double*); 171*b0a32e0cSBarry Smith EXTERN int PetscDrawLGAddPoints(PetscDrawLG,int,double**,double**); 172*b0a32e0cSBarry Smith EXTERN int PetscDrawLGDraw(PetscDrawLG); 173*b0a32e0cSBarry Smith EXTERN int PetscDrawLGReset(PetscDrawLG); 174*b0a32e0cSBarry Smith EXTERN int PetscDrawLGSetDimension(PetscDrawLG,int); 175*b0a32e0cSBarry Smith EXTERN int PetscDrawLGGetAxis(PetscDrawLG,PetscDrawAxis *); 176*b0a32e0cSBarry Smith EXTERN int PetscDrawLGGetDraw(PetscDrawLG,PetscDraw *); 177*b0a32e0cSBarry Smith EXTERN int PetscDrawLGIndicateDataPoints(PetscDrawLG); 178*b0a32e0cSBarry Smith EXTERN int PetscDrawLGSetLimits(PetscDrawLG,double,double,double,double); 17943e6b640SBarry Smith 180d69bd51fSBarry Smith /* 181d69bd51fSBarry Smith Routines to draw scatter plots in complex space 182d69bd51fSBarry Smith */ 183*b0a32e0cSBarry Smith typedef struct _p_DrawSP* PetscDrawSP; 184d4fbbf0eSBarry Smith #define DRAWSP_COOKIE PETSC_COOKIE+27 185*b0a32e0cSBarry Smith EXTERN int PetscDrawSPCreate(PetscDraw,int,PetscDrawSP *); 186*b0a32e0cSBarry Smith EXTERN int PetscDrawSPDestroy(PetscDrawSP); 187*b0a32e0cSBarry Smith EXTERN int PetscDrawSPAddPoint(PetscDrawSP,double*,double*); 188*b0a32e0cSBarry Smith EXTERN int PetscDrawSPAddPoints(PetscDrawSP,int,double**,double**); 189*b0a32e0cSBarry Smith EXTERN int PetscDrawSPDraw(PetscDrawSP); 190*b0a32e0cSBarry Smith EXTERN int PetscDrawSPReset(PetscDrawSP); 191*b0a32e0cSBarry Smith EXTERN int PetscDrawSPSetDimension(PetscDrawSP,int); 192*b0a32e0cSBarry Smith EXTERN int PetscDrawSPGetAxis(PetscDrawSP,PetscDrawAxis *); 193*b0a32e0cSBarry Smith EXTERN int PetscDrawSPGetDraw(PetscDrawSP,PetscDraw *); 194*b0a32e0cSBarry Smith EXTERN int PetscDrawSPSetLimits(PetscDrawSP,double,double,double,double); 195d4fbbf0eSBarry Smith 1963f1d51d7SBarry Smith /* 197ba6fa466SBarry Smith Routines to draw histograms 198ba6fa466SBarry Smith */ 199*b0a32e0cSBarry Smith typedef struct _p_DrawHG* PetscDrawHG; 200329f5518SBarry Smith #define DRAWHG_COOKIE PETSC_COOKIE+15 201*b0a32e0cSBarry Smith EXTERN int PetscDrawHGCreate(PetscDraw,int,PetscDrawHG *); 202*b0a32e0cSBarry Smith EXTERN int PetscDrawHGDestroy(PetscDrawHG); 203*b0a32e0cSBarry Smith EXTERN int PetscDrawHGAddValue(PetscDrawHG,double); 204*b0a32e0cSBarry Smith EXTERN int PetscDrawHGDraw(PetscDrawHG); 205*b0a32e0cSBarry Smith EXTERN int PetscDrawHGReset(PetscDrawHG); 206*b0a32e0cSBarry Smith EXTERN int PetscDrawHGGetAxis(PetscDrawHG,PetscDrawAxis *); 207*b0a32e0cSBarry Smith EXTERN int PetscDrawHGGetDraw(PetscDrawHG,PetscDraw *); 208*b0a32e0cSBarry Smith EXTERN int PetscDrawHGSetLimits(PetscDrawHG,double,double,int,int); 209*b0a32e0cSBarry Smith EXTERN int PetscDrawHGSetNumberBins(PetscDrawHG,int); 210*b0a32e0cSBarry Smith EXTERN int PetscDrawHGSetColor(PetscDrawHG,int); 211ba6fa466SBarry Smith 212ba6fa466SBarry Smith /* 213*b0a32e0cSBarry Smith PetscViewer routines that allow you to access underlying PetscDraw objects 2143f1d51d7SBarry Smith */ 215*b0a32e0cSBarry Smith EXTERN int PetscViewerDrawGetDraw(PetscViewer,int,PetscDraw*); 216*b0a32e0cSBarry Smith EXTERN int PetscViewerDrawGetDrawLG(PetscViewer,int,PetscDrawLG*); 217*b0a32e0cSBarry Smith EXTERN int PetscViewerDrawGetDrawAxis(PetscViewer,int,PetscDrawAxis*); 2185311e20fSBarry Smith 219*b0a32e0cSBarry Smith EXTERN int PetscDrawUtilitySetCmapHue(unsigned char *,unsigned char *,unsigned char *,int); 220*b0a32e0cSBarry Smith EXTERN int PetscDrawUtilitySetGamma(double); 2217c922b88SBarry Smith 222d557673fSLois Curfman McInnes /* Mesh management routines */ 223*b0a32e0cSBarry Smith typedef struct _p_DrawMesh* PetscDrawMesh; 224*b0a32e0cSBarry Smith int PetscDrawMeshCreate(PetscDrawMesh *, 225d557673fSLois Curfman McInnes double *,double *,double *, 226d557673fSLois Curfman McInnes int,int,int,int,int,int,int,int,int, 227d557673fSLois Curfman McInnes int,int,int,int,double *,int); 228*b0a32e0cSBarry Smith int PetscDrawMeshCreateSimple(PetscDrawMesh *,double *,double *,double *, 229d557673fSLois Curfman McInnes int,int,int,int,double *,int); 230*b0a32e0cSBarry Smith int PetscDrawMeshDestroy(PetscDrawMesh *); 231d557673fSLois Curfman McInnes 232d557673fSLois Curfman McInnes 233d557673fSLois Curfman McInnes 234d557673fSLois Curfman McInnes 23543e6b640SBarry Smith #endif 2363fdcb5c1SBarry Smith 2373fdcb5c1SBarry Smith 2383fdcb5c1SBarry Smith 2393fdcb5c1SBarry Smith 2407b2a1423SBarry Smith 241