1 2 /* 3 Provides the calling sequences for all the basic PetscDraw routines. 4 */ 5 #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 6 7 /*@ 8 PetscDrawGetBoundingBox - Gets the bounding box of all `PetscDrawStringBoxed()` commands 9 10 Not Collective 11 12 Input Parameter: 13 . draw - the drawing context 14 15 Output Parameters: 16 . xl,yl,xr,yr - coordinates of lower left and upper right corners of bounding box 17 18 Level: intermediate 19 20 .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 21 @*/ 22 PetscErrorCode PetscDrawGetBoundingBox(PetscDraw draw, PetscReal *xl, PetscReal *yl, PetscReal *xr, PetscReal *yr) 23 { 24 PetscFunctionBegin; 25 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 26 if (xl) PetscValidRealPointer(xl, 2); 27 if (yl) PetscValidRealPointer(yl, 3); 28 if (xr) PetscValidRealPointer(xr, 4); 29 if (yr) PetscValidRealPointer(yr, 5); 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 } 36 37 /*@ 38 PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next 39 40 Not Collective 41 42 Input Parameter: 43 . draw - the drawing context 44 45 Output Parameters: 46 . x,y - the current point 47 48 Level: intermediate 49 50 .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawSetCurrentPoint()` 51 @*/ 52 PetscErrorCode PetscDrawGetCurrentPoint(PetscDraw draw, PetscReal *x, PetscReal *y) 53 { 54 PetscFunctionBegin; 55 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 56 PetscValidRealPointer(x, 2); 57 PetscValidRealPointer(y, 3); 58 *x = draw->currentpoint_x[draw->currentpoint]; 59 *y = draw->currentpoint_y[draw->currentpoint]; 60 PetscFunctionReturn(PETSC_SUCCESS); 61 } 62 63 /*@ 64 PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next 65 66 Not Collective 67 68 Input Parameters: 69 + draw - the drawing context 70 - x,y - the location of the current point 71 72 Level: intermediate 73 74 .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 75 @*/ 76 PetscErrorCode PetscDrawSetCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 77 { 78 PetscFunctionBegin; 79 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 80 draw->currentpoint_x[draw->currentpoint] = x; 81 draw->currentpoint_y[draw->currentpoint] = y; 82 PetscFunctionReturn(PETSC_SUCCESS); 83 } 84 85 /*@ 86 PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next 87 88 Not Collective 89 90 Input Parameters: 91 + draw - the drawing context 92 - x,y - the location of the current point 93 94 Level: intermediate 95 96 .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawPopCurrentPoint()`, `PetscDrawGetCurrentPoint()` 97 @*/ 98 PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw, PetscReal x, PetscReal y) 99 { 100 PetscFunctionBegin; 101 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 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 } 107 108 /*@ 109 PetscDrawPopCurrentPoint - Pops a current draw point (discarding it) 110 111 Not Collective 112 113 Input Parameter: 114 . draw - the drawing context 115 116 Level: intermediate 117 118 .seealso: `PetscDraw`, `PetscDrawPushCurrentPoint()`, `PetscDrawSetCurrentPoint()`, `PetscDrawGetCurrentPoint()` 119 @*/ 120 PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 121 { 122 PetscFunctionBegin; 123 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 124 PetscCheck(draw->currentpoint-- > 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "You have popped too many current points"); 125 PetscFunctionReturn(PETSC_SUCCESS); 126 } 127 128 /*@ 129 PetscDrawLine - draws a line onto a drawable. 130 131 Not Collective 132 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 137 138 Level: beginner 139 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; 146 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 147 PetscUseTypeMethod(draw, line, xl, yl, xr, yr, cl); 148 PetscFunctionReturn(PETSC_SUCCESS); 149 } 150 151 /*@ 152 PetscDrawArrow - draws a line with arrow head at end if the line is long enough 153 154 Not Collective 155 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 160 161 Level: beginner 162 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; 169 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 170 PetscUseTypeMethod(draw, arrow, xl, yl, xr, yr, cl); 171 PetscFunctionReturn(PETSC_SUCCESS); 172 } 173 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. 178 179 Not Collective 180 181 Input Parameters: 182 + draw - the drawing context 183 - width - the width in user coordinates 184 185 Level: advanced 186 187 .seealso: `PetscDraw`, `PetscDrawLineGetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 188 @*/ 189 PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw, PetscReal width) 190 { 191 PetscFunctionBegin; 192 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 193 PetscTryTypeMethod(draw, linesetwidth, width); 194 PetscFunctionReturn(PETSC_SUCCESS); 195 } 196 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. 201 202 Not Collective 203 204 Input Parameter: 205 . draw - the drawing context 206 207 Output Parameter: 208 . width - the width in user coordinates 209 210 Level: advanced 211 212 Note: 213 Not currently implemented. 214 215 .seealso: `PetscDraw`, `PetscDrawLineSetWidth()`, `PetscDrawLine()`, `PetscDrawArrow()` 216 @*/ 217 PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw, PetscReal *width) 218 { 219 PetscFunctionBegin; 220 PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1); 221 PetscValidRealPointer(width, 2); 222 PetscUseTypeMethod(draw, linegetwidth, width); 223 PetscFunctionReturn(PETSC_SUCCESS); 224 } 225