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