From 6d9329966a77a73193acfea6d8d410dd5da8d071 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 9 Dec 2014 16:42:02 -0500 Subject: [PATCH] #1061 fixed test build behaving differently from GUI build due to ENABLE_CGAL flag not being passed to all relevant sources. Added testcase --- src/polyset-utils.cc | 15 +++++++++++++++ src/polyset-utils.h | 1 + src/polyset.cc | 15 +++------------ testdata/scad/bugs/issue1061.scad | 1 + tests/CMakeLists.txt | 16 +++++++++------- .../cgalpngtest/issue1061-expected.png | Bin 0 -> 10709 bytes .../monotonepngtest/issue1061-expected.png | Bin 0 -> 10709 bytes .../opencsgtest/issue1061-expected.png | Bin 0 -> 11401 bytes 8 files changed, 29 insertions(+), 19 deletions(-) create mode 100644 testdata/scad/bugs/issue1061.scad create mode 100644 tests/regression/cgalpngtest/issue1061-expected.png create mode 100644 tests/regression/monotonepngtest/issue1061-expected.png create mode 100644 tests/regression/opencsgtest/issue1061-expected.png diff --git a/src/polyset-utils.cc b/src/polyset-utils.cc index 5587be6e..b3bba6d7 100644 --- a/src/polyset-utils.cc +++ b/src/polyset-utils.cc @@ -2,7 +2,9 @@ #include "polyset.h" #include "Polygon2d.h" #include "printutils.h" +#ifdef ENABLE_CGAL #include "cgalutils.h" +#endif #include @@ -45,6 +47,7 @@ namespace PolysetUtils { The tessellation will be robust wrt. degenerate and self-intersecting */ void tessellate_faces(const PolySet &inps, PolySet &outps) { +#ifdef ENABLE_CGAL int degeneratePolygons = 0; for (size_t i = 0; i < inps.polygons.size(); i++) { const Polygon pgon = inps.polygons[i]; @@ -76,5 +79,17 @@ namespace PolysetUtils { } } if (degeneratePolygons > 0) PRINT("WARNING: PolySet has degenerate polygons"); +#else + assert(false); +#endif } + + bool is_approximately_convex(const PolySet &ps) { +#ifdef ENABLE_CGAL + return CGALUtils::is_approximately_convex(ps); +#else + return false; +#endif + } + } diff --git a/src/polyset-utils.h b/src/polyset-utils.h index 2bdaca03..41364f07 100644 --- a/src/polyset-utils.h +++ b/src/polyset-utils.h @@ -7,5 +7,6 @@ namespace PolysetUtils { Polygon2d *project(const PolySet &ps); void tessellate_faces(const PolySet &inps, PolySet &outps); + bool is_approximately_convex(const PolySet &ps); }; diff --git a/src/polyset.cc b/src/polyset.cc index 0dfc2ba8..fc8e7e04 100644 --- a/src/polyset.cc +++ b/src/polyset.cc @@ -25,6 +25,7 @@ */ #include "polyset.h" +#include "polyset-utils.h" #include "linalg.h" #include "printutils.h" #include @@ -140,20 +141,10 @@ void PolySet::transform(const Transform3d &mat) } } -namespace CGALUtils { - extern bool is_approximately_convex(const PolySet &ps); -} - bool PolySet::is_convex() const { - if (convex) return true; + if (convex) return true; if (!convex) return false; - -#ifdef ENABLE_CGAL - convex = CGALUtils::is_approximately_convex(*this); - return convex; -#else - return false; -#endif + return PolysetUtils::is_approximately_convex(*this); } void PolySet::resize(Vector3d newsize, const Eigen::Matrix &autosize) diff --git a/testdata/scad/bugs/issue1061.scad b/testdata/scad/bugs/issue1061.scad new file mode 100644 index 00000000..70cc35cc --- /dev/null +++ b/testdata/scad/bugs/issue1061.scad @@ -0,0 +1 @@ +polyhedron(points = [[-5, -5, 0], [-5, 5, 0], [5, 5, 0], [5, -5, 0], [-1.87866, -4.21311, 3], [-4.21311, 5.51058, 3], [5.51058, 7.84504, 3], [7.84504, -1.87866, 3], [1.05099, -3.48892, 6], [-3.48892, 5.42115, 6], [5.42115, 9.96105, 6], [9.96105, 1.05099, 6], [3.39596, -3.09852, 9], [-3.09852, 4.50554, 9], [4.50554, 11, 9], [11, 3.39596, 9], [4.91038, -3.17979, 12], [-3.17979, 2.69807, 12], [2.69807, 10.7882, 12], [10.7882, 4.91038, 12], [5.53441, -3.70439, 15], [-3.70439, 0.122447, 15], [0.122447, 9.36124, 15], [9.36124, 5.53441, 15], [5.39234, -4.48455, 18], [-4.48455, -2.9202, 18], [-2.9202, 6.95668, 18], [6.95668, 5.39234, 18]], faces = [[0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7], [4, 5, 9, 8], [5, 6, 10, 9], [6, 7, 11, 10], [7, 4, 8, 11], [8, 9, 13, 12], [9, 10, 14, 13], [10, 11, 15, 14], [11, 8, 12, 15], [12, 13, 17, 16], [13, 14, 18, 17], [14, 15, 19, 18], [15, 12, 16, 19], [16, 17, 21, 20], [17, 18, 22, 21], [18, 19, 23, 22], [19, 16, 20, 23], [20, 21, 25, 24], [21, 22, 26, 25], [22, 23, 27, 26], [23, 20, 24, 27], [3, 2, 1, 0], [24, 25, 26, 27]]); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0a3ff6ab..d9b643e8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -632,7 +632,6 @@ set(CORE_SOURCES ../src/csgtermnormalizer.cc ../src/Geometry.cc ../src/Polygon2d.cc - ../src/polyset.cc ../src/csgops.cc ../src/transform.cc ../src/color.cc @@ -666,7 +665,10 @@ set(NOCGAL_SOURCES ../src/builtin.cc ../src/import.cc ../src/export.cc - ../src/LibraryInfo.cc) + ../src/LibraryInfo.cc + ../src/polyset.cc + ../src/polyset-utils.cc) + set(CGAL_SOURCES ${NOCGAL_SOURCES} @@ -678,7 +680,6 @@ set(CGAL_SOURCES ../src/CGALCache.cc ../src/CGAL_Nef_polyhedron_DxfData.cc ../src/Polygon2d-CGAL.cc - ../src/polyset-utils.cc ../src/svg.cc ../src/GeometryEvaluator.cc) @@ -749,20 +750,20 @@ set_target_properties(tests-offscreen PROPERTIES COMPILE_FLAGS "${ENABLE_OPENCSG # modulecachetest # add_executable(modulecachetest modulecachetest.cc) -target_link_libraries(modulecachetest tests-nocgal) +target_link_libraries(modulecachetest tests-nocgal ${GLEW_LIBRARY} ${OPENCSG_LIBRARY} ${APP_SERVICES_LIBRARY}) # # csgtexttest # add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) -target_link_libraries(csgtexttest tests-nocgal) +target_link_libraries(csgtexttest tests-nocgal ${GLEW_LIBRARY} ${OPENCSG_LIBRARY} ${APP_SERVICES_LIBRARY}) # # cgalcachetest # add_executable(cgalcachetest cgalcachetest.cc) set_target_properties(cgalcachetest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(cgalcachetest tests-cgal) +target_link_libraries(cgalcachetest tests-cgal ${GLEW_LIBRARY} ${OPENCSG_LIBRARY} ${APP_SERVICES_LIBRARY}) # # openscad no-qt @@ -1213,7 +1214,8 @@ list(APPEND BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue584.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue964b.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue990.scad ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1004.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1005.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1005.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue1061.scad) list(APPEND EXPORT3D_TEST_FILES ${BUGS_FILES}) list(REMOVE_ITEM EXPORT3D_TEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad) list(APPEND ALL_2D_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/issue899.scad) diff --git a/tests/regression/cgalpngtest/issue1061-expected.png b/tests/regression/cgalpngtest/issue1061-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..78bd8525d0e2ef89c7874f2d97f9afbf5f0c0804 GIT binary patch literal 10709 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 J_jk~v{tqGIDNO(X literal 0 HcmV?d00001