mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-27 00:33:48 -05:00
override default settings for snapping utils
followup 7e0f64648ac4faf89d44d00959a876de26bcc2df
This commit is contained in:
parent
334d885b6d
commit
eb6332fc35
@ -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(); }
|
||||
@ -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
|
||||
{
|
||||
@ -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() )
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user