xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 2fe279fdf3e687a416e4eadb7d3c7a82d60442c6)
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 
1020f4b53cSBarry Smith    Not Collective
115c6c1daeSBarry Smith 
125c6c1daeSBarry Smith    Input Parameter:
135c6c1daeSBarry Smith .  draw - the drawing context
145c6c1daeSBarry Smith 
155c6c1daeSBarry Smith    Output Parameters:
16*2fe279fdSBarry Smith +   xl - horizontal coordinate of lower left corner of bounding box
17*2fe279fdSBarry Smith .   yl - vertical coordinate of lower left corner of bounding box
18*2fe279fdSBarry Smith .   xr - horizontal coordinate of upper right corner of bounding box
19*2fe279fdSBarry Smith -   yr - vertical coordinate of upper right corner of bounding box
205c6c1daeSBarry Smith 
215c6c1daeSBarry Smith    Level: intermediate
225c6c1daeSBarry Smith 
23811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
245c6c1daeSBarry Smith @*/
25d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr)
26d71ae5a4SJacob Faibussowitsch {
275c6c1daeSBarry Smith   PetscFunctionBegin;
285c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
298f69470aSLisandro Dalcin   if (xl) PetscValidRealPointer(xl, 2);
308f69470aSLisandro Dalcin   if (yl) PetscValidRealPointer(yl, 3);
318f69470aSLisandro Dalcin   if (xr) PetscValidRealPointer(xr, 4);
328f69470aSLisandro Dalcin   if (yr) PetscValidRealPointer(yr, 5);
335c6c1daeSBarry Smith   if (xl) *xl = draw->boundbox_xl;
345c6c1daeSBarry Smith   if (yl) *yl = draw->boundbox_yl;
355c6c1daeSBarry Smith   if (xr) *xr = draw->boundbox_xr;
365c6c1daeSBarry Smith   if (yr) *yr = draw->boundbox_yr;
373ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
385c6c1daeSBarry Smith }
395c6c1daeSBarry Smith 
405c6c1daeSBarry Smith /*@
415c6c1daeSBarry Smith    PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next
425c6c1daeSBarry Smith 
4320f4b53cSBarry Smith    Not Collective
445c6c1daeSBarry Smith 
455c6c1daeSBarry Smith    Input Parameter:
465c6c1daeSBarry Smith .  draw - the drawing context
475c6c1daeSBarry Smith 
485c6c1daeSBarry Smith    Output Parameters:
49*2fe279fdSBarry Smith +   x - horizontal coordinate of the current point
50*2fe279fdSBarry Smith -   y - vertical coordinate of the current point
515c6c1daeSBarry Smith 
525c6c1daeSBarry Smith    Level: intermediate
535c6c1daeSBarry Smith 
54811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
555c6c1daeSBarry Smith @*/
56d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y)
57d71ae5a4SJacob Faibussowitsch {
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];
643ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
655c6c1daeSBarry Smith }
665c6c1daeSBarry Smith 
675c6c1daeSBarry Smith /*@
685c6c1daeSBarry Smith    PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next
695c6c1daeSBarry Smith 
7020f4b53cSBarry Smith    Not Collective
715c6c1daeSBarry Smith 
725c6c1daeSBarry Smith    Input Parameters:
735c6c1daeSBarry Smith +  draw - the drawing context
74*2fe279fdSBarry Smith .   x - horizontal coordinate of the current point
75*2fe279fdSBarry Smith -   y - vertical coordinate of the current point
765c6c1daeSBarry Smith 
775c6c1daeSBarry Smith    Level: intermediate
785c6c1daeSBarry Smith 
79811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
805c6c1daeSBarry Smith @*/
81d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
82d71ae5a4SJacob Faibussowitsch {
835c6c1daeSBarry Smith   PetscFunctionBegin;
845c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
855c6c1daeSBarry Smith   draw->currentpoint_x[draw->currentpoint] = x;
865c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint] = y;
873ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
885c6c1daeSBarry Smith }
895c6c1daeSBarry Smith 
905c6c1daeSBarry Smith /*@
915c6c1daeSBarry Smith    PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next
925c6c1daeSBarry Smith 
9320f4b53cSBarry Smith    Not Collective
945c6c1daeSBarry Smith 
955c6c1daeSBarry Smith    Input Parameters:
965c6c1daeSBarry Smith +  draw - the drawing context
97*2fe279fdSBarry Smith .   x - horizontal coordinate of the current point
98*2fe279fdSBarry Smith -   y - vertical coordinate of the current point
995c6c1daeSBarry Smith 
1005c6c1daeSBarry Smith    Level: intermediate
1015c6c1daeSBarry Smith 
102811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
1035c6c1daeSBarry Smith @*/
104d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
105d71ae5a4SJacob Faibussowitsch {
1065c6c1daeSBarry Smith   PetscFunctionBegin;
1075c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
10808401ef6SPierre Jolivet   PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points");
1095c6c1daeSBarry Smith   draw->currentpoint_x[++draw->currentpoint] = x;
1105c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint]   = y;
1113ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1125c6c1daeSBarry Smith }
1135c6c1daeSBarry Smith 
1145c6c1daeSBarry Smith /*@
1155c6c1daeSBarry Smith    PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
1165c6c1daeSBarry Smith 
11720f4b53cSBarry Smith    Not Collective
1185c6c1daeSBarry Smith 
1195c6c1daeSBarry Smith    Input Parameter:
1205c6c1daeSBarry Smith .  draw - the drawing context
1215c6c1daeSBarry Smith 
1225c6c1daeSBarry Smith    Level: intermediate
1235c6c1daeSBarry Smith 
124811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
1255c6c1daeSBarry Smith @*/
126d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw)
127d71ae5a4SJacob Faibussowitsch {
1285c6c1daeSBarry Smith   PetscFunctionBegin;
1295c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
130cc73adaaSBarry Smith   PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points");
1313ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1325c6c1daeSBarry Smith }
1335c6c1daeSBarry Smith 
1345c6c1daeSBarry Smith /*@
135811af0c4SBarry Smith    PetscDrawLine - draws a line onto a drawable.
1365c6c1daeSBarry Smith 
13720f4b53cSBarry Smith    Not Collective
1385c6c1daeSBarry Smith 
1395c6c1daeSBarry Smith    Input Parameters:
1405c6c1daeSBarry Smith +  draw - the drawing context
141*2fe279fdSBarry Smith .  xl - horizontal coordinate of first end point
142*2fe279fdSBarry Smith .  yl - vertical coordinate of first end point
143*2fe279fdSBarry Smith .  xr - horizontal coordinate of second end point
144*2fe279fdSBarry Smith .  yr - vertical coordinate of second end point
1455c6c1daeSBarry Smith -  cl - the colors of the endpoints
1465c6c1daeSBarry Smith 
1475c6c1daeSBarry Smith    Level: beginner
1485c6c1daeSBarry Smith 
149811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
150db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1515c6c1daeSBarry Smith @*/
152d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
153d71ae5a4SJacob Faibussowitsch {
1545c6c1daeSBarry Smith   PetscFunctionBegin;
1555c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
156dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
1573ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1585c6c1daeSBarry Smith }
1595c6c1daeSBarry Smith 
1605c6c1daeSBarry Smith /*@
161811af0c4SBarry Smith    PetscDrawArrow - draws a line with arrow head at end if the line is long enough
1625c6c1daeSBarry Smith 
16320f4b53cSBarry Smith    Not Collective
1645c6c1daeSBarry Smith 
1655c6c1daeSBarry Smith    Input Parameters:
1665c6c1daeSBarry Smith +  draw - the drawing context
167*2fe279fdSBarry Smith .  xl - horizontal coordinate of first end point
168*2fe279fdSBarry Smith .  yl - vertical coordinate of first end point
169*2fe279fdSBarry Smith .  xr - horizontal coordinate of second end point
170*2fe279fdSBarry Smith .  yr - vertical coordinate of second end point
1715c6c1daeSBarry Smith -  cl - the colors of the endpoints
1725c6c1daeSBarry Smith 
1735c6c1daeSBarry Smith    Level: beginner
1745c6c1daeSBarry Smith 
175811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
176db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1775c6c1daeSBarry Smith @*/
178d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
179d71ae5a4SJacob Faibussowitsch {
1805c6c1daeSBarry Smith   PetscFunctionBegin;
1815c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
182dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
1833ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
1845c6c1daeSBarry Smith }
1855c6c1daeSBarry Smith 
1868f69470aSLisandro Dalcin /*@
1878f69470aSLisandro Dalcin    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
1888f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1898f69470aSLisandro Dalcin    width; 1.0 denotes the entire viewport.
1908f69470aSLisandro Dalcin 
19120f4b53cSBarry Smith    Not Collective
1928f69470aSLisandro Dalcin 
1938f69470aSLisandro Dalcin    Input Parameters:
1948f69470aSLisandro Dalcin +  draw - the drawing context
1958f69470aSLisandro Dalcin -  width - the width in user coordinates
1968f69470aSLisandro Dalcin 
1978f69470aSLisandro Dalcin    Level: advanced
1988f69470aSLisandro Dalcin 
199811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
2008f69470aSLisandro Dalcin @*/
201d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width)
202d71ae5a4SJacob Faibussowitsch {
2038f69470aSLisandro Dalcin   PetscFunctionBegin;
2048f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
205dbbe0bcdSBarry Smith   PetscTryTypeMethod(draw, linesetwidth, width);
2063ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2078f69470aSLisandro Dalcin }
2088f69470aSLisandro Dalcin 
2098f69470aSLisandro Dalcin /*@
2108f69470aSLisandro Dalcin    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
2118f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
2128f69470aSLisandro Dalcin    width; 1.0 denotes the interior viewport.
2138f69470aSLisandro Dalcin 
21420f4b53cSBarry Smith    Not Collective
2158f69470aSLisandro Dalcin 
2168f69470aSLisandro Dalcin    Input Parameter:
2178f69470aSLisandro Dalcin .  draw - the drawing context
2188f69470aSLisandro Dalcin 
2198f69470aSLisandro Dalcin    Output Parameter:
2208f69470aSLisandro Dalcin .  width - the width in user coordinates
2218f69470aSLisandro Dalcin 
2228f69470aSLisandro Dalcin    Level: advanced
2238f69470aSLisandro Dalcin 
224811af0c4SBarry Smith    Note:
2258f69470aSLisandro Dalcin    Not currently implemented.
2268f69470aSLisandro Dalcin 
227811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
2288f69470aSLisandro Dalcin @*/
229d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width)
230d71ae5a4SJacob Faibussowitsch {
2318f69470aSLisandro Dalcin   PetscFunctionBegin;
2328f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
233064a246eSJacob Faibussowitsch   PetscValidRealPointer(width, 2);
234dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, linegetwidth, width);
2353ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
2368f69470aSLisandro Dalcin }
237