Skip to content

Commit 20a205d

Browse files
committedOct 25, 2018
fix for different vector rendering types
1 parent b0bd629 commit 20a205d

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed
 

‎src/core/mesh/qgsmeshvectorrenderer.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ QgsMeshVectorRenderer::QgsMeshVectorRenderer( const QgsTriangularMesh &m,
7474
// we need to expand out the extent so that it includes
7575
// arrows which start or end up outside of the
7676
// actual visible extent
77-
double extension = context.convertToMapUnits( mMaxMag, QgsUnitTypes::RenderPixels );
77+
double extension = context.convertToMapUnits( calcExtentBufferSize(), QgsUnitTypes::RenderPixels );
7878
mBufferedExtent.setXMinimum( mBufferedExtent.xMinimum() - extension );
7979
mBufferedExtent.setXMaximum( mBufferedExtent.xMaximum() + extension );
8080
mBufferedExtent.setYMinimum( mBufferedExtent.yMinimum() - extension );
@@ -200,6 +200,39 @@ bool QgsMeshVectorRenderer::calcVectorLineEnd(
200200
return false; //success
201201
}
202202

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+
203236

204237
void QgsMeshVectorRenderer::drawVectorDataOnVertices( const QList<int> &trianglesInExtent )
205238
{

‎src/core/mesh/qgsmeshvectorrenderer.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ class QgsMeshVectorRenderer
8383
double magnitude //in
8484
);
8585

86+
/**
87+
* Calculates the buffer size
88+
* needed to draw arrows which have
89+
* start or end point outside the
90+
* visible canvas extent (in pixels)
91+
*/
92+
double calcExtentBufferSize() const;
8693

8794
const QgsTriangularMesh &mTriangularMesh;
8895
const QVector<double> &mDatasetValuesX;
@@ -94,13 +101,6 @@ class QgsMeshVectorRenderer
94101
const QgsMeshRendererVectorSettings &mCfg;
95102
bool mDataOnVertices = true;
96103
QSize mOutputSize;
97-
98-
/**
99-
* Canvas extent buffered by vector maximum magnitude
100-
* Needed to draw arrows which have
101-
* start or end point outside the
102-
* visible canvas extent
103-
*/
104104
QgsRectangle mBufferedExtent;
105105
};
106106

0 commit comments

Comments
 (0)
Please sign in to comment.