15c6c1daeSBarry Smith /* 25c6c1daeSBarry Smith Provides the calling sequences for all the basic PetscDraw routines. 35c6c1daeSBarry Smith */ 4af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/ 55c6c1daeSBarry Smith 68f69470aSLisandro Dalcin /*@C 78f69470aSLisandro Dalcin PetscDrawString - PetscDraws text onto a drawable. 88f69470aSLisandro Dalcin 98f69470aSLisandro Dalcin Not Collective 108f69470aSLisandro Dalcin 118f69470aSLisandro Dalcin Input Parameters: 128f69470aSLisandro Dalcin + draw - the drawing context 139400ad77SLisandro Dalcin . xl,yl - the coordinates of lower left corner of text 148f69470aSLisandro Dalcin . cl - the color of the text 158f69470aSLisandro Dalcin - text - the text to draw 168f69470aSLisandro Dalcin 178f69470aSLisandro Dalcin Level: beginner 188f69470aSLisandro Dalcin 19db781477SPatrick Sanan .seealso: `PetscDrawStringVertical()`, `PetscDrawStringCentered()`, `PetscDrawStringBoxed()`, `PetscDrawStringSetSize()`, 20db781477SPatrick Sanan `PetscDrawStringGetSize()`, `PetscDrawLine()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`, 21db781477SPatrick Sanan `PetscDrawMarker()`, `PetscDrawPoint()` 228f69470aSLisandro Dalcin 238f69470aSLisandro Dalcin @*/ 248f69470aSLisandro Dalcin PetscErrorCode PetscDrawString(PetscDraw draw,PetscReal xl,PetscReal yl,int cl,const char text[]) 258f69470aSLisandro Dalcin { 268f69470aSLisandro Dalcin PetscFunctionBegin; 278f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 288f69470aSLisandro Dalcin PetscValidCharPointer(text,5); 29*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,string ,xl,yl,cl,text); 308f69470aSLisandro Dalcin PetscFunctionReturn(0); 318f69470aSLisandro Dalcin } 328f69470aSLisandro Dalcin 338f69470aSLisandro Dalcin /*@C 348f69470aSLisandro Dalcin PetscDrawStringVertical - PetscDraws text onto a drawable. 358f69470aSLisandro Dalcin 368f69470aSLisandro Dalcin Not Collective 378f69470aSLisandro Dalcin 388f69470aSLisandro Dalcin Input Parameters: 398f69470aSLisandro Dalcin + draw - the drawing context 408f69470aSLisandro Dalcin . xl,yl - the coordinates of upper left corner of text 418f69470aSLisandro Dalcin . cl - the color of the text 428f69470aSLisandro Dalcin - text - the text to draw 438f69470aSLisandro Dalcin 448f69470aSLisandro Dalcin Level: beginner 458f69470aSLisandro Dalcin 46db781477SPatrick Sanan .seealso: `PetscDrawString()`, `PetscDrawStringCentered()`, `PetscDrawStringBoxed()`, `PetscDrawStringSetSize()`, 47db781477SPatrick Sanan `PetscDrawStringGetSize()` 488f69470aSLisandro Dalcin 498f69470aSLisandro Dalcin @*/ 508f69470aSLisandro Dalcin PetscErrorCode PetscDrawStringVertical(PetscDraw draw,PetscReal xl,PetscReal yl,int cl,const char text[]) 518f69470aSLisandro Dalcin { 529400ad77SLisandro Dalcin int i; 539400ad77SLisandro Dalcin char chr[2] = {0, 0}; 549400ad77SLisandro Dalcin PetscReal tw,th; 558f69470aSLisandro Dalcin 568f69470aSLisandro Dalcin PetscFunctionBegin; 578f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 588f69470aSLisandro Dalcin PetscValidCharPointer(text,5); 599400ad77SLisandro Dalcin 60*dbbe0bcdSBarry Smith if (draw->ops->stringvertical) PetscUseTypeMethod(draw,stringvertical ,xl,yl,cl,text); 61*dbbe0bcdSBarry Smith else { 629566063dSJacob Faibussowitsch PetscCall(PetscDrawStringGetSize(draw,&tw,&th)); 639400ad77SLisandro Dalcin for (i = 0; (chr[0] = text[i]); i++) { 649566063dSJacob Faibussowitsch PetscCall(PetscDrawString(draw,xl,yl-th*(i+1),cl,chr)); 659400ad77SLisandro Dalcin } 66*dbbe0bcdSBarry Smith } 679400ad77SLisandro Dalcin PetscFunctionReturn(0); 689400ad77SLisandro Dalcin } 698f69470aSLisandro Dalcin 7051fa3d41SBarry Smith /*@C 7151fa3d41SBarry Smith PetscDrawStringCentered - PetscDraws text onto a drawable centered at a point 7251fa3d41SBarry Smith 7351fa3d41SBarry Smith Not Collective 7451fa3d41SBarry Smith 7551fa3d41SBarry Smith Input Parameters: 7651fa3d41SBarry Smith + draw - the drawing context 7751fa3d41SBarry Smith . xc - the coordinates of right-left center of text 7851fa3d41SBarry Smith . yl - the coordinates of lower edge of text 7951fa3d41SBarry Smith . cl - the color of the text 8051fa3d41SBarry Smith - text - the text to draw 8151fa3d41SBarry Smith 8251fa3d41SBarry Smith Level: beginner 8351fa3d41SBarry Smith 84db781477SPatrick Sanan .seealso: `PetscDrawStringVertical()`, `PetscDrawString()`, `PetscDrawStringBoxed()`, `PetscDrawStringSetSize()`, 85db781477SPatrick Sanan `PetscDrawStringGetSize()` 8651fa3d41SBarry Smith 8751fa3d41SBarry Smith @*/ 8851fa3d41SBarry Smith PetscErrorCode PetscDrawStringCentered(PetscDraw draw,PetscReal xc,PetscReal yl,int cl,const char text[]) 8951fa3d41SBarry Smith { 9051fa3d41SBarry Smith size_t len; 9151fa3d41SBarry Smith PetscReal tw,th; 9251fa3d41SBarry Smith 9351fa3d41SBarry Smith PetscFunctionBegin; 9451fa3d41SBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 9551fa3d41SBarry Smith PetscValidCharPointer(text,5); 9651fa3d41SBarry Smith 979566063dSJacob Faibussowitsch PetscCall(PetscDrawStringGetSize(draw,&tw,&th)); 989566063dSJacob Faibussowitsch PetscCall(PetscStrlen(text,&len)); 999400ad77SLisandro Dalcin xc = xc - len*tw/2; 1009566063dSJacob Faibussowitsch PetscCall(PetscDrawString(draw,xc,yl,cl,text)); 10151fa3d41SBarry Smith PetscFunctionReturn(0); 10251fa3d41SBarry Smith } 10351fa3d41SBarry Smith 1045c6c1daeSBarry Smith /*@C 10551fa3d41SBarry Smith PetscDrawStringBoxed - Draws a string with a box around it 1065c6c1daeSBarry Smith 1075c6c1daeSBarry Smith Not Collective 1085c6c1daeSBarry Smith 1095c6c1daeSBarry Smith Input Parameters: 1105c6c1daeSBarry Smith + draw - the drawing context 1115c6c1daeSBarry Smith . sxl - the coordinates of center of the box 1125c6c1daeSBarry Smith . syl - the coordinates of top line of box 1135c6c1daeSBarry Smith . sc - the color of the text 1145c6c1daeSBarry Smith . bc - the color of the bounding box 1155c6c1daeSBarry Smith - text - the text to draw 1165c6c1daeSBarry Smith 1175c6c1daeSBarry Smith Output Parameter: 1185c6c1daeSBarry Smith . w,h - width and height of resulting box (optional) 1195c6c1daeSBarry Smith 1205c6c1daeSBarry Smith Level: beginner 1215c6c1daeSBarry Smith 122db781477SPatrick Sanan .seealso: `PetscDrawStringVertical()`, `PetscDrawString()`, `PetscDrawStringCentered()`, `PetscDrawStringSetSize()`, 123db781477SPatrick Sanan `PetscDrawStringGetSize()` 1245c6c1daeSBarry Smith 1255c6c1daeSBarry Smith @*/ 12651fa3d41SBarry Smith PetscErrorCode PetscDrawStringBoxed(PetscDraw draw,PetscReal sxl,PetscReal syl,int sc,int bc,const char text[],PetscReal *w,PetscReal *h) 1275c6c1daeSBarry Smith { 1285c6c1daeSBarry Smith PetscReal top,left,right,bottom,tw,th; 1295c6c1daeSBarry Smith size_t len,mlen = 0; 1305c6c1daeSBarry Smith char **array; 1315c6c1daeSBarry Smith int cnt,i; 1325c6c1daeSBarry Smith 1335c6c1daeSBarry Smith PetscFunctionBegin; 1345c6c1daeSBarry Smith PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 135064a246eSJacob Faibussowitsch PetscValidCharPointer(text,6); 1365c6c1daeSBarry Smith 13742963b84SBarry Smith if (draw->ops->boxedstring) { 138*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,boxedstring ,sxl,syl,sc,bc,text,w,h); 13942963b84SBarry Smith PetscFunctionReturn(0); 14042963b84SBarry Smith } 14142963b84SBarry Smith 1429566063dSJacob Faibussowitsch PetscCall(PetscStrToArray(text,'\n',&cnt,&array)); 1435c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 1449566063dSJacob Faibussowitsch PetscCall(PetscStrlen(array[i],&len)); 1455c6c1daeSBarry Smith mlen = PetscMax(mlen,len); 1465c6c1daeSBarry Smith } 1475c6c1daeSBarry Smith 1489566063dSJacob Faibussowitsch PetscCall(PetscDrawStringGetSize(draw,&tw,&th)); 1495c6c1daeSBarry Smith 1505c6c1daeSBarry Smith top = syl; 1515c6c1daeSBarry Smith left = sxl - .5*(mlen + 2)*tw; 1525c6c1daeSBarry Smith right = sxl + .5*(mlen + 2)*tw; 1535c6c1daeSBarry Smith bottom = syl - (1.0 + cnt)*th; 1545c6c1daeSBarry Smith if (w) *w = right - left; 1555c6c1daeSBarry Smith if (h) *h = top - bottom; 1565c6c1daeSBarry Smith 1575c6c1daeSBarry Smith /* compute new bounding box */ 1585c6c1daeSBarry Smith draw->boundbox_xl = PetscMin(draw->boundbox_xl,left); 1595c6c1daeSBarry Smith draw->boundbox_xr = PetscMax(draw->boundbox_xr,right); 1605c6c1daeSBarry Smith draw->boundbox_yl = PetscMin(draw->boundbox_yl,bottom); 1615c6c1daeSBarry Smith draw->boundbox_yr = PetscMax(draw->boundbox_yr,top); 1625c6c1daeSBarry Smith 1635c6c1daeSBarry Smith /* top, left, bottom, right lines */ 1649566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,left,top,right,top,bc)); 1659566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,left,bottom,left,top,bc)); 1669566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,right,bottom,right,top,bc)); 1679566063dSJacob Faibussowitsch PetscCall(PetscDrawLine(draw,left,bottom,right,bottom,bc)); 1685c6c1daeSBarry Smith 1695c6c1daeSBarry Smith for (i=0; i<cnt; i++) { 1709566063dSJacob Faibussowitsch PetscCall(PetscDrawString(draw,left + tw,top - (1.5 + i)*th,sc,array[i])); 1715c6c1daeSBarry Smith } 1729566063dSJacob Faibussowitsch PetscCall(PetscStrToArrayDestroy(cnt,array)); 1735c6c1daeSBarry Smith PetscFunctionReturn(0); 1745c6c1daeSBarry Smith } 1758f69470aSLisandro Dalcin 1768f69470aSLisandro Dalcin /*@ 1778f69470aSLisandro Dalcin PetscDrawStringSetSize - Sets the size for character text. 1788f69470aSLisandro Dalcin 1798f69470aSLisandro Dalcin Not Collective 1808f69470aSLisandro Dalcin 1818f69470aSLisandro Dalcin Input Parameters: 1828f69470aSLisandro Dalcin + draw - the drawing context 1838f69470aSLisandro Dalcin . width - the width in user coordinates 1848f69470aSLisandro Dalcin - height - the character height in user coordinates 1858f69470aSLisandro Dalcin 1868f69470aSLisandro Dalcin Level: advanced 1878f69470aSLisandro Dalcin 1888f69470aSLisandro Dalcin Note: 1898f69470aSLisandro Dalcin Only a limited range of sizes are available. 1908f69470aSLisandro Dalcin 191db781477SPatrick Sanan .seealso: `PetscDrawStringVertical()`, `PetscDrawString()`, `PetscDrawStringCentered()`, `PetscDrawStringBoxed()`, 192db781477SPatrick Sanan `PetscDrawStringGetSize()` 1938f69470aSLisandro Dalcin 1948f69470aSLisandro Dalcin @*/ 1958f69470aSLisandro Dalcin PetscErrorCode PetscDrawStringSetSize(PetscDraw draw,PetscReal width,PetscReal height) 1968f69470aSLisandro Dalcin { 1978f69470aSLisandro Dalcin PetscFunctionBegin; 1988f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 199*dbbe0bcdSBarry Smith PetscTryTypeMethod(draw,stringsetsize,width,height); 2008f69470aSLisandro Dalcin PetscFunctionReturn(0); 2018f69470aSLisandro Dalcin } 2028f69470aSLisandro Dalcin 2038f69470aSLisandro Dalcin /*@ 2048f69470aSLisandro Dalcin PetscDrawStringGetSize - Gets the size for character text. The width is 2058f69470aSLisandro Dalcin relative to the user coordinates of the window. 2068f69470aSLisandro Dalcin 2078f69470aSLisandro Dalcin Not Collective 2088f69470aSLisandro Dalcin 2098f69470aSLisandro Dalcin Input Parameters: 2108f69470aSLisandro Dalcin + draw - the drawing context 2118f69470aSLisandro Dalcin . width - the width in user coordinates 2128f69470aSLisandro Dalcin - height - the character height 2138f69470aSLisandro Dalcin 2148f69470aSLisandro Dalcin Level: advanced 2158f69470aSLisandro Dalcin 216db781477SPatrick Sanan .seealso: `PetscDrawStringVertical()`, `PetscDrawString()`, `PetscDrawStringCentered()`, `PetscDrawStringBoxed()`, 217db781477SPatrick Sanan `PetscDrawStringSetSize()` 2188f69470aSLisandro Dalcin 2198f69470aSLisandro Dalcin @*/ 2208f69470aSLisandro Dalcin PetscErrorCode PetscDrawStringGetSize(PetscDraw draw,PetscReal *width,PetscReal *height) 2218f69470aSLisandro Dalcin { 2228f69470aSLisandro Dalcin PetscFunctionBegin; 2238f69470aSLisandro Dalcin PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1); 224*dbbe0bcdSBarry Smith PetscUseTypeMethod(draw,stringgetsize ,width,height); 2258f69470aSLisandro Dalcin PetscFunctionReturn(0); 2268f69470aSLisandro Dalcin } 227