QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( "Graphic" ); if ( graphicElem.isNull() ) return NULL; QString name = "square"; QColor color, borderColor; double borderWidth, size; if ( !QgsSymbolLayerV2Utils::wellKnownMarkerFromSld( graphicElem, name, color, borderColor, borderWidth, size ) ) return NULL; double angle = 0.0; QString angleFunc; if ( QgsSymbolLayerV2Utils::rotationFromSldElement( graphicElem, angleFunc ) ) { bool ok; double d = angleFunc.toDouble( &ok ); if ( ok ) angle = d; } QPointF offset; QgsSymbolLayerV2Utils::displacementFromSldElement( graphicElem, offset ); QgsMarkerSymbolLayerV2 *m = new QgsSimpleMarkerSymbolLayerV2( name, color, borderColor, size ); m->setAngle( angle ); m->setOffset( offset ); return m; }
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 ) ); } }
QgsSymbolLayerV2* QgsFontMarkerSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( "Graphic" ); if ( graphicElem.isNull() ) return NULL; QString name, format; QColor color; double size; int chr; if ( !QgsSymbolLayerV2Utils::externalMarkerFromSld( graphicElem, name, format, chr, color, size ) ) return NULL; if ( !name.startsWith( "ttf://" ) || format != "ttf" ) return NULL; QString fontFamily = name.mid( 6 ); double angle = 0.0; QString angleFunc; if ( QgsSymbolLayerV2Utils::rotationFromSldElement( graphicElem, angleFunc ) ) { bool ok; double d = angleFunc.toDouble( &ok ); if ( ok ) angle = d; } QPointF offset; QgsSymbolLayerV2Utils::displacementFromSldElement( graphicElem, offset ); QgsMarkerSymbolLayerV2 *m = new QgsFontMarkerSymbolLayerV2( fontFamily, chr, size, color ); m->setAngle( angle ); m->setOffset( offset ); return m; }