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 /*@ 8811af0c4SBarry Smith PetscDrawGetBoundingBox - Gets the bounding box of all `PetscDrawStringBoxed()` commands 95c6c1daeSBarry Smith 10*20f4b53cSBarry Smith Not Collective 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith Input Parameter: 135c6c1daeSBarry Smith . draw - the drawing context 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Output Parameters: 165c6c1daeSBarry Smith . xl,yl,xr,yr - coordinates of lower left and upper right corners of bounding box 175c6c1daeSBarry Smith 185c6c1daeSBarry Smith Level: intermediate 195c6c1daeSBarry Smith 20811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 215c6c1daeSBarry Smith @*/ 22d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr) 23d71ae5a4SJacob Faibussowitsch { 245c6c1daeSBarry Smith PetscFunctionBegin; 255c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 268f69470aSLisandro Dalcin if (xl) PetscValidRealPointer(xl, 2); 278f69470aSLisandro Dalcin if (yl) PetscValidRealPointer(yl, 3); 288f69470aSLisandro Dalcin if (xr) PetscValidRealPointer(xr, 4); 298f69470aSLisandro Dalcin if (yr) PetscValidRealPointer(yr, 5); 305c6c1daeSBarry Smith if (xl) *xl = draw->boundbox_xl; 315c6c1daeSBarry Smith if (yl) *yl = draw->boundbox_yl; 325c6c1daeSBarry Smith if (xr) *xr = draw->boundbox_xr; 335c6c1daeSBarry Smith if (yr) *yr = draw->boundbox_yr; 343ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 355c6c1daeSBarry Smith } 365c6c1daeSBarry Smith 375c6c1daeSBarry Smith /*@ 385c6c1daeSBarry Smith PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 395c6c1daeSBarry Smith 40*20f4b53cSBarry 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 50811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 515c6c1daeSBarry Smith @*/ 52d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y) 53d71ae5a4SJacob Faibussowitsch { 545c6c1daeSBarry Smith PetscFunctionBegin; 555c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 568f69470aSLisandro Dalcin PetscValidRealPointer(x, 2); 578f69470aSLisandro Dalcin PetscValidRealPointer(y, 3); 585c6c1daeSBarry Smith *x = draw->currentpoint_x[draw->currentpoint]; 595c6c1daeSBarry Smith *y = draw->currentpoint_y[draw->currentpoint]; 603ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 615c6c1daeSBarry Smith } 625c6c1daeSBarry Smith 635c6c1daeSBarry Smith /*@ 645c6c1daeSBarry Smith PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 655c6c1daeSBarry Smith 66*20f4b53cSBarry 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 74811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 755c6c1daeSBarry Smith @*/ 76d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 77d71ae5a4SJacob Faibussowitsch { 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; 823ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 835c6c1daeSBarry Smith } 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith /*@ 865c6c1daeSBarry Smith PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 875c6c1daeSBarry Smith 88*20f4b53cSBarry Smith Not Collective 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith Input Parameters: 915c6c1daeSBarry Smith + draw - the drawing context 925c6c1daeSBarry Smith - x,y - the location of the current point 935c6c1daeSBarry Smith 945c6c1daeSBarry Smith Level: intermediate 955c6c1daeSBarry Smith 96811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 975c6c1daeSBarry Smith @*/ 98d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 99d71ae5a4SJacob Faibussowitsch { 1005c6c1daeSBarry Smith PetscFunctionBegin; 1015c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 10208401ef6SPierre Jolivet PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points"); 1035c6c1daeSBarry Smith draw->currentpoint_x[++draw->currentpoint] = x; 1045c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 1053ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1065c6c1daeSBarry Smith } 1075c6c1daeSBarry Smith 1085c6c1daeSBarry Smith /*@ 1095c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1105c6c1daeSBarry Smith 111*20f4b53cSBarry Smith Not Collective 1125c6c1daeSBarry Smith 1135c6c1daeSBarry Smith Input Parameter: 1145c6c1daeSBarry Smith . draw - the drawing context 1155c6c1daeSBarry Smith 1165c6c1daeSBarry Smith Level: intermediate 1175c6c1daeSBarry Smith 118811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()` 1195c6c1daeSBarry Smith @*/ 120d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 121d71ae5a4SJacob Faibussowitsch { 1225c6c1daeSBarry Smith PetscFunctionBegin; 1235c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 124cc73adaaSBarry Smith PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points"); 1253ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1265c6c1daeSBarry Smith } 1275c6c1daeSBarry Smith 1285c6c1daeSBarry Smith /*@ 129811af0c4SBarry Smith PetscDrawLine - draws a line onto a drawable. 1305c6c1daeSBarry Smith 131*20f4b53cSBarry Smith Not Collective 1325c6c1daeSBarry Smith 1335c6c1daeSBarry Smith Input Parameters: 1345c6c1daeSBarry Smith + draw - the drawing context 1355c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1365c6c1daeSBarry Smith - cl - the colors of the endpoints 1375c6c1daeSBarry Smith 1385c6c1daeSBarry Smith Level: beginner 1395c6c1daeSBarry Smith 140811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 141db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1425c6c1daeSBarry Smith @*/ 143d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) 144d71ae5a4SJacob Faibussowitsch { 1455c6c1daeSBarry Smith PetscFunctionBegin; 1465c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 147dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl); 1483ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1495c6c1daeSBarry Smith } 1505c6c1daeSBarry Smith 1515c6c1daeSBarry Smith /*@ 152811af0c4SBarry Smith PetscDrawArrow - draws a line with arrow head at end if the line is long enough 1535c6c1daeSBarry Smith 154*20f4b53cSBarry Smith Not Collective 1555c6c1daeSBarry Smith 1565c6c1daeSBarry Smith Input Parameters: 1575c6c1daeSBarry Smith + draw - the drawing context 1585c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1595c6c1daeSBarry Smith - cl - the colors of the endpoints 1605c6c1daeSBarry Smith 1615c6c1daeSBarry Smith Level: beginner 1625c6c1daeSBarry Smith 163811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 164db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1655c6c1daeSBarry Smith @*/ 166d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) 167d71ae5a4SJacob Faibussowitsch { 1685c6c1daeSBarry Smith PetscFunctionBegin; 1695c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 170dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl); 1713ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1725c6c1daeSBarry Smith } 1735c6c1daeSBarry Smith 1748f69470aSLisandro Dalcin /*@ 1758f69470aSLisandro Dalcin PetscDrawLineSetWidth - Sets the line width for future draws. The width is 1768f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 1778f69470aSLisandro Dalcin width; 1.0 denotes the entire viewport. 1788f69470aSLisandro Dalcin 179*20f4b53cSBarry Smith Not Collective 1808f69470aSLisandro Dalcin 1818f69470aSLisandro Dalcin Input Parameters: 1828f69470aSLisandro Dalcin + draw - the drawing context 1838f69470aSLisandro Dalcin - width - the width in user coordinates 1848f69470aSLisandro Dalcin 1858f69470aSLisandro Dalcin Level: advanced 1868f69470aSLisandro Dalcin 187811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 1888f69470aSLisandro Dalcin @*/ 189d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) 190d71ae5a4SJacob Faibussowitsch { 1918f69470aSLisandro Dalcin PetscFunctionBegin; 1928f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 193dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, linesetwidth, width); 1943ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1958f69470aSLisandro Dalcin } 1968f69470aSLisandro Dalcin 1978f69470aSLisandro Dalcin /*@ 1988f69470aSLisandro Dalcin PetscDrawLineGetWidth - Gets the line width for future draws. The width is 1998f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 2008f69470aSLisandro Dalcin width; 1.0 denotes the interior viewport. 2018f69470aSLisandro Dalcin 202*20f4b53cSBarry Smith Not Collective 2038f69470aSLisandro Dalcin 2048f69470aSLisandro Dalcin Input Parameter: 2058f69470aSLisandro Dalcin . draw - the drawing context 2068f69470aSLisandro Dalcin 2078f69470aSLisandro Dalcin Output Parameter: 2088f69470aSLisandro Dalcin . width - the width in user coordinates 2098f69470aSLisandro Dalcin 2108f69470aSLisandro Dalcin Level: advanced 2118f69470aSLisandro Dalcin 212811af0c4SBarry Smith Note: 2138f69470aSLisandro Dalcin Not currently implemented. 2148f69470aSLisandro Dalcin 215811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 2168f69470aSLisandro Dalcin @*/ 217d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) 218d71ae5a4SJacob Faibussowitsch { 2198f69470aSLisandro Dalcin PetscFunctionBegin; 2208f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 221064a246eSJacob Faibussowitsch PetscValidRealPointer(width, 2); 222dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, linegetwidth, width); 2233ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2248f69470aSLisandro Dalcin } 225