override default settings for snapping utils

followup 7e0f64648ac4faf89d44d00959a876de26bcc2df
This commit is contained in:
Denis Rouzaud 2015-01-23 15:36:21 +01:00
parent 334d885b6d
commit eb6332fc35

View File

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