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 #undef __FUNCT__ 85c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetBoundingBox" 95c6c1daeSBarry Smith /*@ 1051fa3d41SBarry 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); 288f69470aSLisandro Dalcin if (xl) PetscValidRealPointer(xl,2); 298f69470aSLisandro Dalcin if (yl) PetscValidRealPointer(yl,3); 308f69470aSLisandro Dalcin if (xr) PetscValidRealPointer(xr,4); 318f69470aSLisandro Dalcin if (yr) PetscValidRealPointer(yr,5); 325c6c1daeSBarry Smith if (xl) *xl = draw->boundbox_xl; 335c6c1daeSBarry Smith if (yl) *yl = draw->boundbox_yl; 345c6c1daeSBarry Smith if (xr) *xr = draw->boundbox_xr; 355c6c1daeSBarry Smith if (yr) *yr = draw->boundbox_yr; 365c6c1daeSBarry Smith PetscFunctionReturn(0); 375c6c1daeSBarry Smith } 385c6c1daeSBarry Smith 395c6c1daeSBarry Smith #undef __FUNCT__ 405c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetCurrentPoint" 415c6c1daeSBarry Smith /*@ 425c6c1daeSBarry Smith PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 435c6c1daeSBarry Smith 445c6c1daeSBarry Smith Not collective 455c6c1daeSBarry Smith 465c6c1daeSBarry Smith Input Parameter: 475c6c1daeSBarry Smith . draw - the drawing context 485c6c1daeSBarry Smith 495c6c1daeSBarry Smith Output Parameters: 505c6c1daeSBarry Smith . x,y - the current point 515c6c1daeSBarry Smith 525c6c1daeSBarry Smith Level: intermediate 535c6c1daeSBarry Smith 545c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint() 555c6c1daeSBarry Smith @*/ 565c6c1daeSBarry Smith PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw,PetscReal *x,PetscReal *y) 575c6c1daeSBarry Smith { 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]; 645c6c1daeSBarry Smith PetscFunctionReturn(0); 655c6c1daeSBarry Smith } 665c6c1daeSBarry Smith 675c6c1daeSBarry Smith #undef __FUNCT__ 685c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetCurrentPoint" 695c6c1daeSBarry Smith /*@ 705c6c1daeSBarry Smith PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 715c6c1daeSBarry Smith 725c6c1daeSBarry Smith Not collective 735c6c1daeSBarry Smith 745c6c1daeSBarry Smith Input Parameters: 755c6c1daeSBarry Smith + draw - the drawing context 765c6c1daeSBarry Smith - x,y - the location of the current point 775c6c1daeSBarry Smith 785c6c1daeSBarry Smith Level: intermediate 795c6c1daeSBarry Smith 805c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 815c6c1daeSBarry Smith @*/ 825c6c1daeSBarry Smith PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 835c6c1daeSBarry Smith { 845c6c1daeSBarry Smith PetscFunctionBegin; 855c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 865c6c1daeSBarry Smith draw->currentpoint_x[draw->currentpoint] = x; 875c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 885c6c1daeSBarry Smith PetscFunctionReturn(0); 895c6c1daeSBarry Smith } 905c6c1daeSBarry Smith 915c6c1daeSBarry Smith #undef __FUNCT__ 925c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPushCurrentPoint" 935c6c1daeSBarry Smith /*@ 945c6c1daeSBarry Smith PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 955c6c1daeSBarry Smith 965c6c1daeSBarry Smith Not collective 975c6c1daeSBarry Smith 985c6c1daeSBarry Smith Input Parameters: 995c6c1daeSBarry Smith + draw - the drawing context 1005c6c1daeSBarry Smith - x,y - the location of the current point 1015c6c1daeSBarry Smith 1025c6c1daeSBarry Smith Level: intermediate 1035c6c1daeSBarry Smith 1045c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 1055c6c1daeSBarry Smith @*/ 1065c6c1daeSBarry Smith PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 1075c6c1daeSBarry Smith { 1085c6c1daeSBarry Smith PetscFunctionBegin; 1095c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 110ec007e15SMatthew G. Knepley if (draw->currentpoint > 19) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have pushed too many current points"); 1115c6c1daeSBarry Smith draw->currentpoint_x[++draw->currentpoint] = x; 1125c6c1daeSBarry Smith draw->currentpoint_y[draw->currentpoint] = y; 1135c6c1daeSBarry Smith PetscFunctionReturn(0); 1145c6c1daeSBarry Smith } 1155c6c1daeSBarry Smith 1165c6c1daeSBarry Smith #undef __FUNCT__ 1175c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPopCurrentPoint" 1185c6c1daeSBarry Smith /*@ 1195c6c1daeSBarry Smith PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 1205c6c1daeSBarry Smith 1215c6c1daeSBarry Smith Not collective 1225c6c1daeSBarry Smith 1235c6c1daeSBarry Smith Input Parameter: 1245c6c1daeSBarry Smith . draw - the drawing context 1255c6c1daeSBarry Smith 1265c6c1daeSBarry Smith Level: intermediate 1275c6c1daeSBarry Smith 1285c6c1daeSBarry Smith .seealso: PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint() 1295c6c1daeSBarry Smith @*/ 1305c6c1daeSBarry Smith PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 1315c6c1daeSBarry Smith { 1325c6c1daeSBarry Smith PetscFunctionBegin; 1335c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1345c6c1daeSBarry Smith if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points"); 1355c6c1daeSBarry Smith PetscFunctionReturn(0); 1365c6c1daeSBarry Smith } 1375c6c1daeSBarry Smith 1385c6c1daeSBarry Smith #undef __FUNCT__ 1395c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawLine" 1405c6c1daeSBarry Smith /*@ 1415c6c1daeSBarry Smith PetscDrawLine - PetscDraws a line onto a drawable. 1425c6c1daeSBarry Smith 1435c6c1daeSBarry Smith Not collective 1445c6c1daeSBarry Smith 1455c6c1daeSBarry Smith Input Parameters: 1465c6c1daeSBarry Smith + draw - the drawing context 1475c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1485c6c1daeSBarry Smith - cl - the colors of the endpoints 1495c6c1daeSBarry Smith 1505c6c1daeSBarry Smith Level: beginner 1515c6c1daeSBarry Smith 1525c6c1daeSBarry Smith Concepts: line^drawing 1535c6c1daeSBarry Smith Concepts: drawing^line 1545c6c1daeSBarry Smith 155*ba1e01c4SBarry Smith .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 156*ba1e01c4SBarry Smith PetscDrawMarker(), PetscDrawPoint() 157*ba1e01c4SBarry Smith 1585c6c1daeSBarry Smith @*/ 1595c6c1daeSBarry Smith PetscErrorCode PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1605c6c1daeSBarry Smith { 1615c6c1daeSBarry Smith PetscErrorCode ierr; 1625c6c1daeSBarry Smith 1635c6c1daeSBarry Smith PetscFunctionBegin; 1645c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1658f69470aSLisandro Dalcin if (!draw->ops->line) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing lines",((PetscObject)draw)->type_name); 1665c6c1daeSBarry Smith ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 1675c6c1daeSBarry Smith PetscFunctionReturn(0); 1685c6c1daeSBarry Smith } 1695c6c1daeSBarry Smith 1705c6c1daeSBarry Smith #undef __FUNCT__ 1715c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawArrow" 1725c6c1daeSBarry Smith /*@ 1735c6c1daeSBarry Smith PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough 1745c6c1daeSBarry Smith 1755c6c1daeSBarry Smith Not collective 1765c6c1daeSBarry Smith 1775c6c1daeSBarry Smith Input Parameters: 1785c6c1daeSBarry Smith + draw - the drawing context 1795c6c1daeSBarry Smith . xl,yl,xr,yr - the coordinates of the line endpoints 1805c6c1daeSBarry Smith - cl - the colors of the endpoints 1815c6c1daeSBarry Smith 1825c6c1daeSBarry Smith Level: beginner 1835c6c1daeSBarry Smith 1845c6c1daeSBarry Smith Concepts: line^drawing 1855c6c1daeSBarry Smith Concepts: drawing^line 1865c6c1daeSBarry Smith 187*ba1e01c4SBarry Smith .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 188*ba1e01c4SBarry Smith PetscDrawMarker(), PetscDrawPoint() 189*ba1e01c4SBarry Smith 1905c6c1daeSBarry Smith @*/ 1915c6c1daeSBarry Smith PetscErrorCode PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 1925c6c1daeSBarry Smith { 1935c6c1daeSBarry Smith PetscErrorCode ierr; 1945c6c1daeSBarry Smith 1955c6c1daeSBarry Smith PetscFunctionBegin; 1965c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 1978f69470aSLisandro Dalcin if (!draw->ops->arrow) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing arrows",((PetscObject)draw)->type_name); 1985c6c1daeSBarry Smith ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 1995c6c1daeSBarry Smith PetscFunctionReturn(0); 2005c6c1daeSBarry Smith } 2015c6c1daeSBarry Smith 2028f69470aSLisandro Dalcin #undef __FUNCT__ 2038f69470aSLisandro Dalcin #define __FUNCT__ "PetscDrawLineSetWidth" 2048f69470aSLisandro Dalcin /*@ 2058f69470aSLisandro Dalcin PetscDrawLineSetWidth - Sets the line width for future draws. The width is 2068f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 2078f69470aSLisandro Dalcin width; 1.0 denotes the entire viewport. 2088f69470aSLisandro Dalcin 2098f69470aSLisandro Dalcin Not collective 2108f69470aSLisandro Dalcin 2118f69470aSLisandro Dalcin Input Parameters: 2128f69470aSLisandro Dalcin + draw - the drawing context 2138f69470aSLisandro Dalcin - width - the width in user coordinates 2148f69470aSLisandro Dalcin 2158f69470aSLisandro Dalcin Level: advanced 2168f69470aSLisandro Dalcin 2178f69470aSLisandro Dalcin Concepts: line^width 2188f69470aSLisandro Dalcin 219*ba1e01c4SBarry Smith .seealso: PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow() 2208f69470aSLisandro Dalcin @*/ 2218f69470aSLisandro Dalcin PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw,PetscReal width) 2228f69470aSLisandro Dalcin { 2238f69470aSLisandro Dalcin PetscErrorCode ierr; 2248f69470aSLisandro Dalcin 2258f69470aSLisandro Dalcin PetscFunctionBegin; 2268f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2278f69470aSLisandro Dalcin if (draw->ops->linesetwidth) { 2288f69470aSLisandro Dalcin ierr = (*draw->ops->linesetwidth)(draw,width);CHKERRQ(ierr); 2298f69470aSLisandro Dalcin } 2308f69470aSLisandro Dalcin PetscFunctionReturn(0); 2318f69470aSLisandro Dalcin } 2328f69470aSLisandro Dalcin 2338f69470aSLisandro Dalcin #undef __FUNCT__ 2348f69470aSLisandro Dalcin #define __FUNCT__ "PetscDrawLineGetWidth" 2358f69470aSLisandro Dalcin /*@ 2368f69470aSLisandro Dalcin PetscDrawLineGetWidth - Gets the line width for future draws. The width is 2378f69470aSLisandro Dalcin relative to the user coordinates of the window; 0.0 denotes the natural 2388f69470aSLisandro Dalcin width; 1.0 denotes the interior viewport. 2398f69470aSLisandro Dalcin 2408f69470aSLisandro Dalcin Not collective 2418f69470aSLisandro Dalcin 2428f69470aSLisandro Dalcin Input Parameter: 2438f69470aSLisandro Dalcin . draw - the drawing context 2448f69470aSLisandro Dalcin 2458f69470aSLisandro Dalcin Output Parameter: 2468f69470aSLisandro Dalcin . width - the width in user coordinates 2478f69470aSLisandro Dalcin 2488f69470aSLisandro Dalcin Level: advanced 2498f69470aSLisandro Dalcin 2508f69470aSLisandro Dalcin Notes: 2518f69470aSLisandro Dalcin Not currently implemented. 2528f69470aSLisandro Dalcin 2538f69470aSLisandro Dalcin Concepts: line^width 2548f69470aSLisandro Dalcin 255*ba1e01c4SBarry Smith .seealso: PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow() 2568f69470aSLisandro Dalcin @*/ 2578f69470aSLisandro Dalcin PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width) 2588f69470aSLisandro Dalcin { 2598f69470aSLisandro Dalcin PetscErrorCode ierr; 2608f69470aSLisandro Dalcin 2618f69470aSLisandro Dalcin PetscFunctionBegin; 2628f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 2638f69470aSLisandro Dalcin PetscValidScalarPointer(width,2); 2648f69470aSLisandro Dalcin if (!draw->ops->linegetwidth) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support getting line width",((PetscObject)draw)->type_name); 2658f69470aSLisandro Dalcin ierr = (*draw->ops->linegetwidth)(draw,width);CHKERRQ(ierr); 2668f69470aSLisandro Dalcin PetscFunctionReturn(0); 2678f69470aSLisandro Dalcin } 2688f69470aSLisandro Dalcin 269