<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Dear devs, </div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
I'm trying to apply a symbology on a mesh when loading the layer at the end of an alg.</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
```</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
def _apply_mesh_symbology(layer: QgsMeshLayer) -> None:</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
"""Default display for the output mesh: native mesh frame (edges), no colouring.</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
MDAL loads a Selafin showing the placeholder ``BOTTOM`` scalar dataset</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
coloured; this turns scalar/vector colouring off, enables the native mesh</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
frame.</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
"""</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings = layer.rendererSettings()</div>
<div class="elementToProof">
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings.setActiveScalarDatasetGroup(-1) # no BOTTOM colouring</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings.setActiveVectorDatasetGroup(-1)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
edge = settings.edgeMeshSettings()</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
edge.setEnabled(True) # draw the mesh edges</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings.setEdgeMeshSettings(edge)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
native = settings.nativeMeshSettings()</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
native.setEnabled(True) # draw the native mesh (edges)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
triangular = settings.triangularMeshSettings()</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
triangular.setEnabled(True) # draw the triangular mesh frame</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings.setTriangularMeshSettings(triangular)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
settings.setNativeMeshSettings(native)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
layer.setRendererSettings(settings)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
layer.triggerRepaint()</div>
</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
class _MeshLayerPostProcessor(QgsProcessingLayerPostProcessorInterface):</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
"""Finalize the Selafin mesh layer loaded on completion: CRS + default symbology."""</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
instance = None</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
def __init__(self, crs):</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
super().__init__()</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
self._crs = crs</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
# <a href="https://github.com/QuickOSM/QuickOSM/blob/7ddeb32239e96394335babbb50ca728e6a48e4ee/QuickOSM/quick_osm_processing/advanced/decorate_output.py#L151-L156" id="OWA27ea2f5f-be98-907c-256a-0e79e78aedfb" class="OWAAutoLink">
https://github.com/QuickOSM/QuickOSM/blob/7ddeb32239e96394335babbb50ca728e6a48e4ee/QuickOSM/quick_osm_processing/advanced/decorate_output.py#L151-L156</a></div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
@staticmethod</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
def create(crs) -> "_MeshLayerPostProcessor":</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
_MeshLayerPostProcessor.instance = _MeshLayerPostProcessor(crs)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
return _MeshLayerPostProcessor.instance</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
def postProcessLayer(self, layer, context, feedback): # noqa: ARG002 - QGIS API signature</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
if layer is None:</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
return</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
if self._crs is not None and self._crs.isValid():</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
layer.setCrs(self._crs)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
if isinstance(layer, QgsMeshLayer):</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
_apply_mesh_symbology(layer)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
```</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
The layer is loaded with correct CRS, with scalar coloring OFF but the native mesh rendering remains OFF. </div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
I'm wondering if I'm doing something wrong...</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Once the layer is loaded, I can activate native mesh rendering using python console without issues:</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
```</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
l = iface.activeLayer()</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
r = l.rendererSettings()</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
n = r.nativeMeshSettings()</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
n.setEnabled(True)</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
r.setNativeMeshSettings(n)</div>
<div style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
l.setRendererSettings(r)</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
```</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Any hints?</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Kind regards, </div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Nicolas</div>
<div style="line-height: 19px; font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div class="elementToProof" style="font-family: "Calibri", "Helvetica", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
</body>
</html>