Hi all,

As an attempt to "Improve GUI consistency & UX for data-defined style" (#9881) I'm planing to add a data-defined button[1] to the "en masse" size and rotation changing fields [2].

This could *replace* the scaling factor, scaling method and rotation available in the 'Advanced' menu.

After that a graphical assistant (accessible from the data-defined button) will be developed to help the user define the scale-function (preview the various symbol sizes).

I'd like to have your impression on that change, especially on the *replace*, and comment on the plan below.

Thanks,

V.

[1] QgsDataDefinedButton: the button already in the Label properties for data-defined properties.

[2] What I call the "en masse" size and rotation fields are the fields Size and Rotation displayed at the Marker level for simple symbol and the popup for size in the graduated, categorized and rule-based symbologies (I plan to add rotation there too).








Data defined property buttons will be added to the "en masse" change fields for single symbol, graduated, categorized and rule-based symbologies.

This is especially useful to be able to use scaling functions to define the size of the scaled symbols: - Flannery (recommanded): scale_exp( variable, minValue, maxValue, minSize, maxSize, 0.57 )
- Area : scale_exp( variable, minValue, maxValue, minSize, maxSize, 0.5 )
- Linear : scale_linear( variable, minValue, maxValue, minSize, maxSize )

Using an expression at the "en masse" level will set expressions for all symbols composing the marker. The behavior will be the same as with size and rotation changing: the expression will be the one of the last symbol in the marker, others markers will be scaled/rotated relative to the last marker. For the size, if the scalling method is area, the scale factor will be put inside the sqrt(). If size/rotation are defined by expressions/fields, those definitions will be lost.

Definition: "en masse" expression pattern:
- Size with scale method Area
    - `sqrt( expression )` for the last symbol of the marker
- `sqrt( symbolSize/lastSymbolOfTheMarkerSize * expression )` for other symbols
- Size with scale method Linear
    - `expression` for the last symbol of the marker
- `(symbolSize/lastSymbolOfTheMarkerSize) * expression` for other symbols
- Rotation
    - `expression` for the last symbol of the marker,
- `expression + (symbolRotation - lastSymbolOfTheMarkerRotation)` for other symbols

Disabling "en masse" will disable all size/rotation expressions for markers composing the symbol if they match the "en masse" expressions pattern.

Note that the data-defined expression at this "en masse" level will only be set (yellow highlight) if the size/scale expression of all the symbols composing the marker match the "en masse" expression pattern.

To avoid functionality duplication the scale and rotation could be removed from the 'Advanced menu'. This will simplify the symbology classes. To ensure backward compatibilities of old project files, the following scaling/rotation expression can be defined using old scale/rotation parameters to ensure the same rendered map:
- For size
- newSymbolSizeExpression = sqrt( oldScaleExpression * oldSymbolSizeOrSizeExpression )
   or
- newSymbolSizeExpression = oldScaleExpression * oldSymbolSizeOrSizeExpression
- For rotation:
- newSymbolRotationExpression = oldRotationExpression + oldSymbolRotationOrRotationExpression

As a result, if expressions are used for the symbol size/rotation in addition to scalling/rotation of the marker, the replaced expressions (with scale/rotation included) may not match the "en masse" expression pattern and the data defined button will not be highlighted. This seems to be a minor and rare inconvenience since it will happen for project with scaled/rotated markers composed of multiple symbols with different data-defined size/rotation.


_______________________________________________
Qgis-developer mailing list
Qgis-developer@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to