2217 int iOpRing, bAltered = 0;
2233 for( iOpRing = 0; iOpRing < psObject->
nParts; iOpRing++ )
2235 int bInner, iVert, nVertCount, nVertStart, iCheckRing;
2236 double dfSum, dfTestX, dfTestY;
2256 for( iCheckRing = 0; iCheckRing < psObject->
nParts; iCheckRing++ )
2260 if( iCheckRing == iOpRing )
2265 if( iCheckRing == psObject->
nParts-1 )
2272 for( iEdge = 0; iEdge < nVertCount; iEdge++ )
2276 if( iEdge < nVertCount-1 )
2285 if ( ( psObject->
padfY[iEdge+nVertStart] < dfTestY
2286 && dfTestY <= psObject->padfY[iNext+nVertStart] )
2287 || ( psObject->
padfY[iNext+nVertStart] < dfTestY
2288 && dfTestY <= psObject->
padfY[iEdge+nVertStart] ) )
2293 double const intersect =
2294 ( psObject->
padfX[iEdge+nVertStart]
2295 + ( dfTestY - psObject->
padfY[iEdge+nVertStart] )
2296 / ( psObject->
padfY[iNext+nVertStart] - psObject->
padfY[iEdge+nVertStart] )
2297 * ( psObject->
padfX[iNext+nVertStart] - psObject->
padfX[iEdge+nVertStart] ) );
2299 if (intersect < dfTestX)
2313 if( iOpRing == psObject->
nParts-1 )
2322 dfSum = psObject->
padfX[nVertStart] * (psObject->
padfY[nVertStart+1] - psObject->
padfY[nVertStart+nVertCount-1]);
2323 for( iVert = nVertStart + 1; iVert < nVertStart+nVertCount-1; iVert++ )
2325 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[iVert+1] - psObject->
padfY[iVert-1]);
2328 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[nVertStart] - psObject->
padfY[iVert-1]);
2333 if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) )
2338 for( i = 0; i < nVertCount/2; i++ )
2343 dfSaved = psObject->
padfX[nVertStart+i];
2344 psObject->
padfX[nVertStart+i] =
2345 psObject->
padfX[nVertStart+nVertCount-i-1];
2346 psObject->
padfX[nVertStart+nVertCount-i-1] = dfSaved;
2349 dfSaved = psObject->
padfY[nVertStart+i];
2350 psObject->
padfY[nVertStart+i] =
2351 psObject->
padfY[nVertStart+nVertCount-i-1];
2352 psObject->
padfY[nVertStart+nVertCount-i-1] = dfSaved;
2355 if( psObject->
padfZ )
2357 dfSaved = psObject->
padfZ[nVertStart+i];
2358 psObject->
padfZ[nVertStart+i] =
2359 psObject->
padfZ[nVertStart+nVertCount-i-1];
2360 psObject->
padfZ[nVertStart+nVertCount-i-1] = dfSaved;
2364 if( psObject->
padfM )
2366 dfSaved = psObject->
padfM[nVertStart+i];
2367 psObject->
padfM[nVertStart+i] =
2368 psObject->
padfM[nVertStart+nVertCount-i-1];
2369 psObject->
padfM[nVertStart+nVertCount-i-1] = dfSaved;