2701{
2702
2703
2704
2705
2706
2707
2708
2709
2710
2712 int iCheckRing;
2713 for( iCheckRing = 0; iCheckRing < psObject->
nParts; iCheckRing++ )
2714 {
2715 int nVertStartCheck, nVertCountCheck;
2716 int iEdge;
2717
2718 if( iCheckRing == iOpRing )
2719 continue;
2720
2723
2724 for( iEdge = 0; iEdge < nVertCountCheck; iEdge++ )
2725 {
2726 int iNext;
2727
2728 if( iEdge < nVertCountCheck-1 )
2729 iNext = iEdge+1;
2730 else
2731 iNext = 0;
2732
2733
2734
2735
2736
2737
2738 if ( ( psObject->
padfY[iEdge+nVertStartCheck] < dfTestY
2739 && dfTestY <= psObject->padfY[iNext+nVertStartCheck] )
2740 || ( psObject->
padfY[iNext+nVertStartCheck] < dfTestY
2741 && dfTestY <= psObject->padfY[iEdge+nVertStartCheck] ) )
2742 {
2743
2744
2745
2746
2747 double const intersect =
2748 ( psObject->
padfX[iEdge+nVertStartCheck]
2749 + ( dfTestY - psObject->
padfY[iEdge+nVertStartCheck] )
2750 / ( psObject->
padfY[iNext+nVertStartCheck] -
2751 psObject->
padfY[iEdge+nVertStartCheck] )
2752 * ( psObject->
padfX[iNext+nVertStartCheck] -
2753 psObject->
padfX[iEdge+nVertStartCheck] ) );
2754
2755 if (intersect < dfTestX)
2756 {
2757 bInner = !bInner;
2758 }
2759 else if( intersect == dfTestX )
2760 {
2761
2762 return -1;
2763 }
2764 }
2765 }
2766 }
2767 return bInner;
2768}
static int SHPGetPartVertexCount(const SHPObject *psObject, int iPart)