Actual source code: dline.c
petsc-3.10.5 2019-03-28
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: }