<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Alexis, Régis and Nyall<br class=""><br class="">I went with Nyall’s approach for now since I was 90% there and he gave me the last nudge I needed :-) I used data defined alignments:<br class=""><br class=""><img apple-inline="yes" id="0D949F67-E371-4568-9E8A-3E7D0F051081" width="284" height="99" src="cid:8F0E9C6C-BD92-40F7-BFAD-3568103150B6@setup" class=""><br class=""><br class="">Here are the expressions I used for horizontal:<br class=""><br class=""><br class="">if (<br class="">  X(closest_point($geometry,<br class="">  make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" ))) ><br class="">  X(make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" )),<br class="">  'Right', 'Left’)<br class=""><br class="">Which gives (animated gif, open in browser if needed):<div class=""><br class=""></div><div class=""><img apple-inline="yes" id="7BD87059-775F-4904-8645-B008F22606DC" src="cid:27DC45DD-4031-466E-860B-23C0338EC6A7@setup" class=""><br class=""><br class="">And Vertical<br class=""><br class="">if (<br class="">  Y(closest_point($geometry,<br class="">  make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" ))) <<br class="">  Y(make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" )),<br class="">  ’Top’, ‘Bottom’)<br class=""><br class="">Which gives (animated gif, open in browser if needed):</div><div class=""><br class=""></div><div class=""><img apple-inline="yes" id="CFD3B774-F7F6-495B-B5C7-05177946E0FB" src="cid:8723DCD4-630F-4656-B76F-614AEF1AA5D3@setup" class=""><br class=""><br class="">@Régis I will give your plugin a try to see what it does too, thanks!<br class=""><br class="">QGIS Rocks!</div><div class=""><br class=""></div><div class="">Regards</div><div class=""><br class=""></div><div class="">Tim<br class=""><br class=""><blockquote type="cite" class="">On 11 Apr 2019, at 07:19, Régis Haubourg <<a href="mailto:regis.haubourg@gmail.com" class="">regis.haubourg@gmail.com</a>> wrote:<br class=""><br class="">Hi Tim, <br class="">You can have a look at easycustomlabeling plugin code. It's sets those expressions for label alignement.<br class=""> <br class="">FYI I should be working on a new version of it taking profit of the geometry generators power soon , and we might be able to revive the QEP47 to revive the idea of porting this natively to core.<br class="">Best regards <br class="">Regis<br class=""><br class="">Le jeu. 11 avr. 2019 à 00:54, Tim Sutton <<a href="mailto:tim@kartoza.com" class="">tim@kartoza.com</a>> a écrit :<br class="">To clarify a little, I am trying to avoid the label text crossing the call-out line.<br class=""><br class="">Regards<br class=""><br class="">Tim<br class=""><br class=""><blockquote type="cite" class="">On 10 Apr 2019, at 23:02, Tim Sutton <tim@kartoza.com> wrote:<br class=""><br class="">Hi Friends<br class=""><br class="">So I am using logic like this* to make call out labels using a geometry generator:<br class=""><br class="">make_line(<br class="">  closest_point($geometry,<br class="">  make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" )),<br class="">  make_point( "auxiliary_storage_labeling_positionx" , "auxiliary_storage_labeling_positiony" )<br class="">)<br class=""><br class="">The line runs from the closest point along the edge of the polygon to the bottom left corner of the label box. With this configuration it works well when my ‘lollipop’ callout label is north-east of the polygon being labelled:<br class=""><br class=""><Screenshot 2019-04-10 at 22.54.29.jpg><br class=""><br class="">But doesn’t work when the label is e.g. south west of the polygon:<br class=""><br class=""><Screenshot 2019-04-10 at 22.54.54.jpg><br class=""><br class="">Now I am wondering if we have any options for getting the geometry of the label box so I can do the reverse and get the closest point along the edge of the label box to the polygon being labelled. So my question:<br class=""><br class="">Is there any sneaky trick for getting the geometry of the label box for a feature in an expression? And no, using an opaque background for my label to mask away the call out line doesn’t really hack it. I know the label box isn’t being calculated at the time the polygon is being rendered so the answer is probably ’no’ but maybe someone else has a clever idea to make may lollipops work when labels are south (or east or west for that matter) of the feature being labelled?<br class=""><br class="">Thanks!<br class=""><br class="">Regards<br class=""><br class="">Tim<br class=""><br class=""><br class=""><br class="">—<br class=""><br class=""><br class=""><KartozaNewLogoThumbnail.jpg><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class="">Tim Sutton<br class=""><br class="">Co-founder: Kartoza<br class="">Ex Project chair: QGIS.org<br class=""><br class="">Visit http://kartoza.com to find out about open source:<br class=""><br class="">Desktop GIS programming services<br class="">Geospatial web development<br class="">GIS Training<br class="">Consulting Services<br class=""><br class="">Skype: timlinux <br class="">IRC: timlinux on #qgis at freenode.net<br class=""><br class="">I'd love to connect. Here's my calendar link to make finding time easy.<br class=""><br class=""></blockquote><br class="">—<br class=""><br class=""><br class=""><img id="m_-17592939539569758138BFEC717-8301-41A2-B997-6ADF29C45E51" src="cid:1A5DF6DE-E302-4C28-BFBD-29663CBF1351" class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><br class="">Tim Sutton<br class=""><br class="">Co-founder: Kartoza<br class="">Ex Project chair: QGIS.org<br class=""><br class="">Visit http://kartoza.com to find out about open source:<br class=""><br class="">Desktop GIS programming services<br class="">Geospatial web development<br class="">GIS Training<br class="">Consulting Services<br class=""><br class="">Skype: timlinux <br class="">IRC: timlinux on #qgis at freenode.net<br class=""><br class="">I'd love to connect. Here's my calendar link to make finding time easy.<br class=""><br class="">_______________________________________________<br class="">QGIS-Developer mailing list<br class="">QGIS-Developer@lists.osgeo.org<br class="">List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer<br class="">Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer<br class=""><span id="cid:%3C%3E"><KartozaNewLogoThumbnail.jpg></span><br class=""></blockquote><br class=""><div class=""><span>—</span><br class=""><br class=""><br class=""><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;"><span><span><span><span><span><span><span><span><span><span><span><img apple-inline="yes" id="87A336C4-AA30-465F-B3E9-86D0D415F793" src="cid:1A5DF6DE-E302-4C28-BFBD-29663CBF1351" class=""></span><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class="Apple-interchange-newline"><br class="Apple-interchange-newline"><br class="Apple-interchange-newline"><br class="Apple-interchange-newline"><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Tim Sutton</b></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Co-founder:</b><span class="Apple-converted-space"> </span>Kartoza</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Ex Project chair:</b><span style="font-weight: normal;" class=""><span class="Apple-converted-space"> </span><a href="http://QGIS.org" class="">QGIS.org</a></span></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Visit <a href="http://kartoza.com/" class=""><span style="-webkit-text-stroke-color: rgb(71, 135, 255);" class="">http://kartoza.com</span></a> to find out about open source:</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Desktop GIS programming services</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Geospatial web development</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">GIS Training</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class="">Consulting Services</div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0); min-height: 14px;" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">Skype</b>: timlinux </div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><b class="">IRC:</b><span class="Apple-converted-space"> </span>timlinux on #qgis at <a href="http://freenode.net" class="">freenode.net</a></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><br class=""></div><div style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: initial; text-decoration: none; font-variant-ligatures: normal; font-variant-position: normal; font-variant-numeric: normal; font-variant-alternates: normal; font-variant-east-asian: normal; margin: 0px; line-height: normal; -webkit-text-stroke-color: rgb(0, 0, 0);" class=""><span style="caret-color: rgb(102, 106, 115); color: rgb(102, 106, 115); font-family: "Proxima Nova", sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255);" class="">I'd love to connect. </span><a target="_blank" class="t-quick-start-share-link" href="https://calendly.com/timlinux" style="color: rgb(0, 162, 255); text-decoration: none; cursor: pointer; font-family: "Proxima Nova", sans-serif; font-size: 14px; text-align: left;">Here's my calendar link</a><span style="caret-color: rgb(102, 106, 115); color: rgb(102, 106, 115); font-family: "Proxima Nova", sans-serif; font-size: 14px; text-align: left; background-color: rgb(255, 255, 255);" class=""> to make finding time easy.</span></div>
</span></span></span></span></span></span></span></span></span></span></span></div><br class=""></div></body></html>