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 1020f4b53cSBarry Smith Not Collective 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith Input Parameter: 135c6c1daeSBarry Smith . draw - the drawing context 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Output Parameters: 16*2fe279fdSBarry Smith + xl - horizontal coordinate of lower left corner of bounding box 17*2fe279fdSBarry Smith . yl - vertical coordinate of lower left corner of bounding box 18*2fe279fdSBarry Smith . xr - horizontal coordinate of upper right corner of bounding box 19*2fe279fdSBarry Smith - yr - vertical coordinate of upper right corner of bounding box 205c6c1daeSBarry Smith 215c6c1daeSBarry Smith Level: intermediate 225c6c1daeSBarry Smith 23811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 245c6c1daeSBarry Smith @*/ 25d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr) 26d71ae5a4SJacob Faibussowitsch { 275c6c1daeSBarry Smith PetscFunctionBegin; 285c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 298f69470aSLisandro Dalcin if (xl) PetscValidRealPointer(xl, 2); 308f69470aSLisandro Dalcin if (yl) PetscValidRealPointer(yl, 3); 318f69470aSLisandro Dalcin if (xr) PetscValidRealPointer(xr, 4); 328f69470aSLisandro Dalcin if (yr) PetscValidRealPointer(yr, 5); 335c6c1daeSBarry Smith if (xl) *xl = draw->boundbox_xl; 345c6c1daeSBarry Smith if (yl) *yl = draw->boundbox_yl; 355c6c1daeSBarry Smith if (xr) *xr = draw->boundbox_xr; 365c6c1daeSBarry Smith if (yr) *yr = draw->boundbox_yr; 373ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 385c6c1daeSBarry Smith } 395c6c1daeSBarry Smith 405c6c1daeSBarry Smith /*@ 415c6c1daeSBarry Smith PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 425c6c1daeSBarry Smith 4320f4b53cSBarry Smith Not Collective 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith Input Parameter: 465c6c1daeSBarry Smith . draw - the drawing context 475c6c1daeSBarry Smith 485c6c1daeSBarry Smith Output Parameters: 49*2fe279fdSBarry Smith + x - horizontal coordinate of the current point 50*2fe279fdSBarry Smith - y - vertical coordinate of the current point 515c6c1daeSBarry Smith 525c6c1daeSBarry Smith Level: intermediate 535c6c1daeSBarry Smith 54811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 555c6c1daeSBarry Smith @*/ 56d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y) 57d71ae5a4SJacob Faibussowitsch { 585c6c1daeSBarry Smith PetscFunctionBegin; 595c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 608f69470aSLisandro Dalcin PetscValidRealPointer(x, 2); 618f69470aSLisandro Dalcin PetscValidRealPointer(y, 3); 625c6c1daeSBarry Smith *x = draw->currentpoint_x[draw->currentpoint]; 635c6c1daeSBarry Smith *y = draw->currentpoint_y[draw->currentpoint]; 643ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 655c6c1daeSBarry Smith } 665c6c1daeSBarry Smith 675c6c1daeSBarry Smith /*@ 685c6c1daeSBarry Smith PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 695c6c1daeSBarry Smith 7020f4b53cSBarry Smith Not Collective 715c6c1daeSBarry Smith 725c6c1daeSBarry Smith Input Parameters: 735c6c1daeSBarry Smith + draw - the drawing context 74*2fe279fdSBarry Smith . x - horizontal coordinate of the current point 75*2fe279fdSBarry Smith - y - vertical coordinate of the current point 765c6c1daeSBarry Smith 775c6c1daeSBarry Smith Level: intermediate 785c6c1daeSBarry Smith 79811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 805c6c1daeSBarry Smith @*/ 81d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 82d71ae5a4SJacob Faibussowitsch { 835c6c1daeSBarry Smith PetscFunctionBegin; 845c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 855c6c1daeSBarry Smith draw->currentpoint_x[draw->currentpoint] = x; 865c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 873ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 885c6c1daeSBarry Smith } 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith /*@ 915c6c1daeSBarry Smith PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 925c6c1daeSBarry Smith 9320f4b53cSBarry Smith Not Collective 945c6c1daeSBarry Smith 955c6c1daeSBarry Smith Input Parameters: 965c6c1daeSBarry Smith + draw - the drawing context 97*2fe279fdSBarry Smith . x - horizontal coordinate of the current point 98*2fe279fdSBarry Smith - y - vertical coordinate of the current point 995c6c1daeSBarry Smith 1005c6c1daeSBarry Smith Level: intermediate 1015c6c1daeSBarry Smith 102811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 1035c6c1daeSBarry Smith @*/ 104d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 105d71ae5a4SJacob Faibussowitsch { 1065c6c1daeSBarry Smith PetscFunctionBegin; 1075c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 10808401ef6SPierre Jolivet PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points"); 1095c6c1daeSBarry Smith draw->currentpoint_x[++draw->currentpoint] = x; 1105c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 1113ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1125c6c1daeSBarry Smith } 1135c6c1daeSBarry Smith 1145c6c1daeSBarry Smith /*@ 1155c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1165c6c1daeSBarry Smith 11720f4b53cSBarry Smith Not Collective 1185c6c1daeSBarry Smith 1195c6c1daeSBarry Smith Input Parameter: 1205c6c1daeSBarry Smith . draw - the drawing context 1215c6c1daeSBarry Smith 1225c6c1daeSBarry Smith Level: intermediate 1235c6c1daeSBarry Smith 124811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()` 1255c6c1daeSBarry Smith @*/ 126d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 127d71ae5a4SJacob Faibussowitsch { 1285c6c1daeSBarry Smith PetscFunctionBegin; 1295c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 130cc73adaaSBarry Smith PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points"); 1313ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1325c6c1daeSBarry Smith } 1335c6c1daeSBarry Smith 1345c6c1daeSBarry Smith /*@ 135811af0c4SBarry Smith PetscDrawLine - draws a line onto a drawable. 1365c6c1daeSBarry Smith 13720f4b53cSBarry Smith Not Collective 1385c6c1daeSBarry Smith 1395c6c1daeSBarry Smith Input Parameters: 1405c6c1daeSBarry Smith + draw - the drawing context 141*2fe279fdSBarry Smith . xl - horizontal coordinate of first end point 142*2fe279fdSBarry Smith . yl - vertical coordinate of first end point 143*2fe279fdSBarry Smith . xr - horizontal coordinate of second end point 144*2fe279fdSBarry Smith . yr - vertical coordinate of second end point 1455c6c1daeSBarry Smith - cl - the colors of the endpoints 1465c6c1daeSBarry Smith 1475c6c1daeSBarry Smith Level: beginner 1485c6c1daeSBarry Smith 149811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 150db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1515c6c1daeSBarry Smith @*/ 152d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) 153d71ae5a4SJacob Faibussowitsch { 1545c6c1daeSBarry Smith PetscFunctionBegin; 1555c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 156dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl); 1573ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1585c6c1daeSBarry Smith } 1595c6c1daeSBarry Smith 1605c6c1daeSBarry Smith /*@ 161811af0c4SBarry Smith PetscDrawArrow - draws a line with arrow head at end if the line is long enough 1625c6c1daeSBarry Smith 16320f4b53cSBarry Smith Not Collective 1645c6c1daeSBarry Smith 1655c6c1daeSBarry Smith Input Parameters: 1665c6c1daeSBarry Smith + draw - the drawing context 167*2fe279fdSBarry Smith . xl - horizontal coordinate of first end point 168*2fe279fdSBarry Smith . yl - vertical coordinate of first end point 169*2fe279fdSBarry Smith . xr - horizontal coordinate of second end point 170*2fe279fdSBarry Smith . yr - vertical coordinate of second end point 1715c6c1daeSBarry Smith - cl - the colors of the endpoints 1725c6c1daeSBarry Smith 1735c6c1daeSBarry Smith Level: beginner 1745c6c1daeSBarry Smith 175811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 176db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1775c6c1daeSBarry Smith @*/ 178d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) 179d71ae5a4SJacob Faibussowitsch { 1805c6c1daeSBarry Smith PetscFunctionBegin; 1815c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 182dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl); 1833ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1845c6c1daeSBarry Smith } 1855c6c1daeSBarry Smith 1868f69470aSLisandro Dalcin /*@ 1878f69470aSLisandro Dalcin PetscDrawLineSetWidth - Sets the line width for future draws. The width is 1888f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 1898f69470aSLisandro Dalcin width; 1.0 denotes the entire viewport. 1908f69470aSLisandro Dalcin 19120f4b53cSBarry Smith Not Collective 1928f69470aSLisandro Dalcin 1938f69470aSLisandro Dalcin Input Parameters: 1948f69470aSLisandro Dalcin + draw - the drawing context 1958f69470aSLisandro Dalcin - width - the width in user coordinates 1968f69470aSLisandro Dalcin 1978f69470aSLisandro Dalcin Level: advanced 1988f69470aSLisandro Dalcin 199811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 2008f69470aSLisandro Dalcin @*/ 201d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) 202d71ae5a4SJacob Faibussowitsch { 2038f69470aSLisandro Dalcin PetscFunctionBegin; 2048f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 205dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, linesetwidth, width); 2063ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2078f69470aSLisandro Dalcin } 2088f69470aSLisandro Dalcin 2098f69470aSLisandro Dalcin /*@ 2108f69470aSLisandro Dalcin PetscDrawLineGetWidth - Gets the line width for future draws. The width is 2118f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 2128f69470aSLisandro Dalcin width; 1.0 denotes the interior viewport. 2138f69470aSLisandro Dalcin 21420f4b53cSBarry Smith Not Collective 2158f69470aSLisandro Dalcin 2168f69470aSLisandro Dalcin Input Parameter: 2178f69470aSLisandro Dalcin . draw - the drawing context 2188f69470aSLisandro Dalcin 2198f69470aSLisandro Dalcin Output Parameter: 2208f69470aSLisandro Dalcin . width - the width in user coordinates 2218f69470aSLisandro Dalcin 2228f69470aSLisandro Dalcin Level: advanced 2238f69470aSLisandro Dalcin 224811af0c4SBarry Smith Note: 2258f69470aSLisandro Dalcin Not currently implemented. 2268f69470aSLisandro Dalcin 227811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 2288f69470aSLisandro Dalcin @*/ 229d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) 230d71ae5a4SJacob Faibussowitsch { 2318f69470aSLisandro Dalcin PetscFunctionBegin; 2328f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 233064a246eSJacob Faibussowitsch PetscValidRealPointer(width, 2); 234dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, linegetwidth, width); 2353ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 2368f69470aSLisandro Dalcin } 237