void QgsLineSymbolLayerV2::renderPolygonOutline( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) { renderPolyline( points, context ); if ( rings ) { foreach ( const QPolygonF& ring, *rings ) renderPolyline( ring, context ); } }
void QgsLineSymbolLayer::renderPolygonStroke( const QPolygonF &points, QList<QPolygonF> *rings, QgsSymbolRenderContext &context ) { renderPolyline( points, context ); if ( rings ) { Q_FOREACH ( const QPolygonF &ring, *rings ) renderPolyline( ring, context ); } }
void QgsMarkerLineSymbolLayerV2::renderPolygonOutline( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) { renderPolyline( points, context ); if ( rings ) { mOffset = -mOffset; // invert the offset for rings! foreach ( const QPolygonF& ring, *rings ) renderPolyline( ring, context ); mOffset = -mOffset; } }
void QgsSimpleLineSymbolLayerV2::renderPolygonOutline( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) { QPainter* p = context.renderContext().painter(); if ( !p ) { return; } if ( mDrawInsidePolygon ) { //only drawing the line on the interior of the polygon, so set clip path for painter p->save(); QPainterPath clipPath; clipPath.addPolygon( points ); if ( rings != NULL ) { //add polygon rings QList<QPolygonF>::const_iterator it = rings->constBegin(); for ( ; it != rings->constEnd(); ++it ) { QPolygonF ring = *it; clipPath.addPolygon( ring ); } } //use intersect mode, as a clip path may already exist (eg, for composer maps) p->setClipPath( clipPath, Qt::IntersectClip ); } renderPolyline( points, context ); if ( rings ) { mOffset = -mOffset; // invert the offset for rings! foreach ( const QPolygonF& ring, *rings ) renderPolyline( ring, context ); mOffset = -mOffset; } if ( mDrawInsidePolygon ) { //restore painter to reset clip path p->restore(); } }
void QgsLineSymbolLayerV2::drawPreviewIcon( QgsSymbolV2RenderContext& context, QSize size ) { QPolygonF points; // we're adding 0.5 to get rid of blurred preview: // drawing antialiased lines of width 1 at (x,0)-(x,100) creates 2px line points << QPointF( 0, size.height() / 2 + 0.5 ) << QPointF( size.width(), size.height() / 2 + 0.5 ); startRender( context ); renderPolyline( points, context ); stopRender( context ); }
void QgsLineSymbolLayer::drawPreviewIcon( QgsSymbolRenderContext &context, QSize size ) { QPolygonF points; // we're adding 0.5 to get rid of blurred preview: // drawing antialiased lines of width 1 at (x,0)-(x,100) creates 2px line points << QPointF( 0, int( size.height() / 2 ) + 0.5 ) << QPointF( size.width(), int( size.height() / 2 ) + 0.5 ); startRender( context ); QgsPaintEffect *effect = paintEffect(); if ( effect && effect->enabled() ) { QgsEffectPainter p( context.renderContext(), effect ); renderPolyline( points, context ); } else { renderPolyline( points, context ); } stopRender( context ); }
void QgsMarkerLineSymbolLayerV2::renderPolygonOutline( const QPolygonF& points, QList<QPolygonF>* rings, QgsSymbolV2RenderContext& context ) { const QgsCurvePolygonV2* curvePolygon = dynamic_cast<const QgsCurvePolygonV2*>( context.renderContext().geometry() ); if ( curvePolygon ) { context.renderContext().setGeometry( curvePolygon->exteriorRing() ); } renderPolyline( points, context ); if ( rings ) { mOffset = -mOffset; // invert the offset for rings! for ( int i = 0; i < rings->size(); ++i ) { if ( curvePolygon ) { context.renderContext().setGeometry( curvePolygon->interiorRing( i ) ); } renderPolyline( rings->at( i ), context ); } mOffset = -mOffset; } }