<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1456902454894_15559" dir="ltr">Hi guys, <a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeos.h#L27" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15693" class="">QgsGeos</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15695" class=""> </span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15697" class="">class wraps the</span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15699" class=""> </span><a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometryengine.h#L26" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15701" class="">QgsGeometryEngine</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15703" class=""> </span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15705" class="">interface of a</span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15707" class=""> </span><a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsabstractgeometryv2.h#L39" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15709" class="">QgsAbstractGeometryV2</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15711" class=""> </span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15713" class="">geometry. It is used massively for many spatial functions (</span><a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometry.cpp#L1564" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15715" class="">IsGeosValid</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15717" class="">,</span><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15719" class=""> </span><a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometry.cpp#L821" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15721" class="">contains</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15723" class="">, crosses, intersects....) in </span><a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeometry.h#L67" style="font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px; box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none; background-color: rgb(255, 255, 255);" id="yui_3_16_0_1_1456902454894_15725" class="">QgsGeometry</a><span style="color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15727" class="">.</span></div><div style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15729" class="">But testing perfomance I see that all operations create in QgsGeos a new <a href="https://github.com/qgis/QGIS/blob/master/src/core/geometry/qgsgeos.cpp#L138" style="box-sizing: border-box; color: rgb(64, 120, 192); text-decoration: none;" id="yui_3_16_0_1_1456902454894_15731" class="">GEOSGeometry</a> instance from the current QgsGeometry object.</div><div style="box-sizing: border-box; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" id="yui_3_16_0_1_1456902454894_15733" class="">It is a performance bottleneck (e.g. <b>labeling</b>), We can test....</div><pre style="box-sizing: border-box; overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; margin-top: 0px; margin-bottom: 16px; font-stretch: normal; line-height: 1.45; padding: 16px; border-radius: 3px; word-wrap: normal; color: rgb(51, 51, 51); background-color: rgb(247, 247, 247);" id="yui_3_16_0_1_1456902454894_15735" class=""><code style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 11.9px; padding: 0px; margin-top: 0px; margin-bottom: 0px; border-radius: 3px; word-break: normal; white-space:pre-wrap; border: 0px; display: inline; max-width: initial; overflow: initial; line-height: inherit; word-wrap: normal; background: transparent;" id="yui_3_16_0_1_1456902454894_15737" class="">QgsGeometry a = ...
QgsGeometry b = ...

for (int  i = 0; i < 100; i++)
{
  bool contains = a.contains( &b );
}
</code></pre><div style="box-sizing: border-box; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" dir="ltr" id="yui_3_16_0_1_1456902454894_15739" class="">The current code creates 200 GEOSGeometry objects.<br style="box-sizing: border-box;" id="yui_3_16_0_1_1456902454894_15741" class="">I am right ? Is there one reason for this behavior?</div><div style="box-sizing: border-box; color: rgb(51, 51, 51); font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 14px; line-height: 22.4px;" dir="ltr" id="yui_3_16_0_1_1456902454894_15739" class=""><br></div><div id="yui_3_16_0_1_1456902454894_15559" dir="ltr"><br></div><div id="yui_3_16_0_1_1456902454894_15559" dir="ltr">I created a pull ( <a href="https://github.com/qgis/QGIS/pull/2859" id="yui_3_16_0_1_1456902454894_15816">https://github.com/qgis/QGIS/pull/2859</a> ) for discussion or review. If I am wrong, my apologies, I delete the pull.</div><div id="yui_3_16_0_1_1456902454894_15559" dir="ltr"><br></div><div id="yui_3_16_0_1_1456902454894_15559" dir="ltr">Thanks in advance</div><div id="yui_3_16_0_1_1456902454894_15559">Alvaro</div></div></body></html>