Skip to content

Commit

Permalink
[FEATURE] Selective masking (#30747)
Browse files Browse the repository at this point in the history
* [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.
  • Loading branch information
Hugo Mercier committed Nov 7, 2019
1 parent 2efc616 commit 845894b
Show file tree
Hide file tree
Showing 225 changed files with 8,284 additions and 185 deletions.
13 changes: 13 additions & 0 deletions doc/design/selective_masking/README.md
@@ -0,0 +1,13 @@
# Selective masking

Here are some detailed step-by-step examples of renderings with selective masking enabled.
Examples are taken from the tests and some intermediary images have been added to illustrate how the rendering works.

* [1 - Only labels mask other symbol layers](p1/README.md)
* [1b - Only labels mask other symbol layers (with symbol levels)](p1b/README.md)
* [2 - A symbol layer mask other symbol layers](p2/README.md)
* [3 - Merged masks](p3/README.md)
* [4 - Different masks on the same layer](p4/README.md)
* [5 - Different masks on the same layer (2)](p5/README.md)
* [6 - Label masks with effects](p6/README.md)

68 changes: 68 additions & 0 deletions doc/design/selective_masking/p1/README.md
@@ -0,0 +1,68 @@
# Selective masking case 1

<table border=1>
<tr>
<td>Layers</td>
<td><b>Polys</b></td>
<td><b>Lines</b></td>
<td><b>Points</b></td>
<td><b>Labels</b></td>
</tr>
<tr>
<td>Symbol layers</td>
<td></td>
<td><b>0</b>: black roads<br/><b>1</b>: yellow roads</td>
<td><b>0</b>: black jets<br/><b>1</b>: orange jets<br/><b>2</b>: other black jets</td>
<td></td>
</tr>
<tr>
<td>Masks</td>
<td></td>
<td></td>
<td></td>
<td>A buffer that masks<br/><b>Lines/0</b><br/><b>Points/0</b><br/><b>Points/2</b></td>
</tr>
<tr>
<td>First pass</td>
<td><img src="first_pass_0.png"/></td>
<td><img src="first_pass_1.png"/></td>
<td><img src="first_pass_2.png"/></td>
<td><img src="labels.png"/></td>
</tr>
<tr>
<td>Mask image<br/>(still in first pass)</td>
<td></td>
<td></td>
<td></td>
<td><img src="labels_mask.png"/></td>
</tr>
</table>
<table border=1>
<tr>
<td>Second pass</td>
<td><b>Lines</b> without <b>0</b><br/><img src="second_1.png"/></td>
<td><b>Points</b> without <b>0, 2</b><br/><img src="second_2.png"/></td>
</tr>
<tr>
<td>Composition with mask</td>
<td><img src="labels_mask.png"/></td>
<td><img src="labels_mask.png"/></td>
</tr>
<tr>
<td>Second pass image <b>inside</b> mask</td>
<td><img src="second_1_a.png"/></td>
<td><img src="second_2_a.png"/></td>
</tr>
<tr>
<td>First pass image <b>oustide</b> mask</td>
<td><img src="second_1_first_pass_2.png"/></td>
<td><img src="second_2_first_pass_2.png"/></td>
</tr>
<tr>
<td>Updated first pass image</td>
<td><img src="second_1_first_pass_3.png"/></td>
<td><img src="second_2_first_pass_3.png"/></td>
</tr>
</table>

Final image <img src="final.png"/>
Binary file added doc/design/selective_masking/p1/final.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/first_pass_0.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/first_pass_1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/first_pass_2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/labels.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/labels_mask.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_1_a.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_1_b.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_2_a.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1/second_2_b.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
68 changes: 68 additions & 0 deletions doc/design/selective_masking/p1b/README.md
@@ -0,0 +1,68 @@
# Selective masking case 1

<table border=1>
<tr>
<td>Layers</td>
<td><b>Polys</b></td>
<td><b>Lines</b></td>
<td><b>Points</b></td>
<td><b>Labels</b></td>
</tr>
<tr>
<td>Symbol layers</td>
<td></td>
<td><b>0</b>: black roads<br/><b>1</b>: yellow roads</td>
<td><b>0</b>: black jets<br/><b>1</b>: orange jets<br/><b>2</b>: other black jets</td>
<td></td>
</tr>
<tr>
<td>Masks</td>
<td></td>
<td></td>
<td></td>
<td>A buffer that masks<br/><b>Lines/0</b><br/><b>Points/0</b><br/><b>Points/2</b></td>
</tr>
<tr>
<td>First pass</td>
<td><img src="first_pass_0.png"/></td>
<td><img src="first_pass_1.png"/></td>
<td><img src="first_pass_2.png"/></td>
<td><img src="labels.png"/></td>
</tr>
<tr>
<td>Mask image<br/>(still in first pass)</td>
<td></td>
<td></td>
<td></td>
<td><img src="labels_mask.png"/></td>
</tr>
</table>
<table border=1>
<tr>
<td>Second pass</td>
<td><b>Lines</b> without <b>0</b><br/><img src="second_1.png"/></td>
<td><b>Points</b> without <b>0, 2</b><br/><img src="second_2.png"/></td>
</tr>
<tr>
<td>Composition with mask</td>
<td><img src="labels_mask.png"/></td>
<td><img src="labels_mask.png"/></td>
</tr>
<tr>
<td>Second pass image <b>inside</b> mask</td>
<td><img src="second_1_a.png"/></td>
<td><img src="second_2_a.png"/></td>
</tr>
<tr>
<td>First pass image <b>oustide</b> mask</td>
<td><img src="second_1_first_pass_2.png"/></td>
<td><img src="second_2_first_pass_2.png"/></td>
</tr>
<tr>
<td>Updated first pass image</td>
<td><img src="second_1_first_pass_3.png"/></td>
<td><img src="second_2_first_pass_3.png"/></td>
</tr>
</table>

Final image <img src="final.png"/>
Binary file added doc/design/selective_masking/p1b/final.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/first_pass_0.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/first_pass_1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/first_pass_2.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/labels.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/labels_mask.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/mask_1.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/design/selective_masking/p1b/mask_2.png
Binary file added doc/design/selective_masking/p1b/second_1.png
Binary file added doc/design/selective_masking/p1b/second_1_a.png
Binary file added doc/design/selective_masking/p1b/second_1_b.png
Binary file added doc/design/selective_masking/p1b/second_2.png
Binary file added doc/design/selective_masking/p1b/second_2_a.png
Binary file added doc/design/selective_masking/p1b/second_2_b.png
64 changes: 64 additions & 0 deletions doc/design/selective_masking/p2/README.md
@@ -0,0 +1,64 @@
# Selective masking case 2

<table border=1>
<tr>
<td>Layers</td>
<td><b>Polys</b></td>
<td><b>Lines</b></td>
<td><b>Points</b></td>
<td><b>Labels</b></td>
</tr>
<tr>
<td>Symbol layers</td>
<td></td>
<td><b>0</b>: black roads<br/><b>1</b>: yellow roads</td>
<td><b>0</b>: orange circles<br/><b>1</b>: marker mask, bigger circle<br/>(only visible in mask image)</td>
<td></td>
</tr>
<tr>
<td>Masks</td>
<td></td>
<td></td>
<td><b>Points/1</b> masks <b>Lines/0</b></td>
<td></td>
</tr>
<tr>
<td>First pass</td>
<td><img src="first_pass_0.png"/></td>
<td><img src="first_pass_1.png"/></td>
<td><img src="first_pass_2.png"/></td>
<td><img src="labels.png"/></td>
</tr>
<tr>
<td>Mask image<br/>(still in first pass)</td>
<td></td>
<td></td>
<td><img src="first_pass_2_mask.png"/></td>
<td></td>
</tr>
</table>
<table border=1>
<tr>
<td>Second pass</td>
<td><b>Lines</b> without <b>0</b><br/><img src="second_1.png"/></td>
</tr>
<tr>
<td>Composition with mask</td>
<td><img src="first_pass_2_mask.png"/></td>
</tr>
<tr>
<td>Second pass image <b>inside</b> mask</td>
<td><img src="second_1_a.png"/></td>
</tr>
<tr>
<td>First pass image <b>oustide</b> mask</td>
<td><img src="second_1_first_pass_2.png"/></td>
</tr>
<tr>
<td>Updated first pass image</td>
<td><img src="second_1_first_pass_3.png"/></td>
</tr>
</table>

Final image <img src="final.png"/>

Binary file added doc/design/selective_masking/p2/final.png
Binary file added doc/design/selective_masking/p2/first_pass_0.png
Binary file added doc/design/selective_masking/p2/first_pass_1.png
Binary file added doc/design/selective_masking/p2/first_pass_2.png
Binary file added doc/design/selective_masking/p2/labels.png
Binary file added doc/design/selective_masking/p2/second_1.png
Binary file added doc/design/selective_masking/p2/second_1_a.png
Binary file added doc/design/selective_masking/p2/second_1_b.png
63 changes: 63 additions & 0 deletions doc/design/selective_masking/p3/README.md
@@ -0,0 +1,63 @@
# Selective masking case 3

<table border=1>
<tr>
<td>Layers</td>
<td><b>Polys</b></td>
<td><b>Lines</b></td>
<td><b>Points</b></td>
<td><b>Labels</b></td>
</tr>
<tr>
<td>Symbol layers</td>
<td></td>
<td><b>0</b>: black roads<br/><b>1</b>: yellow roads</td>
<td><b>0</b>: orange circles<br/><b>1</b>: marker mask, bigger circle<br/>(only visible in mask image)</td>
<td></td>
</tr>
<tr>
<td>Masks</td>
<td></td>
<td></td>
<td><b>Points/1</b> masks <b>Lines/0</b></td>
<td>Buffer masks <b>Lines/0</b></td>
</tr>
<tr>
<td>First pass</td>
<td><img src="first_pass_0.png"/></td>
<td><img src="first_pass_1.png"/></td>
<td><img src="first_pass_2.png"/></td>
<td><img src="labels.png"/></td>
</tr>
<tr>
<td>Mask image<br/>(still in first pass)</td>
<td></td>
<td></td>
<td><img src="first_pass_2_mask.png"/></td>
<td><img src="labels_mask.png"/></td>
</tr>
</table>
<table border=1>
<tr>
<td>Second pass</td>
<td><b>Lines</b> without <b>0</b><br/><img src="second_1.png"/></td>
</tr>
<tr>
<td>Composition with merged mask</td>
<td><img src="mask_1.png"/></td>
</tr>
<tr>
<td>Second pass image <b>inside</b> mask</td>
<td><img src="second_1_a.png"/></td>
</tr>
<tr>
<td>First pass image <b>oustide</b> mask</td>
<td><img src="second_1_first_pass_2.png"/></td>
</tr>
<tr>
<td>Updates first pass image</td>
<td><img src="second_1_first_pass_3.png"/></td>
</tr>
</table>

Final image <img src="final.png"/>
Binary file added doc/design/selective_masking/p3/final.png
Binary file added doc/design/selective_masking/p3/first_pass_0.png
Binary file added doc/design/selective_masking/p3/first_pass_1.png
Binary file added doc/design/selective_masking/p3/first_pass_2.png
Binary file added doc/design/selective_masking/p3/labels.png
Binary file added doc/design/selective_masking/p3/labels_mask.png
Binary file added doc/design/selective_masking/p3/mask_1.png
Binary file added doc/design/selective_masking/p3/mask_1_0.png
Binary file added doc/design/selective_masking/p3/mask_1_1.png
Binary file added doc/design/selective_masking/p3/mask_2.png
Binary file added doc/design/selective_masking/p3/second_1.png
Binary file added doc/design/selective_masking/p3/second_1_a.png
Binary file added doc/design/selective_masking/p3/second_1_b.png
67 changes: 67 additions & 0 deletions doc/design/selective_masking/p4/README.md
@@ -0,0 +1,67 @@
# Selective masking case 4

<table border=1>
<tr>
<td>Layers</td>
<td><b>Polys</b></td>
<td><b>Lines</b></td>
<td><b>Points</b></td>
<td><b>Labels</b></td>
</tr>
<tr>
<td>Symbol layers</td>
<td></td>
<td><b>0</b>: black roads<br/><b>1</b>: yellow roads</td>
<td><b>0</b>: orange circles<br/><b>1</b>: marker mask, bigger circle<br/>(only visible in mask image)</td>
<td></td>
</tr>
<tr>
<td>Masks</td>
<td></td>
<td></td>
<td><b>Points/1</b> masks <b>Lines/1</b></td>
<td>Buffer masks <b>Lines/0</b></td>
</tr>
<tr>
<td>First pass</td>
<td><img src="first_pass_0.png"/></td>
<td><img src="first_pass_1.png"/></td>
<td><img src="first_pass_2.png"/></td>
<td><img src="labels.png"/></td>
</tr>
<tr>
<td>Mask image<br/>(still in first pass)</td>
<td></td>
<td></td>
<td><img src="first_pass_2_mask.png"/></td>
<td><img src="labels_mask.png"/></td>
</tr>
</table>
Warning message:<br/>
<b>Layer lines_ef106202_b4e1_49c4_a3d0_b65eb8bbb6d6 : Different sets of symbol layers are masked by different sources ! Only one (arbitrary) set will be retained !
</b>
<table border=1>
<tr>
<td>Second pass</td>
<td><b>Lines</b> without <b>1</b><br/><img src="second_1.png" style="vertical-align:middle"/></td>
</tr>
<tr>
<td>Composition with merged mask</td>
<td><img src="mask_1.png" style="vertical-align:middle"/></td>
</tr>
<tr>
<td>Second pass image <b>inside</b> mask</td>
<td><img src="second_1_a.png" style="vertical-align:middle"/></td>
</tr>
<tr>
<td>First pass image <b>oustide</b> mask<br/></td>
<td><img src="second_1_first_pass_2.png" style="vertical-align:middle"/></td>
</tr>
<tr>
<td>Updated first pass image</td>
<td><img src="second_1_first_pass_3.png" style="vertical-align:middle"/></td>
</tr>
</table>

Final image <img src="final.png"/>

Binary file added doc/design/selective_masking/p4/final.png
Binary file added doc/design/selective_masking/p4/first_pass_0.png
Binary file added doc/design/selective_masking/p4/first_pass_1.png
Binary file added doc/design/selective_masking/p4/first_pass_2.png
Binary file added doc/design/selective_masking/p4/labels.png
Binary file added doc/design/selective_masking/p4/labels_mask.png
Binary file added doc/design/selective_masking/p4/mask_1.png
Binary file added doc/design/selective_masking/p4/second_1.png
Binary file added doc/design/selective_masking/p4/second_1_a.png
Binary file added doc/design/selective_masking/p4/second_1_b.png

0 comments on commit 845894b

Please sign in to comment.