QgsSymbolLayer *QgsEllipseSymbolLayer::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( QStringLiteral( "Graphic" ) ); if ( graphicElem.isNull() ) return nullptr; QString name = QStringLiteral( "circle" ); QColor fillColor, strokeColor; double strokeWidth, size; double widthHeightFactor = 1.0; Qt::PenStyle strokeStyle; QgsStringMap vendorOptions = QgsSymbolLayerUtils::getVendorOptionList( graphicElem ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == QLatin1String( "widthHeightFactor" ) ) { bool ok; double v = it.value().toDouble( &ok ); if ( ok && !qgsDoubleNear( v, 0.0 ) && v > 0 ) widthHeightFactor = v; } } if ( !QgsSymbolLayerUtils::wellKnownMarkerFromSld( graphicElem, name, fillColor, strokeColor, strokeStyle, strokeWidth, size ) ) return nullptr; QString uom = element.attribute( QStringLiteral( "uom" ) ); size = QgsSymbolLayerUtils::sizeInPixelsFromSldUom( uom, size ); strokeWidth = QgsSymbolLayerUtils::sizeInPixelsFromSldUom( uom, strokeWidth ); double angle = 0.0; QString angleFunc; if ( QgsSymbolLayerUtils::rotationFromSldElement( graphicElem, angleFunc ) ) { bool ok; double d = angleFunc.toDouble( &ok ); if ( ok ) angle = d; } QgsEllipseSymbolLayer *m = new QgsEllipseSymbolLayer(); m->setOutputUnit( QgsUnitTypes::RenderUnit::RenderPixels ); m->setSymbolName( name ); m->setFillColor( fillColor ); m->setStrokeColor( strokeColor ); m->setStrokeStyle( strokeStyle ); m->setStrokeWidth( strokeWidth ); m->setSymbolWidth( size ); m->setSymbolHeight( size / widthHeightFactor ); m->setAngle( angle ); return m; }
void QgsCptCityArchive::initArchives( bool loadAll ) { QgsStringMap archivesMap; QString baseDir, defArchiveName; QgsSettings settings; // use CptCity/baseDir setting if set, default is user dir baseDir = settings.value( QStringLiteral( "CptCity/baseDir" ), QgsApplication::pkgDataPath() + "/resources" ).toString(); // sub-dir defaults to defArchiveName = settings.value( QStringLiteral( "CptCity/archiveName" ), DEFAULT_CPTCITY_ARCHIVE ).toString(); QgsDebugMsg( "baseDir= " + baseDir + " defArchiveName= " + defArchiveName ); if ( loadAll ) { QDir dir( baseDir ); const QStringList fileList = dir.entryList( QStringList() << QStringLiteral( "cpt-city*" ), QDir::Dirs ); for ( const QString &entry : fileList ) { if ( QFile::exists( baseDir + '/' + entry + "/VERSION.xml" ) ) archivesMap[ entry ] = baseDir + '/' + entry; } } else { archivesMap[ defArchiveName ] = baseDir + '/' + defArchiveName; } for ( QgsStringMap::iterator it = archivesMap.begin(); it != archivesMap.end(); ++it ) { if ( QDir( it.value() ).exists() ) QgsCptCityArchive::initArchive( it.key(), it.value() ); else { QgsDebugMsg( QString( "not loading archive [%1] because dir %2 does not exist " ).arg( it.key(), it.value() ) ); } } sDefaultArchiveName = defArchiveName; }
QgsSymbolLayerV2* QgsEllipseSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement graphicElem = element.firstChildElement( "Graphic" ); if ( graphicElem.isNull() ) return NULL; QString name = "circle"; QColor fillColor, borderColor; double borderWidth, size; double widthHeightFactor = 1.0; Qt::PenStyle borderStyle; QgsStringMap vendorOptions = QgsSymbolLayerV2Utils::getVendorOptionList( graphicElem ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == "widthHeightFactor" ) { bool ok; double v = it.value().toDouble( &ok ); if ( ok && !qgsDoubleNear( v, 0.0 ) && v > 0 ) widthHeightFactor = v; } } if ( !QgsSymbolLayerV2Utils::wellKnownMarkerFromSld( graphicElem, name, fillColor, borderColor, borderStyle, 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; } QgsEllipseSymbolLayerV2 *m = new QgsEllipseSymbolLayerV2(); m->setSymbolName( name ); m->setFillColor( fillColor ); m->setOutlineColor( borderColor ); m->setOutlineStyle( borderStyle ); m->setOutlineWidth( borderWidth ); m->setSymbolWidth( size ); m->setSymbolHeight( size / widthHeightFactor ); m->setAngle( angle ); return m; }
bool QgsPaintEffect::saveProperties( QDomDocument &doc, QDomElement &element ) const { if ( element.isNull() ) { return false; } QDomElement effectElement = doc.createElement( QStringLiteral( "effect" ) ); effectElement.setAttribute( QStringLiteral( "type" ), type() ); QgsStringMap props = properties(); for ( QgsStringMap::iterator it = props.begin(); it != props.end(); ++it ) { QDomElement propEl = doc.createElement( QStringLiteral( "prop" ) ); propEl.setAttribute( QStringLiteral( "k" ), it.key() ); propEl.setAttribute( QStringLiteral( "v" ), it.value() ); effectElement.appendChild( propEl ); } element.appendChild( effectElement ); return true; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement strokeElem = element.firstChildElement( "Stroke" ); if ( strokeElem.isNull() ) return NULL; QDomElement graphicStrokeElem = strokeElem.firstChildElement( "GraphicStroke" ); if ( graphicStrokeElem.isNull() ) return NULL; // retrieve vendor options bool rotateMarker = true; Placement placement = Interval; QgsStringMap vendorOptions = QgsSymbolLayerV2Utils::getVendorOptionList( element ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == "placement" ) { if ( it.value() == "points" ) placement = Vertex; else if ( it.value() == "firstPoint" ) placement = FirstVertex; else if ( it.value() == "lastPoint" ) placement = LastVertex; else if ( it.value() == "centralPoint" ) placement = CentralPoint; } else if ( it.value() == "rotateMarker" ) { rotateMarker = it.value() == "0"; } } QgsMarkerSymbolV2 *marker = 0; QgsSymbolLayerV2 *l = QgsSymbolLayerV2Utils::createMarkerLayerFromSld( graphicStrokeElem ); if ( l ) { QgsSymbolLayerV2List layers; layers.append( l ); marker = new QgsMarkerSymbolV2( layers ); } if ( !marker ) return NULL; double interval = 0.0; QDomElement gapElem = graphicStrokeElem.firstChildElement( "Gap" ); if ( !gapElem.isNull() ) { bool ok; double d = gapElem.firstChild().nodeValue().toDouble( &ok ); if ( ok ) interval = d; } double offset = 0.0; QDomElement perpOffsetElem = graphicStrokeElem.firstChildElement( "PerpendicularOffset" ); if ( !perpOffsetElem.isNull() ) { bool ok; double d = perpOffsetElem.firstChild().nodeValue().toDouble( &ok ); if ( ok ) offset = d; } QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( rotateMarker ); x->setPlacement( placement ); x->setInterval( interval ); x->setSubSymbol( marker ); x->setOffset( offset ); return x; }