QgsSingleSymbolRendererV2* QgsSingleSymbolRendererV2::convertFromRenderer( const QgsFeatureRendererV2 *renderer ) { if ( renderer->type() == "singleSymbol" ) { return dynamic_cast<QgsSingleSymbolRendererV2*>( renderer->clone() ); } if ( renderer->type() == "pointDisplacement" ) { const QgsPointDisplacementRenderer* pointDisplacementRenderer = dynamic_cast<const QgsPointDisplacementRenderer*>( renderer ); if ( pointDisplacementRenderer ) return convertFromRenderer( pointDisplacementRenderer->embeddedRenderer() ); } if ( renderer->type() == "invertedPolygonRenderer" ) { const QgsInvertedPolygonRenderer* invertedPolygonRenderer = dynamic_cast<const QgsInvertedPolygonRenderer*>( renderer ); if ( invertedPolygonRenderer ) return convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); } QgsSymbolV2List symbols = const_cast<QgsFeatureRendererV2 *>( renderer )->symbols(); if ( symbols.size() > 0 ) { return new QgsSingleSymbolRendererV2( symbols.at( 0 )->clone() ); } return 0; }
QgsSingleSymbolRenderer *QgsSingleSymbolRenderer::convertFromRenderer( const QgsFeatureRenderer *renderer ) { QgsSingleSymbolRenderer *r = nullptr; if ( renderer->type() == QLatin1String( "singleSymbol" ) ) { r = dynamic_cast<QgsSingleSymbolRenderer *>( renderer->clone() ); } else if ( renderer->type() == QLatin1String( "pointDisplacement" ) || renderer->type() == QLatin1String( "pointCluster" ) ) { const QgsPointDistanceRenderer *pointDistanceRenderer = dynamic_cast<const QgsPointDistanceRenderer *>( renderer ); if ( pointDistanceRenderer ) r = convertFromRenderer( pointDistanceRenderer->embeddedRenderer() ); } else if ( renderer->type() == QLatin1String( "invertedPolygonRenderer" ) ) { const QgsInvertedPolygonRenderer *invertedPolygonRenderer = dynamic_cast<const QgsInvertedPolygonRenderer *>( renderer ); if ( invertedPolygonRenderer ) r = convertFromRenderer( invertedPolygonRenderer->embeddedRenderer() ); } if ( !r ) { QgsRenderContext context; QgsSymbolList symbols = const_cast<QgsFeatureRenderer *>( renderer )->symbols( context ); if ( !symbols.isEmpty() ) { r = new QgsSingleSymbolRenderer( symbols.at( 0 )->clone() ); } } if ( r ) { r->setOrderBy( renderer->orderBy() ); r->setOrderByEnabled( renderer->orderByEnabled() ); } return r; }