@@ -767,7 +767,7 @@ bool QgsVectorLayer::draw(QPainter * p, QgsRect * viewExtent, QgsMapToPixel * th
767
767
void QgsVectorLayer::draw (QPainter * p, QgsRect * viewExtent, QgsMapToPixel * theMapToPixelTransform,
768
768
double widthScale, double symbolScale)
769
769
{
770
- if ( /* 1 == 1 */ m_renderer)
770
+ if ( m_renderer)
771
771
{
772
772
// painter is active (begin has been called
773
773
/* Steps to draw the layer
@@ -783,33 +783,23 @@ void QgsVectorLayer::draw(QPainter * p, QgsRect * viewExtent, QgsMapToPixel * th
783
783
/* Scale factor of the marker image*/
784
784
double markerScaleFactor=1 .;
785
785
786
- // select the records in the extent. The provider sets a spatial filter
787
- // and sets up the selection set for retrieval
788
- QgsDebugMsg (" Selecting features based on view extent" );
789
- dataProvider->reset ();
790
-
791
786
// Destroy all cached geometries and clear the references to them
792
- QgsDebugMsg (" QgsVectorLayer::draw: Destroying all cached geometries." );
793
-
794
- // TODO: This area has suspect memory management
795
- // if(mEditable)
796
- // {
797
- for (std::map<int , QgsGeometry*>::iterator it = mCachedGeometries .begin ();
798
- it != mCachedGeometries .end ();
799
- ++it )
787
+
788
+ if (mEditable )
789
+ {
790
+ // Destroy all cached geometries and clear the references to them
791
+ for (std::map<int , QgsGeometry*>::iterator it = mCachedGeometries .begin (); it != mCachedGeometries .end (); ++it )
800
792
{
801
793
delete (*it).second ;
802
794
}
803
- QgsDebugMsg (" QgsVectorLayer::draw: Clearing all cached geometries." );
804
795
mCachedGeometries .clear ();
805
- // }
796
+ }
806
797
798
+ dataProvider->reset ();
807
799
dataProvider->select (viewExtent);
808
800
dataProvider->updateFeatureCount ();
809
801
int totalFeatures = dataProvider->featureCount ();
810
802
int featureCount = 0 ;
811
- // QgsFeature *ftest = dataProvider->getFirstFeature();
812
- QgsDebugMsg (" Starting draw of features" );
813
803
QgsFeature *fet;
814
804
815
805
bool projectionsEnabledFlag = projectionsEnabled ();
@@ -825,7 +815,6 @@ void QgsVectorLayer::draw(QPainter * p, QgsRect * viewExtent, QgsMapToPixel * th
825
815
try
826
816
{
827
817
while (fet = dataProvider->getNextFeature (attributes, updateThreshold))
828
- // while((fet = dataProvider->getNextFeature(attributes)))
829
818
{
830
819
// XXX Something in our draw event is triggering an additional draw event when resizing [TE 01/26/06]
831
820
// XXX Calling this will begin processing the next draw event causing image havoc and recursion crashes.
@@ -841,69 +830,53 @@ void QgsVectorLayer::draw(QPainter * p, QgsRect * viewExtent, QgsMapToPixel * th
841
830
}
842
831
843
832
if (fet == 0 )
844
- {
845
- QgsDebugMsg (" get next feature returned null" );
846
- }
847
- else
848
- {
849
- // Cache this for the use of (e.g.) modifying the feature's geometry.
850
- // mCachedGeometries[fet->featureId()] = fet->geometryAndOwnership();
851
-
852
- if (mDeleted .find (fet->featureId ())==mDeleted .end ())
853
- {
854
- // not deleted.
855
-
856
- // check to see if the feature has an uncommitted modification.
857
- // if so, substitute the modified geometry
858
-
859
- // #ifdef QGISDEBUG
860
- // std::cerr << "QgsVectorLayer::draw: Looking for modified geometry for " << fet->featureId() << std::endl;
861
- // #endif
862
- if (mChangedGeometries .find (fet->featureId ()) != mChangedGeometries .end ())
833
+ {
834
+ QgsDebugMsg (" get next feature returned null" );
835
+ continue ;
836
+ }
837
+
838
+ if (mEditable )
839
+ {
840
+ if (mDeleted .find (fet->featureId ()) != mDeleted .end ())
841
+ {
842
+ continue ; // dont't draw feature marked as deleted
843
+ }
844
+ if (mChangedGeometries .find (fet->featureId ()) != mChangedGeometries .end ())
863
845
{
864
- #ifdef QGISDEBUG
865
- std::cerr << " QgsVectorLayer::draw: Found modified geometry for " << fet->featureId () << std::endl;
866
- #endif
867
- // substitute the modified geometry for the committed version
868
- fet->setGeometry ( mChangedGeometries [ fet->featureId () ] );
869
- }
870
-
871
- // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
872
- // if(mEditable)
873
- // {
874
- mCachedGeometries [fet->featureId ()] = fet->geometryAndOwnership ();
875
- // }
876
- bool sel=mSelected .find (fet->featureId ()) != mSelected .end ();
877
- m_renderer->renderFeature (p, fet, &marker, &markerScaleFactor,
878
- sel, widthScale );
879
-
880
- double scale = markerScaleFactor * symbolScale;
881
- drawFeature (p,fet,theMapToPixelTransform,&marker, scale,
882
- projectionsEnabledFlag);
883
-
884
- ++featureCount;
885
- delete fet;
886
- }
887
- }
888
-
889
- }
846
+ // substitute the committed geometry with the modified one
847
+ fet->setGeometry ( mChangedGeometries [ fet->featureId () ] );
848
+ }
849
+ // Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
850
+ mCachedGeometries [fet->featureId ()] = fet->geometryAndOwnership ();
851
+ }
852
+
853
+ // check if feature is selected
854
+ bool sel=mSelected .find (fet->featureId ()) != mSelected .end ();
855
+ m_renderer->renderFeature (p, fet, &marker, &markerScaleFactor, sel, widthScale );
856
+ double scale = markerScaleFactor * symbolScale;
857
+ drawFeature (p,fet,theMapToPixelTransform,&marker, scale, projectionsEnabledFlag);
858
+ ++featureCount;
859
+ delete fet;
860
+ }
890
861
891
862
// also draw the not yet commited features
892
- std::vector<QgsFeature*>::iterator it = mAddedFeatures .begin ();
893
- for (; it != mAddedFeatures .end (); ++it)
894
- {
895
- bool sel=mSelected .find ((*it)->featureId ()) != mSelected .end ();
896
- m_renderer->renderFeature (p, *it, &marker, &markerScaleFactor,
897
- sel, widthScale);
898
- double scale = markerScaleFactor * symbolScale;
899
- if (mChangedGeometries .find ((*it)->featureId ()) != mChangedGeometries .end ())
900
- {
901
- (*it)->setGeometry ( mChangedGeometries [(*it)->featureId () ] );
902
- }
903
- mCachedGeometries [(*it)->featureId ()] = (*it)->geometryAndOwnership ();
904
- drawFeature (p,*it,theMapToPixelTransform,&marker,scale,
905
- projectionsEnabledFlag);
906
- }
863
+ if (mEditable )
864
+ {
865
+ for (std::vector<QgsFeature*>::iterator it = mAddedFeatures .begin (); it != mAddedFeatures .end (); ++it)
866
+ {
867
+ bool sel=mSelected .find ((*it)->featureId ()) != mSelected .end ();
868
+ m_renderer->renderFeature (p, *it, &marker, &markerScaleFactor, sel, widthScale);
869
+ double scale = markerScaleFactor * symbolScale;
870
+ if (mChangedGeometries .find ((*it)->featureId ()) != mChangedGeometries .end ())
871
+ {
872
+ (*it)->setGeometry ( mChangedGeometries [(*it)->featureId () ] );
873
+ }
874
+ // give a deep copy of the geometry to mCachedGeometry because it will be erased at each redraw
875
+ QgsGeometry* deepCopy = new QgsGeometry (*((*it)->geometry ()));
876
+ mCachedGeometries .insert (std::make_pair ((*it)->featureId (), deepCopy));
877
+ drawFeature (p,*it,theMapToPixelTransform,&marker,scale, projectionsEnabledFlag);
878
+ }
879
+ }
907
880
}
908
881
catch (QgsCsException &cse)
909
882
{
@@ -1614,21 +1587,6 @@ bool QgsVectorLayer::addFeature(QgsFeature* f, bool alsoUpdateExtent)
1614
1587
int end=endian ();
1615
1588
memcpy (f->getGeometry (),&end,1 );
1616
1589
1617
- /* //assign a temporary id to the feature
1618
- int tempid;
1619
- if(mAddedFeatures.size()==0)
1620
- {
1621
- tempid=findFreeId();
1622
- }
1623
- else
1624
- {
1625
- std::list<QgsFeature*>::const_reverse_iterator rit=mAddedFeatures.rbegin();
1626
- tempid=(*rit)->featureId()+1;
1627
- }
1628
- #ifdef QGISDEBUG
1629
- qWarning("assigned feature id "+QString::number(tempid));
1630
- #endif*/
1631
-
1632
1590
// assign a temporary id to the feature (use negative numbers)
1633
1591
addedIdLowWaterMark--;
1634
1592
@@ -1644,9 +1602,7 @@ qWarning("assigned feature id "+QString::number(tempid));
1644
1602
#ifdef QGISDEBUG
1645
1603
std::cout << " QgsVectorLayer::addFeature: about to traverse fields." << std::endl;
1646
1604
#endif
1647
- for (std::map<int , QString>::iterator it = fields.begin ();
1648
- it != fields.end ();
1649
- ++it)
1605
+ for (std::map<int , QString>::iterator it = fields.begin (); it != fields.end (); ++it)
1650
1606
{
1651
1607
#ifdef QGISDEBUG
1652
1608
std::cout << " QgsVectorLayer::addFeature: inspecting field '"
@@ -1682,37 +1638,27 @@ qWarning("assigned feature id "+QString::number(tempid));
1682
1638
}
1683
1639
1684
1640
1685
- bool QgsVectorLayer::insertVertexBefore (double x, double y, int atFeatureId,
1686
- QgsGeometryVertexIndex beforeVertex)
1641
+ bool QgsVectorLayer::insertVertexBefore (double x, double y, int atFeatureId, QgsGeometryVertexIndex beforeVertex)
1687
1642
{
1643
+ if (!mEditable )
1644
+ {
1645
+ return false ;
1646
+ }
1688
1647
1689
- #ifdef QGISDEBUG
1690
- std::cout << " QgsVectorLayer::insertVertexBefore: entered with featureId " << atFeatureId << " ." << std::endl;
1691
- #endif
1692
-
1693
- if (dataProvider)
1648
+ if (dataProvider)
1694
1649
{
1695
-
1696
- if ( mChangedGeometries .find (atFeatureId) == mChangedGeometries .end () )
1650
+ if (mChangedGeometries .find (atFeatureId) == mChangedGeometries .end ())
1697
1651
{
1698
- // first time this geometry has changed since last commit
1699
-
1652
+ // first time this geometry has changed since last commit
1653
+ if (!mCachedGeometries [atFeatureId])
1654
+ {
1655
+ return false ;
1656
+ }
1700
1657
mChangedGeometries [atFeatureId] = *(mCachedGeometries [atFeatureId]);
1701
- #ifdef QGISDEBUG
1702
- std::cout << " QgsVectorLayer::insertVertexBefore: first uncommitted change for this geometry." << std::endl;
1703
- #endif
1704
1658
}
1705
-
1659
+
1706
1660
mChangedGeometries [atFeatureId].insertVertexBefore (x, y, beforeVertex);
1707
-
1708
1661
mModified =true ;
1709
-
1710
- // TODO - refresh map here?
1711
-
1712
- #ifdef QGISDEBUG
1713
- // TODO
1714
- #endif
1715
-
1716
1662
return true ;
1717
1663
}
1718
1664
return false ;
@@ -1722,35 +1668,25 @@ bool QgsVectorLayer::insertVertexBefore(double x, double y, int atFeatureId,
1722
1668
bool QgsVectorLayer::moveVertexAt (double x, double y, int atFeatureId,
1723
1669
QgsGeometryVertexIndex atVertex)
1724
1670
{
1725
- // TODO
1726
-
1727
- #ifdef QGISDEBUG
1728
- std::cout << " QgsVectorLayer::moveVertexAt: entered with featureId " << atFeatureId << " ." << std::endl;
1729
- #endif
1671
+ if (!mEditable )
1672
+ {
1673
+ return false ;
1674
+ }
1730
1675
1731
- if (dataProvider)
1676
+ if (dataProvider)
1732
1677
{
1733
-
1734
- if ( mChangedGeometries .find (atFeatureId) == mChangedGeometries .end () )
1678
+ if (mChangedGeometries .find (atFeatureId) == mChangedGeometries .end ())
1735
1679
{
1736
1680
// first time this geometry has changed since last commit
1737
-
1681
+ if (!mCachedGeometries [atFeatureId])
1682
+ {
1683
+ return false ;
1684
+ }
1738
1685
mChangedGeometries [atFeatureId] = *(mCachedGeometries [atFeatureId]);
1739
- #ifdef QGISDEBUG
1740
- std::cout << " QgsVectorLayer::moveVertexAt: first uncommitted change for this geometry." << std::endl;
1741
- #endif
1742
1686
}
1743
1687
1744
1688
mChangedGeometries [atFeatureId].moveVertexAt (x, y, atVertex);
1745
-
1746
1689
mModified =true ;
1747
-
1748
- // TODO - refresh map here?
1749
-
1750
- #ifdef QGISDEBUG
1751
- // TODO
1752
- #endif
1753
-
1754
1690
return true ;
1755
1691
}
1756
1692
return false ;
@@ -1760,36 +1696,25 @@ bool QgsVectorLayer::moveVertexAt(double x, double y, int atFeatureId,
1760
1696
bool QgsVectorLayer::deleteVertexAt (int atFeatureId,
1761
1697
QgsGeometryVertexIndex atVertex)
1762
1698
{
1763
- // TODO
1764
-
1765
- #ifdef QGISDEBUG
1766
- std::cout << " QgsVectorLayer::deleteVertexAt: entered with featureId " << atFeatureId << " ." << std::endl;
1767
- #endif
1699
+ if (!mEditable )
1700
+ {
1701
+ return false ;
1702
+ }
1768
1703
1769
- if (dataProvider)
1704
+ if (dataProvider)
1770
1705
{
1771
-
1772
- if ( mChangedGeometries .find (atFeatureId) == mChangedGeometries .end () )
1706
+ if (mChangedGeometries .find (atFeatureId) == mChangedGeometries .end ())
1773
1707
{
1774
1708
// first time this geometry has changed since last commit
1775
-
1709
+ if (!mCachedGeometries [atFeatureId])
1710
+ {
1711
+ return false ;
1712
+ }
1776
1713
mChangedGeometries [atFeatureId] = *(mCachedGeometries [atFeatureId]);
1777
- #ifdef QGISDEBUG
1778
- std::cout << " QgsVectorLayer::deleteVertexAt: first uncommitted change for this geometry." << std::endl;
1779
- #endif
1780
1714
}
1781
1715
1782
- // TODO: Hanlde if we delete the only remaining meaningful vertex of a geometry
1783
1716
mChangedGeometries [atFeatureId].deleteVertexAt (atVertex);
1784
-
1785
1717
mModified =true ;
1786
-
1787
- // TODO - refresh map here?
1788
-
1789
- #ifdef QGISDEBUG
1790
- // TODO
1791
- #endif
1792
-
1793
1718
return true ;
1794
1719
}
1795
1720
return false ;
@@ -1834,11 +1759,10 @@ bool QgsVectorLayer::deleteSelectedFeatures()
1834
1759
break ;
1835
1760
}
1836
1761
}
1837
- if (notcommitedfeature)
1762
+ if (! notcommitedfeature)
1838
1763
{
1839
- break ;
1764
+ mDeleted . insert (*it) ;
1840
1765
}
1841
- mDeleted .insert (*it);
1842
1766
}
1843
1767
1844
1768
if (mSelected .size ()>0 )
@@ -2894,26 +2818,18 @@ bool QgsVectorLayer::snapPoint(QgsPoint& point, double tolerance)
2894
2818
}
2895
2819
2896
2820
2897
- bool QgsVectorLayer::snapVertexWithContext (QgsPoint& point,
2898
- QgsGeometryVertexIndex& atVertex,
2899
- int & snappedFeatureId,
2900
- QgsGeometry& snappedGeometry,
2901
- double tolerance)
2821
+ bool QgsVectorLayer::snapVertexWithContext (QgsPoint& point, QgsGeometryVertexIndex& atVertex, int & snappedFeatureId,\
2822
+ QgsGeometry& snappedGeometry, double tolerance)
2902
2823
{
2903
2824
bool vertexFound = false ; // flag to check if a meaningful result can be returned
2904
2825
QgsGeometryVertexIndex atVertexTemp;
2905
2826
2906
2827
QgsPoint origPoint = point;
2907
2828
2908
2829
// Sanity checking
2909
- if ( tolerance<=0 ||
2910
- !dataProvider)
2830
+ if ( tolerance<=0 || !dataProvider)
2911
2831
{
2912
- // set some default values before we bail
2913
- atVertex = QgsGeometryVertexIndex ();
2914
- snappedFeatureId = std::numeric_limits<int >::min ();
2915
- snappedGeometry = QgsGeometry ();
2916
- return FALSE ;
2832
+ return false ;
2917
2833
}
2918
2834
2919
2835
QgsFeature* feature;
@@ -2922,28 +2838,21 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2922
2838
2923
2839
double minSqrDist = tolerance*tolerance; // current minimum distance
2924
2840
2925
- QgsRect selectrect (point.x ()-tolerance, point.y ()-tolerance,
2926
- point.x ()+tolerance, point.y ()+tolerance);
2927
-
2841
+ QgsRect selectrect (point.x ()-tolerance, point.y ()-tolerance, point.x ()+tolerance, point.y ()+tolerance);
2928
2842
dataProvider->reset ();
2929
2843
dataProvider->select (&selectrect);
2930
2844
2931
- origPoint = point;
2932
-
2933
2845
// Go through the committed features
2934
2846
while ((feature = dataProvider->getNextFeature (false )))
2935
2847
{
2936
- if (mChangedGeometries .find (feature->featureId ()) != mChangedGeometries .end ())
2848
+ if (mChangedGeometries .find (feature->featureId ()) != mChangedGeometries .end ())
2937
2849
{
2938
- #ifdef QGISDEBUG
2939
- std::cerr << " QgsVectorLayer::snapSegmentWithContext: Found modified geometry for " << feature->featureId () << std::endl;
2940
- #endif
2941
2850
// substitute the modified geometry for the committed version
2942
- feature->setGeometry ( mChangedGeometries [ feature->featureId () ] );
2851
+ feature->setGeometry (mChangedGeometries [feature->featureId ()] );
2943
2852
}
2944
2853
2945
2854
minDistSegPoint = feature->geometry ()->closestVertex (origPoint, atVertexTemp, testSqrDist);
2946
- if (testSqrDist < minSqrDist)
2855
+ if (testSqrDist < minSqrDist)
2947
2856
{
2948
2857
point = minDistSegPoint;
2949
2858
minSqrDist = testSqrDist;
@@ -2953,21 +2862,22 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2953
2862
snappedGeometry = *(feature->geometry ());
2954
2863
vertexFound = true ;
2955
2864
}
2865
+ delete feature;
2956
2866
}
2957
2867
2958
-
2959
- #ifdef QGISDEBUG
2960
- std::cout << " QgsVectorLayer::snapVertexWithContext: Checking new features."
2961
- << " ." << std::endl;
2962
- #endif
2963
-
2964
2868
// Also go through the new features
2965
- for (std::vector<QgsFeature*>::iterator iter = mAddedFeatures .begin ();
2966
- iter != mAddedFeatures .end ();
2967
- ++iter)
2869
+ for (std::vector<QgsFeature*>::iterator iter = mAddedFeatures .begin (); iter != mAddedFeatures .end (); ++iter)
2968
2870
{
2969
- minDistSegPoint = (*iter)->geometry ()->closestVertex (origPoint, atVertexTemp, testSqrDist);
2970
- if (testSqrDist < minSqrDist)
2871
+ if (mChangedGeometries .find ((*iter)->featureId ()) != mChangedGeometries .end ())
2872
+ {
2873
+ // use the modified geometry
2874
+ minDistSegPoint = mChangedGeometries [(*iter)->featureId ()].closestVertex (origPoint, atVertexTemp, testSqrDist);
2875
+ }
2876
+ else
2877
+ {
2878
+ minDistSegPoint = (*iter)->geometry ()->closestVertex (origPoint, atVertexTemp, testSqrDist);
2879
+ }
2880
+ if (testSqrDist < minSqrDist)
2971
2881
{
2972
2882
point = minDistSegPoint;
2973
2883
minSqrDist = testSqrDist;
@@ -2979,95 +2889,47 @@ bool QgsVectorLayer::snapVertexWithContext(QgsPoint& point,
2979
2889
}
2980
2890
}
2981
2891
2982
- #ifdef QGISDEBUG
2983
- std::cout << " QgsVectorLayer::snapVertexWithContext: Finishing"
2984
- << " with feature " << snappedFeatureId
2985
- // << " and beforeVertex " << beforeVertex
2986
- << " ." << std::endl;
2987
- #endif
2988
-
2989
2892
if (!vertexFound)
2990
- {
2991
- // set some default values before we bail
2992
- atVertex = QgsGeometryVertexIndex ();
2993
- snappedFeatureId = std::numeric_limits<int >::min ();
2994
- snappedGeometry = QgsGeometry ();
2995
- return FALSE ;
2996
- }
2997
-
2998
- return TRUE ;
2893
+ {
2894
+ return false ;
2895
+ }
2896
+ return true ;
2999
2897
}
3000
2898
3001
2899
3002
- bool QgsVectorLayer::snapSegmentWithContext (QgsPoint& point,
3003
- QgsGeometryVertexIndex& beforeVertex,
3004
- int & snappedFeatureId,
3005
- QgsGeometry& snappedGeometry,
3006
- double tolerance)
2900
+ bool QgsVectorLayer::snapSegmentWithContext (QgsPoint& point, QgsGeometryVertexIndex& beforeVertex, int & snappedFeatureId,\
2901
+ QgsGeometry& snappedGeometry, double tolerance)
3007
2902
{
3008
2903
bool segmentFound = false ; // flag to check if a reasonable result can be returned
3009
2904
QgsGeometryVertexIndex beforeVertexTemp;
3010
2905
3011
2906
QgsPoint origPoint = point;
3012
2907
3013
- #ifdef QGISDEBUG
3014
- std::cout << " QgsVectorLayer::snapSegmentWithContext: Entering."
3015
- << " ." << std::endl;
3016
- #endif
3017
-
3018
- #ifdef QGISDEBUG
3019
- std::cout << " QgsVectorLayer::snapSegmentWithContext: Tolerance: " << tolerance << " , dataProvider = '" << dataProvider
3020
- << " '." << std::endl;
3021
- #endif
3022
-
3023
2908
// Sanity checking
3024
- if ( tolerance<=0 ||
3025
- !dataProvider)
2909
+ if ( tolerance<=0 || !dataProvider)
3026
2910
{
3027
- // set some default values before we bail
3028
- beforeVertex = QgsGeometryVertexIndex ();
3029
- snappedFeatureId = std::numeric_limits<int >::min ();
3030
- snappedGeometry = QgsGeometry ();
3031
- return FALSE ;
2911
+ return false ;
3032
2912
}
3033
2913
3034
2914
QgsFeature* feature;
3035
2915
QgsPoint minDistSegPoint; // the closest point on the segment
3036
2916
double testSqrDist; // the squared distance between 'point' and 'snappedFeature'
3037
-
3038
2917
double minSqrDist = tolerance*tolerance; // current minimum distance
3039
2918
3040
- QgsRect selectrect (point.x ()-tolerance, point.y ()-tolerance,
3041
- point.x ()+tolerance, point.y ()+tolerance);
3042
-
2919
+ QgsRect selectrect (point.x ()-tolerance, point.y ()-tolerance, point.x ()+tolerance, point.y ()+tolerance);
3043
2920
dataProvider->reset ();
3044
2921
dataProvider->select (&selectrect);
3045
2922
3046
- #ifdef QGISDEBUG
3047
- std::cout << " QgsVectorLayer::snapSegmentWithContext: Checking committed features."
3048
- << " ." << std::endl;
3049
- #endif
3050
-
3051
2923
// Go through the committed features
3052
2924
while ((feature = dataProvider->getNextFeature (false )))
3053
2925
{
3054
-
3055
2926
if (mChangedGeometries .find (feature->featureId ()) != mChangedGeometries .end ())
3056
2927
{
3057
- #ifdef QGISDEBUG
3058
- std::cerr << " QgsVectorLayer::snapSegmentWithContext: Found modified geometry for " << feature->featureId () << std::endl;
3059
- #endif
3060
2928
// substitute the modified geometry for the committed version
3061
2929
feature->setGeometry ( mChangedGeometries [ feature->featureId () ] );
3062
2930
}
3063
2931
3064
- minDistSegPoint = feature->geometry ()->closestSegmentWithContext (origPoint,
3065
- beforeVertexTemp,
3066
- testSqrDist);
3067
-
3068
- #ifdef QGISDEBUG
3069
- qWarning (beforeVertexTemp.toString ());
3070
- #endif
2932
+ minDistSegPoint = feature->geometry ()->closestSegmentWithContext (origPoint, beforeVertexTemp, testSqrDist);
3071
2933
3072
2934
if (testSqrDist < minSqrDist)
3073
2935
{
@@ -3078,30 +2940,22 @@ bool QgsVectorLayer::snapSegmentWithContext(QgsPoint& point,
3078
2940
snappedFeatureId = feature->featureId ();
3079
2941
snappedGeometry = *(feature->geometry ());
3080
2942
segmentFound = true ;
3081
-
3082
- #ifdef QGISDEBUG
3083
- std::cout << " QgsVectorLayer::snapSegmentWithContext: minSqrDist reduced to: " << minSqrDist
3084
- // << " and beforeVertex " << beforeVertex
3085
- << " ." << std::endl;
3086
- #endif
3087
-
3088
2943
}
2944
+ delete feature;
3089
2945
}
3090
2946
3091
-
3092
- #ifdef QGISDEBUG
3093
- std::cout << " QgsVectorLayer::snapSegmentWithContext: Checking new features."
3094
- << " ." << std::endl;
3095
- #endif
3096
-
3097
2947
// Also go through the new features
3098
- for (std::vector<QgsFeature*>::iterator iter = mAddedFeatures .begin ();
3099
- iter != mAddedFeatures .end ();
3100
- ++iter)
2948
+ for (std::vector<QgsFeature*>::iterator iter = mAddedFeatures .begin (); iter != mAddedFeatures .end (); ++iter)
3101
2949
{
3102
- minDistSegPoint = (*iter)->geometry ()->closestSegmentWithContext (origPoint,
3103
- beforeVertexTemp,
3104
- testSqrDist);
2950
+ if (mChangedGeometries .find ((*iter)->featureId ()) != mChangedGeometries .end ())
2951
+ {
2952
+ // use the modified geometry
2953
+ minDistSegPoint = mChangedGeometries [(*iter)->featureId ()].closestSegmentWithContext (origPoint, beforeVertexTemp, testSqrDist);
2954
+ }
2955
+ else
2956
+ {
2957
+ minDistSegPoint = (*iter)->geometry ()->closestSegmentWithContext (origPoint, beforeVertexTemp, testSqrDist);
2958
+ }
3105
2959
3106
2960
if (testSqrDist < minSqrDist)
3107
2961
{
@@ -3115,24 +2969,11 @@ bool QgsVectorLayer::snapSegmentWithContext(QgsPoint& point,
3115
2969
}
3116
2970
}
3117
2971
3118
- #ifdef QGISDEBUG
3119
- std::cout << " QgsVectorLayer::snapSegmentWithContext: Finishing"
3120
- << " with feature " << snappedFeatureId
3121
- // << " and beforeVertex " << beforeVertex
3122
- << " ." << std::endl;
3123
- #endif
3124
-
3125
2972
if (!segmentFound)
3126
2973
{
3127
- // set some default values before we bail
3128
- beforeVertex = QgsGeometryVertexIndex ();
3129
- snappedFeatureId = std::numeric_limits<int >::min ();
3130
- snappedGeometry = QgsGeometry ();
3131
- return FALSE ;
2974
+ return false ;
3132
2975
}
3133
-
3134
- return TRUE ;
3135
-
2976
+ return true ;
3136
2977
}
3137
2978
3138
2979
0 commit comments