* [FEATURE] Selective masking
Advanced rendering feature that allows the definition of 'masks' areas around labels or with a new typ of symbol layer. These masks will "un-draw" symbol layers of other layers underneath.
It modifies the rendering process by adding an optional second pass.
Whilst usually this is bad practice (reusing an existing expression context),
and instead you should make a new context for every batch of expression evaluations,
we can't do this in the style model and we end up potentially creating
thousands of new contexts. So instead, we use a single one, which is
safe because the actual expression context used here is a very
basic one...
or size properties
Previously only string values of the format 'x,y' would be permitted. But
I've seen MANY bug reports and questions about this, so also allow
arrays of doubles as a valid result. E.g. "array(3,5)". In any case, it's
just nicer.
Fixes#31444
* Add button to change billboard symbol.
* Add shaders for billboards.
* Add billboard material class.
* Add sample billboard image.
* Add dummy handler for billboard.
* Add billboard geometry class.
* First working version of 3D point as billboard.
* Make selected feature bigger.
* Use default symbol preview as billboard.
* Update billboard when changes the viewport size.
* Use QgsTerrainTextureImage for adding image to texture.
* Show better quality of billboard default symbol.
* Promote QgsSymbolButton not working.
* Add QgsSymbolButton properly.
* Add seTexture2DFromSymbol.
* Use default symbol
* [On Progress] Get symbol from the QgsSymbolButton.
* [On progress] failed to change the symbol
* Fix billboard fragment shader for macOS
* Better transparency handling.
* Use size from the symbol.
* Add set layer for 3d billboard symbol.
* Set billboard size from the symbol pixel size * 20
* Use size from the image.
* [Debug] set white symbol to success kid, it work when previous billboard is success kid.
* Use store and restore symbol from Nyall.
* Remove unrelated code.
* Apply random extent to fix the bug, from Martin.
* Remove add mesh entities for billboard.
* Hide material and transformation widget for billboard.
* Remove add scene entities for billboard.
* Add selected as parameter in drawPreviewIcon.
* Add QgsMarkerSymbol to store the symbol in billboard
* Put billboard symbol in point3dsymbol serialization.
* Add billboard height in the UI.
* Set height for billboard.
* Store billboard height separately. Perhaps better to use existing transform.
* Set height of billboard to TY.
* Flipped image for billboard symbol.
* Add helper function to set billboard function.
* Generate billboard transform from general transform.
* Use static dpi for context size.
* Remove debug message.
* Use Qgs3DRenderContext for selection color and dpi from QgsApplication.
* Remove unnecessary file and code.
* Remove commented iut code.
* Add documentation of new classes.
* Fix banned keywords.
* Add missing parameter's documentation.
* Address PR review.
* Use context from readXML.
* Remove one line function.
* Fix billboard size.
* Make some functions private, remove unused function.
* Use unique_ptr for the ownership.
* Use unique_ptr for default symbol to avoid memory leak.
* Add parent to texture2D.
* Fix documentation.
* Add copy constructor.
* Fix documentation.
* Remove documentation warning.
* Fix sip error.
* Add unit test for billboard rendering.
* Set ambient to not transparent for measurement line.
* Add dpi in the Qgs3DMapSetting
* Update billboard rendering unit test.
* Remove layer from 3d point widget since it's not supported yet.
* Addressing PR review from Martin.
* Attach dom directly for the billboard symbol.
* Remove unused constructor for point3dsymbol.
* Use stroke width ratio for solving big stroke width.
* Update unit test for rendering with some stroke color.
* Fix typo.
For the c++ api dox this expands to "\c nullptr" (the
\c directive indicates a code literal value), and for sipify/Python
it expands to ``None`` (`` is sphinx annotation for literal values)
Makes for nicer dox for both c++ and Python!
internal symbol clones
Rendering symbols is a NON-CONST operation, which can permanently
alter the symbol instance (e.g. via changes made by the symbol
or symbol layer's startRender methods.).
This makes debugging super complex - because methods which look
like they are just generating previews of symbols can actually
change the original symbol instances, resulting in permanent changes
to a layer's style.
Refs #19910 (specifically, me pulling my hair out trying to deduce
seemingly random changes to layer's symbols)
Checks whether a function declaration has parameters that are
top level const.
const values in declarations do not affect the signature of a
function, so they should not be put there.