OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
polygrf.h
Go to the documentation of this file.
1 
2 /* POLYGRF.H */
3 
4 #ifndef POLYGRF_H
5 
6 #define POLYGRF_H
7 
8 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 typedef struct
15 {
16  int x,y;
17 } IPoint;
18 
19 typedef struct
20 {
23 } ISegment;
24 
25 typedef struct
26 {
28  int Eprim,toggle,maximum;
30  struct {
31  int inc,step;
32  } errors;
33 } BresSegment;
34 
35 typedef struct {
38 } IBox;
39 
40 typedef struct
41 {
42  struct
43  {
44  float x,y;
45  } scale;
47 } ITransform;
48 
49 #define TRANSFORMSPACE 0
50 #define USERSPACE 1
51 
52 typedef unsigned char Color;
53 
54 typedef struct
55 {
56  unsigned char type,width,height;
57  union {
58  long pad;
59  unsigned char *list;
60  struct {
61  unsigned char ll,lr,ul,ur;
62  } vpfPatternSmall;
63  } vpfPatterData;
64 } vpfPattern;
65 
66 typedef struct {
68  int depth;
69  int rowcount;
70  unsigned char *array;
71 } BitArray;
72 
73 typedef struct {
75  int rowcount;
76  unsigned char *array;
77 } ArrayOfBits;
78 
79 typedef struct
80 {
81  ArrayOfBits Bordermap,Maskmap;
85  int secx;
86  int llx;
91 
92  IBox bounding; /* Original bounding box on the screen */
93 
94 } Shademap;
95 
96 #define isBox(BOX) ((BOX.delta.x >= 0)&&(BOX.delta.y >= 0))
97 
98 
99 
100 /********************************************************
101  * POLYGRF.C Definitions
102  *******************************************************/
104  IPoint to );
105 
106 IBox MakeIBox( IPoint from,
107  IPoint to );
108 
110  IBox to );
111 
112 
114  IPoint a,
115  int flag );
116 
118  ISegment a,
119  int flay );
120 
121 IBox TranslateIBox( ITransform transform,
122  IBox a,
123  int flag );
124 /* _UNUSED_
125 IPoint Iintersect ( ISegment, ISegment );
126 float Iturn ( ISegment, IPoint );
127 */
128 
129 IBox AndIBox( IBox a,
130  IBox b );
131 
132 
133 
134 /* OTHER DEFS. CANT FIND WHERE THEY ARE USED
135 ISegment ISegmentClipIBox ( IBox, ISegment );
136 BitArray MakeBitArray EXT3( int, int, int );
137 
138 int FreeBitArray EXT1( BitArray );
139 
140 int GetBitPoint EXT2( BitArray, ipoint );
141 
142 int ClearBitArray EXT1( BitArray );
143 int SetBitArray EXT2( BitArray, int );
144 int AndBitArray EXT2( BitArray, int );
145 int OrBitArray EXT2( BitArray, int );
146 int XorBitArray EXT2( BitArray, int );
147 
148 int SetBitPoint EXT3( BitArray, IPoint, int );
149 int AndBitPoint EXT3( BitArray, IPoint, int );
150 int OrBitPoint EXT3( BitArray, IPoint, int );
151 int XorBitPoint EXT3( BitArray, IPoint, int );
152 
153 int SetBitLine EXT3( BitArray, ISegment, int );
154 int AndBitLine EXT3( BitArray, ISegment, int );
155 int OrBitLine EXT3( BitArray, ISegment, int );
156 int XorBitLine EXT3( BitArray, ISegment, int );
157 
158 int SetBitWedge EXT4( BitArray, ISegment, IPoint, int );
159 int AndBitWedge EXT4( BitArray, ISegment, IPoint, int );
160 int OrBitWedge EXT4( BitArray, ISegment, IPoint, int );
161 int XorBitWedge EXT4( BitArray, ISegment, IPoint, int );
162 
163 int SetBitBox EXT3( BitArray, IBox, int );
164 int AndBitBox EXT3( BitArray, IBox, int );
165 int OrBitBox EXT3( BitArray, IBox, int );
166 int XorBitBox EXT3( BitArray, IBox, int );
167 
168 int SetBitMask EXT4( BitArray, BitArray, IPoint, int );
169 int AndBitMask EXT4( BitArray, BitArray, IPoint, int );
170 int OrBitMask EXT4( BitArray, BitArray, IPoint, int );
171 int XorBitMask EXT4( BitArray, BitArray, IPoint, int );
172 */
173 /***********************************************************************
174  * end polygrf.c definitions
175  **********************************************************************/
176 
177 
178 /***********************************************************************
179  * BITARRAY.C TYPES
180  **********************************************************************/
181 #include <ossim/vpfutil/xmemory.h>
182 
183 #define MINIMUM(x,y) (((x) > (y))? (y) : (x))
184 #define MAXIMUM(x,y) (((x) < (y))? (y) : (x))
185 
186 #define OUTSIDE(MAP,VPF_POINT_STRUCT)\
187  ((VPF_POINT_STRUCT.x < 0)|| \
188  (VPF_POINT_STRUCT.y < 0)|| \
189  (VPF_POINT_STRUCT.x > MAP.bounding.x)|| \
190  (VPF_POINT_STRUCT.y > MAP.bounding.y))
191 
192 #define OUTSIDE_X(MAP,value) (((value)< 0)||((value)> MAP.bounding.x))
193 #define OUTSIDE_Y(MAP,value) (((value)< 0)||((value)> MAP.bounding.y))
194 
195 #define GETBIT(MAP,VPF_POINT_STRUCT) \
196  (((MAP.array[(((VPF_POINT_STRUCT.y)*(MAP.rowcount))+((VPF_POINT_STRUCT.x)>>3))])&(1<<((VPF_POINT_STRUCT.x)%8)))? 1: 0)
197 
198 #define SETBIT(MAP,VPF_POINT_STRUCT) \
199  ((MAP.array[(((VPF_POINT_STRUCT.y)*(MAP.rowcount))+((VPF_POINT_STRUCT.x)>>3))]) |= (1<<((VPF_POINT_STRUCT.x)%8)))
200 
201 #define CLEARBIT(MAP,VPF_POINT_STRUCT) \
202  ((MAP.array[(((VPF_POINT_STRUCT.y)*(MAP.rowcount))+((VPF_POINT_STRUCT.x)>>3))]) &= ~(1<<((VPF_POINT_STRUCT.x)%8)))
203 
204 #define TOGGLEBIT(MAP,VPF_POINT_STRUCT) \
205  ((MAP.array[(((VPF_POINT_STRUCT.y)*(MAP.rowcount))+((VPF_POINT_STRUCT.x)>>3))]) ^= (1<<((VPF_POINT_STRUCT.x)%8)))
206 
207 #define LEFTBITS(INDEX) (255&(~(255<<(1+(INDEX)))))
208 #define RIGHTBITS(INDEX) (255&(~(255>>(8-(INDEX)))))
209 
210 #define FILLBRESSEG(bseg,seg) \
211 { \
212  int tempx,tempy; \
213  bseg.signs.x = (seg.delta.x < 0) ? -1: 1; \
214  bseg.signs.y = (seg.delta.y < 0) ? -1: 1; \
215  tempx = seg.delta.x * bseg.signs.x; \
216  tempy = seg.delta.y * bseg.signs.y; \
217  bseg.at = seg.origin; \
218  \
219  if (tempy > tempx) \
220  { \
221  bseg.Eprim = (tempx<<1) - tempy; \
222  bseg.errors.inc = (tempx<<1); \
223  bseg.errors.step = (tempx<<1) - (tempy<<1); \
224  bseg.maximum = tempy; \
225  bseg.toggle = 1; \
226  } \
227  else \
228  { \
229  bseg.Eprim = (tempy<<1) - tempx; \
230  bseg.errors.inc = (tempy<<1); \
231  bseg.errors.step = (tempy<<1) - (tempx<<1); \
232  bseg.maximum = tempx; \
233  bseg.toggle = 0; \
234  } \
235 }
236 
237 
238 #define STEP(bseg) \
239  if (bseg.maximum){ \
240  if(bseg.Eprim<0) \
241  { \
242  bseg.Eprim += bseg.errors.inc; \
243  if (bseg.toggle) \
244  bseg.at.y += bseg.signs.y; \
245  else \
246  bseg.at.x += bseg.signs.x; \
247  bseg.maximum--; \
248  } \
249  else \
250  { \
251  bseg.Eprim += bseg.errors.step; \
252  bseg.at.x += bseg.signs.x; \
253  bseg.at.y += bseg.signs.y; \
254  bseg.maximum--; \
255  } \
256  }
257 
258 
259 
260 
261 
262 /***********************************************************************
263  * BITARRAY.C DEFINITIONS
264  **********************************************************************/
265 void SETROW( ArrayOfBits MAP,
266  int XMIN,
267  int XMAX,
268  int Y );
269 
270 void CLEARROW( ArrayOfBits MAP,
271  int XMIN,
272  int XMAX,
273  int Y );
274 
275 void TOGGLEROW( ArrayOfBits MAP,
276  int XMIN,
277  int XMAX,
278  int Y );
279 
280 void SETCOLUMN( ArrayOfBits MAP,
281  int X,
282  int YMIN,
283  int YMAX );
284 
285 void CLEARCOLUMN( ArrayOfBits MAP,
286  int X,
287  int YMIN,
288  int YMAX );
289 
290 void TOGGLECOLUMN( ArrayOfBits MAP,
291  int X,
292  int YMIN,
293  int YMAX );
294 
295 ArrayOfBits MakeArrayOfBits( int deltaX,
296  int deltaY );
297 
298 int FreeArrayOfBits( ArrayOfBits map );
299 
300 int ClearArrayOfBits( ArrayOfBits map );
301 
302 int PointGetBit( ArrayOfBits map,
303  IPoint point );
304 
305 int PointSetBit( ArrayOfBits map,
306  IPoint at,
307  int value );
308 
309 int PointAndBit( ArrayOfBits map,
310  IPoint at,
311  int value );
312 
313 int PointOrBit( ArrayOfBits map,
314  IPoint at,
315  int value );
316 
317 int PointXorBit( ArrayOfBits map,
318  IPoint at,
319  int value );
320 
321 int LineSetBit( ArrayOfBits map,
322  ISegment seg,
323  int value );
324 
325 int LineAndBit( ArrayOfBits map,
326  ISegment seg,
327  int value );
328 
329 int LineOrBit( ArrayOfBits map,
330  ISegment seg,
331  int value );
332 
333 int LineXorBit( ArrayOfBits map,
334  ISegment seg,
335  int value );
336 
337 /* THESE PROCEDURES NOT DEFINED
338 int WedgeSetBit EXT4( ArrayOfBits, ISegment, IPoint, int );
339 int WedgeAndBit EXT4( ArrayOfBits, ISegment, IPoint, int );
340 int WedgeOrBit EXT4( ArrayOfBits, ISegment, IPoint, int );
341 int WedgeXorBit EXT4( ArrayOfBits, ISegment, IPoint, int );
342 */
343 
344 int BoxSetBit( ArrayOfBits map,
345  IBox box,
346  int value );
347 
348 int BoxAndBit( ArrayOfBits map,
349  IBox box,
350  int value );
351 
352 int BoxOrBit( ArrayOfBits map,
353  IBox box,
354  int value );
355 
356 int BoxXorBit( ArrayOfBits map,
357  IBox box,
358  int value );
359 
361  ISegment seg,
362  int value );
363 
365  ISegment seg,
366  int value );
367 
368 int TrapezoidOrBit( ArrayOfBits map,
369  ISegment seg,
370  int value );
371 
373  ISegment seg,
374  int value );
375 
376 int SetArrayOfBits( ArrayOfBits map,
377  int value );
378 
379 int AndArrayOfBits( ArrayOfBits map,
380  int value );
381 
382 int OrArrayOfBits( ArrayOfBits map,
383  ISegment seg,
384  int value );
385 
386 int XorArrayOfBits( ArrayOfBits map,
387  ISegment seg,
388  int value);
389 /***********************************************************************
390  * end of bitarray.c definitions
391  **********************************************************************/
392 
393 
394 /***********************************************************************
395  * Shademap.c definitions
396  **********************************************************************/
397 
398 #define SOLID 0
399 #define STRIPS 1
400 #define STRIPES 1
401 #define SIMPLE 2
402 /* #define COMPLEX_FEATURE 3 */
403 
404 Shademap *OpenShade( IBox bounding,
405  IBox window,
406  Color line,
407  vpfPattern fill );
408 
409 int ModifyShade( Shademap *smap,
410  Color line,
411  vpfPattern fill );
412 
413 int WriteShade( Shademap *smap,
414  IPoint point );
415 
416 int CloseLoop( Shademap *smap );
417 
418 int CloseShade( Shademap *smap );
419 
420 int OutShade( Shademap *smap );
421 
422 vpfPattern MakePattern( int ll,
423  int lr,
424  int ul,
425  int ur );
426 
427 /***************************************************************************
428  * end shademap.c definitions
429  **************************************************************************/
430 #ifdef __cplusplus
431 }
432 #endif
433 
434 #endif
435 
int BoxXorBit(ArrayOfBits map, IBox box, int value)
ossim_uint32 x
void TOGGLEROW(ArrayOfBits MAP, int XMIN, int XMAX, int Y)
IBox AndIBox(IBox a, IBox b)
IPoint origin
Definition: polygrf.h:21
IPoint first
Definition: polygrf.h:84
IPoint bounding
Definition: polygrf.h:74
int CloseLoop(Shademap *smap)
int PointXorBit(ArrayOfBits map, IPoint at, int value)
int TrapezoidAndBit(ArrayOfBits map, ISegment seg, int value)
ITransform MakeITransform(IBox from, IBox to)
int FreeArrayOfBits(ArrayOfBits map)
int rowcount
Definition: polygrf.h:69
int PointSetBit(ArrayOfBits map, IPoint at, int value)
int XorArrayOfBits(ArrayOfBits map, ISegment seg, int value)
int LineXorBit(ArrayOfBits map, ISegment seg, int value)
IBox bounding
Definition: polygrf.h:67
int y
Definition: polygrf.h:16
int llx
Definition: polygrf.h:86
int OutShade(Shademap *smap)
Color line
Definition: polygrf.h:89
int LineOrBit(ArrayOfBits map, ISegment seg, int value)
unsigned char Color
Definition: polygrf.h:52
int step
Definition: polygrf.h:31
int CloseShade(Shademap *smap)
unsigned char * array
Definition: polygrf.h:70
Definition: polygrf.h:35
IPoint turnpoint
Definition: polygrf.h:87
int toggle
Definition: polygrf.h:28
IPoint delta
Definition: polygrf.h:22
long pad
Definition: polygrf.h:58
unsigned char ur
Definition: polygrf.h:61
int TrapezoidOrBit(ArrayOfBits map, ISegment seg, int value)
int ModifyShade(Shademap *smap, Color line, vpfPattern fill)
void SETROW(ArrayOfBits MAP, int XMIN, int XMAX, int Y)
IPoint signs
Definition: polygrf.h:29
void SETCOLUMN(ArrayOfBits MAP, int X, int YMIN, int YMAX)
IPoint prev
Definition: polygrf.h:88
vpfPattern fill
Definition: polygrf.h:90
int LineSetBit(ArrayOfBits map, ISegment seg, int value)
unsigned char * array
Definition: polygrf.h:76
int LineAndBit(ArrayOfBits map, ISegment seg, int value)
int AndArrayOfBits(ArrayOfBits map, int value)
IPoint delta
Definition: polygrf.h:37
ITransform transform
Definition: polygrf.h:82
IBox TranslateIBox(ITransform transform, IBox a, int flag)
int BoxOrBit(ArrayOfBits map, IBox box, int value)
ISegment TranslateISegment(ITransform transform, ISegment a, int flay)
int PointGetBit(ArrayOfBits map, IPoint point)
void TOGGLECOLUMN(ArrayOfBits MAP, int X, int YMIN, int YMAX)
int TrapezoidSetBit(ArrayOfBits map, ISegment seg, int value)
int ClearArrayOfBits(ArrayOfBits map)
int OrArrayOfBits(ArrayOfBits map, ISegment seg, int value)
int BoxAndBit(ArrayOfBits map, IBox box, int value)
IBox MakeIBox(IPoint from, IPoint to)
unsigned char width
Definition: polygrf.h:56
int SetArrayOfBits(ArrayOfBits map, int value)
int PointOrBit(ArrayOfBits map, IPoint at, int value)
int rowcount
Definition: polygrf.h:75
Shademap * OpenShade(IBox bounding, IBox window, Color line, vpfPattern fill)
int WriteShade(Shademap *smap, IPoint point)
IPoint TranslateIPoint(ITransform transform, IPoint a, int flag)
int pointcount
Definition: polygrf.h:83
int secx
Definition: polygrf.h:85
IPoint offset
Definition: polygrf.h:46
IPoint at
Definition: polygrf.h:27
IPoint origin
Definition: polygrf.h:36
unsigned char * list
Definition: polygrf.h:59
int BoxSetBit(ArrayOfBits map, IBox box, int value)
int depth
Definition: polygrf.h:68
ArrayOfBits Maskmap
Definition: polygrf.h:81
void CLEARROW(ArrayOfBits MAP, int XMIN, int XMAX, int Y)
int PointAndBit(ArrayOfBits map, IPoint at, int value)
Definition: polygrf.h:14
IBox bounding
Definition: polygrf.h:92
int TrapezoidXorBit(ArrayOfBits map, ISegment seg, int value)
ArrayOfBits MakeArrayOfBits(int deltaX, int deltaY)
float y
Definition: polygrf.h:44
vpfPattern MakePattern(int ll, int lr, int ul, int ur)
ISegment MakeISegment(IPoint from, IPoint to)
void CLEARCOLUMN(ArrayOfBits MAP, int X, int YMIN, int YMAX)