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 /*@ 8*811af0c4SBarry Smith PetscDrawGetBoundingBox - Gets the bounding box of all `PetscDrawStringBoxed()` commands 95c6c1daeSBarry Smith 105c6c1daeSBarry 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 20*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 215c6c1daeSBarry Smith @*/ 229371c9d4SSatish Balay PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr) { 235c6c1daeSBarry Smith PetscFunctionBegin; 245c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 258f69470aSLisandro Dalcin if (xl) PetscValidRealPointer(xl, 2); 268f69470aSLisandro Dalcin if (yl) PetscValidRealPointer(yl, 3); 278f69470aSLisandro Dalcin if (xr) PetscValidRealPointer(xr, 4); 288f69470aSLisandro Dalcin if (yr) PetscValidRealPointer(yr, 5); 295c6c1daeSBarry Smith if (xl) *xl = draw->boundbox_xl; 305c6c1daeSBarry Smith if (yl) *yl = draw->boundbox_yl; 315c6c1daeSBarry Smith if (xr) *xr = draw->boundbox_xr; 325c6c1daeSBarry Smith if (yr) *yr = draw->boundbox_yr; 335c6c1daeSBarry Smith PetscFunctionReturn(0); 345c6c1daeSBarry Smith } 355c6c1daeSBarry Smith 365c6c1daeSBarry Smith /*@ 375c6c1daeSBarry Smith PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 385c6c1daeSBarry Smith 395c6c1daeSBarry Smith Not collective 405c6c1daeSBarry Smith 415c6c1daeSBarry Smith Input Parameter: 425c6c1daeSBarry Smith . draw - the drawing context 435c6c1daeSBarry Smith 445c6c1daeSBarry Smith Output Parameters: 455c6c1daeSBarry Smith . x,y - the current point 465c6c1daeSBarry Smith 475c6c1daeSBarry Smith Level: intermediate 485c6c1daeSBarry Smith 49*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 505c6c1daeSBarry Smith @*/ 519371c9d4SSatish Balay PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y) { 525c6c1daeSBarry Smith PetscFunctionBegin; 535c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 548f69470aSLisandro Dalcin PetscValidRealPointer(x, 2); 558f69470aSLisandro Dalcin PetscValidRealPointer(y, 3); 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 /*@ 625c6c1daeSBarry Smith PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 635c6c1daeSBarry Smith 645c6c1daeSBarry Smith Not collective 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith Input Parameters: 675c6c1daeSBarry Smith + draw - the drawing context 685c6c1daeSBarry Smith - x,y - the location of the current point 695c6c1daeSBarry Smith 705c6c1daeSBarry Smith Level: intermediate 715c6c1daeSBarry Smith 72*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 735c6c1daeSBarry Smith @*/ 749371c9d4SSatish Balay PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) { 755c6c1daeSBarry Smith PetscFunctionBegin; 765c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 775c6c1daeSBarry Smith draw->currentpoint_x[draw->currentpoint] = x; 785c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 795c6c1daeSBarry Smith PetscFunctionReturn(0); 805c6c1daeSBarry Smith } 815c6c1daeSBarry Smith 825c6c1daeSBarry Smith /*@ 835c6c1daeSBarry Smith PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith Not collective 865c6c1daeSBarry Smith 875c6c1daeSBarry Smith Input Parameters: 885c6c1daeSBarry Smith + draw - the drawing context 895c6c1daeSBarry Smith - x,y - the location of the current point 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith Level: intermediate 925c6c1daeSBarry Smith 93*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 945c6c1daeSBarry Smith @*/ 959371c9d4SSatish Balay PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) { 965c6c1daeSBarry Smith PetscFunctionBegin; 975c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 9808401ef6SPierre Jolivet PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points"); 995c6c1daeSBarry Smith draw->currentpoint_x[++draw->currentpoint] = x; 1005c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 1015c6c1daeSBarry Smith PetscFunctionReturn(0); 1025c6c1daeSBarry Smith } 1035c6c1daeSBarry Smith 1045c6c1daeSBarry Smith /*@ 1055c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1065c6c1daeSBarry Smith 1075c6c1daeSBarry Smith Not collective 1085c6c1daeSBarry Smith 1095c6c1daeSBarry Smith Input Parameter: 1105c6c1daeSBarry Smith . draw - the drawing context 1115c6c1daeSBarry Smith 1125c6c1daeSBarry Smith Level: intermediate 1135c6c1daeSBarry Smith 114*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()` 1155c6c1daeSBarry Smith @*/ 1169371c9d4SSatish Balay PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) { 1175c6c1daeSBarry Smith PetscFunctionBegin; 1185c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 119cc73adaaSBarry Smith PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points"); 1205c6c1daeSBarry Smith PetscFunctionReturn(0); 1215c6c1daeSBarry Smith } 1225c6c1daeSBarry Smith 1235c6c1daeSBarry Smith /*@ 124*811af0c4SBarry Smith PetscDrawLine - draws a line onto a drawable. 1255c6c1daeSBarry Smith 1265c6c1daeSBarry Smith Not collective 1275c6c1daeSBarry Smith 1285c6c1daeSBarry Smith Input Parameters: 1295c6c1daeSBarry Smith + draw - the drawing context 1305c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1315c6c1daeSBarry Smith - cl - the colors of the endpoints 1325c6c1daeSBarry Smith 1335c6c1daeSBarry Smith Level: beginner 1345c6c1daeSBarry Smith 135*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 136db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1375c6c1daeSBarry Smith @*/ 1389371c9d4SSatish Balay PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) { 1395c6c1daeSBarry Smith PetscFunctionBegin; 1405c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 141dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl); 1425c6c1daeSBarry Smith PetscFunctionReturn(0); 1435c6c1daeSBarry Smith } 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith /*@ 146*811af0c4SBarry Smith PetscDrawArrow - draws a line with arrow head at end if the line is long enough 1475c6c1daeSBarry Smith 1485c6c1daeSBarry Smith Not collective 1495c6c1daeSBarry Smith 1505c6c1daeSBarry Smith Input Parameters: 1515c6c1daeSBarry Smith + draw - the drawing context 1525c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1535c6c1daeSBarry Smith - cl - the colors of the endpoints 1545c6c1daeSBarry Smith 1555c6c1daeSBarry Smith Level: beginner 1565c6c1daeSBarry Smith 157*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 158db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 1595c6c1daeSBarry Smith @*/ 1609371c9d4SSatish Balay PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) { 1615c6c1daeSBarry Smith PetscFunctionBegin; 1625c6c1daeSBarry Smith PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 163dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl); 1645c6c1daeSBarry Smith PetscFunctionReturn(0); 1655c6c1daeSBarry Smith } 1665c6c1daeSBarry Smith 1678f69470aSLisandro Dalcin /*@ 1688f69470aSLisandro Dalcin PetscDrawLineSetWidth - Sets the line width for future draws. The width is 1698f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 1708f69470aSLisandro Dalcin width; 1.0 denotes the entire viewport. 1718f69470aSLisandro Dalcin 1728f69470aSLisandro Dalcin Not collective 1738f69470aSLisandro Dalcin 1748f69470aSLisandro Dalcin Input Parameters: 1758f69470aSLisandro Dalcin + draw - the drawing context 1768f69470aSLisandro Dalcin - width - the width in user coordinates 1778f69470aSLisandro Dalcin 1788f69470aSLisandro Dalcin Level: advanced 1798f69470aSLisandro Dalcin 180*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 1818f69470aSLisandro Dalcin @*/ 1829371c9d4SSatish Balay PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) { 1838f69470aSLisandro Dalcin PetscFunctionBegin; 1848f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 185dbbe0bcdSBarry Smith PetscTryTypeMethod(draw, linesetwidth, width); 1868f69470aSLisandro Dalcin PetscFunctionReturn(0); 1878f69470aSLisandro Dalcin } 1888f69470aSLisandro Dalcin 1898f69470aSLisandro Dalcin /*@ 1908f69470aSLisandro Dalcin PetscDrawLineGetWidth - Gets the line width for future draws. The width is 1918f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 1928f69470aSLisandro Dalcin width; 1.0 denotes the interior viewport. 1938f69470aSLisandro Dalcin 1948f69470aSLisandro Dalcin Not collective 1958f69470aSLisandro Dalcin 1968f69470aSLisandro Dalcin Input Parameter: 1978f69470aSLisandro Dalcin . draw - the drawing context 1988f69470aSLisandro Dalcin 1998f69470aSLisandro Dalcin Output Parameter: 2008f69470aSLisandro Dalcin . width - the width in user coordinates 2018f69470aSLisandro Dalcin 2028f69470aSLisandro Dalcin Level: advanced 2038f69470aSLisandro Dalcin 204*811af0c4SBarry Smith Note: 2058f69470aSLisandro Dalcin Not currently implemented. 2068f69470aSLisandro Dalcin 207*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 2088f69470aSLisandro Dalcin @*/ 2099371c9d4SSatish Balay PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) { 2108f69470aSLisandro Dalcin PetscFunctionBegin; 2118f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 212064a246eSJacob Faibussowitsch PetscValidRealPointer(width, 2); 213dbbe0bcdSBarry Smith PetscUseTypeMethod(draw, linegetwidth, width); 2148f69470aSLisandro Dalcin PetscFunctionReturn(0); 2158f69470aSLisandro Dalcin } 216