The old behaviour was always to just redraw the layer, without
refreshing data. This was by design, as the feature was originally
developed to allow animated layers which needed to be regular,
quickly redrawn.
But there's also a use case for automatically refetching layer
data on a regular interval too. So now we expose a choice
of mode for the automatic refresh for users to decided which
is appropriate for their requirements.
The options are:
- "Reload Data": The layer will be completely refreshed. Any cached
data will be discarded and refetched from the provider. This mode
may result in slower map refreshes.
- "Redraw Layer Only": This mode is useful for animation or when
the layer's style will be updated at regular intervals. Canvas
updates are deferred in order to avoid refreshing multiple times
if more than one layer has an auto update interval set.
The changes are all wrapped up in a new reusable widget, so that
we can easily expose this setting for non vector/raster layers
if we want to in future.
Fixes https://github.com/qgis/QGIS/issues/39830
uses expressions for parameter values and contains variables
generated by another step in the model
We were showing links for these in the model designer so it
appeared as though the dependencies were there, but at actual
execution time there was nothing forcing the child which generated
the variable to be run before the child using the variable.
At model debug log level we'll show all the generic
logs for step preparation, inputs and outputs for every
child algorithm, including those which we normally skip
(eg raise warnings/outputs, string concatenation, etc).
This gives model designers more useful information to
debug their models.
Use this new log level when running models through the
model designer window.
to use when scenes have no textures available for some primitives
Since there's no way to determine in advance whether or not a scene
will actually have textures, this prevents the non-ideal situation
arising where no content is shown on the map because we default
to the texture renderer and don't have any textures to draw.
progress preview render results while drawing the layer, which
differ from the final layer render
The immediate use case here is for rendering tiled scene layers.
In order to generate the actual final render for these layers,
we need to first fetch ALL content for the render and then sort
the primitives by z value. But this means that the layer renders
can be extremely slow, with no visible changes on the map until
all the content fetching is complete. Not great user experience!
Instead, here we add the infrastructure so that a layer renderer
can get a temporary image to paint to for any partial renders.
This image gets used during map composition up until the layer
finally finishes rendering, at which time the layer's actual
destination image will be used for the composition.
This means that tiled scene renderers can now draw all tiles
(with unsorted primitives, and the artifacts which come with
that) as soon as we fetch each tile. This gives the user an
immediate visual reflection that the tiles are being fetched
and that how quickly (or slowly) that is happening. As soon
as we've got all tiles, the layer render will be immediately
switched to the version in which all content is rendered
in the correct z order.
As a bonus, we draw these temporary in progress renders
over any previously transformed cache version of the layer
available. So eg when you zoom in, you'll get a zoomed in pixelated
version of the last render which gets progressively drawn
over with each tile as it is fetched.
This same API could be used in future eg with point cloud
rendering when points are being sorted by z value to give
timely visual feedback.
force the layer to be rasterised
There's no benefit in exporting these layers as a bunch of triangular
images which are pieced together, that adds a lot of extra content to
the exports and results in files which can be extremely slow to open
and render in other viewers.
- added QgsTiledSceneTile::baseUrl() to get URL that generated the tile and thus
base URL for resolving relative paths of linked content
- resolution of relative URLs should work also when sub-tree JSON files are in
a different path than the root tileset JSON
- all content URLs are now using scheme - URLs of local files start with file://
- removed duplicated code to resolve relative URLs in GLTF parsing and chunk loading
We currently offer three renderer choices:
- Textured (default). Loads the texture image and paints the mesh using
these textures
- Texture color. Uses the center point color for rendering each mesh
triangle. Gives a clear visual overview of the mesh structure while
also providing some context via the texture color
- Mesh. Renders the scene's mesh using a fill symbol
bounding volumes as OBB
Greatly simplifies the code. There's a small loss of efficiency
since we will always be expanding out spheres to their bounding
boxes, but given we always require boxes for QGIS 3d nodes
anyway this will only impact 2d rendering.