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 85c6c1daeSBarry 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: 135c6c1daeSBarry 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 195c6c1daeSBarry Smith @*/ 2045f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawIndicatorFunction(PetscDraw draw,PetscReal xmin,PetscReal xmax,PetscReal ymin,PetscReal ymax,int c,PetscErrorCode (*indicator)(void*,PetscReal,PetscReal,PetscBool*),void *ctx) 215c6c1daeSBarry Smith { 22a7e8706aSLisandro Dalcin int i,j,xstart,ystart,xend,yend; 235c6c1daeSBarry Smith PetscReal x,y; 245c6c1daeSBarry Smith PetscBool isnull,flg; 255c6c1daeSBarry Smith 265c6c1daeSBarry Smith PetscFunctionBegin; 275c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 289566063dSJacob Faibussowitsch PetscCall(PetscDrawIsNull(draw,&isnull)); 295c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 305c6c1daeSBarry Smith 319566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw,xmin,ymin,&xstart,&ystart)); 329566063dSJacob Faibussowitsch PetscCall(PetscDrawCoordinateToPixel(draw,xmax,ymax,&xend,¥d)); 3345f3bb6eSLisandro Dalcin if (yend < ystart) { PetscInt tmp = ystart; ystart = yend; yend = tmp; } 3445f3bb6eSLisandro Dalcin 3545f3bb6eSLisandro Dalcin for (i=xstart; i<=xend; i++) { 3645f3bb6eSLisandro Dalcin for (j=ystart; j<=yend; j++) { 379566063dSJacob Faibussowitsch PetscCall(PetscDrawPixelToCoordinate(draw,i,j,&x,&y)); 389566063dSJacob Faibussowitsch PetscCall(indicator(ctx,x,y,&flg)); 391baa6e33SBarry Smith if (flg) PetscCall(PetscDrawPointPixel(draw,i,j,c)); 405c6c1daeSBarry Smith } 415c6c1daeSBarry Smith } 425c6c1daeSBarry Smith PetscFunctionReturn(0); 435c6c1daeSBarry Smith } 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith /*@C 465c6c1daeSBarry Smith PetscDrawCoordinateToPixel - given a coordinate in a PetscDraw returns the pixel location 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith Not collective 495c6c1daeSBarry Smith 505c6c1daeSBarry Smith Input Parameters: 515c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 526b867d5aSJose E. Roman . x - the horizontal coordinate 536b867d5aSJose E. Roman - y - the vertical coordinate 545c6c1daeSBarry Smith 555c6c1daeSBarry Smith Output Parameters: 566b867d5aSJose E. Roman + i - the horizontal pixel location 576b867d5aSJose E. Roman - j - the vertical pixel location 585c6c1daeSBarry Smith 595c6c1daeSBarry Smith Level: developer 605c6c1daeSBarry Smith 615c6c1daeSBarry Smith @*/ 62a7e8706aSLisandro Dalcin PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw draw,PetscReal x,PetscReal y,int *i,int *j) 635c6c1daeSBarry Smith { 645c6c1daeSBarry Smith PetscFunctionBegin; 655c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 66*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,coordinatetopixel ,x,y,i,j); 675c6c1daeSBarry Smith PetscFunctionReturn(0); 685c6c1daeSBarry Smith } 695c6c1daeSBarry Smith 705c6c1daeSBarry Smith /*@C 715c6c1daeSBarry Smith PetscDrawPixelToCoordinate - given a pixel in a PetscDraw returns the coordinate 725c6c1daeSBarry Smith 735c6c1daeSBarry Smith Not collective 745c6c1daeSBarry Smith 755c6c1daeSBarry Smith Input Parameters: 765c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 776b867d5aSJose E. Roman . i - the horizontal pixel location 786b867d5aSJose E. Roman - j - the vertical pixel location 795c6c1daeSBarry Smith 805c6c1daeSBarry Smith Output Parameters: 816b867d5aSJose E. Roman + x - the horizontal coordinate 826b867d5aSJose E. Roman - y - the vertical coordinate 835c6c1daeSBarry Smith 845c6c1daeSBarry Smith Level: developer 855c6c1daeSBarry Smith 865c6c1daeSBarry Smith @*/ 87a7e8706aSLisandro Dalcin PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw draw,int i,int j,PetscReal *x,PetscReal *y) 885c6c1daeSBarry Smith { 895c6c1daeSBarry Smith PetscFunctionBegin; 905c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 91*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,pixeltocoordinate ,i,j,x,y); 925c6c1daeSBarry Smith PetscFunctionReturn(0); 935c6c1daeSBarry Smith } 945c6c1daeSBarry Smith 955c6c1daeSBarry Smith /*@ 965c6c1daeSBarry Smith PetscDrawRectangle - PetscDraws a rectangle onto a drawable. 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith Not Collective 995c6c1daeSBarry Smith 1005c6c1daeSBarry Smith Input Parameters: 1015c6c1daeSBarry Smith + draw - the drawing context 1025c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the lower left, upper right corners 1035c6c1daeSBarry Smith - c1,c2,c3,c4 - the colors of the four corners in counter clockwise order 1045c6c1daeSBarry Smith 1055c6c1daeSBarry Smith Level: beginner 1065c6c1daeSBarry Smith 107db781477SPatrick Sanan .seealso: `PetscDrawLine()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 108db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawPoint()`, `PetscDrawArrow()` 109ba1e01c4SBarry Smith 1105c6c1daeSBarry Smith @*/ 1115c6c1daeSBarry Smith PetscErrorCode PetscDrawRectangle(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int c1,int c2,int c3,int c4) 1125c6c1daeSBarry Smith { 1135c6c1daeSBarry Smith PetscFunctionBegin; 1145c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 115*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,rectangle ,xl,yl,xr,yr,c1,c2,c3,c4); 1165c6c1daeSBarry Smith PetscFunctionReturn(0); 1175c6c1daeSBarry Smith } 118