Until now, chunk bounds entity used axis-aligned bboxes in world coordinates (floats)
We are switching to bboxes in map coordinates (doubles) and we use
QgsGeoTransform to react correctly when the origin vector changes.
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.
* cannot return min max if triangular mesh does not exist
* only create QgsRenderedLayerStatistics if values changed to prevent loop in rendering
* this was set from two places, remove it from here
* Revert "this was set from two places, remove it from here"
This reverts commit 5d8fbcc321330f1054e5e07cad2ee70c0f9aa661.
* add test case for not existing triangular mesh
* only emit signals here, everything else is handled in renderer creation (avoids double rendering of the mesh layer)
* while updating the widget the component signals need to be blocked
* do not update render here
* add const
* 3D map should not update layer statistics
* update renderer settings from here, signals are emitted from mesh layer
* update test to simulate main canvas extent update
* do rendering in single pass
* emit renderer changed and remove emit of legendChanged
This allows to define a custom tolerance. If this tolerance is
enabled, then this tolerance is used instead of the one defined in the
elevation profile widget.
This custom tolerance is enabled and set to 0 by default for Lines and
Polygons. Indeed, most of the time, only want to use the tolerance for
points.
The typedef is only present in the .sip file, but without this
annotation SIP assumes it also exists in QGIS headers. This didn't
completely break the build, since we concatenate multiple SIP headers
into larger files, so the typedefs from one part "fixed" another. Run
sip-build without --concatenate to see the issue clearly.
This fix is currently sadly not fully effective due to a SIP bug:
https://github.com/Python-SIP/sip/issues/66
Allows raster pixels to be labeled with the value taken from a raster
band.
Labels are registered with the labeling engine, so participate in
label conflict resolution and overlap avoidance
Options include
- Selection of band to take values from
- Using QgsNumericFormat to customise the number format for the labels
- Uses text renderer, so supports buffers, shadows, etc
- Label priority
- Scale dependant visibility
- Optional pixel size dependent visibilty, ie show only when pixels are
> 4mm in size
- Z index control, overlap avoidance mode
Fixes#14408
Because some method (only QgsGeometry::set actually) can be deprecated
only in python, not in C++. But \deprecated triggers the need for Q_DECL_DEPRECATED