[QGIS-Developer] QgsProcessingLayerPostProcessorInterface and QgsMeshLayer.rendererSettings().nativeMeshSettings()

Nicolas Godet nicolas.godet at outlook.fr
Mon Jun 22 09:00:50 PDT 2026


Dear devs,

I'm trying to apply a symbology on a mesh when loading the layer at the end of an alg.

```
def _apply_mesh_symbology(layer: QgsMeshLayer) -> None:
    """Default display for the output mesh: native mesh frame (edges), no colouring.

    MDAL loads a Selafin showing the placeholder ``BOTTOM`` scalar dataset
    coloured; this turns scalar/vector colouring off, enables the native mesh
    frame.
    """
    settings = layer.rendererSettings()
    settings.setActiveScalarDatasetGroup(-1)  # no BOTTOM colouring
    settings.setActiveVectorDatasetGroup(-1)
    edge = settings.edgeMeshSettings()
    edge.setEnabled(True)  # draw the mesh edges
    settings.setEdgeMeshSettings(edge)
    native = settings.nativeMeshSettings()
    native.setEnabled(True)  # draw the native mesh (edges)
    triangular = settings.triangularMeshSettings()
    triangular.setEnabled(True)  # draw the triangular mesh frame
    settings.setTriangularMeshSettings(triangular)
    settings.setNativeMeshSettings(native)
    layer.setRendererSettings(settings)
    layer.triggerRepaint()

class _MeshLayerPostProcessor(QgsProcessingLayerPostProcessorInterface):
    """Finalize the Selafin mesh layer loaded on completion: CRS + default symbology."""
    instance = None

    def __init__(self, crs):
        super().__init__()
        self._crs = crs

    # https://github.com/QuickOSM/QuickOSM/blob/7ddeb32239e96394335babbb50ca728e6a48e4ee/QuickOSM/quick_osm_processing/advanced/decorate_output.py#L151-L156
    @staticmethod
    def create(crs) -> "_MeshLayerPostProcessor":
        _MeshLayerPostProcessor.instance = _MeshLayerPostProcessor(crs)
        return _MeshLayerPostProcessor.instance

    def postProcessLayer(self, layer, context, feedback):  # noqa: ARG002 - QGIS API signature
        if layer is None:
            return
        if self._crs is not None and self._crs.isValid():
            layer.setCrs(self._crs)
        if isinstance(layer, QgsMeshLayer):
            _apply_mesh_symbology(layer)
```

The layer is loaded with correct CRS, with scalar coloring OFF but the native mesh rendering remains OFF.
I'm wondering if I'm doing something wrong...

Once the layer is loaded, I can activate native mesh rendering using python console without issues:
```
l = iface.activeLayer()
r = l.rendererSettings()
n = r.nativeMeshSettings()
n.setEnabled(True)
r.setNativeMeshSettings(n)
l.setRendererSettings(r)
```

Any hints?

Kind regards,
Nicolas


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20260622/27833e1b/attachment-0001.htm>


More information about the QGIS-Developer mailing list