]> granicus.if.org Git - postgis/commitdiff
Added ptarray_isccw(). Added extern modifiers to public prototypes.
authorSandro Santilli <strk@keybit.net>
Tue, 28 Sep 2004 09:00:33 +0000 (09:00 +0000)
committerSandro Santilli <strk@keybit.net>
Tue, 28 Sep 2004 09:00:33 +0000 (09:00 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@902 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom.h
lwgeom/lwgeom_api.c

index 5deff73e39f886eb87f9fc4b12b61e0a8cf4aa15..8fb74b01c1a74786e1a7685c05127b70c2303854 100644 (file)
@@ -755,31 +755,32 @@ extern double nextUp_d(float d);
 
 
 // general utilities 
-double lwgeom_polygon_area(LWPOLY *poly);
-double lwgeom_polygon_perimeter(LWPOLY *poly);
-double lwgeom_polygon_perimeter2d(LWPOLY *poly);
-double lwgeom_pointarray_length2d(POINTARRAY *pts);
-double lwgeom_pointarray_length(POINTARRAY *pts);
-void lwgeom_force2d_recursive(char *serialized, char *optr, int *retsize);
-void lwgeom_force3d_recursive(char *serialized, char *optr, int *retsize);
-void lwgeom_force4d_recursive(char *serialized, char *optr, int *retsize);
-double distance2d_pt_pt(POINT2D *p1, POINT2D *p2);
-double distance2d_pt_seg(POINT2D *p, POINT2D *A, POINT2D *B);
-double distance2d_seg_seg(POINT2D *A, POINT2D *B, POINT2D *C, POINT2D *D);
-double distance2d_pt_ptarray(POINT2D *p, POINTARRAY *pa);
-double distance2d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2);
-int pt_in_ring_2d(POINT2D *p, POINTARRAY *ring);
-int pt_in_poly_2d(POINT2D *p, LWPOLY *poly);
-double distance2d_ptarray_poly(POINTARRAY *pa, LWPOLY *poly);
-double distance2d_point_point(LWPOINT *point1, LWPOINT *point2);
-double distance2d_point_line(LWPOINT *point, LWLINE *line);
-double distance2d_line_line(LWLINE *line1, LWLINE *line2);
-double distance2d_point_poly(LWPOINT *point, LWPOLY *poly);
-double distance2d_poly_poly(LWPOLY *poly1, LWPOLY *poly2);
-double distance2d_line_poly(LWLINE *line, LWPOLY *poly);
-double lwgeom_mindistance2d_recursive(char *lw1, char *lw2);
-void lwgeom_translate_recursive(char *serialized, double xoff, double yoff, double zoff);
-void lwgeom_translate_ptarray(POINTARRAY *pa, double xoff, double yoff, double zoff);
-int lwgeom_pt_inside_circle(POINT2D *p, double cx, double cy, double rad);
-POINTARRAY *segmentize2d_ptarray(POINTARRAY *ipa, double dist);
-int32 lwgeom_npoints(char *serialized);
+extern double lwgeom_polygon_area(LWPOLY *poly);
+extern double lwgeom_polygon_perimeter(LWPOLY *poly);
+extern double lwgeom_polygon_perimeter2d(LWPOLY *poly);
+extern double lwgeom_pointarray_length2d(POINTARRAY *pts);
+extern double lwgeom_pointarray_length(POINTARRAY *pts);
+extern void lwgeom_force2d_recursive(char *serialized, char *optr, int *retsize);
+extern void lwgeom_force3d_recursive(char *serialized, char *optr, int *retsize);
+extern void lwgeom_force4d_recursive(char *serialized, char *optr, int *retsize);
+extern double distance2d_pt_pt(POINT2D *p1, POINT2D *p2);
+extern double distance2d_pt_seg(POINT2D *p, POINT2D *A, POINT2D *B);
+extern double distance2d_seg_seg(POINT2D *A, POINT2D *B, POINT2D *C, POINT2D *D);
+extern double distance2d_pt_ptarray(POINT2D *p, POINTARRAY *pa);
+extern double distance2d_ptarray_ptarray(POINTARRAY *l1, POINTARRAY *l2);
+extern int pt_in_ring_2d(POINT2D *p, POINTARRAY *ring);
+extern int pt_in_poly_2d(POINT2D *p, LWPOLY *poly);
+extern double distance2d_ptarray_poly(POINTARRAY *pa, LWPOLY *poly);
+extern double distance2d_point_point(LWPOINT *point1, LWPOINT *point2);
+extern double distance2d_point_line(LWPOINT *point, LWLINE *line);
+extern double distance2d_line_line(LWLINE *line1, LWLINE *line2);
+extern double distance2d_point_poly(LWPOINT *point, LWPOLY *poly);
+extern double distance2d_poly_poly(LWPOLY *poly1, LWPOLY *poly2);
+extern double distance2d_line_poly(LWLINE *line, LWPOLY *poly);
+extern double lwgeom_mindistance2d_recursive(char *lw1, char *lw2);
+extern void lwgeom_translate_recursive(char *serialized, double xoff, double yoff, double zoff);
+extern void lwgeom_translate_ptarray(POINTARRAY *pa, double xoff, double yoff, double zoff);
+extern int lwgeom_pt_inside_circle(POINT2D *p, double cx, double cy, double rad);
+extern POINTARRAY *segmentize2d_ptarray(POINTARRAY *ipa, double dist);
+extern int32 lwgeom_npoints(char *serialized);
+extern bool ptarray_isccw(const POINTARRAY *pa);
index 07c047710733fd5c2e71e695540d44662c9362ea..a1dd2c1f32168cec2d5e38292105d4878fe31332 100644 (file)
@@ -3516,3 +3516,19 @@ lwexploded_findlength(LWGEOM_EXPLODED *exploded, int wantbbox)
        return size;
 }
 
+bool
+ptarray_isccw(const POINTARRAY *pa)
+{
+       int i;
+       double area = 0;
+       POINT2D *p1, *p2;
+
+       for (i=0; i<pa->npoints-1; i++)
+       {
+               p1 = (POINT2D *)getPoint(pa, i);
+               p2 = (POINT2D *)getPoint(pa, i+1);
+               area += (p1->x * p2->y) - (p1->y * p2->x);
+       }
+       if ( area > 0 ) return 0;
+       else return 1;
+}