void QgsComposerNodesItem::drawNodes( QPainter *painter ) const { double rectSize = 3.0 / horizontalViewScaleFactor(); QgsStringMap properties; properties.insert( "name", "cross" ); properties.insert( "color_border", "red" ); QScopedPointer<QgsMarkerSymbolV2> symbol; symbol.reset( QgsMarkerSymbolV2::createSimple( properties ) ); symbol.data()->setSize( rectSize ); symbol.data()->setAngle( 45 ); QgsMapSettings ms = mComposition->mapSettings(); ms.setOutputDpi( painter->device()->logicalDpiX() ); QgsRenderContext context = QgsRenderContext::fromMapSettings( ms ); context.setPainter( painter ); context.setForceVectorOutput( true ); QScopedPointer<QgsExpressionContext> expressionContext; expressionContext.reset( createExpressionContext() ); context.setExpressionContext( *expressionContext.data() ); symbol.data()->startRender( context ); Q_FOREACH ( QPointF pt, mPolygon ) symbol.data()->renderPoint( pt, nullptr, context ); symbol.data()->stopRender( context ); if ( mSelectedNode >= 0 && mSelectedNode < mPolygon.size() ) drawSelectedNode( painter ); }
void QgsComposerNodesItem::drawNodes( QPainter *painter ) const { double rectSize = 3.0 / horizontalViewScaleFactor(); QgsStringMap properties; properties.insert( QStringLiteral( "name" ), QStringLiteral( "cross" ) ); properties.insert( QStringLiteral( "color_border" ), QStringLiteral( "red" ) ); std::unique_ptr<QgsMarkerSymbol> symbol; symbol.reset( QgsMarkerSymbol::createSimple( properties ) ); symbol->setSize( rectSize ); symbol->setAngle( 45 ); QgsRenderContext context = QgsComposerUtils::createRenderContextForComposition( mComposition, painter ); context.setForceVectorOutput( true ); QgsExpressionContext expressionContext = createExpressionContext(); context.setExpressionContext( expressionContext ); symbol->startRender( context ); Q_FOREACH ( QPointF pt, mPolygon ) symbol->renderPoint( pt, nullptr, context ); symbol->stopRender( context ); if ( mSelectedNode >= 0 && mSelectedNode < mPolygon.size() ) drawSelectedNode( painter ); }