From a51a153c31efcbbdb8f10dbc20eff4888ed58072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 6 Nov 2018 10:56:04 +0100 Subject: [PATCH] fix when bbox has a 0-width + update testsuite --- .../include/CGAL/Polygon_mesh_processing/clip.h | 6 +++--- .../test/Polygon_mesh_processing/test_pmp_clip.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h index 39ab3b10760..1c2ac748d32 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/clip.h @@ -406,9 +406,9 @@ bool clip( TriangleMesh& tm, CGAL::Bbox_3 bbox = ::CGAL::Polygon_mesh_processing::bbox(tm); //extend the bbox a bit to avoid border cases - double xd=(bbox.xmax()-bbox.xmin())/100; - double yd=(bbox.ymax()-bbox.ymin())/100; - double zd=(bbox.zmax()-bbox.zmin())/100; + double xd=(std::max)(1.,(bbox.xmax()-bbox.xmin())/100); + double yd=(std::max)(1.,(bbox.ymax()-bbox.ymin())/100); + double zd=(std::max)(1.,(bbox.zmax()-bbox.zmin())/100); bbox=CGAL::Bbox_3(bbox.xmin()-xd, bbox.ymin()-yd, bbox.zmin()-zd, bbox.xmax()+xd, bbox.ymax()+yd, bbox.zmax()+zd); TriangleMesh clipper; diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_clip.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_clip.cpp index c84e527c732..3dae87fb73c 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_clip.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_clip.cpp @@ -206,6 +206,16 @@ void test() CGAL::clear(tm1); CGAL::clear(tm2); + // clip meshes with intersection polyline opened + make_triangle( K::Point_3(0, 0, 0), K::Point_3(0, 4, 0), K::Point_3(4, 0, 0), tm1 ); + PMP::clip(tm1, K::Plane_3(1, 0, 0, -2)); + assert(vertices(tm1).size()==4); + CGAL::clear(tm1); + + make_triangle( K::Point_3(0, 0, 0), K::Point_3(0, 4, 0), K::Point_3(4, 0, 0), tm1 ); + PMP::clip(tm1, K::Plane_3(-1, 0, 0, 2)); + assert(vertices(tm1).size()==3); + CGAL::clear(tm1); } int main()