15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 45c6c1daeSBarry Smith */ 55c6c1daeSBarry Smith #include <petsc-private/drawimpl.h> /*I "petscdraw.h" I*/ 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith #undef __FUNCT__ 85c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetBoundingBox" 95c6c1daeSBarry Smith /*@ 10*51fa3d41SBarry Smith PetscDrawGetBoundingBox - Gets the bounding box of all PetscDrawStringBoxed() commands 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith Not collective 135c6c1daeSBarry Smith 145c6c1daeSBarry Smith Input Parameter: 155c6c1daeSBarry Smith . draw - the drawing context 165c6c1daeSBarry Smith 175c6c1daeSBarry Smith Output Parameters: 185c6c1daeSBarry Smith . xl,yl,xr,yr - coordinates of lower left and upper right corners of bounding box 195c6c1daeSBarry Smith 205c6c1daeSBarry Smith Level: intermediate 215c6c1daeSBarry Smith 225c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint() 235c6c1daeSBarry Smith @*/ 245c6c1daeSBarry Smith PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr) 255c6c1daeSBarry Smith { 265c6c1daeSBarry Smith PetscFunctionBegin; 275c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 285c6c1daeSBarry Smith if (xl) *xl = draw->boundbox_xl; 295c6c1daeSBarry Smith if (yl) *yl = draw->boundbox_yl; 305c6c1daeSBarry Smith if (xr) *xr = draw->boundbox_xr; 315c6c1daeSBarry Smith if (yr) *yr = draw->boundbox_yr; 325c6c1daeSBarry Smith PetscFunctionReturn(0); 335c6c1daeSBarry Smith } 345c6c1daeSBarry Smith 355c6c1daeSBarry Smith #undef __FUNCT__ 365c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetCurrentPoint" 375c6c1daeSBarry Smith /*@ 385c6c1daeSBarry Smith PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 395c6c1daeSBarry Smith 405c6c1daeSBarry Smith Not collective 415c6c1daeSBarry Smith 425c6c1daeSBarry Smith Input Parameter: 435c6c1daeSBarry Smith . draw - the drawing context 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith Output Parameters: 465c6c1daeSBarry Smith . x,y - the current point 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith Level: intermediate 495c6c1daeSBarry Smith 505c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint() 515c6c1daeSBarry Smith @*/ 525c6c1daeSBarry Smith PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw,PetscReal *x,PetscReal *y) 535c6c1daeSBarry Smith { 545c6c1daeSBarry Smith PetscFunctionBegin; 555c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 565c6c1daeSBarry Smith *x = draw->currentpoint_x[draw->currentpoint]; 575c6c1daeSBarry Smith *y = draw->currentpoint_y[draw->currentpoint]; 585c6c1daeSBarry Smith PetscFunctionReturn(0); 595c6c1daeSBarry Smith } 605c6c1daeSBarry Smith 615c6c1daeSBarry Smith #undef __FUNCT__ 625c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetCurrentPoint" 635c6c1daeSBarry Smith /*@ 645c6c1daeSBarry Smith PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith Not collective 675c6c1daeSBarry Smith 685c6c1daeSBarry Smith Input Parameters: 695c6c1daeSBarry Smith + draw - the drawing context 705c6c1daeSBarry Smith - x,y - the location of the current point 715c6c1daeSBarry Smith 725c6c1daeSBarry Smith Level: intermediate 735c6c1daeSBarry Smith 745c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 755c6c1daeSBarry Smith @*/ 765c6c1daeSBarry Smith PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 775c6c1daeSBarry Smith { 785c6c1daeSBarry Smith PetscFunctionBegin; 795c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 805c6c1daeSBarry Smith draw->currentpoint_x[draw->currentpoint] = x; 815c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 825c6c1daeSBarry Smith PetscFunctionReturn(0); 835c6c1daeSBarry Smith } 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith #undef __FUNCT__ 865c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPushCurrentPoint" 875c6c1daeSBarry Smith /*@ 885c6c1daeSBarry Smith PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith Not collective 915c6c1daeSBarry Smith 925c6c1daeSBarry Smith Input Parameters: 935c6c1daeSBarry Smith + draw - the drawing context 945c6c1daeSBarry Smith - x,y - the location of the current point 955c6c1daeSBarry Smith 965c6c1daeSBarry Smith Level: intermediate 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 995c6c1daeSBarry Smith @*/ 1005c6c1daeSBarry Smith PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 1015c6c1daeSBarry Smith { 1025c6c1daeSBarry Smith PetscFunctionBegin; 1035c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 104ec007e15SMatthew G. Knepley if (draw->currentpoint > 19) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have pushed too many current points"); 1055c6c1daeSBarry Smith draw->currentpoint_x[++draw->currentpoint] = x; 1065c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 1075c6c1daeSBarry Smith PetscFunctionReturn(0); 1085c6c1daeSBarry Smith } 1095c6c1daeSBarry Smith 1105c6c1daeSBarry Smith #undef __FUNCT__ 1115c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPopCurrentPoint" 1125c6c1daeSBarry Smith /*@ 1135c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1145c6c1daeSBarry Smith 1155c6c1daeSBarry Smith Not collective 1165c6c1daeSBarry Smith 1175c6c1daeSBarry Smith Input Parameter: 1185c6c1daeSBarry Smith . draw - the drawing context 1195c6c1daeSBarry Smith 1205c6c1daeSBarry Smith Level: intermediate 1215c6c1daeSBarry Smith 1225c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint() 1235c6c1daeSBarry Smith @*/ 1245c6c1daeSBarry Smith PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 1255c6c1daeSBarry Smith { 1265c6c1daeSBarry Smith PetscFunctionBegin; 1275c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1285c6c1daeSBarry Smith if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points"); 1295c6c1daeSBarry Smith PetscFunctionReturn(0); 1305c6c1daeSBarry Smith } 1315c6c1daeSBarry Smith 1325c6c1daeSBarry Smith #undef __FUNCT__ 1335c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawLine" 1345c6c1daeSBarry Smith /*@ 1355c6c1daeSBarry Smith PetscDrawLine - PetscDraws a line onto a drawable. 1365c6c1daeSBarry Smith 1375c6c1daeSBarry Smith Not collective 1385c6c1daeSBarry Smith 1395c6c1daeSBarry Smith Input Parameters: 1405c6c1daeSBarry Smith + draw - the drawing context 1415c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1425c6c1daeSBarry Smith - cl - the colors of the endpoints 1435c6c1daeSBarry Smith 1445c6c1daeSBarry Smith Level: beginner 1455c6c1daeSBarry Smith 1465c6c1daeSBarry Smith Concepts: line^drawing 1475c6c1daeSBarry Smith Concepts: drawing^line 1485c6c1daeSBarry Smith 1495c6c1daeSBarry Smith @*/ 1505c6c1daeSBarry Smith PetscErrorCode PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1515c6c1daeSBarry Smith { 1525c6c1daeSBarry Smith PetscErrorCode ierr; 1535c6c1daeSBarry Smith PetscBool isdrawnull; 1545c6c1daeSBarry Smith 1555c6c1daeSBarry Smith PetscFunctionBegin; 1565c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1575c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr); 1585c6c1daeSBarry Smith if (isdrawnull) PetscFunctionReturn(0); 159ce94432eSBarry Smith if (!draw->ops->line) SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing lines"); 1605c6c1daeSBarry Smith ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 1615c6c1daeSBarry Smith PetscFunctionReturn(0); 1625c6c1daeSBarry Smith } 1635c6c1daeSBarry Smith 1645c6c1daeSBarry Smith #undef __FUNCT__ 1655c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawArrow" 1665c6c1daeSBarry Smith /*@ 1675c6c1daeSBarry Smith PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough 1685c6c1daeSBarry Smith 1695c6c1daeSBarry Smith Not collective 1705c6c1daeSBarry Smith 1715c6c1daeSBarry Smith Input Parameters: 1725c6c1daeSBarry Smith + draw - the drawing context 1735c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1745c6c1daeSBarry Smith - cl - the colors of the endpoints 1755c6c1daeSBarry Smith 1765c6c1daeSBarry Smith Level: beginner 1775c6c1daeSBarry Smith 1785c6c1daeSBarry Smith Concepts: line^drawing 1795c6c1daeSBarry Smith Concepts: drawing^line 1805c6c1daeSBarry Smith 1815c6c1daeSBarry Smith @*/ 1825c6c1daeSBarry Smith PetscErrorCode PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1835c6c1daeSBarry Smith { 1845c6c1daeSBarry Smith PetscErrorCode ierr; 1855c6c1daeSBarry Smith PetscBool isdrawnull; 1865c6c1daeSBarry Smith 1875c6c1daeSBarry Smith PetscFunctionBegin; 1885c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1895c6c1daeSBarry Smith ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr); 1905c6c1daeSBarry Smith if (isdrawnull) PetscFunctionReturn(0); 191ce94432eSBarry Smith if (!draw->ops->arrow) SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing arrows"); 1925c6c1daeSBarry Smith ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 1935c6c1daeSBarry Smith PetscFunctionReturn(0); 1945c6c1daeSBarry Smith } 1955c6c1daeSBarry Smith 196