provider loading until after ALL plugins have been loaded
This avoids the model provider from refreshing all the model
algorithms multiple times, once for each non-default plugin installed
which implements a processing provider.
Refactor QgsGeometryUtils to separate "basic" methods from those involving QGIS
composite types.
By "basic" methods, we refer to those that only require doubles or (qgs)vectors.
These methods are now encapsulated in their dedicated classes and can be called
from anywhere to prevent duplications in certain methods (in particular Cartesian distance calculation).
To maintain API compatibility, all methods are also accessible in QgsGeometryUtils
which acts as a pass-through to QgsGeometryUtilsBase.
This mode is purely for animated map movies -- the user can set
the total number of frames, and the animation will progress
frame by frame for that number of frames, advancing the current
map settings frame at each step (also the @frame_number expression
variable).
No time based filtering of data is performed when in this mode.
When enabled, we will do Delaunay triangulation of the points in the current
map view, and then render triangles instead of points. For each point we keep
its color for interpolation in the triangle.
Global map shading is also supported with the new option, when enabled, we also
keep elevation of each point, and then rasterize triangles with interpolated
elevations to the provided elevation map.
When "Render as a surface" is enabled, drawing order is ignored, because points
do not obscure other points anymore - all input points participate in the triangulation.
There is also an option to filter large triangles (given by the maximum length of
edge of a triangle), which is useful when one wants to see the actual holes in the data.
Compared to the implementation for 3D rendering, the 2D rendering only provides
filtering based on horizontal length of triangles. Filtering based on triangle size
on the vertical axis seems irrelevant because the 2D view is always from the top.
Avoid using 'slightly' since this could be a considerable performance improvement depending on the provider.
Co-authored-by: Matthias Kuhn <matthias@opengis.ch>
This allows provider classes to have a useable elevation properties class, for example to know
if the provided data is 3D or 2D. This will be useful to compute 3D/2D extent.