@@ -74,7 +74,7 @@ QgsMeshVectorRenderer::QgsMeshVectorRenderer( const QgsTriangularMesh &m,
74
74
// we need to expand out the extent so that it includes
75
75
// arrows which start or end up outside of the
76
76
// actual visible extent
77
- double extension = context.convertToMapUnits ( mMaxMag , QgsUnitTypes::RenderPixels );
77
+ double extension = context.convertToMapUnits ( calcExtentBufferSize () , QgsUnitTypes::RenderPixels );
78
78
mBufferedExtent .setXMinimum ( mBufferedExtent .xMinimum () - extension );
79
79
mBufferedExtent .setXMaximum ( mBufferedExtent .xMaximum () + extension );
80
80
mBufferedExtent .setYMinimum ( mBufferedExtent .yMinimum () - extension );
@@ -200,6 +200,39 @@ bool QgsMeshVectorRenderer::calcVectorLineEnd(
200
200
return false ; // success
201
201
}
202
202
203
+ double QgsMeshVectorRenderer::calcExtentBufferSize () const
204
+ {
205
+ double buffer;
206
+ switch ( mCfg .shaftLengthMethod () )
207
+ {
208
+ case QgsMeshRendererVectorSettings::ArrowScalingMethod::MinMax:
209
+ {
210
+ buffer = mContext .convertToPainterUnits ( mCfg .maxShaftLength (),
211
+ QgsUnitTypes::RenderUnit::RenderMillimeters );
212
+ break ;
213
+ }
214
+ case QgsMeshRendererVectorSettings::ArrowScalingMethod::Scaled:
215
+ {
216
+ buffer = mCfg .scaleFactor () * mMaxMag ;
217
+ break ;
218
+ }
219
+ case QgsMeshRendererVectorSettings::ArrowScalingMethod::Fixed:
220
+ {
221
+ buffer = mContext .convertToPainterUnits ( mCfg .fixedShaftLength (),
222
+ QgsUnitTypes::RenderUnit::RenderMillimeters );
223
+ break ;
224
+ }
225
+ }
226
+
227
+ if ( mCfg .filterMax () >= 0 && buffer > mCfg .filterMax () )
228
+ buffer = mCfg .filterMax ();
229
+
230
+ if ( buffer < 0.0 )
231
+ buffer = 0.0 ;
232
+
233
+ return buffer;
234
+ }
235
+
203
236
204
237
void QgsMeshVectorRenderer::drawVectorDataOnVertices ( const QList<int > &trianglesInExtent )
205
238
{
0 commit comments