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


141: .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
142:           PetscDrawMarker(), PetscDrawPoint()

144: @*/
145: PetscErrorCode  PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
146: {

151:   if (!draw->ops->line) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing lines",((PetscObject)draw)->type_name);
152:   (*draw->ops->line)(draw,xl,yl,xr,yr,cl);
153:   return(0);
154: }

156: /*@
157:    PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough

159:    Not collective

161:    Input Parameters:
162: +  draw - the drawing context
163: .  xl,yl,xr,yr - the coordinates of the line endpoints
164: -  cl - the colors of the endpoints

166:    Level: beginner


169: .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(),
170:           PetscDrawMarker(), PetscDrawPoint()

172: @*/
173: PetscErrorCode  PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
174: {

179:   if (!draw->ops->arrow) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"This draw type %s does not support drawing arrows",((PetscObject)draw)->type_name);
180:   (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);
181:   return(0);
182: }

184: /*@
185:    PetscDrawLineSetWidth - Sets the line width for future draws.  The width is
186:    relative to the user coordinates of the window; 0.0 denotes the natural
187:    width; 1.0 denotes the entire viewport.

189:    Not collective

191:    Input Parameters:
192: +  draw - the drawing context
193: -  width - the width in user coordinates

195:    Level: advanced

197: .seealso:  PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow()
198: @*/
199: PetscErrorCode  PetscDrawLineSetWidth(PetscDraw draw,PetscReal width)
200: {

205:   if (draw->ops->linesetwidth) {
206:     (*draw->ops->linesetwidth)(draw,width);
207:   }
208:   return(0);
209: }

211: /*@
212:    PetscDrawLineGetWidth - Gets the line width for future draws.  The width is
213:    relative to the user coordinates of the window; 0.0 denotes the natural
214:    width; 1.0 denotes the interior viewport.

216:    Not collective

218:    Input Parameter:
219: .  draw - the drawing context

221:    Output Parameter:
222: .  width - the width in user coordinates

224:    Level: advanced

226:    Notes:
227:    Not currently implemented.

229: .seealso:  PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow()
230: @*/
231: PetscErrorCode  PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width)
232: {

238:   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);
239:   (*draw->ops->linegetwidth)(draw,width);
240:   return(0);
241: }