Skip to content

Commit

Permalink
override default settings for snapping utils
Browse files Browse the repository at this point in the history
followup 7e0f646
  • Loading branch information
3nids committed Jan 23, 2015
1 parent 334d885 commit eb6332f
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions src/app/qgsmapmouseevent.cpp
Expand Up @@ -32,11 +32,6 @@ QgsMapMouseEvent::QgsMapMouseEvent( QgsMapToolAdvancedDigitizing* mapTool, QMous
snapPoint();
}

struct VertexOnlyFilter : public QgsPointLocator::MatchFilter
{
bool acceptMatch( const QgsPointLocator::Match& m ) override { return m.hasVertex(); }
};

struct EdgesOnlyFilter : public QgsPointLocator::MatchFilter
{
bool acceptMatch( const QgsPointLocator::Match& m ) override { return m.hasEdge(); }
Expand Down Expand Up @@ -72,10 +67,15 @@ void QgsMapMouseEvent::snapPoint()
QgsSnappingUtils::SnapToMapMode canvasMode = snappingUtils->snapToMapMode();
if ( mSnappingMode == SnapAllLayers )
{
int type;
double tolerance;
QgsTolerance::UnitType unit;
snappingUtils->defaultSettings( type, tolerance, unit );
snappingUtils->setSnapToMapMode( QgsSnappingUtils::SnapAllLayers );
VertexOnlyFilter filter;
mSnapMatch = snappingUtils->snapToMap( mMapPoint, &filter );
snappingUtils->setDefaultSettings( QgsPointLocator::Vertex, tolerance, unit );
mSnapMatch = snappingUtils->snapToMap( mMapPoint );
snappingUtils->setSnapToMapMode( canvasMode );
snappingUtils->setDefaultSettings( type, tolerance, unit );
}
else
{
Expand Down Expand Up @@ -117,21 +117,27 @@ QList<QgsPoint> QgsMapMouseEvent::snapSegment( bool* snapped, bool allLayers ) c
else if ( mSnappingMode != NoSnapping )
{
QgsPointLocator::Match match;
EdgesOnlyFilter filter;
QgsPoint point;
if ( mSnappingMode == SnapProjectConfig && !allLayers )
{
// run snapToMap with only segments
EdgesOnlyFilter filter;
match = mMapTool->canvas()->snappingUtils()->snapToMap( point, &filter );
}
else if ( mSnappingMode == SnapAllLayers || allLayers )
{
// run snapToMap with only segments on all layers
// run snapToMap with only edges on all layers
QgsSnappingUtils* snappingUtils = mMapTool->canvas()->snappingUtils();
QgsSnappingUtils::SnapToMapMode canvasMode = snappingUtils->snapToMapMode();
int type;
double tolerance;
QgsTolerance::UnitType unit;
snappingUtils->defaultSettings( type, tolerance, unit );
snappingUtils->setSnapToMapMode( QgsSnappingUtils::SnapAllLayers );
match = snappingUtils->snapToMap( point, &filter );
snappingUtils->setDefaultSettings( QgsPointLocator::Edge, tolerance, unit );
match = snappingUtils->snapToMap( point );
snappingUtils->setSnapToMapMode( canvasMode );
snappingUtils->setDefaultSettings( type, tolerance, unit );
}
if ( match.isValid() && match.hasEdge() )
{
Expand Down

0 comments on commit eb6332f

Please sign in to comment.