QgsChunkedEntity gets a capability to update an existing sub-entity for a node
by loading the node again, creating a new 3D entity, and then discarding the old
entity in favor of the new one.
QgsPointCloudLayer gets a new signal - emitted whenever a particular node's
attribute values get changed.
These two are combined for point cloud layer's 3D chunked entity: whenever there
are edits to the point cloud data, instead of doing big hard reload of the whole
point cloud, we only update entities of the few nodes that were modified.
This greatly improves the user experience of point cloud editing (no "flashing"
of the 3D view while loading everything from scratch), and it improves how quickly
the changes can be seen.
* Add label rendering into VPC tiles
* Move tile labels rendering into QgsPointCloudExtentRenderer
* Rework showLabels flag once more & connect it to widget
* Add widget for label TextFormat WIP
* Rework and fix text format widget issues
* Improve default text format used in VPC labels
* Fix banned keywords issue
* Fix QgsTextFormat review issue
* Fix labels drawing efficiency issue
* Fix formating issues
* Fix review issues
In this mode, the user can specify a QGIS expression for the
lower and upper value corresponding to raster bands, using
variables like @band, @band_name and @band_description.
E.g
@band * 100
Can be used when each band represents a 100 m vertical slice
of data.
The expression will be evaluated when required to determine
the actual elevation range corresponding to each band.
This differs from the existing "Fixed Elevation Range Per Band"
mode in that "Fixed Elevation Range Per Band" requires users
to manually enter an elevation for each band separately,
and these values are then treated as constants. That mode works
best for rasters with non-regular steps in the band
elevation values, while this new mode is better for regular
band elevation steps
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.