Actual source code: dline.c

petsc-3.9.2 2018-05-20
Report Typos and Errors

  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: }