bool LabelPosition::crossesBoundary( PointSet *polygon ) const { if ( !mGeos ) createGeosGeom(); if ( !polygon->mGeos ) polygon->createGeosGeom(); GEOSContextHandle_t geosctxt = geosContext(); try { if ( GEOSPreparedOverlaps_r( geosctxt, polygon->preparedGeom(), mGeos ) == 1 || GEOSPreparedTouches_r( geosctxt, polygon->preparedGeom(), mGeos ) == 1 ) { return true; } else if ( nextPart ) { return nextPart->crossesBoundary( polygon ); } } catch ( GEOSException &e ) { QgsMessageLog::logMessage( QObject::tr( "Exception: %1" ).arg( e.what() ), QObject::tr( "GEOS" ) ); return false; } return false; }
static VALUE method_geometry_touches(VALUE self, VALUE rhs) { VALUE result; RGeo_GeometryData* self_data; const GEOSGeometry* self_geom; const GEOSGeometry* rhs_geom; char val; #ifdef RGEO_GEOS_SUPPORTS_PREPARED2 const GEOSPreparedGeometry* prep; #endif result = Qnil; self_data = RGEO_GEOMETRY_DATA_PTR(self); self_geom = self_data->geom; if (self_geom) { rhs_geom = rgeo_convert_to_geos_geometry(self_data->factory, rhs, Qnil); if (rhs_geom) { #ifdef RGEO_GEOS_SUPPORTS_PREPARED2 prep = rgeo_request_prepared_geometry(self_data); if (prep) val = GEOSPreparedTouches_r(self_data->geos_context, prep, rhs_geom); else #endif val = GEOSTouches_r(self_data->geos_context, self_geom, rhs_geom); if (val == 0) { result = Qfalse; } else if (val == 1) { result = Qtrue; } } } return result; }
bool LabelPosition::crossesBoundary( PointSet *polygon ) const { if ( !mGeos ) createGeosGeom(); if ( !polygon->mGeos ) polygon->createGeosGeom(); GEOSContextHandle_t geosctxt = geosContext(); if ( GEOSPreparedOverlaps_r( geosctxt, polygon->preparedGeom(), mGeos ) == 1 || GEOSPreparedTouches_r( geosctxt, polygon->preparedGeom(), mGeos ) == 1 ) { return true; } else if ( nextPart ) { return nextPart->crossesBoundary( polygon ); } return false; }