1af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 25c6c1daeSBarry Smith 35c6c1daeSBarry Smith /*@C 4811af0c4SBarry Smith PetscDrawIndicatorFunction - Draws an indicator function (where a relationship is true) on a `PetscDraw` 55c6c1daeSBarry Smith 6*20f4b53cSBarry Smith Not Collective 75c6c1daeSBarry Smith 8d8d19677SJose E. Roman Input Parameters: 9811af0c4SBarry Smith + draw - a `PetscDraw` 105c6c1daeSBarry Smith . xmin,xmax,ymin,ymax - region to draw indicator function 115c6c1daeSBarry Smith - f - the indicator function 125c6c1daeSBarry Smith 135c6c1daeSBarry Smith Level: developer 145c6c1daeSBarry Smith 15811af0c4SBarry Smith .seealso: `PetscDraw` 165c6c1daeSBarry Smith @*/ 17d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIndicatorFunction(PetscDraw draw, PetscReal xmin, PetscReal xmax, PetscReal ymin, PetscReal ymax, int c, PetscErrorCode (*indicator)(void *, PetscReal, PetscReal, PetscBool *), void *ctx) 18d71ae5a4SJacob Faibussowitsch { 19a7e8706aSLisandro Dalcin int i, j, xstart, ystart, xend, yend; 205c6c1daeSBarry Smith PetscReal x, y; 215c6c1daeSBarry Smith PetscBool isnull, flg; 225c6c1daeSBarry Smith 235c6c1daeSBarry Smith PetscFunctionBegin; 245c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 259566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw, &isnull)); 263ba16761SJacob Faibussowitsch if (isnull) PetscFunctionReturn(PETSC_SUCCESS); 275c6c1daeSBarry Smith 289566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw, xmin, ymin, &xstart, &ystart)); 299566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw, xmax, ymax, &xend, ¥d)); 309371c9d4SSatish Balay if (yend < ystart) { 319371c9d4SSatish Balay PetscInt tmp = ystart; 329371c9d4SSatish Balay ystart = yend; 339371c9d4SSatish Balay yend = tmp; 349371c9d4SSatish Balay } 3545f3bb6eSLisandro Dalcin 3645f3bb6eSLisandro Dalcin for (i = xstart; i <= xend; i++) { 3745f3bb6eSLisandro Dalcin for (j = ystart; j <= yend; j++) { 389566063dSJacob Faibussowitsch PetscCall(PetscDrawPixelToCoordinate(draw, i, j, &x, &y)); 399566063dSJacob Faibussowitsch PetscCall(indicator(ctx, x, y, &flg)); 401baa6e33SBarry Smith if (flg) PetscCall(PetscDrawPointPixel(draw, i, j, c)); 415c6c1daeSBarry Smith } 425c6c1daeSBarry Smith } 433ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 445c6c1daeSBarry Smith } 455c6c1daeSBarry Smith 465c6c1daeSBarry Smith /*@C 47811af0c4SBarry Smith PetscDrawCoordinateToPixel - given a coordinate in a `PetscDraw` returns the pixel location 485c6c1daeSBarry Smith 49*20f4b53cSBarry Smith Not Collective 505c6c1daeSBarry Smith 515c6c1daeSBarry Smith Input Parameters: 525c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 536b867d5aSJose E. Roman . x - the horizontal coordinate 546b867d5aSJose E. Roman - y - the vertical coordinate 555c6c1daeSBarry Smith 565c6c1daeSBarry Smith Output Parameters: 576b867d5aSJose E. Roman + i - the horizontal pixel location 586b867d5aSJose E. Roman - j - the vertical pixel location 595c6c1daeSBarry Smith 605c6c1daeSBarry Smith Level: developer 615c6c1daeSBarry Smith 62811af0c4SBarry Smith .seealso: `PetscDraw` 635c6c1daeSBarry Smith @*/ 64d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw draw, PetscReal x, PetscReal y, int *i, int *j) 65d71ae5a4SJacob Faibussowitsch { 665c6c1daeSBarry Smith PetscFunctionBegin; 675c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 68dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, coordinatetopixel, x, y, i, j); 693ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 705c6c1daeSBarry Smith } 715c6c1daeSBarry Smith 725c6c1daeSBarry Smith /*@C 73811af0c4SBarry Smith PetscDrawPixelToCoordinate - given a pixel in a `PetscDraw` returns the coordinate 745c6c1daeSBarry Smith 75*20f4b53cSBarry Smith Not Collective 765c6c1daeSBarry Smith 775c6c1daeSBarry Smith Input Parameters: 785c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 796b867d5aSJose E. Roman . i - the horizontal pixel location 806b867d5aSJose E. Roman - j - the vertical pixel location 815c6c1daeSBarry Smith 825c6c1daeSBarry Smith Output Parameters: 836b867d5aSJose E. Roman + x - the horizontal coordinate 846b867d5aSJose E. Roman - y - the vertical coordinate 855c6c1daeSBarry Smith 865c6c1daeSBarry Smith Level: developer 875c6c1daeSBarry Smith 88811af0c4SBarry Smith .seealso: `PetscDraw` 895c6c1daeSBarry Smith @*/ 90d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw draw, int i, int j, PetscReal *x, PetscReal *y) 91d71ae5a4SJacob Faibussowitsch { 925c6c1daeSBarry Smith PetscFunctionBegin; 935c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 94dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, pixeltocoordinate, i, j, x, y); 953ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 965c6c1daeSBarry Smith } 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith /*@ 99811af0c4SBarry Smith PetscDrawRectangle - draws a rectangle onto a drawable. 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith Not Collective 1025c6c1daeSBarry Smith 1035c6c1daeSBarry Smith Input Parameters: 1045c6c1daeSBarry Smith + draw - the drawing context 1055c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the lower left, upper right corners 1065c6c1daeSBarry Smith - c1,c2,c3,c4 - the colors of the four corners in counter clockwise order 1075c6c1daeSBarry Smith 1085c6c1daeSBarry Smith Level: beginner 1095c6c1daeSBarry Smith 110811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 111db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawPoint()`, `PetscDrawArrow()` 1125c6c1daeSBarry Smith @*/ 113d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawRectangle(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int c1, int c2, int c3, int c4) 114d71ae5a4SJacob Faibussowitsch { 1155c6c1daeSBarry Smith PetscFunctionBegin; 1165c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 117dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, rectangle, xl, yl, xr, yr, c1, c2, c3, c4); 1183ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1195c6c1daeSBarry Smith } 120