Skip to content
Permalink
Browse files

[labelling] Enlarge the try/catch block in GeomFunction::containsCand…

…idate
  • Loading branch information
nirvn committed Oct 5, 2020
1 parent f67515c commit 38eabb7620c96babbd1716039114d0ef06ce0b78
Showing with 41 additions and 40 deletions.
  1. +41 −40 src/core/pal/geomfunction.cpp
@@ -323,60 +323,60 @@ bool GeomFunction::containsCandidate( const GEOSPreparedGeometry *geom, double x
if ( !geom )
return false;

GEOSContextHandle_t geosctxt = QgsGeos::getGEOSHandler();
GEOSCoordSequence *coord = GEOSCoordSeq_create_r( geosctxt, 5, 2 );
try
{
GEOSContextHandle_t geosctxt = QgsGeos::getGEOSHandler();
GEOSCoordSequence *coord = GEOSCoordSeq_create_r( geosctxt, 5, 2 );

#if GEOS_VERSION_MAJOR>3 || GEOS_VERSION_MINOR>=8
GEOSCoordSeq_setXY_r( geosctxt, coord, 0, x, y );
GEOSCoordSeq_setXY_r( geosctxt, coord, 0, x, y );
#else
GEOSCoordSeq_setX_r( geosctxt, coord, 0, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 0, y );
GEOSCoordSeq_setX_r( geosctxt, coord, 0, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 0, y );
#endif
if ( !qgsDoubleNear( alpha, 0.0 ) )
{
double beta = alpha + M_PI_2;
double dx1 = std::cos( alpha ) * width;
double dy1 = std::sin( alpha ) * width;
double dx2 = std::cos( beta ) * height;
double dy2 = std::sin( beta ) * height;
if ( !qgsDoubleNear( alpha, 0.0 ) )
{
double beta = alpha + M_PI_2;
double dx1 = std::cos( alpha ) * width;
double dy1 = std::sin( alpha ) * width;
double dx2 = std::cos( beta ) * height;
double dy2 = std::sin( beta ) * height;
#if GEOS_VERSION_MAJOR>3 || GEOS_VERSION_MINOR>=8
GEOSCoordSeq_setXY_r( geosctxt, coord, 1, x + dx1, y + dy1 );
GEOSCoordSeq_setXY_r( geosctxt, coord, 2, x + dx1 + dx2, y + dy1 + dy2 );
GEOSCoordSeq_setXY_r( geosctxt, coord, 3, x + dx2, y + dy2 );
GEOSCoordSeq_setXY_r( geosctxt, coord, 1, x + dx1, y + dy1 );
GEOSCoordSeq_setXY_r( geosctxt, coord, 2, x + dx1 + dx2, y + dy1 + dy2 );
GEOSCoordSeq_setXY_r( geosctxt, coord, 3, x + dx2, y + dy2 );
#else
GEOSCoordSeq_setX_r( geosctxt, coord, 1, x + dx1 );
GEOSCoordSeq_setY_r( geosctxt, coord, 1, y + dy1 );
GEOSCoordSeq_setX_r( geosctxt, coord, 2, x + dx1 + dx2 );
GEOSCoordSeq_setY_r( geosctxt, coord, 2, y + dy1 + dy2 );
GEOSCoordSeq_setX_r( geosctxt, coord, 3, x + dx2 );
GEOSCoordSeq_setY_r( geosctxt, coord, 3, y + dy2 );
GEOSCoordSeq_setX_r( geosctxt, coord, 1, x + dx1 );
GEOSCoordSeq_setY_r( geosctxt, coord, 1, y + dy1 );
GEOSCoordSeq_setX_r( geosctxt, coord, 2, x + dx1 + dx2 );
GEOSCoordSeq_setY_r( geosctxt, coord, 2, y + dy1 + dy2 );
GEOSCoordSeq_setX_r( geosctxt, coord, 3, x + dx2 );
GEOSCoordSeq_setY_r( geosctxt, coord, 3, y + dy2 );
#endif
}
else
{
}
else
{
#if GEOS_VERSION_MAJOR>3 || GEOS_VERSION_MINOR>=8
GEOSCoordSeq_setXY_r( geosctxt, coord, 1, x + width, y );
GEOSCoordSeq_setXY_r( geosctxt, coord, 2, x + width, y + height );
GEOSCoordSeq_setXY_r( geosctxt, coord, 3, x, y + height );
GEOSCoordSeq_setXY_r( geosctxt, coord, 1, x + width, y );
GEOSCoordSeq_setXY_r( geosctxt, coord, 2, x + width, y + height );
GEOSCoordSeq_setXY_r( geosctxt, coord, 3, x, y + height );
#else
GEOSCoordSeq_setX_r( geosctxt, coord, 1, x + width );
GEOSCoordSeq_setY_r( geosctxt, coord, 1, y );
GEOSCoordSeq_setX_r( geosctxt, coord, 2, x + width );
GEOSCoordSeq_setY_r( geosctxt, coord, 2, y + height );
GEOSCoordSeq_setX_r( geosctxt, coord, 3, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 3, y + height );
GEOSCoordSeq_setX_r( geosctxt, coord, 1, x + width );
GEOSCoordSeq_setY_r( geosctxt, coord, 1, y );
GEOSCoordSeq_setX_r( geosctxt, coord, 2, x + width );
GEOSCoordSeq_setY_r( geosctxt, coord, 2, y + height );
GEOSCoordSeq_setX_r( geosctxt, coord, 3, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 3, y + height );
#endif
}
//close ring
}
//close ring
#if GEOS_VERSION_MAJOR>3 || GEOS_VERSION_MINOR>=8
GEOSCoordSeq_setXY_r( geosctxt, coord, 4, x, y );
GEOSCoordSeq_setXY_r( geosctxt, coord, 4, x, y );
#else
GEOSCoordSeq_setX_r( geosctxt, coord, 4, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 4, y );
GEOSCoordSeq_setX_r( geosctxt, coord, 4, x );
GEOSCoordSeq_setY_r( geosctxt, coord, 4, y );
#endif

try
{
geos::unique_ptr bboxGeos( GEOSGeom_createLinearRing_r( geosctxt, coord ) );
bool result = ( GEOSPreparedContainsProperly_r( geosctxt, geom, bboxGeos.get() ) == 1 );
return result;
@@ -388,6 +388,7 @@ bool GeomFunction::containsCandidate( const GEOSPreparedGeometry *geom, double x
return false;
Q_NOWARN_UNREACHABLE_POP
}
return false;
}

void GeomFunction::findLineCircleIntersection( double cx, double cy, double radius,

0 comments on commit 38eabb7

Please sign in to comment.
You can’t perform that action at this time.