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 /*@ 851fa3d41SBarry 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 205c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint() 215c6c1daeSBarry Smith @*/ 225c6c1daeSBarry Smith PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr) 235c6c1daeSBarry Smith { 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; 345c6c1daeSBarry Smith PetscFunctionReturn(0); 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 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); 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]; 605c6c1daeSBarry Smith PetscFunctionReturn(0); 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 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 /*@ 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 885c6c1daeSBarry 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 965c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 975c6c1daeSBarry Smith @*/ 985c6c1daeSBarry Smith PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 995c6c1daeSBarry Smith { 1005c6c1daeSBarry Smith PetscFunctionBegin; 1015c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 102*08401ef6SPierre 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; 1055c6c1daeSBarry Smith PetscFunctionReturn(0); 1065c6c1daeSBarry Smith } 1075c6c1daeSBarry Smith 1085c6c1daeSBarry Smith /*@ 1095c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1105c6c1daeSBarry Smith 1115c6c1daeSBarry Smith Not collective 1125c6c1daeSBarry Smith 1135c6c1daeSBarry Smith Input Parameter: 1145c6c1daeSBarry Smith . draw - the drawing context 1155c6c1daeSBarry Smith 1165c6c1daeSBarry Smith Level: intermediate 1175c6c1daeSBarry Smith 1185c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint() 1195c6c1daeSBarry Smith @*/ 1205c6c1daeSBarry Smith PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 1215c6c1daeSBarry Smith { 1225c6c1daeSBarry Smith PetscFunctionBegin; 1235c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1242c71b3e2SJacob Faibussowitsch PetscCheckFalse(draw->currentpoint-- == 0,PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points"); 1255c6c1daeSBarry Smith PetscFunctionReturn(0); 1265c6c1daeSBarry Smith } 1275c6c1daeSBarry Smith 1285c6c1daeSBarry Smith /*@ 1295c6c1daeSBarry Smith PetscDrawLine - PetscDraws a line onto a drawable. 1305c6c1daeSBarry Smith 1315c6c1daeSBarry 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 140ba1e01c4SBarry Smith .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 141ba1e01c4SBarry Smith PetscDrawMarker(), PetscDrawPoint() 142ba1e01c4SBarry Smith 1435c6c1daeSBarry Smith @*/ 1445c6c1daeSBarry Smith PetscErrorCode PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1455c6c1daeSBarry Smith { 1465c6c1daeSBarry Smith PetscFunctionBegin; 1475c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 14828b400f6SJacob Faibussowitsch PetscCheck(draw->ops->line,PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing lines",((PetscObject)draw)->type_name); 1499566063dSJacob Faibussowitsch PetscCall((*draw->ops->line)(draw,xl,yl,xr,yr,cl)); 1505c6c1daeSBarry Smith PetscFunctionReturn(0); 1515c6c1daeSBarry Smith } 1525c6c1daeSBarry Smith 1535c6c1daeSBarry Smith /*@ 1545c6c1daeSBarry Smith PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough 1555c6c1daeSBarry Smith 1565c6c1daeSBarry Smith Not collective 1575c6c1daeSBarry Smith 1585c6c1daeSBarry Smith Input Parameters: 1595c6c1daeSBarry Smith + draw - the drawing context 1605c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1615c6c1daeSBarry Smith - cl - the colors of the endpoints 1625c6c1daeSBarry Smith 1635c6c1daeSBarry Smith Level: beginner 1645c6c1daeSBarry Smith 165ba1e01c4SBarry Smith .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 166ba1e01c4SBarry Smith PetscDrawMarker(), PetscDrawPoint() 167ba1e01c4SBarry Smith 1685c6c1daeSBarry Smith @*/ 1695c6c1daeSBarry Smith PetscErrorCode PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1705c6c1daeSBarry Smith { 1715c6c1daeSBarry Smith PetscFunctionBegin; 1725c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 17328b400f6SJacob Faibussowitsch PetscCheck(draw->ops->arrow,PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing arrows",((PetscObject)draw)->type_name); 1749566063dSJacob Faibussowitsch PetscCall((*draw->ops->arrow)(draw,xl,yl,xr,yr,cl)); 1755c6c1daeSBarry Smith PetscFunctionReturn(0); 1765c6c1daeSBarry Smith } 1775c6c1daeSBarry Smith 1788f69470aSLisandro Dalcin /*@ 1798f69470aSLisandro Dalcin PetscDrawLineSetWidth - Sets the line width for future draws. The width is 1808f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 1818f69470aSLisandro Dalcin width; 1.0 denotes the entire viewport. 1828f69470aSLisandro Dalcin 1838f69470aSLisandro Dalcin Not collective 1848f69470aSLisandro Dalcin 1858f69470aSLisandro Dalcin Input Parameters: 1868f69470aSLisandro Dalcin + draw - the drawing context 1878f69470aSLisandro Dalcin - width - the width in user coordinates 1888f69470aSLisandro Dalcin 1898f69470aSLisandro Dalcin Level: advanced 1908f69470aSLisandro Dalcin 191ba1e01c4SBarry Smith .seealso: PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow() 1928f69470aSLisandro Dalcin @*/ 1938f69470aSLisandro Dalcin PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw,PetscReal width) 1948f69470aSLisandro Dalcin { 1958f69470aSLisandro Dalcin PetscFunctionBegin; 1968f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1978f69470aSLisandro Dalcin if (draw->ops->linesetwidth) { 1989566063dSJacob Faibussowitsch PetscCall((*draw->ops->linesetwidth)(draw,width)); 1998f69470aSLisandro Dalcin } 2008f69470aSLisandro Dalcin PetscFunctionReturn(0); 2018f69470aSLisandro Dalcin } 2028f69470aSLisandro Dalcin 2038f69470aSLisandro Dalcin /*@ 2048f69470aSLisandro Dalcin PetscDrawLineGetWidth - Gets the line width for future draws. The width is 2058f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 2068f69470aSLisandro Dalcin width; 1.0 denotes the interior viewport. 2078f69470aSLisandro Dalcin 2088f69470aSLisandro Dalcin Not collective 2098f69470aSLisandro Dalcin 2108f69470aSLisandro Dalcin Input Parameter: 2118f69470aSLisandro Dalcin . draw - the drawing context 2128f69470aSLisandro Dalcin 2138f69470aSLisandro Dalcin Output Parameter: 2148f69470aSLisandro Dalcin . width - the width in user coordinates 2158f69470aSLisandro Dalcin 2168f69470aSLisandro Dalcin Level: advanced 2178f69470aSLisandro Dalcin 2188f69470aSLisandro Dalcin Notes: 2198f69470aSLisandro Dalcin Not currently implemented. 2208f69470aSLisandro Dalcin 221ba1e01c4SBarry Smith .seealso: PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow() 2228f69470aSLisandro Dalcin @*/ 2238f69470aSLisandro Dalcin PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width) 2248f69470aSLisandro Dalcin { 2258f69470aSLisandro Dalcin PetscFunctionBegin; 2268f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 227064a246eSJacob Faibussowitsch PetscValidRealPointer(width,2); 22828b400f6SJacob Faibussowitsch PetscCheck(draw->ops->linegetwidth,PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support getting line width",((PetscObject)draw)->type_name); 2299566063dSJacob Faibussowitsch PetscCall((*draw->ops->linegetwidth)(draw,width)); 2308f69470aSLisandro Dalcin PetscFunctionReturn(0); 2318f69470aSLisandro Dalcin } 232