xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 064a246e8b5c1f87897a54b4a9ec05181ea08258)
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);
102ec007e15SMatthew G. Knepley   if (draw->currentpoint > 19) SETERRQ(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);
1245c6c1daeSBarry Smith   if (draw->currentpoint-- == 0) SETERRQ(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 
1405c6c1daeSBarry Smith 
141ba1e01c4SBarry Smith .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
142ba1e01c4SBarry Smith           PetscDrawMarker(), PetscDrawPoint()
143ba1e01c4SBarry Smith 
1445c6c1daeSBarry Smith @*/
1455c6c1daeSBarry Smith PetscErrorCode  PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
1465c6c1daeSBarry Smith {
1475c6c1daeSBarry Smith   PetscErrorCode ierr;
1485c6c1daeSBarry Smith 
1495c6c1daeSBarry Smith   PetscFunctionBegin;
1505c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
1518f69470aSLisandro 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);
1525c6c1daeSBarry Smith   ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
1535c6c1daeSBarry Smith   PetscFunctionReturn(0);
1545c6c1daeSBarry Smith }
1555c6c1daeSBarry Smith 
1565c6c1daeSBarry Smith /*@
1575c6c1daeSBarry Smith    PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough
1585c6c1daeSBarry Smith 
1595c6c1daeSBarry Smith    Not collective
1605c6c1daeSBarry Smith 
1615c6c1daeSBarry Smith    Input Parameters:
1625c6c1daeSBarry Smith +  draw - the drawing context
1635c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1645c6c1daeSBarry Smith -  cl - the colors of the endpoints
1655c6c1daeSBarry Smith 
1665c6c1daeSBarry Smith    Level: beginner
1675c6c1daeSBarry Smith 
1685c6c1daeSBarry Smith 
169ba1e01c4SBarry Smith .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
170ba1e01c4SBarry Smith           PetscDrawMarker(), PetscDrawPoint()
171ba1e01c4SBarry Smith 
1725c6c1daeSBarry Smith @*/
1735c6c1daeSBarry Smith PetscErrorCode  PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
1745c6c1daeSBarry Smith {
1755c6c1daeSBarry Smith   PetscErrorCode ierr;
1765c6c1daeSBarry Smith 
1775c6c1daeSBarry Smith   PetscFunctionBegin;
1785c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
1798f69470aSLisandro 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);
1805c6c1daeSBarry Smith   ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
1815c6c1daeSBarry Smith   PetscFunctionReturn(0);
1825c6c1daeSBarry Smith }
1835c6c1daeSBarry Smith 
1848f69470aSLisandro Dalcin /*@
1858f69470aSLisandro Dalcin    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
1868f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1878f69470aSLisandro Dalcin    width; 1.0 denotes the entire viewport.
1888f69470aSLisandro Dalcin 
1898f69470aSLisandro Dalcin    Not collective
1908f69470aSLisandro Dalcin 
1918f69470aSLisandro Dalcin    Input Parameters:
1928f69470aSLisandro Dalcin +  draw - the drawing context
1938f69470aSLisandro Dalcin -  width - the width in user coordinates
1948f69470aSLisandro Dalcin 
1958f69470aSLisandro Dalcin    Level: advanced
1968f69470aSLisandro Dalcin 
197ba1e01c4SBarry Smith .seealso:  PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow()
1988f69470aSLisandro Dalcin @*/
1998f69470aSLisandro Dalcin PetscErrorCode  PetscDrawLineSetWidth(PetscDraw draw,PetscReal width)
2008f69470aSLisandro Dalcin {
2018f69470aSLisandro Dalcin   PetscErrorCode ierr;
2028f69470aSLisandro Dalcin 
2038f69470aSLisandro Dalcin   PetscFunctionBegin;
2048f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
2058f69470aSLisandro Dalcin   if (draw->ops->linesetwidth) {
2068f69470aSLisandro Dalcin     ierr = (*draw->ops->linesetwidth)(draw,width);CHKERRQ(ierr);
2078f69470aSLisandro Dalcin   }
2088f69470aSLisandro Dalcin   PetscFunctionReturn(0);
2098f69470aSLisandro Dalcin }
2108f69470aSLisandro Dalcin 
2118f69470aSLisandro Dalcin /*@
2128f69470aSLisandro Dalcin    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
2138f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
2148f69470aSLisandro Dalcin    width; 1.0 denotes the interior viewport.
2158f69470aSLisandro Dalcin 
2168f69470aSLisandro Dalcin    Not collective
2178f69470aSLisandro Dalcin 
2188f69470aSLisandro Dalcin    Input Parameter:
2198f69470aSLisandro Dalcin .  draw - the drawing context
2208f69470aSLisandro Dalcin 
2218f69470aSLisandro Dalcin    Output Parameter:
2228f69470aSLisandro Dalcin .  width - the width in user coordinates
2238f69470aSLisandro Dalcin 
2248f69470aSLisandro Dalcin    Level: advanced
2258f69470aSLisandro Dalcin 
2268f69470aSLisandro Dalcin    Notes:
2278f69470aSLisandro Dalcin    Not currently implemented.
2288f69470aSLisandro Dalcin 
229ba1e01c4SBarry Smith .seealso:  PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow()
2308f69470aSLisandro Dalcin @*/
2318f69470aSLisandro Dalcin PetscErrorCode  PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width)
2328f69470aSLisandro Dalcin {
2338f69470aSLisandro Dalcin   PetscErrorCode ierr;
2348f69470aSLisandro Dalcin 
2358f69470aSLisandro Dalcin   PetscFunctionBegin;
2368f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
237*064a246eSJacob Faibussowitsch   PetscValidRealPointer(width,2);
2388f69470aSLisandro 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);
2398f69470aSLisandro Dalcin   ierr = (*draw->ops->linegetwidth)(draw,width);CHKERRQ(ierr);
2408f69470aSLisandro Dalcin   PetscFunctionReturn(0);
2418f69470aSLisandro Dalcin }
2428f69470aSLisandro Dalcin 
243