xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 9371c9d470a9602b6d10a8bf50c9b2280a79e45a)
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 
20db781477SPatrick Sanan .seealso: `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
215c6c1daeSBarry Smith @*/
22*9371c9d4SSatish 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 
49db781477SPatrick Sanan .seealso: `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
505c6c1daeSBarry Smith @*/
51*9371c9d4SSatish 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 
72db781477SPatrick Sanan .seealso: `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
735c6c1daeSBarry Smith @*/
74*9371c9d4SSatish 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 
93db781477SPatrick Sanan .seealso: `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
945c6c1daeSBarry Smith @*/
95*9371c9d4SSatish 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 
114db781477SPatrick Sanan .seealso: `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
1155c6c1daeSBarry Smith @*/
116*9371c9d4SSatish 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 /*@
1245c6c1daeSBarry Smith    PetscDrawLine - PetscDraws 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 
135db781477SPatrick Sanan .seealso: `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
136db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
137ba1e01c4SBarry Smith 
1385c6c1daeSBarry Smith @*/
139*9371c9d4SSatish Balay PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) {
1405c6c1daeSBarry Smith   PetscFunctionBegin;
1415c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
142dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
1435c6c1daeSBarry Smith   PetscFunctionReturn(0);
1445c6c1daeSBarry Smith }
1455c6c1daeSBarry Smith 
1465c6c1daeSBarry Smith /*@
1475c6c1daeSBarry Smith    PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough
1485c6c1daeSBarry Smith 
1495c6c1daeSBarry Smith    Not collective
1505c6c1daeSBarry Smith 
1515c6c1daeSBarry Smith    Input Parameters:
1525c6c1daeSBarry Smith +  draw - the drawing context
1535c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
1545c6c1daeSBarry Smith -  cl - the colors of the endpoints
1555c6c1daeSBarry Smith 
1565c6c1daeSBarry Smith    Level: beginner
1575c6c1daeSBarry Smith 
158db781477SPatrick Sanan .seealso: `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
159db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`
160ba1e01c4SBarry Smith 
1615c6c1daeSBarry Smith @*/
162*9371c9d4SSatish Balay PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl) {
1635c6c1daeSBarry Smith   PetscFunctionBegin;
1645c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
165dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
1665c6c1daeSBarry Smith   PetscFunctionReturn(0);
1675c6c1daeSBarry Smith }
1685c6c1daeSBarry Smith 
1698f69470aSLisandro Dalcin /*@
1708f69470aSLisandro Dalcin    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
1718f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1728f69470aSLisandro Dalcin    width; 1.0 denotes the entire viewport.
1738f69470aSLisandro Dalcin 
1748f69470aSLisandro Dalcin    Not collective
1758f69470aSLisandro Dalcin 
1768f69470aSLisandro Dalcin    Input Parameters:
1778f69470aSLisandro Dalcin +  draw - the drawing context
1788f69470aSLisandro Dalcin -  width - the width in user coordinates
1798f69470aSLisandro Dalcin 
1808f69470aSLisandro Dalcin    Level: advanced
1818f69470aSLisandro Dalcin 
182db781477SPatrick Sanan .seealso: `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
1838f69470aSLisandro Dalcin @*/
184*9371c9d4SSatish Balay PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) {
1858f69470aSLisandro Dalcin   PetscFunctionBegin;
1868f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
187dbbe0bcdSBarry Smith   PetscTryTypeMethod(draw, linesetwidth, width);
1888f69470aSLisandro Dalcin   PetscFunctionReturn(0);
1898f69470aSLisandro Dalcin }
1908f69470aSLisandro Dalcin 
1918f69470aSLisandro Dalcin /*@
1928f69470aSLisandro Dalcin    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
1938f69470aSLisandro Dalcin    relative to the user coordinates of the window; 0.0 denotes the natural
1948f69470aSLisandro Dalcin    width; 1.0 denotes the interior viewport.
1958f69470aSLisandro Dalcin 
1968f69470aSLisandro Dalcin    Not collective
1978f69470aSLisandro Dalcin 
1988f69470aSLisandro Dalcin    Input Parameter:
1998f69470aSLisandro Dalcin .  draw - the drawing context
2008f69470aSLisandro Dalcin 
2018f69470aSLisandro Dalcin    Output Parameter:
2028f69470aSLisandro Dalcin .  width - the width in user coordinates
2038f69470aSLisandro Dalcin 
2048f69470aSLisandro Dalcin    Level: advanced
2058f69470aSLisandro Dalcin 
2068f69470aSLisandro Dalcin    Notes:
2078f69470aSLisandro Dalcin    Not currently implemented.
2088f69470aSLisandro Dalcin 
209db781477SPatrick Sanan .seealso: `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
2108f69470aSLisandro Dalcin @*/
211*9371c9d4SSatish Balay PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) {
2128f69470aSLisandro Dalcin   PetscFunctionBegin;
2138f69470aSLisandro Dalcin   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
214064a246eSJacob Faibussowitsch   PetscValidRealPointer(width, 2);
215dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, linegetwidth, width);
2168f69470aSLisandro Dalcin   PetscFunctionReturn(0);
2178f69470aSLisandro Dalcin }
218