xref: /petsc/src/sys/classes/draw/interface/drect.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
15c6c1daeSBarry Smith 
25c6c1daeSBarry Smith /*
35c6c1daeSBarry Smith        Provides the calling sequences for all the basic PetscDraw routines.
45c6c1daeSBarry Smith */
5af0996ceSBarry Smith #include <petsc/private/drawimpl.h> /*I "petscdraw.h" I*/
65c6c1daeSBarry Smith 
75c6c1daeSBarry Smith /*@C
8811af0c4SBarry Smith    PetscDrawIndicatorFunction - Draws an indicator function (where a relationship is true) on a `PetscDraw`
95c6c1daeSBarry Smith 
105c6c1daeSBarry Smith    Not collective
115c6c1daeSBarry Smith 
12d8d19677SJose E. Roman    Input Parameters:
13811af0c4SBarry Smith +  draw - a `PetscDraw`
145c6c1daeSBarry Smith .  xmin,xmax,ymin,ymax - region to draw indicator function
155c6c1daeSBarry Smith -  f - the indicator function
165c6c1daeSBarry Smith 
175c6c1daeSBarry Smith    Level: developer
185c6c1daeSBarry Smith 
19811af0c4SBarry Smith .seealso: `PetscDraw`
205c6c1daeSBarry Smith @*/
21*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawIndicatorFunction(PetscDraw draw, PetscReal xmin, PetscReal xmax, PetscReal ymin, PetscReal ymax, int c, PetscErrorCode (*indicator)(void *, PetscReal, PetscReal, PetscBool *), void *ctx)
22*d71ae5a4SJacob Faibussowitsch {
23a7e8706aSLisandro Dalcin   int       i, j, xstart, ystart, xend, yend;
245c6c1daeSBarry Smith   PetscReal x, y;
255c6c1daeSBarry Smith   PetscBool isnull, flg;
265c6c1daeSBarry Smith 
275c6c1daeSBarry Smith   PetscFunctionBegin;
285c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
299566063dSJacob Faibussowitsch   PetscCall(PetscDrawIsNull(draw, &isnull));
305c6c1daeSBarry Smith   if (isnull) PetscFunctionReturn(0);
315c6c1daeSBarry Smith 
329566063dSJacob Faibussowitsch   PetscCall(PetscDrawCoordinateToPixel(draw, xmin, ymin, &xstart, &ystart));
339566063dSJacob Faibussowitsch   PetscCall(PetscDrawCoordinateToPixel(draw, xmax, ymax, &xend, &yend));
349371c9d4SSatish Balay   if (yend < ystart) {
359371c9d4SSatish Balay     PetscInt tmp = ystart;
369371c9d4SSatish Balay     ystart       = yend;
379371c9d4SSatish Balay     yend         = tmp;
389371c9d4SSatish Balay   }
3945f3bb6eSLisandro Dalcin 
4045f3bb6eSLisandro Dalcin   for (i = xstart; i <= xend; i++) {
4145f3bb6eSLisandro Dalcin     for (j = ystart; j <= yend; j++) {
429566063dSJacob Faibussowitsch       PetscCall(PetscDrawPixelToCoordinate(draw, i, j, &x, &y));
439566063dSJacob Faibussowitsch       PetscCall(indicator(ctx, x, y, &flg));
441baa6e33SBarry Smith       if (flg) PetscCall(PetscDrawPointPixel(draw, i, j, c));
455c6c1daeSBarry Smith     }
465c6c1daeSBarry Smith   }
475c6c1daeSBarry Smith   PetscFunctionReturn(0);
485c6c1daeSBarry Smith }
495c6c1daeSBarry Smith 
505c6c1daeSBarry Smith /*@C
51811af0c4SBarry Smith    PetscDrawCoordinateToPixel - given a coordinate in a `PetscDraw` returns the pixel location
525c6c1daeSBarry Smith 
535c6c1daeSBarry Smith    Not collective
545c6c1daeSBarry Smith 
555c6c1daeSBarry Smith    Input Parameters:
565c6c1daeSBarry Smith +  draw - the draw where the coordinates are defined
576b867d5aSJose E. Roman .  x - the horizontal coordinate
586b867d5aSJose E. Roman -  y - the vertical coordinate
595c6c1daeSBarry Smith 
605c6c1daeSBarry Smith    Output Parameters:
616b867d5aSJose E. Roman +  i - the horizontal pixel location
626b867d5aSJose E. Roman -  j - the vertical pixel location
635c6c1daeSBarry Smith 
645c6c1daeSBarry Smith    Level: developer
655c6c1daeSBarry Smith 
66811af0c4SBarry Smith .seealso: `PetscDraw`
675c6c1daeSBarry Smith @*/
68*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawCoordinateToPixel(PetscDraw draw, PetscReal x, PetscReal y, int *i, int *j)
69*d71ae5a4SJacob Faibussowitsch {
705c6c1daeSBarry Smith   PetscFunctionBegin;
715c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
72dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, coordinatetopixel, x, y, i, j);
735c6c1daeSBarry Smith   PetscFunctionReturn(0);
745c6c1daeSBarry Smith }
755c6c1daeSBarry Smith 
765c6c1daeSBarry Smith /*@C
77811af0c4SBarry Smith    PetscDrawPixelToCoordinate - given a pixel in a `PetscDraw` returns the coordinate
785c6c1daeSBarry Smith 
795c6c1daeSBarry Smith    Not collective
805c6c1daeSBarry Smith 
815c6c1daeSBarry Smith    Input Parameters:
825c6c1daeSBarry Smith +  draw - the draw where the coordinates are defined
836b867d5aSJose E. Roman .  i - the horizontal pixel location
846b867d5aSJose E. Roman -  j - the vertical pixel location
855c6c1daeSBarry Smith 
865c6c1daeSBarry Smith    Output Parameters:
876b867d5aSJose E. Roman +  x - the horizontal coordinate
886b867d5aSJose E. Roman -  y - the vertical coordinate
895c6c1daeSBarry Smith 
905c6c1daeSBarry Smith    Level: developer
915c6c1daeSBarry Smith 
92811af0c4SBarry Smith .seealso: `PetscDraw`
935c6c1daeSBarry Smith @*/
94*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawPixelToCoordinate(PetscDraw draw, int i, int j, PetscReal *x, PetscReal *y)
95*d71ae5a4SJacob Faibussowitsch {
965c6c1daeSBarry Smith   PetscFunctionBegin;
975c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
98dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, pixeltocoordinate, i, j, x, y);
995c6c1daeSBarry Smith   PetscFunctionReturn(0);
1005c6c1daeSBarry Smith }
1015c6c1daeSBarry Smith 
1025c6c1daeSBarry Smith /*@
103811af0c4SBarry Smith    PetscDrawRectangle - draws a rectangle  onto a drawable.
1045c6c1daeSBarry Smith 
1055c6c1daeSBarry Smith    Not Collective
1065c6c1daeSBarry Smith 
1075c6c1daeSBarry Smith    Input Parameters:
1085c6c1daeSBarry Smith +  draw - the drawing context
1095c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the lower left, upper right corners
1105c6c1daeSBarry Smith -  c1,c2,c3,c4 - the colors of the four corners in counter clockwise order
1115c6c1daeSBarry Smith 
1125c6c1daeSBarry Smith    Level: beginner
1135c6c1daeSBarry Smith 
114811af0c4SBarry Smith .seealso: `PetscDraw`, `PetscDrawLine()`, `PetscDrawRectangle()`, `PetscDrawTriangle()`, `PetscDrawEllipse()`,
115db781477SPatrick Sanan           `PetscDrawMarker()`, `PetscDrawPoint()`, `PetscDrawString()`, `PetscDrawPoint()`, `PetscDrawArrow()`
1165c6c1daeSBarry Smith @*/
117*d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscDrawRectangle(PetscDraw draw, PetscReal xl, PetscReal yl, PetscReal xr, PetscReal yr, int c1, int c2, int c3, int c4)
118*d71ae5a4SJacob Faibussowitsch {
1195c6c1daeSBarry Smith   PetscFunctionBegin;
1205c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw, PETSC_DRAW_CLASSID, 1);
121dbbe0bcdSBarry Smith   PetscUseTypeMethod(draw, rectangle, xl, yl, xr, yr, c1, c2, c3, c4);
1225c6c1daeSBarry Smith   PetscFunctionReturn(0);
1235c6c1daeSBarry Smith }
124