271         double *xpts, *ypts, *zpts, *mpts;
 
  273         int *shpparts, shppointtotal = 0, shppoint = 0, shpringtotal = 0, shpring = 0;
 
  278         for (i = 0; i < lwmultipolygon->
ngeoms; i++)
 
  280                 for (j = 0; j < lwmultipolygon->
geoms[i]->
nrings; j++)
 
  288         shpparts = 
malloc(
sizeof(
int) * shpringtotal);
 
  291         xpts = 
malloc(
sizeof(
double) * shppointtotal);
 
  292         ypts = 
malloc(
sizeof(
double) * shppointtotal);
 
  293         zpts = 
malloc(
sizeof(
double) * shppointtotal);
 
  294         mpts = 
malloc(
sizeof(
double) * shppointtotal);
 
  296         LWDEBUGF(4, 
"Total number of rings: %d   Total number of points: %d", shpringtotal, shppointtotal);
 
  299         for (i = 0; i < lwmultipolygon->
ngeoms; i++)
 
  301                 for (j = 0; j < lwmultipolygon->
geoms[i]->
nrings; j++)
 
  304                         shpparts[shpring] = shppoint;
 
  306                         LWDEBUGF(4, 
"Ring offset: %d", shpring);
 
  312                                 xpts[shppoint] = p4d.
x;
 
  313                                 ypts[shppoint] = p4d.
y;
 
  314                                 zpts[shppoint] = p4d.
z;
 
  315                                 mpts[shppoint] = p4d.
m;
 
  317                                 LWDEBUGF(4, 
"MultiPolygon %d Polygon Ring %d - Point: %g %g %g %g", i, j, xpts[shppoint], ypts[shppoint], zpts[shppoint], mpts[shppoint]);
 
  330                                                     &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], NULL) )
 
  332                                         LWDEBUG(4, 
"Outer ring not clockwise, forcing clockwise\n");
 
  335                                                        &xpts[shpparts[shpring]], &ypts[shpparts[shpring]],
 
  336                                                        &zpts[shpparts[shpring]], &mpts[shpparts[shpring]]);
 
  342                                                   &xpts[shpparts[shpring]], &ypts[shpparts[shpring]], NULL) )
 
  344                                         LWDEBUGF(4, 
"Inner ring %d not counter-clockwise, forcing counter-clockwise\n", i);
 
  347                                                        &xpts[shpparts[shpring]], &ypts[shpparts[shpring]],
 
  348                                                        &zpts[shpparts[shpring]], &mpts[shpparts[shpring]]);
 
POINT4D getPoint4d(const POINTARRAY *pa, uint32_t n)
#define LWDEBUG(level, msg)
#define LWDEBUGF(level, msg,...)
static int reverse_points(int num_points, double *x, double *y, double *z, double *m)
static int is_clockwise(int num_points, double *x, double *y, double *z)
SHPObject SHPAPI_CALL1 * SHPCreateObject(int nSHPType, int nShapeId, int nParts, const int *panPartStart, const int *panPartType, int nVertices, const double *padfX, const double *padfY, const double *padfZ, const double *padfM);SHPObject SHPAPI_CALL1(*) SHPCreateSimpleObject(int nSHPType, int nVertices, const double *padfX, const double *padfY, const double *padfZ