5828 Commits

Author SHA1 Message Date
Nyall Dawson
967388df86 Fix cppcheck 'function can be const' warnings 2024-10-15 15:00:05 +10:00
Nyall Dawson
2084479191 Fix flipped docstrings 2024-10-15 15:00:05 +10:00
Nyall Dawson
29b345e2c3 Add scale method option for layout scale bars
Instead of always calculating the scale along the bottom of the
map, expose a choice of methods to the user (along bottom,
middle, top, or average of the three measurements)

For new scalebars, default to the average method, which better
handles the scenario where the scale at the top or bottom of
the map cannot be calculated (eg when the top/bottom of the map
falls just outside valid areas for the map's crs)

This fixes one of the most common scenarios which cause scale
bar widths to blow out to massive sizes

Refs #55240
2024-10-15 12:38:07 +10:00
Nyall Dawson
022852c815 Fix aggregate function returns incorrect results
When the aggregate uses variables, we need to ensure that the
cache key correctly considers the current value of ALL those
variables. Otherwise we'll return incorrect results when
an expression is re-evaluated after changing the variable
value for the context.

Fixes use of aggregate function with @symbol_label in legends.

Fixes #58221
2024-10-14 12:57:26 +02:00
Nyall Dawson
4c9072e265 Only render main annotation layer in main map canvas or docked maps
Don't show it in other map canvas instances, eg the coordinate
bounds preview map

Fixes #58766
2024-10-11 16:23:37 +10:00
Nyall Dawson
b2d2fc9e28 Optimise text rendering for a common scenario
Reduces a lot of overhead when rendering non-buffered, non-shadowed
text. Cuts render time by ~50% in my testing.

Also introduces a "PreferText" render option, where we default
to using text painting methods in all scenarios where we know
there's no loss in rendering quality to do so. This mode should
become the new default in a future QGIS release, as it is
designed to be faster with no visible rendering differences.

Expand unit testing by covering all text render modes in all
text renderer rendering tests.
2024-10-11 13:32:53 +10:00
Alessandro Pasotti
75c3ad0f90 Fix docstring 2024-10-11 11:24:33 +10:00
Alessandro Pasotti
9a35e0ea89 Exception for constraint expression 2024-10-11 11:24:33 +10:00
Nyall Dawson
d36982fd4d Reduce duplicate code 2024-10-11 11:22:54 +10:00
Jean Felder
721b0459c4
qgspolyhedralsurface: Implement isValid (#59031)
`QgsPolyhedralSurface` inherits from `QgsSurface` which implements
`QgsAbstractgeometry::isValid` by calling `isValid` from
GEOS. However, GEOS does not handle polyhedral surface. This means
that `isValid` will always return False even if the polyhedral surface
is valid.

This issue is fixed by implementing
`QgsPolyhedralSurface::isValid`. It checks that all the polygons of
the polyhedral surface are valid.
2024-10-10 15:21:47 +02:00
Nyall Dawson
65c654d2c8 Prep for calculating word wrapping in text document metrics 2024-10-10 11:09:18 +10:00
Germán Carrillo
4a73ef0028 [core] Address review: switch from string comparison to static const members 2024-10-10 08:27:52 +10:00
qgis-bot
64e79914dd auto sipify 🍺 2024-10-09 03:49:26 +00:00
Even Rouault
9f605a6426 Don't use the The Word Which Must Not Be Used
I limited the renaming to things that are not in the public API and
are not setting names. This is probably more than we strictly need to
do, but at least this will help doing potential future similar 'grep'
exercises.
2024-10-09 11:50:08 +10:00
Germán Carrillo
0c7ea8f4b8 Address review: move qgsLessThanMaximumScale and qgsEqualToOrGreaterThanMinimumScale functions to QgsScaleUtils 2024-10-08 09:13:34 +10:00
Germán Carrillo
dd907d6bdf [core] Introduce functions qgsLessThanMaximumScale and qgsEqualToOrGreaterThanMinimumScale to make robust checks between map scale and maximum/minimum rendering scales in a scale dependent visibility context, taking non-round scales (denominators) 2024-10-08 09:13:34 +10:00
Germán Carrillo
490b47daf0 [core] Mark Qgis::SCALE_PRECISION as deprecated, since scale dependent visibility became more robust on range limits (namely, on non-round numbers). 2024-10-08 09:13:34 +10:00
Denis Rouzaud
5f18ff84a2
make QgsVectorTilesUtils available to Python bindings (#58989) 2024-10-07 18:07:48 +02:00
Nyall Dawson
594b466160 [api] Allow sink flags to be specified for QgsVectorFileWriterTask 2024-10-07 09:32:46 +02:00
Nyall Dawson
94ec0d9139 QgsMapLayer::setDataSource don't require layer name, provider
Make them optional, and default to current layer name/provider
when not specified
2024-10-03 19:46:08 +10:00
Nyall Dawson
a7a5f972ae Add render context flag to always disable symbol clipping 2024-10-03 12:49:18 +10:00
Nick Bowsher
9a08f1097a
[feature] Add extra mesh layer legend node for currently displayed vector datasets 2024-10-02 11:13:40 +10:00
Nyall Dawson
52226f0b9c Mark models as security risk if they contain algs with security risks 2024-10-02 10:36:00 +10:00
Nyall Dawson
2fdb2cad80 Add processing algorithm flag for SecurityRisk
And add to "Advanced Python field calculator" algorithm, as that
algorithm uses the Python exec() function and is a security
risk if run with untrusted/unchecked inputs
2024-10-02 10:36:00 +10:00
Germán Carrillo
771b03348f [core] Fix restoring projects using stacked bar diagrams 2024-10-01 07:25:50 +10:00
Nyall Dawson
93012dd5af [feature] Support img tags in HTML label text
Allows use of img tags in HTML label content. The following logic
is applied:

- Image path is set via the src="xxx" attribute. Local, HTTP, and
base64 encoded paths are permitted
- Any image format readable by QGIS can be used
- Image sizes can be specified via the width="##" and height="##"
attributes. If width or height is not specified it will automatically
be calculated from the original image size
- If width or height are specified, they are considered to be
in POINTS
- The css width/height settings are NOT respected (this is a Qt
limitation)
- Images are not supported for curved text labels
- Images are placed inline only, floating images are not supported

Sponsored by City of Freiburg im Breisgau
2024-09-29 08:57:52 +10:00
Nyall Dawson
ffc6dd208d Allow QgsTextFragment to represent an inline image object
Modifies the QgsTextDocument API to extract images from HTML
content, and store in the associated
QgsTextFragment/QgsTextCharacterFormat objects
2024-09-29 08:57:52 +10:00
Nyall Dawson
74b921e84b Allow HTML data urls for QgsImageCache
Adds support for base64 encoded image decoding when the path
is a HTML data URL (in addition to the existing "base64:..."
format support)

Allows use of eg "data:image/jpeg;base64,XXXXXXXX" formats
for image paths, so that the image cache can correctly handle
embedded image paths from HTML/CSS content
2024-09-29 08:57:52 +10:00
Denis Rouzaud
ca3b40cb8c
Merge pull request #58568 from gacarrillor/stacked_diagrams
[feature] Introduce stacked diagrams
2024-09-27 07:54:49 +02:00
Even Rouault
8335dab269
Merge pull request #58864 from rouault/fix_58861
QgsJsonUtils: add a way to disable use of field formatters
2024-09-26 23:37:12 +02:00
Germán Carrillo
37de287f7c [core] Addres review: skip SIP for some static const diagram names 2024-09-26 09:48:19 -05:00
Denis Rouzaud
590232d70a
add template method to return specific type of layers in map canvas (#58878)
* add template method to return specific type of layers in map canvas

* Apply suggestions from code review

Co-authored-by: Matthias Kuhn <matthias@opengis.ch>

---------

Co-authored-by: Matthias Kuhn <matthias@opengis.ch>
2024-09-26 14:17:36 +02:00
Germán Carrillo
463bf249bb [core] Address review: switch from define to static const 2024-09-25 19:46:58 -05:00
qgis-bot
da1f55b7d1 auto sipify 🍺 2024-09-25 05:09:28 +00:00
Denis Rouzaud
6d4e343792
[mvt] fix line dash arrays using literals (#58857)
* [mvt] fix line dash arrays using literals

* Update src/core/vectortile/qgsmapboxglstyleconverter.h

Co-authored-by: Nyall Dawson <nyall.dawson@gmail.com>

---------

Co-authored-by: Nyall Dawson <nyall.dawson@gmail.com>
2024-09-25 07:05:36 +02:00
Even Rouault
dc1583bd7c
QgsJsonUtils: add a way to disable use of field formatters
Fixes #58861
2024-09-24 22:49:08 +02:00
Even Rouault
588e8d430b QgsRasterInterface::colorInterpretationName(): return a translated string 2024-09-23 10:11:03 +02:00
Even Rouault
eb981cd979 Update RasterColorInterpretation enumeration with constants added in GDAL 3.10
per https://github.com/OSGeo/gdal/pull/10721
2024-09-23 10:11:03 +02:00
Julien Cabieces
bcaea01703
Merge pull request #58790 from elpaso/bugfix-gh57422-server-cascading-legend-size
[server] WMS GetLegendGr.. cascading size
2024-09-23 10:04:26 +02:00
Nyall Dawson
cde770edc6 QgsDistanceArea methods should raise QgsCsException when errors occur
Instead of just silently return "0", which is misleading and
can result in data corruption/incorrect analysis results. Better
to be safe and force callers to handle transformation errors
appropriately.

In this case we:

- raise QgsProcessingExceptions when the failed measurement is coming
from a processing tool, so that the user is forced to deal with the
issue and we aren't providing meaningless/misleading measurements
- report evaluation errors if the measurement is coming from a
QGIS expression, so the user must appropriately handle the situation
- for all other cases we currently just write a console error and
maintain the current behavior of treating the measurement length
as 0. TODO notes have been added to handle this cases better.
2024-09-22 08:23:05 +10:00
Alessandro Pasotti
1f86ad11b7 Add a blocking variant 2024-09-20 16:03:14 +02:00
Nyall Dawson
f61e33da4e Doxygen comments should use "NULLPTR", not "NULL"
NULLPTR will get correctly formatted in both c++ and Python docs
2024-09-19 09:55:44 +10:00
Alessandro Pasotti
90622beb53 [server] WMS GetLegendGr.. cascading size
Fix #57422 by adjusting the legend size considering the
cascaded legend imag size.
2024-09-18 18:13:31 +02:00
Nyall Dawson
08eb9c1049 Populate subset string metadata for provider subclasses 2024-09-18 17:27:06 +10:00
Nyall Dawson
b8669d693d Add methods to QgsDataProvider for subset string dialect/help URL
To be used in dialogs for advising users of the subset string dialect
2024-09-18 17:27:06 +10:00
Germán Carrillo
f81df2876c [gui] Move Diagrams properties to a panel widget, showing tabs instead of a list when docked; harmonize stacked diagram configuration with rule-based labeling; allow QgsDiagramProperties to sync to renderers and diagram layer settings, in addition to syncing to layers; when editing a subdiagram of a stacked diagram, only show widgets for diagram layer settings if the subdiagram is the first one, for the rest, hide those widgets and show a note informing users; make sure stacked diagrams handle enabled and disabled subdiagrams (i.e., don't take into account disabled subdiagrams) and add a test for it; switching from single to stacked diagram: take the single diagram definition as the first stacked diagram; fix #58782 (calling twice the apply method for label rendering) 2024-09-17 23:57:00 -05:00
Germán Carrillo
e855941a34 [core] Introduce QgsStackedDiagramRenderer for rendering stacked diagrams. This allows subdiagrams to define their own sizes and legends; add tests for a stacked diagram composed of mixed renderers (single category and linearly interpolated categories), as well as nested stacked diagrams. 2024-09-17 23:56:31 -05:00
Germán Carrillo
d12d661a4e [gui] Write/read stacked diagram state to/from XML (QGIS project) 2024-09-17 23:56:31 -05:00
Germán Carrillo
7e886a5b0c [gui] Implement syncToLayer for QgsStackedDiagramproperties, delegating to subdiagrams' syncToLayer when needed 2024-09-17 23:56:31 -05:00
Germán Carrillo
614ce76156 [gui] Introduce StackedDiagramProperties and use it as dialog and as vector properties page. For the moment, it works with single diagrams, hiding controls for stacked diagrams 2024-09-17 23:56:22 -05:00