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: 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(0); 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: 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(0); 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: 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(0); 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: PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint() 97 @*/ 98 PetscErrorCode PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y) 99 { 100 PetscFunctionBegin; 101 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 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 PetscFunctionReturn(0); 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: PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint() 119 @*/ 120 PetscErrorCode PetscDrawPopCurrentPoint(PetscDraw draw) 121 { 122 PetscFunctionBegin; 123 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 124 if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points"); 125 PetscFunctionReturn(0); 126 } 127 128 /*@ 129 PetscDrawLine - PetscDraws 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 Concepts: line^drawing 141 Concepts: drawing^line 142 143 .seealso: PetscDrawArrow(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 144 PetscDrawMarker(), PetscDrawPoint() 145 146 @*/ 147 PetscErrorCode PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 148 { 149 PetscErrorCode ierr; 150 151 PetscFunctionBegin; 152 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 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 ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 155 PetscFunctionReturn(0); 156 } 157 158 /*@ 159 PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough 160 161 Not collective 162 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 167 168 Level: beginner 169 170 Concepts: line^drawing 171 Concepts: drawing^line 172 173 .seealso: PetscDrawLine(), PetscDrawLineSetWidth(), PetscDrawLineGetWidth(), PetscDrawRectangle(), PetscDrawTriangle(), PetscDrawEllipse(), 174 PetscDrawMarker(), PetscDrawPoint() 175 176 @*/ 177 PetscErrorCode PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl) 178 { 179 PetscErrorCode ierr; 180 181 PetscFunctionBegin; 182 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 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 ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr); 185 PetscFunctionReturn(0); 186 } 187 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. 192 193 Not collective 194 195 Input Parameters: 196 + draw - the drawing context 197 - width - the width in user coordinates 198 199 Level: advanced 200 201 Concepts: line^width 202 203 .seealso: PetscDrawLineGetWidth(), PetscDrawLine(), PetscDrawArrow() 204 @*/ 205 PetscErrorCode PetscDrawLineSetWidth(PetscDraw draw,PetscReal width) 206 { 207 PetscErrorCode ierr; 208 209 PetscFunctionBegin; 210 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 211 if (draw->ops->linesetwidth) { 212 ierr = (*draw->ops->linesetwidth)(draw,width);CHKERRQ(ierr); 213 } 214 PetscFunctionReturn(0); 215 } 216 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. 221 222 Not collective 223 224 Input Parameter: 225 . draw - the drawing context 226 227 Output Parameter: 228 . width - the width in user coordinates 229 230 Level: advanced 231 232 Notes: 233 Not currently implemented. 234 235 Concepts: line^width 236 237 .seealso: PetscDrawLineSetWidth(), PetscDrawLine(), PetscDrawArrow() 238 @*/ 239 PetscErrorCode PetscDrawLineGetWidth(PetscDraw draw,PetscReal *width) 240 { 241 PetscErrorCode ierr; 242 243 PetscFunctionBegin; 244 PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 245 PetscValidScalarPointer(width,2); 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 ierr = (*draw->ops->linegetwidth)(draw,width);CHKERRQ(ierr); 248 PetscFunctionReturn(0); 249 } 250 251