void QgsMarkerSymbolV2::setDataDefinedSize( const QgsDataDefined &dd ) { const double symbolSize = size(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsMarkerSymbolLayerV2* layer = static_cast<QgsMarkerSymbolLayerV2 *>( *it ); if ( dd.hasDefaultValues() ) { layer->removeDataDefinedProperty( "size" ); layer->removeDataDefinedProperty( "offset" ); } else { if ( symbolSize == 0 || qgsDoubleNear( layer->size(), symbolSize ) ) { layer->setDataDefinedProperty( "size", new QgsDataDefined( dd ) ); } else { layer->setDataDefinedProperty( "size", scaleWholeSymbol( layer->size() / symbolSize, dd ) ); } if ( layer->offset().x() || layer->offset().y() ) { layer->setDataDefinedProperty( "offset", scaleWholeSymbol( layer->offset().x() / symbolSize, layer->offset().y() / symbolSize, dd ) ); } } } }
void QgsMarkerSymbolV2::setSize( double s ) { double origSize = size(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsMarkerSymbolLayerV2* layer = static_cast<QgsMarkerSymbolLayerV2*>( *it ); if ( layer->size() == origSize ) layer->setSize( s ); else { // proportionally scale size if ( origSize != 0 ) layer->setSize( layer->size() * s / origSize ); } } }
void QgsMarkerSymbolV2::setSize( double s ) { double origSize = size(); for ( QgsSymbolLayerV2List::iterator it = mLayers.begin(); it != mLayers.end(); ++it ) { QgsMarkerSymbolLayerV2* layer = static_cast<QgsMarkerSymbolLayerV2*>( *it ); if ( layer->size() == origSize ) layer->setSize( s ); else if ( origSize != 0 ) { // proportionally scale size layer->setSize( layer->size() * s / origSize ); } // also scale offset to maintain relative position if ( origSize != 0 && ( layer->offset().x() || layer->offset().y() ) ) layer->setOffset( QPointF( layer->offset().x() * s / origSize, layer->offset().y() * s / origSize ) ); } }
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 }