Actual source code: dline.c
petsc-3.9.4 2018-09-11
2: /*
3: Provides the calling sequences for all the basic PetscDraw routines.
4: */
5: #include <petsc/private/drawimpl.h>
7: /*@
8: PetscDrawGetBoundingBox - Gets the bounding box of all PetscDrawStringBoxed() commands
10: Not collective
12: Input Parameter:
13: . draw - the drawing context
15: Output Parameters:
16: . xl,yl,xr,yr - coordinates of lower left and upper right corners of bounding box
18: Level: intermediate
20: .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint()
21: @*/
22: PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr)
23: {
30: if (xl) *xl = draw->boundbox_xl;
31: if (yl) *yl = draw->boundbox_yl;
32: if (xr) *xr = draw->boundbox_xr;
33: if (yr) *yr = draw->boundbox_yr;
34: return(0);
35: }
37: /*@
38: PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next
40: Not collective
42: Input Parameter:
43: . draw - the drawing context
45: Output Parameters:
46: . x,y - the current point
48: Level: intermediate
50: .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint()
51: @*/
52: PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw,PetscReal *x,PetscReal *y)
53: {
58: *x = draw->currentpoint_x[draw->currentpoint];
59: *y = draw->currentpoint_y[draw->currentpoint];
60: return(0);
61: }
63: /*@
64: PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next
66: Not collective
68: Input Parameters:
69: + draw - the drawing context
70: - x,y - the location of the current point
72: Level: intermediate
74: .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint()
75: @*/
76: PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y)
77: {
80: draw->currentpoint_x[draw->currentpoint] = x;
81: draw->currentpoint_y[draw->currentpoint] = y;
82: return(0);
83: }
85: /*@
86: PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next
88: Not collective
90: Input Parameters:
91: + draw - the drawing context
92: - x,y - the location of the current point
94: Level: intermediate
96: .seealso: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint()
97: @*/
98: PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y)
99: {
102: if (draw->currentpoint > 19) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have pushed too many current points");
103: draw->currentpoint_x[++draw->currentpoint] = x;
104: draw->currentpoint_y[draw->currentpoint] = y;
105: return(0);
106: }
108: /*@
109: PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
111: Not collective
113: Input Parameter:
114: . draw - the drawing context
116: Level: intermediate
118: .seealso: PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint()
119: @*/
120: PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw)
121: {
124: if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points");
125: return(0);
126: }
128: /*@
129: PetscDrawLine - PetscDraws a line onto a drawable.
131: Not collective
133: Input Parameters:
134: + draw - the drawing context
135: . xl,yl,xr,yr - the coordinates of the line endpoints
136: - cl - the colors of the endpoints
138: Level: beginner
140: Concepts: line^drawing
141: Concepts: drawing^line
143: .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
144: PetscDrawMarker(), PetscDrawPoint()
146: @*/
147: PetscErrorCode PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
148: {
153: if (!draw->ops->line) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing lines",((PetscObject)draw)->type_name);
154: (*draw->ops->line)(draw,xl,yl,xr,yr,cl);
155: return(0);
156: }
158: /*@
159: PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough
161: Not collective
163: Input Parameters:
164: + draw - the drawing context
165: . xl,yl,xr,yr - the coordinates of the line endpoints
166: - cl - the colors of the endpoints
168: Level: beginner
170: Concepts: line^drawing
171: Concepts: drawing^line
173: .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
174: PetscDrawMarker(), PetscDrawPoint()
176: @*/
177: PetscErrorCode PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
178: {
183: if (!draw->ops->arrow) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing arrows",((PetscObject)draw)->type_name);
184: (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);
185: return(0);
186: }
188: /*@
189: PetscDrawLineSetWidth - Sets the line width for future draws. The width is
190: relative to the user coordinates of the window; 0.0 denotes the natural
191: width; 1.0 denotes the entire viewport.
193: Not collective
195: Input Parameters:
196: + draw - the drawing context
197: - width - the width in user coordinates
199: Level: advanced
201: Concepts: line^width
203: .seealso: PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow()
204: @*/
205: PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw,PetscReal width)
206: {
211: if (draw->ops->linesetwidth) {
212: (*draw->ops->linesetwidth)(draw,width);
213: }
214: return(0);
215: }
217: /*@
218: PetscDrawLineGetWidth - Gets the line width for future draws. The width is
219: relative to the user coordinates of the window; 0.0 denotes the natural
220: width; 1.0 denotes the interior viewport.
222: Not collective
224: Input Parameter:
225: . draw - the drawing context
227: Output Parameter:
228: . width - the width in user coordinates
230: Level: advanced
232: Notes:
233: Not currently implemented.
235: Concepts: line^width
237: .seealso: PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow()
238: @*/
239: PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width)
240: {
246: 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);
247: (*draw->ops->linegetwidth)(draw,width);
248: return(0);
249: }