/* ptarray_remove_repeated_points ? */
getPoint2d_p(epa, 0, &p2);
- LWDEBUGF(1, "Edges's 'first' point is %g,%g", p2.x, p2.y);
+ LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " 'first' point is %g,%g",
+ isoe->edge_id, p2.x, p2.y);
LWDEBUGF(1, "Rings's 'from' point is still %g,%g", p1.x, p1.y);
if ( p2d_same(&p1, &p2) )
{
for ( j=1; j<epa->npoints; ++j )
{
getPoint2d_p(epa, j, &p2);
+ LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " 'next' point %d is %g,%g",
+ isoe->edge_id, j, p2.x, p2.y);
/* we won't check duplicated edge points */
if ( p2d_same(&p1, &p2) ) continue;
/* we assume there are no duplicated points in ring */
getPoint2d_p(ring, from+1, &pt);
- if ( p2d_same(&pt, &p2) )
- {
- match = 1;
- break; /* no need to check more */
- }
+ LWDEBUGF(1, "Ring's point %d is %g,%g",
+ from+1, pt.x, pt.y);
+ match = p2d_same(&pt, &p2);
+ break; /* we want to check a single non-equal next vertex */
+ }
+#if POSTGIS_DEBUG_LEVEL > 0
+ if ( match ) {
+ LWDEBUGF(1, "Prev point of edge %" LWTFMT_ELEMID
+ " matches ring vertex %d", isoe->edge_id, from+1);
+ } else {
+ LWDEBUGF(1, "Prev point of edge %" LWTFMT_ELEMID
+ " does not match ring vertex %d", isoe->edge_id, from+1);
}
+#endif
}
- else
+
+ if ( ! match )
{
- LWDEBUG(1, "p2d_same(p1,p2) returned false");
+ LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " did not match as forward",
+ isoe->edge_id;);
getPoint2d_p(epa, epa->npoints-1, &p2);
- LWDEBUGF(1, "Edges's 'last' point is %g,%g", p2.x, p2.y);
+ LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " 'last' point is %g,%g",
+ isoe->edge_id, p2.x, p2.y);
if ( p2d_same(&p1, &p2) )
{
LWDEBUGF(1, "Last point of edge %" LWTFMT_ELEMID
for ( j=epa->npoints-2; j>=0; --j )
{
getPoint2d_p(epa, j, &p2);
+ LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " 'prev' point %d is %g,%g",
+ isoe->edge_id, j, p2.x, p2.y);
/* we won't check duplicated edge points */
if ( p2d_same(&p1, &p2) ) continue;
/* we assume there are no duplicated points in ring */
getPoint2d_p(ring, from+1, &pt);
- if ( p2d_same(&pt, &p2) )
- {
- match = 1;
- break; /* no need to check more */
- }
+ LWDEBUGF(1, "Ring's point %d is %g,%g",
+ from+1, pt.x, pt.y);
+ match = p2d_same(&pt, &p2);
+ break; /* we want to check a single non-equal next vertex */
}
}
+#if POSTGIS_DEBUG_LEVEL > 0
+ if ( match ) {
+ LWDEBUGF(1, "Prev point of edge %" LWTFMT_ELEMID
+ " matches ring vertex %d", isoe->edge_id, from+1);
+ } else {
+ LWDEBUGF(1, "Prev point of edge %" LWTFMT_ELEMID
+ " does not match ring vertex %d", isoe->edge_id, from+1);
+ }
+#endif
}
if ( match ) return i;
#if 0
{
size_t sz;
- char *wkt = lwgeom_to_wkt(face, WKT_ISO, 2, &sz);
+ char *wkt = lwgeom_to_wkt(face, WKT_ISO, 6, &sz);
LWDEBUGF(1, "Geometry of face %" LWTFMT_ELEMID " is: %s",
face_id, wkt);
lwfree(wkt);
nextedge->edge_id, i, j, j + nextline->points->npoints - 1);
#if 0
+ {
size_t sz;
+ char *wkt = lwgeom_to_wkt(lwline_as_lwgeom(nextline), WKT_ISO, 6, &sz);
LWDEBUGF(1, "Edge %" LWTFMT_ELEMID " is %s",
- nextedge->edge_id,
-lwgeom_to_wkt(lwline_as_lwgeom(nextline), WKT_ISO, 2, &sz));
+ nextedge->edge_id, wkt);
+ lwfree(wkt);
+ }
#endif
j += nextline->points->npoints - 1;
SELECT 'F0', (topology.ST_GetFaceEdges('tt', 0)).*;
+SELECT topology.DropTopology('tt');
+-- See https://trac.osgeo.org/postgis/ticket/3265
+SELECT topology.CreateTopology('tt') > 0;
+SELECT '#3265.1', 'E'||topology.TopoGeo_addLinestring('tt',
+ 'LINESTRING(150 150, 180 150, 180 180)');
+SELECT '#3265.2', 'E'||topology.TopoGeo_addLinestring('tt',
+ 'LINESTRING(150 150, 180 180)');
+SELECT '#3265.3', 'E'||topology.TopoGeo_addLinestring('tt',
+ 'LINESTRING(178 170, 178 161, 170 161, 178 170)');
+SELECT '#3265.4', 0, ST_GetFaceEdges('tt', 0);
+SELECT '#3265.5', 1, ST_GetFaceEdges('tt', 1);
+SELECT '#3265.6', 2, ST_GetFaceEdges('tt', 2);
SELECT topology.DropTopology('tt');