xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 20f4b53cbb5e9bd9ef12b76a8697d60d197cda17)
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 /*@
8811af0c4SBarry Smith    PetscDrawGetBoundingBox - Gets the bounding box of all `PetscDrawStringBoxed()` commands
95c6c1daeSBarry Smith 
10*20f4b53cSBarry 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 
20811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
215c6c1daeSBarry Smith @*/
22d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr)
23d71ae5a4SJacob Faibussowitsch {
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;
343ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
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 
40*20f4b53cSBarry 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 
50811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
515c6c1daeSBarry Smith @*/
52d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y)
53d71ae5a4SJacob Faibussowitsch {
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];
603ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
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 
66*20f4b53cSBarry 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 
74811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
755c6c1daeSBarry Smith @*/
76d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
77d71ae5a4SJacob Faibussowitsch {
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;
823ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
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 
88*20f4b53cSBarry 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 
96811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
975c6c1daeSBarry Smith @*/
98d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
99d71ae5a4SJacob Faibussowitsch {
1005c6c1daeSBarry Smith   PetscFunctionBegin;
1015c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
10208401ef6SPierre 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;
1053ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1065c6c1daeSBarry Smith }
1075c6c1daeSBarry Smith 
1085c6c1daeSBarry Smith /*@
1095c6c1daeSBarry Smith    PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
1105c6c1daeSBarry Smith 
111*20f4b53cSBarry Smith    Not Collective
1125c6c1daeSBarry Smith 
1135c6c1daeSBarry Smith    Input Parameter:
1145c6c1daeSBarry Smith .  draw - the drawing context
1155c6c1daeSBarry Smith 
1165c6c1daeSBarry Smith    Level: intermediate
1175c6c1daeSBarry Smith 
118811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
1195c6c1daeSBarry Smith @*/
120d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw)
121d71ae5a4SJacob Faibussowitsch {
1225c6c1daeSBarry Smith   PetscFunctionBegin;
1235c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
124cc73adaaSBarry Smith   PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points");
1253ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1265c6c1daeSBarry Smith }
1275c6c1daeSBarry Smith 
1285c6c1daeSBarry Smith /*@
129811af0c4SBarry Smith    PetscDrawLine - draws a line onto a drawable.
1305c6c1daeSBarry Smith 
131*20f4b53cSBarry 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 
140811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
141db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1425c6c1daeSBarry Smith @*/
143d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
144d71ae5a4SJacob Faibussowitsch {
1455c6c1daeSBarry Smith   PetscFunctionBegin;
1465c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
147dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
1483ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1495c6c1daeSBarry Smith }
1505c6c1daeSBarry Smith 
1515c6c1daeSBarry Smith /*@
152811af0c4SBarry Smith    PetscDrawArrow - draws a line with arrow head at end if the line is long enough
1535c6c1daeSBarry Smith 
154*20f4b53cSBarry Smith    Not Collective
1555c6c1daeSBarry Smith 
1565c6c1daeSBarry Smith    Input Parameters:
1575c6c1daeSBarry Smith +  draw - the drawing context
1585c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1595c6c1daeSBarry Smith -  cl - the colors of the endpoints
1605c6c1daeSBarry Smith 
1615c6c1daeSBarry Smith    Level: beginner
1625c6c1daeSBarry Smith 
163811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
164db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1655c6c1daeSBarry Smith @*/
166d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
167d71ae5a4SJacob Faibussowitsch {
1685c6c1daeSBarry Smith   PetscFunctionBegin;
1695c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
170dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
1713ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1725c6c1daeSBarry Smith }
1735c6c1daeSBarry Smith 
1748f69470aSLisandro Dalcin /*@
1758f69470aSLisandro Dalcin    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
1768f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1778f69470aSLisandro Dalcin    width; 1.0 denotes the entire viewport.
1788f69470aSLisandro Dalcin 
179*20f4b53cSBarry Smith    Not Collective
1808f69470aSLisandro Dalcin 
1818f69470aSLisandro Dalcin    Input Parameters:
1828f69470aSLisandro Dalcin +  draw - the drawing context
1838f69470aSLisandro Dalcin -  width - the width in user coordinates
1848f69470aSLisandro Dalcin 
1858f69470aSLisandro Dalcin    Level: advanced
1868f69470aSLisandro Dalcin 
187811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
1888f69470aSLisandro Dalcin @*/
189d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width)
190d71ae5a4SJacob Faibussowitsch {
1918f69470aSLisandro Dalcin   PetscFunctionBegin;
1928f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
193dbbe0bcdSBarry Smith   PetscTryTypeMethod(draw, linesetwidth, width);
1943ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1958f69470aSLisandro Dalcin }
1968f69470aSLisandro Dalcin 
1978f69470aSLisandro Dalcin /*@
1988f69470aSLisandro Dalcin    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
1998f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
2008f69470aSLisandro Dalcin    width; 1.0 denotes the interior viewport.
2018f69470aSLisandro Dalcin 
202*20f4b53cSBarry Smith    Not Collective
2038f69470aSLisandro Dalcin 
2048f69470aSLisandro Dalcin    Input Parameter:
2058f69470aSLisandro Dalcin .  draw - the drawing context
2068f69470aSLisandro Dalcin 
2078f69470aSLisandro Dalcin    Output Parameter:
2088f69470aSLisandro Dalcin .  width - the width in user coordinates
2098f69470aSLisandro Dalcin 
2108f69470aSLisandro Dalcin    Level: advanced
2118f69470aSLisandro Dalcin 
212811af0c4SBarry Smith    Note:
2138f69470aSLisandro Dalcin    Not currently implemented.
2148f69470aSLisandro Dalcin 
215811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
2168f69470aSLisandro Dalcin @*/
217d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width)
218d71ae5a4SJacob Faibussowitsch {
2198f69470aSLisandro Dalcin   PetscFunctionBegin;
2208f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
221064a246eSJacob Faibussowitsch   PetscValidRealPointer(width, 2);
222dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, linegetwidth, width);
2233ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2248f69470aSLisandro Dalcin }
225