2772 int iOpRing, bAltered = 0;
2788 for( iOpRing = 0; iOpRing < psObject->
nParts; iOpRing++ )
2794 const int nVertStart = psObject->
panPartStart[iOpRing];
2800 for( iVert = nVertStart; iVert + 1 < nVertStart + nVertCount; ++iVert )
2805 const double dfTestX = ( psObject->
padfX[iVert] +
2806 psObject->
padfX[iVert + 1] ) / 2;
2807 const double dfTestY = ( psObject->
padfY[iVert] +
2808 psObject->
padfY[iVert + 1] ) / 2;
2825 dfSum = psObject->
padfX[nVertStart] *
2826 (psObject->
padfY[nVertStart+1] -
2827 psObject->
padfY[nVertStart+nVertCount-1]);
2828 for( iVert = nVertStart + 1; iVert < nVertStart+nVertCount-1; iVert++ )
2830 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[iVert+1] -
2831 psObject->
padfY[iVert-1]);
2834 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[nVertStart] -
2835 psObject->
padfY[iVert-1]);
2840 if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) )
2845 for( i = 0; i < nVertCount/2; i++ )
2850 dfSaved = psObject->
padfX[nVertStart+i];
2851 psObject->
padfX[nVertStart+i] =
2852 psObject->
padfX[nVertStart+nVertCount-i-1];
2853 psObject->
padfX[nVertStart+nVertCount-i-1] = dfSaved;
2856 dfSaved = psObject->
padfY[nVertStart+i];
2857 psObject->
padfY[nVertStart+i] =
2858 psObject->
padfY[nVertStart+nVertCount-i-1];
2859 psObject->
padfY[nVertStart+nVertCount-i-1] = dfSaved;
2862 if( psObject->
padfZ )
2864 dfSaved = psObject->
padfZ[nVertStart+i];
2865 psObject->
padfZ[nVertStart+i] =
2866 psObject->
padfZ[nVertStart+nVertCount-i-1];
2867 psObject->
padfZ[nVertStart+nVertCount-i-1] = dfSaved;
2871 if( psObject->
padfM )
2873 dfSaved = psObject->
padfM[nVertStart+i];
2874 psObject->
padfM[nVertStart+i] =
2875 psObject->
padfM[nVertStart+nVertCount-i-1];
2876 psObject->
padfM[nVertStart+nVertCount-i-1] = dfSaved;
static int SHPGetPartVertexCount(const SHPObject *psObject, int iPart)
static int SHPRewindIsInnerRing(const SHPObject *psObject, int iOpRing, double dfTestX, double dfTestY)