15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 45c6c1daeSBarry Smith */ 5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith /*@C 8811af0c4SBarry Smith PetscDrawIndicatorFunction - Draws an indicator function (where a relationship is true) on a `PetscDraw` 95c6c1daeSBarry Smith 105c6c1daeSBarry Smith Not collective 115c6c1daeSBarry Smith 12d8d19677SJose E. Roman Input Parameters: 13811af0c4SBarry Smith + draw - a `PetscDraw` 145c6c1daeSBarry Smith . xmin,xmax,ymin,ymax - region to draw indicator function 155c6c1daeSBarry Smith - f - the indicator function 165c6c1daeSBarry Smith 175c6c1daeSBarry Smith Level: developer 185c6c1daeSBarry Smith 19811af0c4SBarry Smith .seealso: `PetscDraw` 205c6c1daeSBarry Smith @*/ 21*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIndicatorFunction(PetscDraw draw, PetscReal xmin, PetscReal xmax, PetscReal ymin, PetscReal ymax, int c, PetscErrorCode (*indicator)(void *, PetscReal, PetscReal, PetscBool *), void *ctx) 22*d71ae5a4SJacob Faibussowitsch { 23a7e8706aSLisandro Dalcin int i, j, xstart, ystart, xend, yend; 245c6c1daeSBarry Smith PetscReal x, y; 255c6c1daeSBarry Smith PetscBool isnull, flg; 265c6c1daeSBarry Smith 275c6c1daeSBarry Smith PetscFunctionBegin; 285c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 299566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw, &isnull)); 305c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 315c6c1daeSBarry Smith 329566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw, xmin, ymin, &xstart, &ystart)); 339566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw, xmax, ymax, &xend, ¥d)); 349371c9d4SSatish Balay if (yend < ystart) { 359371c9d4SSatish Balay PetscInt tmp = ystart; 369371c9d4SSatish Balay ystart = yend; 379371c9d4SSatish Balay yend = tmp; 389371c9d4SSatish Balay } 3945f3bb6eSLisandro Dalcin 4045f3bb6eSLisandro Dalcin for (i = xstart; i <= xend; i++) { 4145f3bb6eSLisandro Dalcin for (j = ystart; j <= yend; j++) { 429566063dSJacob Faibussowitsch PetscCall(PetscDrawPixelToCoordinate(draw, i, j, &x, &y)); 439566063dSJacob Faibussowitsch PetscCall(indicator(ctx, x, y, &flg)); 441baa6e33SBarry Smith if (flg) PetscCall(PetscDrawPointPixel(draw, i, j, c)); 455c6c1daeSBarry Smith } 465c6c1daeSBarry Smith } 475c6c1daeSBarry Smith PetscFunctionReturn(0); 485c6c1daeSBarry Smith } 495c6c1daeSBarry Smith 505c6c1daeSBarry Smith /*@C 51811af0c4SBarry Smith PetscDrawCoordinateToPixel - given a coordinate in a `PetscDraw` returns the pixel location 525c6c1daeSBarry Smith 535c6c1daeSBarry Smith Not collective 545c6c1daeSBarry Smith 555c6c1daeSBarry Smith Input Parameters: 565c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 576b867d5aSJose E. Roman . x - the horizontal coordinate 586b867d5aSJose E. Roman - y - the vertical coordinate 595c6c1daeSBarry Smith 605c6c1daeSBarry Smith Output Parameters: 616b867d5aSJose E. Roman + i - the horizontal pixel location 626b867d5aSJose E. Roman - j - the vertical pixel location 635c6c1daeSBarry Smith 645c6c1daeSBarry Smith Level: developer 655c6c1daeSBarry Smith 66811af0c4SBarry Smith .seealso: `PetscDraw` 675c6c1daeSBarry Smith @*/ 68*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw draw, PetscReal x, PetscReal y, int *i, int *j) 69*d71ae5a4SJacob Faibussowitsch { 705c6c1daeSBarry Smith PetscFunctionBegin; 715c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 72dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, coordinatetopixel, x, y, i, j); 735c6c1daeSBarry Smith PetscFunctionReturn(0); 745c6c1daeSBarry Smith } 755c6c1daeSBarry Smith 765c6c1daeSBarry Smith /*@C 77811af0c4SBarry Smith PetscDrawPixelToCoordinate - given a pixel in a `PetscDraw` returns the coordinate 785c6c1daeSBarry Smith 795c6c1daeSBarry Smith Not collective 805c6c1daeSBarry Smith 815c6c1daeSBarry Smith Input Parameters: 825c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 836b867d5aSJose E. Roman . i - the horizontal pixel location 846b867d5aSJose E. Roman - j - the vertical pixel location 855c6c1daeSBarry Smith 865c6c1daeSBarry Smith Output Parameters: 876b867d5aSJose E. Roman + x - the horizontal coordinate 886b867d5aSJose E. Roman - y - the vertical coordinate 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith Level: developer 915c6c1daeSBarry Smith 92811af0c4SBarry Smith .seealso: `PetscDraw` 935c6c1daeSBarry Smith @*/ 94*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw draw, int i, int j, PetscReal *x, PetscReal *y) 95*d71ae5a4SJacob Faibussowitsch { 965c6c1daeSBarry Smith PetscFunctionBegin; 975c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 98dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, pixeltocoordinate, i, j, x, y); 995c6c1daeSBarry Smith PetscFunctionReturn(0); 1005c6c1daeSBarry Smith } 1015c6c1daeSBarry Smith 1025c6c1daeSBarry Smith /*@ 103811af0c4SBarry Smith PetscDrawRectangle - draws a rectangle onto a drawable. 1045c6c1daeSBarry Smith 1055c6c1daeSBarry Smith Not Collective 1065c6c1daeSBarry Smith 1075c6c1daeSBarry Smith Input Parameters: 1085c6c1daeSBarry Smith + draw - the drawing context 1095c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the lower left, upper right corners 1105c6c1daeSBarry Smith - c1,c2,c3,c4 - the colors of the four corners in counter clockwise order 1115c6c1daeSBarry Smith 1125c6c1daeSBarry Smith Level: beginner 1135c6c1daeSBarry Smith 114811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 115db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawPoint()`, `PetscDrawArrow()` 1165c6c1daeSBarry Smith @*/ 117*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawRectangle(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int c1, int c2, int c3, int c4) 118*d71ae5a4SJacob Faibussowitsch { 1195c6c1daeSBarry Smith PetscFunctionBegin; 1205c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 121dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, rectangle, xl, yl, xr, yr, c1, c2, c3, c4); 1225c6c1daeSBarry Smith PetscFunctionReturn(0); 1235c6c1daeSBarry Smith } 124