Actual source code: dline.c

      1: /*
      2:        Provides the calling sequences for all the basic PetscDraw routines.
      3: */
      4: #include <petsc/private/drawimpl.h>

      6: /*@
      7:   PetscDrawGetBoundingBox - Gets the bounding box of all `PetscDrawStringBoxed()` commands

      9:   Not Collective

     11:   Input Parameter:
     12: . draw - the drawing context

     14:   Output Parameters:
     15: + xl - horizontal coordinate of lower left corner of bounding box
     16: . yl - vertical coordinate of lower left corner of bounding box
     17: . xr - horizontal coordinate of upper right corner of bounding box
     18: - yr - vertical coordinate of upper right corner of bounding box

     20:   Level: intermediate

     22: .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
     23: @*/
     24: PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr)
     25: {
     26:   PetscFunctionBegin;
     28:   if (xl) PetscAssertPointer(xl, 2);
     29:   if (yl) PetscAssertPointer(yl, 3);
     30:   if (xr) PetscAssertPointer(xr, 4);
     31:   if (yr) PetscAssertPointer(yr, 5);
     32:   if (xl) *xl = draw->boundbox_xl;
     33:   if (yl) *yl = draw->boundbox_yl;
     34:   if (xr) *xr = draw->boundbox_xr;
     35:   if (yr) *yr = draw->boundbox_yr;
     36:   PetscFunctionReturn(PETSC_SUCCESS);
     37: }

     39: /*@
     40:   PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next

     42:   Not Collective

     44:   Input Parameter:
     45: . draw - the drawing context

     47:   Output Parameters:
     48: + x - horizontal coordinate of the current point
     49: - y - vertical coordinate of the current point

     51:   Level: intermediate

     53: .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()`
     54: @*/
     55: PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y)
     56: {
     57:   PetscFunctionBegin;
     59:   PetscAssertPointer(x, 2);
     60:   PetscAssertPointer(y, 3);
     61:   *x = draw->currentpoint_x[draw->currentpoint];
     62:   *y = draw->currentpoint_y[draw->currentpoint];
     63:   PetscFunctionReturn(PETSC_SUCCESS);
     64: }

     66: /*@
     67:   PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next

     69:   Not Collective

     71:   Input Parameters:
     72: + draw - the drawing context
     73: . x    - horizontal coordinate of the current point
     74: - y    - vertical coordinate of the current point

     76:   Level: intermediate

     78: .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
     79: @*/
     80: PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
     81: {
     82:   PetscFunctionBegin;
     84:   draw->currentpoint_x[draw->currentpoint] = x;
     85:   draw->currentpoint_y[draw->currentpoint] = y;
     86:   PetscFunctionReturn(PETSC_SUCCESS);
     87: }

     89: /*@
     90:   PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next

     92:   Not Collective

     94:   Input Parameters:
     95: + draw - the drawing context
     96: . x    - horizontal coordinate of the current point
     97: - y    - vertical coordinate of the current point

     99:   Level: intermediate

    101: .seealso: `PetscDraw`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()`
    102: @*/
    103: PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y)
    104: {
    105:   PetscFunctionBegin;
    107:   PetscCheck(draw->currentpoint <= 19, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have pushed too many current points");
    108:   draw->currentpoint_x[++draw->currentpoint] = x;
    109:   draw->currentpoint_y[draw->currentpoint]   = y;
    110:   PetscFunctionReturn(PETSC_SUCCESS);
    111: }

    113: /*@
    114:   PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)

    116:   Not Collective

    118:   Input Parameter:
    119: . draw - the drawing context

    121:   Level: intermediate

    123: .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()`
    124: @*/
    125: PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw)
    126: {
    127:   PetscFunctionBegin;
    129:   PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points");
    130:   PetscFunctionReturn(PETSC_SUCCESS);
    131: }

    133: /*@
    134:   PetscDrawLine - draws a line onto a drawable.

    136:   Not Collective

    138:   Input Parameters:
    139: + draw - the drawing context
    140: . xl   - horizontal coordinate of first end point
    141: . yl   - vertical coordinate of first end point
    142: . xr   - horizontal coordinate of second end point
    143: . yr   - vertical coordinate of second end point
    144: - cl   - the colors of the endpoints

    146:   Level: beginner

    148: .seealso: `PetscDraw`, `PetscDrawArrow()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
    149:           `PetscDrawMarker()`, `PetscDrawPoint()`
    150: @*/
    151: PetscErrorCode PetscDrawLine(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
    152: {
    153:   PetscFunctionBegin;
    155:   PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl);
    156:   PetscFunctionReturn(PETSC_SUCCESS);
    157: }

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

    162:   Not Collective

    164:   Input Parameters:
    165: + draw - the drawing context
    166: . xl   - horizontal coordinate of first end point
    167: . yl   - vertical coordinate of first end point
    168: . xr   - horizontal coordinate of second end point
    169: . yr   - vertical coordinate of second end point
    170: - cl   - the colors of the endpoints

    172:   Level: beginner

    174: .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawLineSetWidth()`, `PetscDrawLineGetWidth()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
    175:           `PetscDrawMarker()`, `PetscDrawPoint()`
    176: @*/
    177: PetscErrorCode PetscDrawArrow(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int cl)
    178: {
    179:   PetscFunctionBegin;
    181:   PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl);
    182:   PetscFunctionReturn(PETSC_SUCCESS);
    183: }

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

    190:   Not Collective

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

    196:   Level: advanced

    198: .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
    199: @*/
    200: PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width)
    201: {
    202:   PetscFunctionBegin;
    204:   PetscTryTypeMethod(draw, linesetwidth, width);
    205:   PetscFunctionReturn(PETSC_SUCCESS);
    206: }

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

    213:   Not Collective

    215:   Input Parameter:
    216: . draw - the drawing context

    218:   Output Parameter:
    219: . width - the width in user coordinates

    221:   Level: advanced

    223:   Note:
    224:   Not currently implemented.

    226: .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()`
    227: @*/
    228: PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width)
    229: {
    230:   PetscFunctionBegin;
    232:   PetscAssertPointer(width, 2);
    233:   PetscUseTypeMethod(draw, linegetwidth, width);
    234:   PetscFunctionReturn(PETSC_SUCCESS);
    235: }