@@ -2813,7 +2813,8 @@ bool QgsVectorLayer::snapPoint(QgsPoint& point, double tolerance)
2813
2813
double mindisty=point.y ();
2814
2814
QgsFeature* fet;
2815
2815
QgsPoint vertexFeature;// the closest vertex of a feature
2816
- double minvertexdist;// the distance between 'point' and 'vertexFeature'
2816
+ QgsGeometryVertexIndex vindex;
2817
+ double minsquaredist;
2817
2818
2818
2819
QgsRect selectrect (point.x ()-tolerance,point.y ()-tolerance,point.x ()+tolerance,point.y ()+tolerance);
2819
2820
selectrect = inverseProjectRect (selectrect);
@@ -2825,18 +2826,17 @@ bool QgsVectorLayer::snapPoint(QgsPoint& point, double tolerance)
2825
2826
{
2826
2827
if (mChangedGeometries .find (fet->featureId ()) != mChangedGeometries .end ())// if geometry has been changed, use the new geometry
2827
2828
{
2828
- vertexFeature = mChangedGeometries [fet->featureId ()].closestVertex (point);
2829
+ vertexFeature = mChangedGeometries [fet->featureId ()].closestVertex (point, vindex, minsquaredist );
2829
2830
}
2830
2831
else
2831
2832
{
2832
- vertexFeature=fet->geometry ()->closestVertex (point);
2833
+ vertexFeature=fet->geometry ()->closestVertex (point, vindex, minsquaredist );
2833
2834
}
2834
- minvertexdist=vertexFeature.sqrDist (point.x (),point.y ());
2835
- if (minvertexdist<mindist)
2835
+ if (minsquaredist<mindist)
2836
2836
{
2837
2837
mindistx=vertexFeature.x ();
2838
2838
mindisty=vertexFeature.y ();
2839
- mindist=minvertexdist ;
2839
+ mindist=minsquaredist ;
2840
2840
}
2841
2841
}
2842
2842
@@ -2845,31 +2845,29 @@ bool QgsVectorLayer::snapPoint(QgsPoint& point, double tolerance)
2845
2845
{
2846
2846
if (mChangedGeometries .find ((*iter)->featureId ()) != mChangedGeometries .end ())// use the changed geometry
2847
2847
{
2848
- vertexFeature = mChangedGeometries [(*iter)->featureId ()].closestVertex (point);
2848
+ vertexFeature = mChangedGeometries [(*iter)->featureId ()].closestVertex (point, vindex, minsquaredist );
2849
2849
}
2850
2850
else
2851
2851
{
2852
- vertexFeature=(*iter)->geometry ()->closestVertex (point);
2852
+ vertexFeature=(*iter)->geometry ()->closestVertex (point, vindex, minsquaredist );
2853
2853
}
2854
- minvertexdist=vertexFeature.sqrDist (point.x (),point.y ());
2855
- if (minvertexdist<mindist)
2854
+ if (minsquaredist<mindist)
2856
2855
{
2857
2856
mindistx=vertexFeature.x ();
2858
2857
mindisty=vertexFeature.y ();
2859
- mindist=minvertexdist ;
2858
+ mindist=minsquaredist ;
2860
2859
}
2861
2860
}
2862
2861
2863
2862
// and also go through the changed geometries, because the spatial filter of the provider did not consider feature changes
2864
2863
for (std::map<int , QgsGeometry>::const_iterator iter = mChangedGeometries .begin (); iter != mChangedGeometries .end (); ++iter)
2865
2864
{
2866
- vertexFeature = iter->second .closestVertex (point);
2867
- minvertexdist=vertexFeature.sqrDist (point.x (),point.y ());
2868
- if (minvertexdist<mindist)
2865
+ vertexFeature = iter->second .closestVertex (point, vindex, minsquaredist);
2866
+ if (minsquaredist<mindist)
2869
2867
{
2870
2868
mindistx=vertexFeature.x ();
2871
2869
mindisty=vertexFeature.y ();
2872
- mindist=minvertexdist ;
2870
+ mindist=minsquaredist ;
2873
2871
}
2874
2872
}
2875
2873
@@ -2891,16 +2889,6 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2891
2889
2892
2890
QgsPoint origPoint = point;
2893
2891
2894
- #ifdef QGISDEBUG
2895
- std::cout << " QgsVectorLayer::snapVertexWithContext: Entering."
2896
- << " ." << std::endl;
2897
- #endif
2898
-
2899
- #ifdef QGISDEBUG
2900
- std::cout << " QgsVectorLayer::snapVertexWithContext: Tolerance: " << tolerance << " , dataProvider = '" << dataProvider
2901
- << " '." << std::endl;
2902
- #endif
2903
-
2904
2892
// Sanity checking
2905
2893
if ( tolerance<=0 ||
2906
2894
!dataProvider)
@@ -2938,10 +2926,7 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2938
2926
feature->setGeometry ( mChangedGeometries [ feature->featureId () ] );
2939
2927
}
2940
2928
2941
- minDistSegPoint = feature->geometry ()->closestVertexWithContext (origPoint,
2942
- atVertexTemp,
2943
- testSqrDist);
2944
-
2929
+ minDistSegPoint = feature->geometry ()->closestVertex (origPoint, atVertexTemp, testSqrDist);
2945
2930
if (testSqrDist < minSqrDist)
2946
2931
{
2947
2932
point = minDistSegPoint;
@@ -2951,13 +2936,6 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2951
2936
snappedFeatureId = feature->featureId ();
2952
2937
snappedGeometry = *(feature->geometry ());
2953
2938
vertexFound = true ;
2954
-
2955
- #ifdef QGISDEBUG
2956
- std::cout << " QgsVectorLayer::snapVertexWithContext: minSqrDist reduced to: " << minSqrDist
2957
- // << " and beforeVertex " << beforeVertex
2958
- << " ." << std::endl;
2959
- #endif
2960
-
2961
2939
}
2962
2940
}
2963
2941
@@ -2972,10 +2950,7 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2972
2950
iter != mAddedFeatures .end ();
2973
2951
++iter)
2974
2952
{
2975
- minDistSegPoint = (*iter)->geometry ()->closestVertexWithContext (origPoint,
2976
- atVertexTemp,
2977
- testSqrDist);
2978
-
2953
+ minDistSegPoint = (*iter)->geometry ()->closestVertex (origPoint, atVertexTemp, testSqrDist);
2979
2954
if (testSqrDist < minSqrDist)
2980
2955
{
2981
2956
point = minDistSegPoint;
0 commit comments