2770 int iOpRing, bAltered = 0;
2786 for( iOpRing = 0; iOpRing < psObject->
nParts; iOpRing++ )
2792 const int nVertStart = psObject->
panPartStart[iOpRing];
2798 for( iVert = nVertStart; iVert + 1 < nVertStart + nVertCount; ++iVert )
2803 const double dfTestX = ( psObject->
padfX[iVert] +
2804 psObject->
padfX[iVert + 1] ) / 2;
2805 const double dfTestY = ( psObject->
padfY[iVert] +
2806 psObject->
padfY[iVert + 1] ) / 2;
2823 dfSum = psObject->
padfX[nVertStart] *
2824 (psObject->
padfY[nVertStart+1] -
2825 psObject->
padfY[nVertStart+nVertCount-1]);
2826 for( iVert = nVertStart + 1; iVert < nVertStart+nVertCount-1; iVert++ )
2828 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[iVert+1] -
2829 psObject->
padfY[iVert-1]);
2832 dfSum += psObject->
padfX[iVert] * (psObject->
padfY[nVertStart] -
2833 psObject->
padfY[iVert-1]);
2838 if( (dfSum < 0.0 && bInner) || (dfSum > 0.0 && !bInner) )
2843 for( i = 0; i < nVertCount/2; i++ )
2848 dfSaved = psObject->
padfX[nVertStart+i];
2849 psObject->
padfX[nVertStart+i] =
2850 psObject->
padfX[nVertStart+nVertCount-i-1];
2851 psObject->
padfX[nVertStart+nVertCount-i-1] = dfSaved;
2854 dfSaved = psObject->
padfY[nVertStart+i];
2855 psObject->
padfY[nVertStart+i] =
2856 psObject->
padfY[nVertStart+nVertCount-i-1];
2857 psObject->
padfY[nVertStart+nVertCount-i-1] = dfSaved;
2860 if( psObject->
padfZ )
2862 dfSaved = psObject->
padfZ[nVertStart+i];
2863 psObject->
padfZ[nVertStart+i] =
2864 psObject->
padfZ[nVertStart+nVertCount-i-1];
2865 psObject->
padfZ[nVertStart+nVertCount-i-1] = dfSaved;
2869 if( psObject->
padfM )
2871 dfSaved = psObject->
padfM[nVertStart+i];
2872 psObject->
padfM[nVertStart+i] =
2873 psObject->
padfM[nVertStart+nVertCount-i-1];
2874 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)