xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 811af0c4b09a35de4306c442f88bd09fdc09897d)
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 /*@
8*811af0c4SBarry 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 
20*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
215c6c1daeSBarry Smith @*/
229371c9d4SSatish Balay PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr) {
235c6c1daeSBarry Smith   PetscFunctionBegin;
245c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
258f69470aSLisandro Dalcin   if (xl) PetscValidRealPointer(xl, 2);
268f69470aSLisandro Dalcin   if (yl) PetscValidRealPointer(yl, 3);
278f69470aSLisandro Dalcin   if (xr) PetscValidRealPointer(xr, 4);
288f69470aSLisandro Dalcin   if (yr) PetscValidRealPointer(yr, 5);
295c6c1daeSBarry Smith   if (xl) *xl = draw->boundbox_xl;
305c6c1daeSBarry Smith   if (yl) *yl = draw->boundbox_yl;
315c6c1daeSBarry Smith   if (xr) *xr = draw->boundbox_xr;
325c6c1daeSBarry Smith   if (yr) *yr = draw->boundbox_yr;
335c6c1daeSBarry Smith   PetscFunctionReturn(0);
345c6c1daeSBarry Smith }
355c6c1daeSBarry Smith 
365c6c1daeSBarry Smith /*@
375c6c1daeSBarry Smith    PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next
385c6c1daeSBarry Smith 
395c6c1daeSBarry Smith    Not collective
405c6c1daeSBarry Smith 
415c6c1daeSBarry Smith    Input Parameter:
425c6c1daeSBarry Smith .  draw - the drawing context
435c6c1daeSBarry Smith 
445c6c1daeSBarry Smith    Output Parameters:
455c6c1daeSBarry Smith .   x,y - the current point
465c6c1daeSBarry Smith 
475c6c1daeSBarry Smith    Level: intermediate
485c6c1daeSBarry Smith 
49*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
505c6c1daeSBarry Smith @*/
519371c9d4SSatish Balay PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y) {
525c6c1daeSBarry Smith   PetscFunctionBegin;
535c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
548f69470aSLisandro Dalcin   PetscValidRealPointer(x, 2);
558f69470aSLisandro Dalcin   PetscValidRealPointer(y, 3);
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 /*@
625c6c1daeSBarry Smith    PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next
635c6c1daeSBarry Smith 
645c6c1daeSBarry Smith    Not collective
655c6c1daeSBarry Smith 
665c6c1daeSBarry Smith    Input Parameters:
675c6c1daeSBarry Smith +  draw - the drawing context
685c6c1daeSBarry Smith -  x,y - the location of the current point
695c6c1daeSBarry Smith 
705c6c1daeSBarry Smith    Level: intermediate
715c6c1daeSBarry Smith 
72*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
735c6c1daeSBarry Smith @*/
749371c9d4SSatish Balay PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) {
755c6c1daeSBarry Smith   PetscFunctionBegin;
765c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
775c6c1daeSBarry Smith   draw->currentpoint_x[draw->currentpoint] = x;
785c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint] = y;
795c6c1daeSBarry Smith   PetscFunctionReturn(0);
805c6c1daeSBarry Smith }
815c6c1daeSBarry Smith 
825c6c1daeSBarry Smith /*@
835c6c1daeSBarry Smith    PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next
845c6c1daeSBarry Smith 
855c6c1daeSBarry Smith    Not collective
865c6c1daeSBarry Smith 
875c6c1daeSBarry Smith    Input Parameters:
885c6c1daeSBarry Smith +  draw - the drawing context
895c6c1daeSBarry Smith -  x,y - the location of the current point
905c6c1daeSBarry Smith 
915c6c1daeSBarry Smith    Level: intermediate
925c6c1daeSBarry Smith 
93*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
945c6c1daeSBarry Smith @*/
959371c9d4SSatish Balay PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) {
965c6c1daeSBarry Smith   PetscFunctionBegin;
975c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
9808401ef6SPierre Jolivet   PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points");
995c6c1daeSBarry Smith   draw->currentpoint_x[++draw->currentpoint] = x;
1005c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint]   = y;
1015c6c1daeSBarry Smith   PetscFunctionReturn(0);
1025c6c1daeSBarry Smith }
1035c6c1daeSBarry Smith 
1045c6c1daeSBarry Smith /*@
1055c6c1daeSBarry Smith    PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
1065c6c1daeSBarry Smith 
1075c6c1daeSBarry Smith    Not collective
1085c6c1daeSBarry Smith 
1095c6c1daeSBarry Smith    Input Parameter:
1105c6c1daeSBarry Smith .  draw - the drawing context
1115c6c1daeSBarry Smith 
1125c6c1daeSBarry Smith    Level: intermediate
1135c6c1daeSBarry Smith 
114*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
1155c6c1daeSBarry Smith @*/
1169371c9d4SSatish Balay PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) {
1175c6c1daeSBarry Smith   PetscFunctionBegin;
1185c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
119cc73adaaSBarry Smith   PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points");
1205c6c1daeSBarry Smith   PetscFunctionReturn(0);
1215c6c1daeSBarry Smith }
1225c6c1daeSBarry Smith 
1235c6c1daeSBarry Smith /*@
124*811af0c4SBarry Smith    PetscDrawLine - draws a line onto a drawable.
1255c6c1daeSBarry Smith 
1265c6c1daeSBarry Smith    Not collective
1275c6c1daeSBarry Smith 
1285c6c1daeSBarry Smith    Input Parameters:
1295c6c1daeSBarry Smith +  draw - the drawing context
1305c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1315c6c1daeSBarry Smith -  cl - the colors of the endpoints
1325c6c1daeSBarry Smith 
1335c6c1daeSBarry Smith    Level: beginner
1345c6c1daeSBarry Smith 
135*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
136db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1375c6c1daeSBarry Smith @*/
1389371c9d4SSatish Balay PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) {
1395c6c1daeSBarry Smith   PetscFunctionBegin;
1405c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
141dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
1425c6c1daeSBarry Smith   PetscFunctionReturn(0);
1435c6c1daeSBarry Smith }
1445c6c1daeSBarry Smith 
1455c6c1daeSBarry Smith /*@
146*811af0c4SBarry Smith    PetscDrawArrow - draws a line with arrow head at end if the line is long enough
1475c6c1daeSBarry Smith 
1485c6c1daeSBarry Smith    Not collective
1495c6c1daeSBarry Smith 
1505c6c1daeSBarry Smith    Input Parameters:
1515c6c1daeSBarry Smith +  draw - the drawing context
1525c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1535c6c1daeSBarry Smith -  cl - the colors of the endpoints
1545c6c1daeSBarry Smith 
1555c6c1daeSBarry Smith    Level: beginner
1565c6c1daeSBarry Smith 
157*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
158db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
1595c6c1daeSBarry Smith @*/
1609371c9d4SSatish Balay PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) {
1615c6c1daeSBarry Smith   PetscFunctionBegin;
1625c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
163dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
1645c6c1daeSBarry Smith   PetscFunctionReturn(0);
1655c6c1daeSBarry Smith }
1665c6c1daeSBarry Smith 
1678f69470aSLisandro Dalcin /*@
1688f69470aSLisandro Dalcin    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
1698f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1708f69470aSLisandro Dalcin    width; 1.0 denotes the entire viewport.
1718f69470aSLisandro Dalcin 
1728f69470aSLisandro Dalcin    Not collective
1738f69470aSLisandro Dalcin 
1748f69470aSLisandro Dalcin    Input Parameters:
1758f69470aSLisandro Dalcin +  draw - the drawing context
1768f69470aSLisandro Dalcin -  width - the width in user coordinates
1778f69470aSLisandro Dalcin 
1788f69470aSLisandro Dalcin    Level: advanced
1798f69470aSLisandro Dalcin 
180*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
1818f69470aSLisandro Dalcin @*/
1829371c9d4SSatish Balay PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) {
1838f69470aSLisandro Dalcin   PetscFunctionBegin;
1848f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
185dbbe0bcdSBarry Smith   PetscTryTypeMethod(draw, linesetwidth, width);
1868f69470aSLisandro Dalcin   PetscFunctionReturn(0);
1878f69470aSLisandro Dalcin }
1888f69470aSLisandro Dalcin 
1898f69470aSLisandro Dalcin /*@
1908f69470aSLisandro Dalcin    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
1918f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1928f69470aSLisandro Dalcin    width; 1.0 denotes the interior viewport.
1938f69470aSLisandro Dalcin 
1948f69470aSLisandro Dalcin    Not collective
1958f69470aSLisandro Dalcin 
1968f69470aSLisandro Dalcin    Input Parameter:
1978f69470aSLisandro Dalcin .  draw - the drawing context
1988f69470aSLisandro Dalcin 
1998f69470aSLisandro Dalcin    Output Parameter:
2008f69470aSLisandro Dalcin .  width - the width in user coordinates
2018f69470aSLisandro Dalcin 
2028f69470aSLisandro Dalcin    Level: advanced
2038f69470aSLisandro Dalcin 
204*811af0c4SBarry Smith    Note:
2058f69470aSLisandro Dalcin    Not currently implemented.
2068f69470aSLisandro Dalcin 
207*811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
2088f69470aSLisandro Dalcin @*/
2099371c9d4SSatish Balay PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) {
2108f69470aSLisandro Dalcin   PetscFunctionBegin;
2118f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
212064a246eSJacob Faibussowitsch   PetscValidRealPointer(width, 2);
213dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, linegetwidth, width);
2148f69470aSLisandro Dalcin   PetscFunctionReturn(0);
2158f69470aSLisandro Dalcin }
216