xref: /petsc/src/sys/classes/draw/interface/dline.c (revision 5c6c1daec53e1d9ab0bec9db5309fd8fc7645b8d)
1*5c6c1daeSBarry Smith 
2*5c6c1daeSBarry Smith /*
3*5c6c1daeSBarry Smith        Provides the calling sequences for all the basic PetscDraw routines.
4*5c6c1daeSBarry Smith */
5*5c6c1daeSBarry Smith #include <petsc-private/drawimpl.h>  /*I "petscdraw.h" I*/
6*5c6c1daeSBarry Smith 
7*5c6c1daeSBarry Smith #undef __FUNCT__
8*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetBoundingBox"
9*5c6c1daeSBarry Smith /*@
10*5c6c1daeSBarry Smith    PetscDrawGetBoundingBox - Gets the bounding box of all PetscDrawBoxedString() commands
11*5c6c1daeSBarry Smith 
12*5c6c1daeSBarry Smith    Not collective
13*5c6c1daeSBarry Smith 
14*5c6c1daeSBarry Smith    Input Parameter:
15*5c6c1daeSBarry Smith .  draw - the drawing context
16*5c6c1daeSBarry Smith 
17*5c6c1daeSBarry Smith    Output Parameters:
18*5c6c1daeSBarry Smith .   xl,yl,xr,yr - coordinates of lower left and upper right corners of bounding box
19*5c6c1daeSBarry Smith 
20*5c6c1daeSBarry Smith    Level: intermediate
21*5c6c1daeSBarry Smith 
22*5c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint()
23*5c6c1daeSBarry Smith @*/
24*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawGetBoundingBox(PetscDraw draw,PetscReal *xl,PetscReal *yl,PetscReal *xr,PetscReal *yr)
25*5c6c1daeSBarry Smith {
26*5c6c1daeSBarry Smith   PetscFunctionBegin;
27*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
28*5c6c1daeSBarry Smith   if (xl) *xl = draw->boundbox_xl;
29*5c6c1daeSBarry Smith   if (yl) *yl = draw->boundbox_yl;
30*5c6c1daeSBarry Smith   if (xr) *xr = draw->boundbox_xr;
31*5c6c1daeSBarry Smith   if (yr) *yr = draw->boundbox_yr;
32*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
33*5c6c1daeSBarry Smith }
34*5c6c1daeSBarry Smith 
35*5c6c1daeSBarry Smith #undef __FUNCT__
36*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawGetCurrentPoint"
37*5c6c1daeSBarry Smith /*@
38*5c6c1daeSBarry Smith    PetscDrawGetCurrentPoint - Gets the current draw point, some codes use this point to determine where to draw next
39*5c6c1daeSBarry Smith 
40*5c6c1daeSBarry Smith    Not collective
41*5c6c1daeSBarry Smith 
42*5c6c1daeSBarry Smith    Input Parameter:
43*5c6c1daeSBarry Smith .  draw - the drawing context
44*5c6c1daeSBarry Smith 
45*5c6c1daeSBarry Smith    Output Parameters:
46*5c6c1daeSBarry Smith .   x,y - the current point
47*5c6c1daeSBarry Smith 
48*5c6c1daeSBarry Smith    Level: intermediate
49*5c6c1daeSBarry Smith 
50*5c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawSetCurrentPoint()
51*5c6c1daeSBarry Smith @*/
52*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawGetCurrentPoint(PetscDraw draw,PetscReal *x,PetscReal *y)
53*5c6c1daeSBarry Smith {
54*5c6c1daeSBarry Smith   PetscFunctionBegin;
55*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
56*5c6c1daeSBarry Smith   *x = draw->currentpoint_x[draw->currentpoint];
57*5c6c1daeSBarry Smith   *y = draw->currentpoint_y[draw->currentpoint];
58*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
59*5c6c1daeSBarry Smith }
60*5c6c1daeSBarry Smith 
61*5c6c1daeSBarry Smith #undef __FUNCT__
62*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawSetCurrentPoint"
63*5c6c1daeSBarry Smith /*@
64*5c6c1daeSBarry Smith    PetscDrawSetCurrentPoint - Sets the current draw point, some codes use this point to determine where to draw next
65*5c6c1daeSBarry Smith 
66*5c6c1daeSBarry Smith    Not collective
67*5c6c1daeSBarry Smith 
68*5c6c1daeSBarry Smith    Input Parameters:
69*5c6c1daeSBarry Smith +  draw - the drawing context
70*5c6c1daeSBarry Smith -  x,y - the location of the current point
71*5c6c1daeSBarry Smith 
72*5c6c1daeSBarry Smith    Level: intermediate
73*5c6c1daeSBarry Smith 
74*5c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint()
75*5c6c1daeSBarry Smith @*/
76*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawSetCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y)
77*5c6c1daeSBarry Smith {
78*5c6c1daeSBarry Smith   PetscFunctionBegin;
79*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
80*5c6c1daeSBarry Smith   draw->currentpoint_x[draw->currentpoint] = x;
81*5c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint] = y;
82*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
83*5c6c1daeSBarry Smith }
84*5c6c1daeSBarry Smith 
85*5c6c1daeSBarry Smith #undef __FUNCT__
86*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPushCurrentPoint"
87*5c6c1daeSBarry Smith /*@
88*5c6c1daeSBarry Smith    PetscDrawPushCurrentPoint - Pushes a new current draw point, retaining the old one, some codes use this point to determine where to draw next
89*5c6c1daeSBarry Smith 
90*5c6c1daeSBarry Smith    Not collective
91*5c6c1daeSBarry Smith 
92*5c6c1daeSBarry Smith    Input Parameters:
93*5c6c1daeSBarry Smith +  draw - the drawing context
94*5c6c1daeSBarry Smith -  x,y - the location of the current point
95*5c6c1daeSBarry Smith 
96*5c6c1daeSBarry Smith    Level: intermediate
97*5c6c1daeSBarry Smith 
98*5c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawPopCurrentPoint(), PetscDrawGetCurrentPoint()
99*5c6c1daeSBarry Smith @*/
100*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawPushCurrentPoint(PetscDraw draw,PetscReal x,PetscReal y)
101*5c6c1daeSBarry Smith {
102*5c6c1daeSBarry Smith   PetscFunctionBegin;
103*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
104*5c6c1daeSBarry Smith   if (draw->currentpoint > 9) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have pushed too many current points");
105*5c6c1daeSBarry Smith   draw->currentpoint_x[++draw->currentpoint] = x;
106*5c6c1daeSBarry Smith   draw->currentpoint_y[draw->currentpoint] = y;
107*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
108*5c6c1daeSBarry Smith }
109*5c6c1daeSBarry Smith 
110*5c6c1daeSBarry Smith #undef __FUNCT__
111*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawPopCurrentPoint"
112*5c6c1daeSBarry Smith /*@
113*5c6c1daeSBarry Smith    PetscDrawPopCurrentPoint - Pops a current draw point (discarding it)
114*5c6c1daeSBarry Smith 
115*5c6c1daeSBarry Smith    Not collective
116*5c6c1daeSBarry Smith 
117*5c6c1daeSBarry Smith    Input Parameter:
118*5c6c1daeSBarry Smith .  draw - the drawing context
119*5c6c1daeSBarry Smith 
120*5c6c1daeSBarry Smith    Level: intermediate
121*5c6c1daeSBarry Smith 
122*5c6c1daeSBarry Smith .seealso:  PetscDrawPushCurrentPoint(), PetscDrawSetCurrentPoint(), PetscDrawGetCurrentPoint()
123*5c6c1daeSBarry Smith @*/
124*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawPopCurrentPoint(PetscDraw draw)
125*5c6c1daeSBarry Smith {
126*5c6c1daeSBarry Smith   PetscFunctionBegin;
127*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
128*5c6c1daeSBarry Smith   if (draw->currentpoint-- == 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"You have popped too many current points");
129*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
130*5c6c1daeSBarry Smith }
131*5c6c1daeSBarry Smith 
132*5c6c1daeSBarry Smith #undef __FUNCT__
133*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawLine"
134*5c6c1daeSBarry Smith /*@
135*5c6c1daeSBarry Smith    PetscDrawLine - PetscDraws a line onto a drawable.
136*5c6c1daeSBarry Smith 
137*5c6c1daeSBarry Smith    Not collective
138*5c6c1daeSBarry Smith 
139*5c6c1daeSBarry Smith    Input Parameters:
140*5c6c1daeSBarry Smith +  draw - the drawing context
141*5c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
142*5c6c1daeSBarry Smith -  cl - the colors of the endpoints
143*5c6c1daeSBarry Smith 
144*5c6c1daeSBarry Smith    Level: beginner
145*5c6c1daeSBarry Smith 
146*5c6c1daeSBarry Smith    Concepts: line^drawing
147*5c6c1daeSBarry Smith    Concepts: drawing^line
148*5c6c1daeSBarry Smith 
149*5c6c1daeSBarry Smith @*/
150*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawLine(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
151*5c6c1daeSBarry Smith {
152*5c6c1daeSBarry Smith   PetscErrorCode ierr;
153*5c6c1daeSBarry Smith   PetscBool  isdrawnull;
154*5c6c1daeSBarry Smith 
155*5c6c1daeSBarry Smith   PetscFunctionBegin;
156*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
157*5c6c1daeSBarry Smith   ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr);
158*5c6c1daeSBarry Smith   if (isdrawnull) PetscFunctionReturn(0);
159*5c6c1daeSBarry Smith   if (!draw->ops->line) SETERRQ(((PetscObject)draw)->comm,PETSC_ERR_SUP,"No support for drawing lines");
160*5c6c1daeSBarry Smith   ierr = (*draw->ops->line)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
161*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
162*5c6c1daeSBarry Smith }
163*5c6c1daeSBarry Smith 
164*5c6c1daeSBarry Smith #undef __FUNCT__
165*5c6c1daeSBarry Smith #define __FUNCT__ "PetscDrawArrow"
166*5c6c1daeSBarry Smith /*@
167*5c6c1daeSBarry Smith    PetscDrawArrow - PetscDraws a line with arrow head at end if the line is long enough
168*5c6c1daeSBarry Smith 
169*5c6c1daeSBarry Smith    Not collective
170*5c6c1daeSBarry Smith 
171*5c6c1daeSBarry Smith    Input Parameters:
172*5c6c1daeSBarry Smith +  draw - the drawing context
173*5c6c1daeSBarry Smith .  xl,yl,xr,yr - the coordinates of the line endpoints
174*5c6c1daeSBarry Smith -  cl - the colors of the endpoints
175*5c6c1daeSBarry Smith 
176*5c6c1daeSBarry Smith    Level: beginner
177*5c6c1daeSBarry Smith 
178*5c6c1daeSBarry Smith    Concepts: line^drawing
179*5c6c1daeSBarry Smith    Concepts: drawing^line
180*5c6c1daeSBarry Smith 
181*5c6c1daeSBarry Smith @*/
182*5c6c1daeSBarry Smith PetscErrorCode  PetscDrawArrow(PetscDraw draw,PetscReal xl,PetscReal yl,PetscReal xr,PetscReal yr,int cl)
183*5c6c1daeSBarry Smith {
184*5c6c1daeSBarry Smith   PetscErrorCode ierr;
185*5c6c1daeSBarry Smith   PetscBool  isdrawnull;
186*5c6c1daeSBarry Smith 
187*5c6c1daeSBarry Smith   PetscFunctionBegin;
188*5c6c1daeSBarry Smith   PetscValidHeaderSpecific(draw,PETSC_DRAW_CLASSID,1);
189*5c6c1daeSBarry Smith   ierr = PetscObjectTypeCompare((PetscObject)draw,PETSC_DRAW_NULL,&isdrawnull);CHKERRQ(ierr);
190*5c6c1daeSBarry Smith   if (isdrawnull) PetscFunctionReturn(0);
191*5c6c1daeSBarry Smith   if (!draw->ops->arrow) SETERRQ(((PetscObject)draw)->comm,PETSC_ERR_SUP,"No support for drawing arrows");
192*5c6c1daeSBarry Smith   ierr = (*draw->ops->arrow)(draw,xl,yl,xr,yr,cl);CHKERRQ(ierr);
193*5c6c1daeSBarry Smith   PetscFunctionReturn(0);
194*5c6c1daeSBarry Smith }
195*5c6c1daeSBarry Smith 
196