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 85c6c1daeSBarry Smith #undef __FUNCT__ 95c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawIndicatorFunction" 105c6c1daeSBarry Smith /*@C 115c6c1daeSBarry Smith PetscDrawIndicatorFunction - Draws an indicator function (where a relationship is true) on a PetscDraw 125c6c1daeSBarry Smith 135c6c1daeSBarry Smith Not collective 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Input Parameter: 165c6c1daeSBarry Smith + draw - a PetscDraw 175c6c1daeSBarry Smith . xmin,xmax,ymin,ymax - region to draw indicator function 185c6c1daeSBarry Smith - f - the indicator function 195c6c1daeSBarry Smith 205c6c1daeSBarry Smith Level: developer 215c6c1daeSBarry Smith 225c6c1daeSBarry Smith @*/ 2345f3bb6eSLisandro Dalcin PetscErrorCode PetscDrawIndicatorFunction(PetscDraw draw,PetscReal xmin,PetscReal xmax,PetscReal ymin,PetscReal ymax,int c,PetscErrorCode (*indicator)(void*,PetscReal,PetscReal,PetscBool*),void *ctx) 245c6c1daeSBarry Smith { 25a7e8706aSLisandro Dalcin int i,j,xstart,ystart,xend,yend; 265c6c1daeSBarry Smith PetscReal x,y; 275c6c1daeSBarry Smith PetscBool isnull,flg; 2845f3bb6eSLisandro Dalcin PetscErrorCode ierr; 295c6c1daeSBarry Smith 305c6c1daeSBarry Smith PetscFunctionBegin; 315c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 328f69470aSLisandro Dalcin ierr = PetscDrawIsNull(draw,&isnull);CHKERRQ(ierr); 335c6c1daeSBarry Smith if (isnull) PetscFunctionReturn(0); 345c6c1daeSBarry Smith 355c6c1daeSBarry Smith ierr = PetscDrawCoordinateToPixel(draw,xmin,ymin,&xstart,&ystart);CHKERRQ(ierr); 365c6c1daeSBarry Smith ierr = PetscDrawCoordinateToPixel(draw,xmax,ymax,&xend,¥d);CHKERRQ(ierr); 3745f3bb6eSLisandro Dalcin if (yend < ystart) { PetscInt tmp = ystart; ystart = yend; yend = tmp; } 3845f3bb6eSLisandro Dalcin 3945f3bb6eSLisandro Dalcin for (i=xstart; i<=xend; i++) { 4045f3bb6eSLisandro Dalcin for (j=ystart; j<=yend; j++) { 415c6c1daeSBarry Smith ierr = PetscDrawPixelToCoordinate(draw,i,j,&x,&y);CHKERRQ(ierr); 4245f3bb6eSLisandro Dalcin ierr = indicator(ctx,x,y,&flg);CHKERRQ(ierr); 435c6c1daeSBarry Smith if (flg) { 445c6c1daeSBarry Smith ierr = PetscDrawPointPixel(draw,i,j,c);CHKERRQ(ierr); 455c6c1daeSBarry Smith } 465c6c1daeSBarry Smith } 475c6c1daeSBarry Smith } 485c6c1daeSBarry Smith PetscFunctionReturn(0); 495c6c1daeSBarry Smith } 505c6c1daeSBarry Smith 515c6c1daeSBarry Smith 525c6c1daeSBarry Smith #undef __FUNCT__ 535c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawCoordinateToPixel" 545c6c1daeSBarry Smith /*@C 555c6c1daeSBarry Smith PetscDrawCoordinateToPixel - given a coordinate in a PetscDraw returns the pixel location 565c6c1daeSBarry Smith 575c6c1daeSBarry Smith Not collective 585c6c1daeSBarry Smith 595c6c1daeSBarry Smith Input Parameters: 605c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 615c6c1daeSBarry Smith - x,y - the coordinate location 625c6c1daeSBarry Smith 635c6c1daeSBarry Smith Output Parameters: 645c6c1daeSBarry Smith - i,j - the pixel location 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith Level: developer 675c6c1daeSBarry Smith 685c6c1daeSBarry Smith @*/ 69a7e8706aSLisandro Dalcin PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw draw,PetscReal x,PetscReal y,int *i,int *j) 705c6c1daeSBarry Smith { 715c6c1daeSBarry Smith PetscErrorCode ierr; 725c6c1daeSBarry Smith 735c6c1daeSBarry Smith PetscFunctionBegin; 745c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 758f69470aSLisandro Dalcin if (!draw->ops->coordinatetopixel) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support locating pixels",((PetscObject)draw)->type_name); 765c6c1daeSBarry Smith ierr = (*draw->ops->coordinatetopixel)(draw,x,y,i,j);CHKERRQ(ierr); 775c6c1daeSBarry Smith PetscFunctionReturn(0); 785c6c1daeSBarry Smith } 795c6c1daeSBarry Smith 805c6c1daeSBarry Smith #undef __FUNCT__ 815c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPixelToCoordinate" 825c6c1daeSBarry Smith /*@C 835c6c1daeSBarry Smith PetscDrawPixelToCoordinate - given a pixel in a PetscDraw returns the coordinate 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith Not collective 865c6c1daeSBarry Smith 875c6c1daeSBarry Smith Input Parameters: 885c6c1daeSBarry Smith + draw - the draw where the coordinates are defined 895c6c1daeSBarry Smith - i,j - the pixel location 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith Output Parameters: 925c6c1daeSBarry Smith . x,y - the coordinate location 935c6c1daeSBarry Smith 945c6c1daeSBarry Smith Level: developer 955c6c1daeSBarry Smith 965c6c1daeSBarry Smith @*/ 97a7e8706aSLisandro Dalcin PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw draw,int i,int j,PetscReal *x,PetscReal *y) 985c6c1daeSBarry Smith { 995c6c1daeSBarry Smith PetscErrorCode ierr; 1005c6c1daeSBarry Smith 1015c6c1daeSBarry Smith PetscFunctionBegin; 1025c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1038f69470aSLisandro Dalcin if (!draw->ops->pixeltocoordinate) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support locating coordinates",((PetscObject)draw)->type_name); 1045c6c1daeSBarry Smith ierr = (*draw->ops->pixeltocoordinate)(draw,i,j,x,y);CHKERRQ(ierr); 1055c6c1daeSBarry Smith PetscFunctionReturn(0); 1065c6c1daeSBarry Smith } 1075c6c1daeSBarry Smith 1085c6c1daeSBarry Smith #undef __FUNCT__ 1095c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawRectangle" 1105c6c1daeSBarry Smith /*@ 1115c6c1daeSBarry Smith PetscDrawRectangle - PetscDraws a rectangle onto a drawable. 1125c6c1daeSBarry Smith 1135c6c1daeSBarry Smith Not Collective 1145c6c1daeSBarry Smith 1155c6c1daeSBarry Smith Input Parameters: 1165c6c1daeSBarry Smith + draw - the drawing context 1175c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the lower left, upper right corners 1185c6c1daeSBarry Smith - c1,c2,c3,c4 - the colors of the four corners in counter clockwise order 1195c6c1daeSBarry Smith 1205c6c1daeSBarry Smith Level: beginner 1215c6c1daeSBarry Smith 1225c6c1daeSBarry Smith Concepts: drawing^rectangle 1235c6c1daeSBarry Smith Concepts: graphics^rectangle 1245c6c1daeSBarry Smith Concepts: rectangle 1255c6c1daeSBarry Smith 126*ba1e01c4SBarry Smith .seealso: PetscDrawLine(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 127*ba1e01c4SBarry Smith PetscDrawMarker(), PetscDrawPoint(), PetscDrawString(), PetscDrawPoint(), PetscDrawArrow() 128*ba1e01c4SBarry Smith 1295c6c1daeSBarry Smith @*/ 1305c6c1daeSBarry Smith PetscErrorCode PetscDrawRectangle(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int c1,int c2,int c3,int c4) 1315c6c1daeSBarry Smith { 1325c6c1daeSBarry Smith PetscErrorCode ierr; 1335c6c1daeSBarry Smith 1345c6c1daeSBarry Smith PetscFunctionBegin; 1355c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1368f69470aSLisandro Dalcin if (!draw->ops->rectangle) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing rectangles",((PetscObject)draw)->type_name); 1375c6c1daeSBarry Smith ierr = (*draw->ops->rectangle)(draw,xl,yl,xr,yr,c1,c2,c3,c4);CHKERRQ(ierr); 1385c6c1daeSBarry Smith PetscFunctionReturn(0); 1395c6c1daeSBarry Smith } 140