xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 51fa3d41ed3feb8cf78b09fc9e5a282491d54f25)
15c6c1daeSBarry Smith 
25c6c1daeSBarry Smith /*
35c6c1daeSBarry Smith        Provides the calling sequences for all the basic PetscDraw routines.
45c6c1daeSBarry Smith */
55c6c1daeSBarry Smith #include <petsc-private/drawimpl.h>  /*I "petscdraw.h" I*/
65c6c1daeSBarry Smith 
75c6c1daeSBarry Smith #undef __FUNCT__
85c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetBoundingBox"
95c6c1daeSBarry Smith /*@
10*51fa3d41SBarry 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);
285c6c1daeSBarry Smith   if (xl) *xl = draw->boundbox_xl;
295c6c1daeSBarry Smith   if (yl) *yl = draw->boundbox_yl;
305c6c1daeSBarry Smith   if (xr) *xr = draw->boundbox_xr;
315c6c1daeSBarry Smith   if (yr) *yr = draw->boundbox_yr;
325c6c1daeSBarry Smith   PetscFunctionReturn(0);
335c6c1daeSBarry Smith }
345c6c1daeSBarry Smith 
355c6c1daeSBarry Smith #undef __FUNCT__
365c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetCurrentPoint"
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);
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 #undef __FUNCT__
625c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetCurrentPoint"
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 #undef __FUNCT__
865c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPushCurrentPoint"
875c6c1daeSBarry Smith /*@
885c6c1daeSBarry Smith    PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next
895c6c1daeSBarry Smith 
905c6c1daeSBarry Smith    Not collective
915c6c1daeSBarry Smith 
925c6c1daeSBarry Smith    Input Parameters:
935c6c1daeSBarry Smith +  draw - the drawing context
945c6c1daeSBarry Smith -  x,y - the location of the current point
955c6c1daeSBarry Smith 
965c6c1daeSBarry Smith    Level: intermediate
975c6c1daeSBarry Smith 
985c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint()
995c6c1daeSBarry Smith @*/
1005c6c1daeSBarry Smith PetscErrorCode  PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y)
1015c6c1daeSBarry Smith {
1025c6c1daeSBarry Smith   PetscFunctionBegin;
1035c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
104ec007e15SMatthew G. Knepley   if (draw->currentpoint > 19) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have pushed too many current points");
1055c6c1daeSBarry Smith   draw->currentpoint_x[++draw->currentpoint] = x;
1065c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint]   = y;
1075c6c1daeSBarry Smith   PetscFunctionReturn(0);
1085c6c1daeSBarry Smith }
1095c6c1daeSBarry Smith 
1105c6c1daeSBarry Smith #undef __FUNCT__
1115c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPopCurrentPoint"
1125c6c1daeSBarry Smith /*@
1135c6c1daeSBarry Smith    PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
1145c6c1daeSBarry Smith 
1155c6c1daeSBarry Smith    Not collective
1165c6c1daeSBarry Smith 
1175c6c1daeSBarry Smith    Input Parameter:
1185c6c1daeSBarry Smith .  draw - the drawing context
1195c6c1daeSBarry Smith 
1205c6c1daeSBarry Smith    Level: intermediate
1215c6c1daeSBarry Smith 
1225c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint()
1235c6c1daeSBarry Smith @*/
1245c6c1daeSBarry Smith PetscErrorCode  PetscDrawPopCurrentPoint(PetscDraw draw)
1255c6c1daeSBarry Smith {
1265c6c1daeSBarry Smith   PetscFunctionBegin;
1275c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
1285c6c1daeSBarry Smith   if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points");
1295c6c1daeSBarry Smith   PetscFunctionReturn(0);
1305c6c1daeSBarry Smith }
1315c6c1daeSBarry Smith 
1325c6c1daeSBarry Smith #undef __FUNCT__
1335c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawLine"
1345c6c1daeSBarry Smith /*@
1355c6c1daeSBarry Smith    PetscDrawLine - PetscDraws a line onto a drawable.
1365c6c1daeSBarry Smith 
1375c6c1daeSBarry Smith    Not collective
1385c6c1daeSBarry Smith 
1395c6c1daeSBarry Smith    Input Parameters:
1405c6c1daeSBarry Smith +  draw - the drawing context
1415c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1425c6c1daeSBarry Smith -  cl - the colors of the endpoints
1435c6c1daeSBarry Smith 
1445c6c1daeSBarry Smith    Level: beginner
1455c6c1daeSBarry Smith 
1465c6c1daeSBarry Smith    Concepts: line^drawing
1475c6c1daeSBarry Smith    Concepts: drawing^line
1485c6c1daeSBarry Smith 
1495c6c1daeSBarry Smith @*/
1505c6c1daeSBarry Smith PetscErrorCode  PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
1515c6c1daeSBarry Smith {
1525c6c1daeSBarry Smith   PetscErrorCode ierr;
1535c6c1daeSBarry Smith   PetscBool      isdrawnull;
1545c6c1daeSBarry Smith 
1555c6c1daeSBarry Smith   PetscFunctionBegin;
1565c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
1575c6c1daeSBarry Smith   ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr);
1585c6c1daeSBarry Smith   if (isdrawnull) PetscFunctionReturn(0);
159ce94432eSBarry Smith   if (!draw->ops->line) SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing lines");
1605c6c1daeSBarry Smith   ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
1615c6c1daeSBarry Smith   PetscFunctionReturn(0);
1625c6c1daeSBarry Smith }
1635c6c1daeSBarry Smith 
1645c6c1daeSBarry Smith #undef __FUNCT__
1655c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawArrow"
1665c6c1daeSBarry Smith /*@
1675c6c1daeSBarry Smith    PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough
1685c6c1daeSBarry Smith 
1695c6c1daeSBarry Smith    Not collective
1705c6c1daeSBarry Smith 
1715c6c1daeSBarry Smith    Input Parameters:
1725c6c1daeSBarry Smith +  draw - the drawing context
1735c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1745c6c1daeSBarry Smith -  cl - the colors of the endpoints
1755c6c1daeSBarry Smith 
1765c6c1daeSBarry Smith    Level: beginner
1775c6c1daeSBarry Smith 
1785c6c1daeSBarry Smith    Concepts: line^drawing
1795c6c1daeSBarry Smith    Concepts: drawing^line
1805c6c1daeSBarry Smith 
1815c6c1daeSBarry Smith @*/
1825c6c1daeSBarry Smith PetscErrorCode  PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
1835c6c1daeSBarry Smith {
1845c6c1daeSBarry Smith   PetscErrorCode ierr;
1855c6c1daeSBarry Smith   PetscBool      isdrawnull;
1865c6c1daeSBarry Smith 
1875c6c1daeSBarry Smith   PetscFunctionBegin;
1885c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
1895c6c1daeSBarry Smith   ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr);
1905c6c1daeSBarry Smith   if (isdrawnull) PetscFunctionReturn(0);
191ce94432eSBarry Smith   if (!draw->ops->arrow) SETERRQ(PetscObjectComm((PetscObject)draw),PETSC_ERR_SUP,"No support for drawing arrows");
1925c6c1daeSBarry Smith   ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
1935c6c1daeSBarry Smith   PetscFunctionReturn(0);
1945c6c1daeSBarry Smith }
1955c6c1daeSBarry Smith 
196