f7c42d1df057f1bd5e0057e22662a7c44cf0decb
[scilab.git] / scilab / modules / graphics / includes / clipping.h
1 /*----------------------------------------------------------------------------------------*/
2 /* FILE      : clipping.h                                                                 */
3 /* COPYRIGHT : INRIA 2006                                                                 */
4 /* AUTHORS   : Jean-Baptiste Silvy, Jean-Philipe Chancelier                               */
5 /* DESC.     : Management of clipping when drawing                                        */
6 /*----------------------------------------------------------------------------------------*/
7
8 #ifndef __SCI_CLIPPING__
9 #define __SCI_CLIPPING__
10
11 #include "Graphics.h"
12 #include "ObjectStructure.h"
13 #include "PloEch.h"
14
15 /*----------------------------------------------------------------------------------------*/
16 /*
17  * @memo a structure to defined a clipping rectangle in pixels
18  */
19 typedef struct
20 {
21   int leftX   ; /* abscissa of the left edge of the region */
22   int rightX  ; /* abscissa of the rigth edge */
23   int bottomY ; /* ordinate of the bottom edge */
24   int topY    ; /* ordinate of the upper edge */
25 }
26 SClipRegion ;
27
28 /*----------------------------------------------------------------------------------------*/
29 /* 
30  * @memo use for drawing precomputing clipping when drawing polygons
31  * Test a single point to be within the xleft,xright,ybot,ytop bbox.
32  * Sets the returned integers 4 l.s.b. as follows:
33  * bit 0 if to the left of xleft.
34  * bit 1 if to the right of xright.
35  * bit 2 if below of ybot.
36  * bit 3 if above of ytop.
37  * 0 is returned if inside.
38  */
39 int sciClipPoint(integer x, integer y, SClipRegion * clipping ) ;
40
41 void sciClipLine( integer       x1      ,
42                   integer       yy1     ,
43                   integer       x2      ,
44                   integer       y2      ,
45                   integer     * x1n     ,
46                   integer     * yy1n    ,
47                   integer     * x2n     ,
48                   integer     * y2n     ,
49                   integer     * flag    ,
50                   SClipRegion * clipping  ) ;
51
52 void sciDrawInsideSegments( integer       iib, 
53                             integer       iif, 
54                             integer     * vx , 
55                             integer     * vy ,
56                             SClipRegion * clipping ) ;
57
58 /* @memo draw the segement defined by (vx[index-1],vy[index-1]) (vx[index],vy[index]) */
59 void sciDrawOutsideSegment( integer index, 
60                             integer *vx  ,
61                             integer *vy  , 
62                             SClipRegion * clipping ) ;
63 /* 
64  * @memo returns the first (vx[.],vy[.]) point inside 
65  *  xleft,xright,ybot,ytop bbox. begining at index ideb
66  *  or zero if the whole polyline is out 
67  */
68 integer sciFirstInClipRegion( integer       n   ,
69                               integer       ideb,
70                               integer     * vx  ,
71                               integer     * vy  ,
72                               SClipRegion * clipping ) ;
73 /* 
74  *  @memo returns the first (vx[.],vy[.]) point outside
75  *  xleft,xright,ybot,ytop bbox.
76  *  or zero if the whole polyline is out 
77  */
78 integer sciFirstOutClipRegion( integer       n   ,
79                                integer       ideb,
80                                integer     * vx  ,
81                                integer     * vy  ,
82                                SClipRegion * clipping ) ;
83
84 /* 
85  * @memo check every segment of the polyline and draw only the part which is in the
86  * clip region
87  */
88 void C2F(clipPolyLine)( integer       n     , 
89                         integer     * vx    , 
90                         integer     * vy    , 
91                         integer       closed,
92                         SClipRegion * clipping ) ;
93
94 /*----------------------------------------------------------------------------------------*/
95 /*
96  * @memo get the real clipping (the set one the axe or the window borders) 
97  * in pixels of a graphic object
98  */
99 void getPixelClipping( sciPointObj * pObj, SClipRegion * clipping ) ;
100 /*----------------------------------------------------------------------------------------*/
101 /**
102  * Set the clipping rectangl.
103  * Note that clipping is not supported at all in 3D mode for now :
104  * This assertion includes axes (in 3D), surfaces and parametric curves objects.
105  * @author Djalel ABDEMOUCHE
106  * 29/11/2002
107  */
108 void sciClip ( sciPointObj * pobj ) ;
109
110 /**
111  * Clear the clipping rectangle 
112  * @author Djalel ABDEMOUCHE
113  * 29/11/2002
114  */
115 void sciUnClip ( sciPointObj * pobj ) ;
116 /*----------------------------------------------------------------------------------------*/
117 /**
118  * use current scale to set the clipping rectangle 
119  */
120 void frame_clip_on(  void ) ;
121
122 /**
123  * disable clipping (to be called after frame_clip_on
124  */
125 void frame_clip_off( void ) ;
126 /*----------------------------------------------------------------------------------------*/
127
128 #endif // __SCI_CLIPPING__