void QgsEllipseSymbolLayer::writeSldMarker( QDomDocument &doc, QDomElement &element, const QgsStringMap &props ) const { // <Graphic> QDomElement graphicElem = doc.createElement( QStringLiteral( "se:Graphic" ) ); element.appendChild( graphicElem ); double strokeWidth = QgsSymbolLayerUtils::rescaleUom( mStrokeWidth, mStrokeWidthUnit, props ); double symbolWidth = QgsSymbolLayerUtils::rescaleUom( mSymbolWidth, mSymbolWidthUnit, props ); QgsSymbolLayerUtils::wellKnownMarkerToSld( doc, graphicElem, mSymbolName, mColor, mStrokeColor, mStrokeStyle, strokeWidth, symbolWidth ); // <Rotation> QgsProperty ddRotation = mDataDefinedProperties.property( QgsSymbolLayer::PropertyAngle ); QString angleFunc = props.value( QStringLiteral( "angle" ), QLatin1String( "" ) ); if ( angleFunc.isEmpty() ) // symbol has no angle set { if ( ddRotation && ddRotation.isActive() ) { angleFunc = ddRotation.asExpression(); } else if ( !qgsDoubleNear( mAngle, 0.0 ) ) angleFunc = QString::number( mAngle ); } else if ( ddRotation && ddRotation.isActive() ) { // the symbol has an angle and the symbol layer have a rotation // property set angleFunc = QStringLiteral( "%1 + %2" ).arg( angleFunc, ddRotation.asExpression() ); } else if ( !qgsDoubleNear( mAngle, 0.0 ) ) { // both the symbol and the symbol layer have angle value set bool ok; double angle = angleFunc.toDouble( &ok ); if ( !ok ) { // its a string (probably a property name or a function) angleFunc = QStringLiteral( "%1 + %2" ).arg( angleFunc ).arg( mAngle ); } else if ( !qgsDoubleNear( angle + mAngle, 0.0 ) ) { // it's a double value angleFunc = QString::number( angle + mAngle ); } } QgsSymbolLayerUtils::createRotationElement( doc, graphicElem, angleFunc ); // <Displacement> QPointF offset = QgsSymbolLayerUtils::rescaleUom( mOffset, mOffsetUnit, props ); QgsSymbolLayerUtils::createDisplacementElement( doc, graphicElem, offset ); // store w/h factor in a <VendorOption> double widthHeightFactor = mSymbolWidth / mSymbolHeight; QDomElement factorElem = QgsSymbolLayerUtils::createVendorOptionElement( doc, QStringLiteral( "widthHeightFactor" ), QString::number( widthHeightFactor ) ); graphicElem.appendChild( factorElem ); }
bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsPalIndexes &indexes ) const { bool newAuxiliaryLayer = false; QgsVectorLayer *vlayer = details.layer; QString providerId = details.pos.providerID; if ( !vlayer || !vlayer->labelsEnabled() ) return false; if ( !vlayer->auxiliaryLayer() ) { QgsNewAuxiliaryLayerDialog dlg( vlayer ); dlg.exec(); newAuxiliaryLayer = true; } if ( !vlayer->auxiliaryLayer() ) return false; for ( const QgsPalLayerSettings::Property &p : qgis::as_const( mPalProperties ) ) { int index = -1; // always use the default activated property QgsProperty prop = details.settings.dataDefinedProperties().property( p ); if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() ) { index = vlayer->fields().lookupField( prop.field() ); } else { index = QgsAuxiliaryLayer::createProperty( p, vlayer ); } indexes[p] = index; } details.settings = vlayer->labeling()->settings( providerId ); return newAuxiliaryLayer; }
bool QgsMapToolLabel::createAuxiliaryFields( LabelDetails &details, QgsDiagramIndexes &indexes ) { bool newAuxiliaryLayer = false; QgsVectorLayer *vlayer = details.layer; if ( !vlayer ) return newAuxiliaryLayer; if ( !vlayer->auxiliaryLayer() ) { QgsNewAuxiliaryLayerDialog dlg( vlayer ); dlg.exec(); newAuxiliaryLayer = true; } if ( !vlayer->auxiliaryLayer() ) return false; for ( const QgsDiagramLayerSettings::Property &p : qgis::as_const( mDiagramProperties ) ) { int index = -1; // always use the default activated property QgsProperty prop = vlayer->diagramLayerSettings()->dataDefinedProperties().property( p ); if ( prop.propertyType() == QgsProperty::FieldBasedProperty && prop.isActive() ) { index = vlayer->fields().lookupField( prop.field() ); } else { index = QgsAuxiliaryLayer::createProperty( p, vlayer ); } indexes[p] = index; } return newAuxiliaryLayer; }
void QgsLabelPropertyDialog::enableDataDefinedWidgets( QgsVectorLayer *vlayer ) { //loop through data defined properties, this time setting whether or not the widgets are enabled //this can only be done for properties which are assigned to fields Q_FOREACH ( int key, mDataDefinedProperties.propertyKeys() ) { QgsProperty prop = mDataDefinedProperties.property( key ); if ( !prop || !prop.isActive() || prop.propertyType() != QgsProperty::FieldBasedProperty ) { continue; // can only modify attributes with an active data definition of a mapped field } QString ddField = prop.field(); if ( ddField.isEmpty() ) { continue; } int ddIndx = vlayer->fields().lookupField( ddField ); if ( ddIndx == -1 ) { continue; } QgsDebugMsg( QStringLiteral( "ddField: %1" ).arg( ddField ) ); switch ( key ) { case QgsPalLayerSettings::Show: mShowLabelChkbx->setEnabled( true ); break; case QgsPalLayerSettings::AlwaysShow: mAlwaysShowChkbx->setEnabled( true ); break; case QgsPalLayerSettings::MinimumScale: mMinScaleWidget->setEnabled( true ); break; case QgsPalLayerSettings::MaximumScale: mMaxScaleWidget->setEnabled( true ); break; case QgsPalLayerSettings::BufferSize: mBufferSizeSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::PositionX: mXCoordSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::PositionY: mYCoordSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::LabelDistance: mLabelDistanceSpinBox->setEnabled( true ); break; case QgsPalLayerSettings::Hali: mHaliComboBox->setEnabled( true ); break; case QgsPalLayerSettings::Vali: mValiComboBox->setEnabled( true ); break; case QgsPalLayerSettings::BufferColor: mBufferColorButton->setEnabled( true ); break; case QgsPalLayerSettings::Color: mFontColorButton->setEnabled( true ); break; case QgsPalLayerSettings::LabelRotation: mRotationSpinBox->setEnabled( true ); break; //font related properties case QgsPalLayerSettings::Family: mFontFamilyCmbBx->setEnabled( true ); break; case QgsPalLayerSettings::FontStyle: mFontStyleCmbBx->setEnabled( true ); break; case QgsPalLayerSettings::Underline: mFontUnderlineBtn->setEnabled( true ); break; case QgsPalLayerSettings::Strikeout: mFontStrikethroughBtn->setEnabled( true ); break; case QgsPalLayerSettings::Bold: mFontBoldBtn->setEnabled( true ); break; case QgsPalLayerSettings::Italic: mFontItalicBtn->setEnabled( true ); break; case QgsPalLayerSettings::Size: mFontSizeSpinBox->setEnabled( true ); break; default: break; } } }