void QgsFillSymbolV2::renderPolygon( const QPolygonF& points, QList<QPolygonF>* rings, const QgsFeature* f, QgsRenderContext& context, int layer, bool selected ) { QgsSymbolV2RenderContext symbolContext( context, outputUnit(), mAlpha, selected, mRenderHints, f, 0, mapUnitScale() ); if ( layer != -1 ) { if ( layer >= 0 && layer < mLayers.count() ) { QgsSymbolV2::SymbolType layertype = mLayers.at( layer )->type(); if ( layertype == QgsSymbolV2::Fill ) (( QgsFillSymbolLayerV2* ) mLayers[layer] )->renderPolygon( points, rings, symbolContext ); else if ( layertype == QgsSymbolV2::Line ) (( QgsLineSymbolLayerV2* ) mLayers[layer] )->renderPolygonOutline( points, rings, symbolContext ); } return; } for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsSymbolV2::SymbolType layertype = ( *it )->type(); if ( layertype == QgsSymbolV2::Fill ) { QgsFillSymbolLayerV2* layer = ( QgsFillSymbolLayerV2* ) * it; layer->renderPolygon( points, rings, symbolContext ); } else if ( layertype == QgsSymbolV2::Line ) { QgsLineSymbolLayerV2* layer = ( QgsLineSymbolLayerV2* ) * it; layer->renderPolygonOutline( points, rings, symbolContext ); } } }
void QgsLineSymbolV2::setDataDefinedWidth( const QgsDataDefined& dd ) { const double symbolWidth = width(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsLineSymbolLayerV2* layer = static_cast<QgsLineSymbolLayerV2*>( *it ); if ( dd.hasDefaultValues() ) { layer->removeDataDefinedProperty( "width" ); layer->removeDataDefinedProperty( "offset" ); } else { if ( symbolWidth == 0 || qgsDoubleNear( layer->width(), symbolWidth ) ) { layer->setDataDefinedProperty( "width", new QgsDataDefined( dd ) ); } else { layer->setDataDefinedProperty( "width", scaleWholeSymbol( layer->width() / symbolWidth, dd ) ); } if ( layer->offset() ) { layer->setDataDefinedProperty( "offset", scaleWholeSymbol( layer->offset() / symbolWidth, dd ) ); } } } }
void QgsLineSymbolV2::renderPolyline( const QPolygonF& points, const QgsFeature* f, QgsRenderContext& context, int layer, bool selected ) { QgsSymbolV2RenderContext symbolContext( context, outputUnit(), mAlpha, selected, mRenderHints, f ); if ( layer != -1 ) { if ( layer >= 0 && layer < mLayers.count() ) (( QgsLineSymbolLayerV2* ) mLayers[layer] )->renderPolyline( points, symbolContext ); return; } for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsLineSymbolLayerV2* layer = ( QgsLineSymbolLayerV2* ) * it; layer->renderPolyline( points, symbolContext ); } }
void QgsLineSymbolV2::setWidth( double w ) { double origWidth = width(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsLineSymbolLayerV2* layer = ( QgsLineSymbolLayerV2* ) * it; if ( layer->width() == origWidth ) { layer->setWidth( w ); } else { // proportionally scale the width if ( origWidth != 0 ) layer->setWidth( layer->width() * w / origWidth ); } } }
void QgsSymbolV2::drawPreviewIcon( QPainter* painter, QSize size ) { QgsRenderContext context = QgsSymbolLayerV2Utils::createRenderContext( painter ); QgsSymbolV2RenderContext symbolContext( context, outputUnit(), mAlpha, false, mRenderHints ); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { if ( mType == Fill && ( *it )->type() == Line ) { // line symbol layer would normally draw just a line // so we override this case to force it to draw a polygon outline QgsLineSymbolLayerV2* lsl = ( QgsLineSymbolLayerV2* ) * it; // from QgsFillSymbolLayerV2::drawPreviewIcon() QPolygonF poly = QRectF( QPointF( 0, 0 ), QPointF( size.width() - 1, size.height() - 1 ) ); lsl->startRender( symbolContext ); lsl->renderPolygonOutline( poly, NULL, symbolContext ); lsl->stopRender( symbolContext ); } else ( *it )->drawPreviewIcon( symbolContext, size ); } }
void QgsLineSymbolV2::setWidth( double w ) { double origWidth = width(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsLineSymbolLayerV2* layer = ( QgsLineSymbolLayerV2* ) * it; if ( layer->width() == origWidth ) { layer->setWidth( w ); } else if ( origWidth != 0 ) { // proportionally scale the width layer->setWidth( layer->width() * w / origWidth ); } // also scale offset to maintain relative position if ( origWidth != 0 && layer->offset() ) layer->setOffset( layer->offset() * w / origWidth ); } }
QgsSymbol* QgsSymbologyV2Conversion::symbolV2toV1( QgsSymbolV2* s ) { if ( s == NULL || s->symbolLayerCount() == 0 ) return NULL; // we will use only the first symbol layer QgsSymbolLayerV2* sl = s->symbolLayer( 0 ); switch ( sl->type() ) { case QgsSymbolV2::Marker: { QgsMarkerSymbolLayerV2* msl = static_cast<QgsMarkerSymbolLayerV2*>( sl ); QgsSymbol* sOld = new QgsSymbol( QGis::Point ); sOld->setFillColor( sl->color() ); sOld->setFillStyle( Qt::SolidPattern ); sOld->setPointSize( msl->size() ); if ( sl->layerType() == "SimpleMarker" ) { QgsSimpleMarkerSymbolLayerV2* smsl = static_cast<QgsSimpleMarkerSymbolLayerV2*>( sl ); sOld->setColor( smsl->borderColor() ); sOld->setNamedPointSymbol( "hard:" + smsl->name() ); } else if ( sl->layerType() == "SvgMarker" ) { QgsSvgMarkerSymbolLayerV2* smsl = static_cast<QgsSvgMarkerSymbolLayerV2*>( sl ); sOld->setNamedPointSymbol( "svg:" + smsl->path() ); } return sOld; } break; case QgsSymbolV2::Line: { QgsLineSymbolLayerV2* lsl = static_cast<QgsLineSymbolLayerV2*>( sl ); QgsSymbol* sOld = new QgsSymbol( QGis::Line ); sOld->setColor( sl->color() ); sOld->setLineWidth( lsl->width() ); if ( sl->layerType() == "SimpleLine" ) { // add specific settings QgsSimpleLineSymbolLayerV2* slsl = static_cast<QgsSimpleLineSymbolLayerV2*>( sl ); sOld->setLineStyle( slsl->penStyle() ); } return sOld; } case QgsSymbolV2::Fill: { QgsSymbol* sOld = new QgsSymbol( QGis::Polygon ); sOld->setFillColor( sl->color() ); if ( sl->layerType() == "SimpleFill" ) { // add specifc settings QgsSimpleFillSymbolLayerV2* sfsl = static_cast<QgsSimpleFillSymbolLayerV2*>( sl ); sOld->setColor( sfsl->borderColor() ); sOld->setLineWidth( sfsl->borderWidth() ); sOld->setLineStyle( sfsl->borderStyle() ); sOld->setFillStyle( sfsl->brushStyle() ); } return sOld; } } return NULL; // should never get here }