mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-08 00:05:09 -04:00
Account for non-equal axis scaling during snapping
This commit is contained in:
parent
d163b4fb21
commit
5ff12f41e7
@ -25,7 +25,7 @@ Encapsulates the context of snapping a profile point.
|
||||
|
||||
double maximumElevationDelta;
|
||||
|
||||
double displayRationElevationVsDistance;
|
||||
double displayRatioElevationVsDistance;
|
||||
|
||||
};
|
||||
|
||||
|
@ -197,7 +197,7 @@ QgsProfileSnapResult QgsProfilePlotRenderer::snapPoint( const QgsProfilePoint &p
|
||||
if ( jobSnapResult.isValid() )
|
||||
{
|
||||
const double snapDistance = std::pow( point.distance() - jobSnapResult.snappedPoint.distance(), 2 )
|
||||
+ std::pow( point.elevation() - jobSnapResult.snappedPoint.elevation(), 2 );
|
||||
+ std::pow( ( point.elevation() - jobSnapResult.snappedPoint.elevation() ) * context.displayRatioElevationVsDistance, 2 );
|
||||
|
||||
if ( snapDistance < bestSnapDistance )
|
||||
{
|
||||
|
@ -38,7 +38,7 @@ class CORE_EXPORT QgsProfileSnapContext
|
||||
double maximumElevationDelta = 0;
|
||||
|
||||
//! Display ratio of elevation vs distance units
|
||||
double displayRationElevationVsDistance = 1;
|
||||
double displayRatioElevationVsDistance = 1;
|
||||
|
||||
};
|
||||
|
||||
|
@ -355,6 +355,8 @@ QgsProfileSnapContext QgsElevationProfileCanvas::snapContext() const
|
||||
QgsProfileSnapContext context;
|
||||
context.maximumDistanceDelta = xToleranceInPlotUnits;
|
||||
context.maximumElevationDelta = yToleranceInPlotUnits;
|
||||
context.displayRatioElevationVsDistance = ( ( mPlotItem->yMaximum() - mPlotItem->yMinimum() ) / ( mPlotItem->plotArea().height() ) )
|
||||
/ ( ( mPlotItem->xMaximum() - mPlotItem->xMinimum() ) / ( mPlotItem->plotArea().width() ) );
|
||||
|
||||
return context;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user