mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-12 00:06:44 -05: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 maximumElevationDelta;
|
||||||
|
|
||||||
double displayRationElevationVsDistance;
|
double displayRatioElevationVsDistance;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -197,7 +197,7 @@ QgsProfileSnapResult QgsProfilePlotRenderer::snapPoint( const QgsProfilePoint &p
|
|||||||
if ( jobSnapResult.isValid() )
|
if ( jobSnapResult.isValid() )
|
||||||
{
|
{
|
||||||
const double snapDistance = std::pow( point.distance() - jobSnapResult.snappedPoint.distance(), 2 )
|
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 )
|
if ( snapDistance < bestSnapDistance )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class CORE_EXPORT QgsProfileSnapContext
|
|||||||
double maximumElevationDelta = 0;
|
double maximumElevationDelta = 0;
|
||||||
|
|
||||||
//! Display ratio of elevation vs distance units
|
//! Display ratio of elevation vs distance units
|
||||||
double displayRationElevationVsDistance = 1;
|
double displayRatioElevationVsDistance = 1;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -355,6 +355,8 @@ QgsProfileSnapContext QgsElevationProfileCanvas::snapContext() const
|
|||||||
QgsProfileSnapContext context;
|
QgsProfileSnapContext context;
|
||||||
context.maximumDistanceDelta = xToleranceInPlotUnits;
|
context.maximumDistanceDelta = xToleranceInPlotUnits;
|
||||||
context.maximumElevationDelta = yToleranceInPlotUnits;
|
context.maximumElevationDelta = yToleranceInPlotUnits;
|
||||||
|
context.displayRatioElevationVsDistance = ( ( mPlotItem->yMaximum() - mPlotItem->yMinimum() ) / ( mPlotItem->plotArea().height() ) )
|
||||||
|
/ ( ( mPlotItem->xMaximum() - mPlotItem->xMinimum() ) / ( mPlotItem->plotArea().width() ) );
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user