all frames from the animation to a temporary directory
This avoids lengthy delays when trying to render a specific frame
from the animation, as most animation formats require us to
iterate through all preceding frames in order to retrieve a specific
frame. By iterating once in advance and saving the results out we
gain instant access to any individual frame from the animation.
Users can now indicate that a symbol should be treated as a animated
symbol, through the new "Animation Settings" option in the symbol
widget's Advanced menu.
This settings panel allows users to enable animation for the symbol
and set a specific frame rate at which the symbol should be redrawn.
When enabled, the @symbol_frame variable can be used in any
symbol data defined property in order to animate that property.
For instance, setting the symbol's rotation to the data defined
expression
@symbol_frame % 360
will cause the symbol to rotate over time. (with rotation speed
dictated by the symbol's refresh rate)
This new marker symbol type allows points to be rendered using
an animated marker, sourced from an animated gif, webp or mng
animation.
Options are present for marker file, size, angle and frame rate.
There are two ways in which animated symbols are handled:
1. If the map itself is considered an animation, then the frame
rendered for the animated marker is based on the map animation
frame and frame rate. This is the case when the temporal
controller is set to the Animation mode. In this case the
animated markers will follow the temporal controller animation,
e.g. pausing when the animation is paused, advancing frames
with the animation, etc. The map will also be redrawn using
the frame rate set for the temporal animation.
This mode also applies when exporting an animation from the
temporal controller.
It's also the mode used when a plugin specifically sets the
frame rate and current frame QgsMapSettings properties, so
e.g. @timlinux's QGIS Animation Workbench plugin will dictate
the marker animation frame to render.
2. If the map is NOT considered an animation (i.e. it's just
a plain old normal QGIS project), then the frame to render
will be based on the current timestamp alone.
Markers will be animated when their corresponding layer is set
to a temporal mode, and a temporal animation is playing.
whether the first/last vertex option should respect multipart geometries
The default is not to respect these, so first and last vertices
are symbolized for every part of a multi-part geometry (this matches
the old behaviour). By opting in to the "respect multipart geometries"
option, the symbols will only be placed on the VERY first or very LAST
vertex in the whole multi-part geometry.
Sponsored by North Road, thanks to SLYR
Makes it considerably quicker to create a marker line with the
markers on the first AND last vertex, amongst other things...
Fixes#18433
Sponsored by North Road, thanks to SLYR
This adds a new "Lineburst" symbol layer type, which renders
a gradient along the WIDTH of a line (as opposed to the interpolated
line renderer, which renders a gradient along the LENGTH of
a line). It's like the shapeburst fill symbol type, but for lines!
Sponsored by North Road, thanks to SLYR
This new symbol layer type renders a raster image following
a line feature's shape.
Options are present for:
- picture path (including data defined path)
- line width
- opacity
- line join/cap styles
Sponsored by North Road, thanks to SLYR
pattern fill
This allows users to control how lines in the fill should be
clipped to the polygon shape. Options are:
- Clip During Render Only: existing behaviour, lines are created
covering the whole bounding box of the feature and then clipped
while drawing. Line extremities (beginning and end) will not be
visible
- Clip Lines Before Render: lines are clipped to the exact
shape of the polygon prior to rendering. Line extremities (including
cap styles, start/end marker line objects, etc) will be visible,
and may sometimes extend outside of the polygon (depending
on the line symbol settings)
- No Clipping: no clipping at all is done - line will cover the
whole bounding box of the feature
Sponsored by North Road, thanks to SLYR
When exporting to a vector format (e.g. PDF) or when a line subsymbol
has dynamic (data defined properties), automatically switch to
a line-by-line based approach for rendering the fill instead of the
previous raster tiled pattern based approach.
While it's slower to render (not noticable for desktop users, but
likely enough to affect server deployments), this has many benefits:
1. Smaller PDF/SVG output file sizes, since the fills aren't rasterized
2. PDF/SVG files which are easier to modify in external apps for
post production, as each individual line in the pattern can be
modified.
3. Better quality PDF/SVG outputs, since the fill isn't DPI
dependant and looks awesome regardless of how close in you zoom
4. No visible artefacts at certain angles/distances/line symbol
styles
And even more excitingly, it opens the door for a range of
new symbol styles, eg.
- line patterns where the individual lines change color/width/dash/...
- line patterns with marker line symbols on center point/etc
- geometry generator effects per line, e.g. wavy line patterns, hand
drawn line styles, etc
Sponsored by North Road, thanks to SLYR
Fixes#16100
This is inconsistent with all other fill types, which don't
have a special outline subsymbol. Users should be creating
outline layers when they want an outline instead.
When reading an SVG fill symbol layer from XML, automatically
upgrade any outline subsymbol which is used by the fill to
be separate symbol layers for the parent fill symbol so
that existing symbols will appear as designed in older QGIS
versions.
Fixes qgis#14103
This optional setting allows each point to be randomly shifted up
to the specified maximum distance in the x/y directions. Maximum
offset can be set in mm, points, map units, etc OR "percentage"
(which is percentage of the pattern width/height)
An optional random number seed can be set to avoid patterns
jumping around between map refreshes.
Data defined overrides are also supported.
Sponsored by North Road, thanks to SLYR