Actual source code: dline.c


  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: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
 21: @*/
 22: PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr)
 23: {
 24:   PetscFunctionBegin;
 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:   PetscFunctionReturn(PETSC_SUCCESS);
 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: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
 51: @*/
 52: PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y)
 53: {
 54:   PetscFunctionBegin;
 58:   *x = draw->currentpoint_x[draw->currentpoint];
 59:   *y = draw->currentpoint_y[draw->currentpoint];
 60:   PetscFunctionReturn(PETSC_SUCCESS);
 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: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
 75: @*/
 76: PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
 77: {
 78:   PetscFunctionBegin;
 80:   draw->currentpoint_x[draw->currentpoint] = x;
 81:   draw->currentpoint_y[draw->currentpoint] = y;
 82:   PetscFunctionReturn(PETSC_SUCCESS);
 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: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
 97: @*/
 98: PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
 99: {
100:   PetscFunctionBegin;
102:   PetscCheck(draw->currentpoint <= 19, 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:   PetscFunctionReturn(PETSC_SUCCESS);
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: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
119: @*/
120: PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw)
121: {
122:   PetscFunctionBegin;
124:   PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points");
125:   PetscFunctionReturn(PETSC_SUCCESS);
126: }

128: /*@
129:    PetscDrawLine - draws 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: .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
141:           `PetscDrawMarker()`, `PetscDrawPoint()`
142: @*/
143: PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
144: {
145:   PetscFunctionBegin;
147:   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
148:   PetscFunctionReturn(PETSC_SUCCESS);
149: }

151: /*@
152:    PetscDrawArrow - draws a line with arrow head at end if the line is long enough

154:    Not collective

156:    Input Parameters:
157: +  draw - the drawing context
158: .  xl,yl,xr,yr - the coordinates of the line endpoints
159: -  cl - the colors of the endpoints

161:    Level: beginner

163: .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
164:           `PetscDrawMarker()`, `PetscDrawPoint()`
165: @*/
166: PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
167: {
168:   PetscFunctionBegin;
170:   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
171:   PetscFunctionReturn(PETSC_SUCCESS);
172: }

174: /*@
175:    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
176:    relative to the user coordinates of the window; 0.0 denotes the natural
177:    width; 1.0 denotes the entire viewport.

179:    Not collective

181:    Input Parameters:
182: +  draw - the drawing context
183: -  width - the width in user coordinates

185:    Level: advanced

187: .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
188: @*/
189: PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width)
190: {
191:   PetscFunctionBegin;
193:   PetscTryTypeMethod(draw, linesetwidth, width);
194:   PetscFunctionReturn(PETSC_SUCCESS);
195: }

197: /*@
198:    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
199:    relative to the user coordinates of the window; 0.0 denotes the natural
200:    width; 1.0 denotes the interior viewport.

202:    Not collective

204:    Input Parameter:
205: .  draw - the drawing context

207:    Output Parameter:
208: .  width - the width in user coordinates

210:    Level: advanced

212:    Note:
213:    Not currently implemented.

215: .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
216: @*/
217: PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width)
218: {
219:   PetscFunctionBegin;
222:   PetscUseTypeMethod(draw, linegetwidth, width);
223:   PetscFunctionReturn(PETSC_SUCCESS);
224: }