File: makecw.c

package info (click to toggle)
graphviz 1.7.16-2
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 11,124 kB
  • ctags: 12,650
  • sloc: ansic: 131,002; sh: 7,483; makefile: 1,954; tcl: 1,760; yacc: 1,758; perl: 253; awk: 150; lex: 96
file content (38 lines) | stat: -rw-r--r-- 837 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* 
 * Force the vertices of a polygon to be in CW order.
 * 
 * Works for polygons with concavities.
 * Does not work for twisted polygons.
 *
 * ellson@lucent.com    October 2nd, 1996
 */

#include <pathutil.h>

void
make_CW (Ppoly_t *poly)
{
    int			i, j, n;
	Ppoint_t	*P;
    Ppoint_t	tP;
    double	area=0.0;

	P = poly->ps;
	n = poly->pn;
    /* points or lines don't have a rotation */
    if (n > 2) {
        /* check CW or CCW by computing (twice the) area of poly */
        for (i=1; i < n-1; i++) {
            area += area2(P[0], P[i+1], P[i]);
        }
        /* if the area is -ve then the rotation needs to be reversed */
        /* the starting point is left unchanged */
        if (area < 0.0) {
			for (i = 1, j = n-1; i < 1+n/2; i++, j--) {
				tP = P[i];
				P[i] = P[j];
				P[j] = tP;
			}
        }
    }
}